티스토리 뷰

반응형

2.1 Introduction

앞 장에서는 문항곡선의 특성에 대해 살펴보았다.

이번장에서는 좀 더 수학적인 측면을 넣어서 문항특성곡선과 그 모형을 소개하고자 한다.

 

 

2.2 The Two-Parameter Model

지난 번 코드로 봤던 것을 수식면에서 다시 살펴보자.

 

$$ P(\theta) = \frac{1}{1+e^{-L}} = \frac{1}{1+e^{-a(\theta - b)}}$$

 

e= 상수

b= 난이도 모수

a= 변별도 모수

L= \(a(\theta -b)\), 로짓(logit)

\(\theta\)=능력치모수

 

난이도(b)는 그 능력에 있는 사람이 정답률이 0.5가 되는 것을 가리킨다.

예를 들어, 능력이 3인 사람이 정답을 맞출 확률이 0.5가 된다면 난이도가 3이 된다.

이론적으로 이 모수의 범위는 \(-\infty \leq b \leq+\infty\)이지만 일반적으로 \(-3 \leq b \leq +3\)을 쓴다.

 

변별도(a)의 정의는 이 책의 범위를 벗어난다. 그래도 좀 사용할만한 정의를 쓰면 \(\theta =b\)의 지점의 기울기에 비례하는 모수로 볼 수 있다.

 

 

2.2.1 Computational examples

위에서 썼던 공식에 직접 값을 넣어봄으로써 어떻게 값이 되는지 보자.

난이도 b= 1.0

변별도 a= 0.5

우선 기본 모수를 저렇게 설정하고 능력모수(\(\theta\))에 따라 어떻게 값이 변하는지 보자.

 

\(P(\theta) = \frac{1}{1+e^{-L}} = \frac{1}{1+e^{-a(\theta-b)}}\)

\(L = a(\theta - b)\)

𝜃가 -3일 때,

 

L= 0.5(-3.0-1.0) = -2.0

\(e^{-L} = 7.389\)

\(1+e^{-L} = 1+7.389=8.389\)

\(P(\theta) = \frac{1}{1+e^{-L}} = \frac{1}{8.389} = 0.119\)

 

능력치 모수의 변화에 따라 봐보자.

import pandas as pd
import numpy as np

# 변수 정의
b = 1.0
a = 0.5
theta = np.arange(-3, 4, 1)
L = a * (theta - b)
ex_L = np.exp(-L)
ex_1 = 1 + ex_L
p = 1 / ex_1

# 데이터프레임 생성
df = pd.DataFrame({
    'theta': theta,
    'L': L,
    'ex_L': ex_L,
    'ex_1': ex_1,
    'p': p
})

# 결과 출력
print(df)

 

ex_L = \(e^{-L}\)을 말한다.

ex_1 = \(1+e^{-L}\)

theta L ex_L ex_1 p
-3 -2.0 7.389056 8.389056 0.119203
-2 -1.5 4.481689 5.481689 0.182426
-1 -1.0 2.718282 3.718282 0.268941
0 -0.5 1.648721 2.648721 0.377541
1 0.0 1.000000 2.000000 0.500000

 

그래프를 그려보자.

plt.plot(theta,p)
plt.yticks([0,0.5,1])
plt.xlabel('Ability')
plt.ylabel('Probabilty of Correct Responses')
plt.show()

 

 

 

2.3 The Rasch Model

Rasch 모형은 2모수 모형에서 변별도를 1로 설정한 것이다.

1모수모형이라고도 불린다.

 

$$ P(\theta) = \frac{1}{1+e{-1(\theta-b)}}$$

 

2.3.1 Computational example

앞에서 했던 예시만 a를 1로 고정한다.

import pandas as pd
import numpy as np

# 변수 정의
b = 1.0
theta = np.arange(-3, 4, 1)
L = 1 * (theta - b)
ex_L = np.exp(-L)
ex_1 = 1 + ex_L
p = 1 / ex_1

# 데이터프레임 생성
df = pd.DataFrame({
    'theta': theta,
    'L': L,
    'ex_L': ex_L,
    'ex_1': ex_1,
    'p': p
})

# 결과 출력
df
theta L ex_L ex_1 p
-3 -4.0 54.598150 55.598150 0.017986
-2 -3.0 20.085537 21.085537 0.047426
-1 -2.0 7.389056 8.389056 0.119203
0 -1.0 2.718282 3.718282 0.268941
1 0.0 1.000000 2.000000 0.500000
2 1.0 0.367879 1.367879 0.731059
3 2.0 0.135335 1.135335 0.880797

 

 

plt.plot(theta,p)
plt.yticks([0,0.5,1])
plt.xlabel('Ability')
plt.ylabel('Probabilty of Correct Responses')
plt.show()

 

 

2.4 The Three-Parameter Model

3모수모형은 추측도(guessing)를 추가한 것이다.

추측도란 정답을 알지 못함에도 찍어서 맞출 확률을 말한다.

 

$$ P(\theta) = c + (1-c) \frac{1}{1+e^{-a(\theta-b)}}$$

 

b: 난이도모수

a: 변별도모수

c: 추측도모수

𝜃: 능력치모수

 

위의 식을 해설해보면, c라는 것은 찍어서 맞출 확률이고,

(1-c)는 찍어서 맞추는 게 아닐 경우에 정답을 맞출 확률이다(뒤에 곱해진 식을 보면 기존의 2모수 모형과 같다. 즉 풀었을 때는 2모수 모형과 같은 방법이 적용된다는 의미).

 

c는 이론적으로 0에서 1 사이의 범위를 갖지만 실제론 0.35 이상은 사용하지 않는다.

(찍어서 무조건 맞추는 문제가 있다면 그것도 웃긴것이다)

 

c를 추가하면 난이도의 정의가 바뀌는데, 

기존에는 그 능력의 사람이 정답을 맞출확률이 0.5가 되는 지점이었지만

\(P(\theta) = c + (1-c)(0.5) = (1+c)/2\)

0.5를 넣을 경우 위치가 난이도가 된다.

 

2.4.1 Computational Example

b=1.5

a=1.3

c=0.2

𝛳=-3.0

 

이 때도 손계산을 해보면 위의 과정과 같다.

\(L = a(\theta - b) = 1.3(-3.0 -1.5) = -5.85\)

\(e^{-L}=347.234\)

\(1+e^{-L} = 1+ 347.234 = 348.234\)

\(\frac{1}{1+e^{-L}}=\frac{1}{348.234}=0.0029\)

\(p(\theta) = c + (1-c)(0.0029) = 0.2 + (1-0.2)(0.0029) =0.2023\)

 

 

import pandas as pd
import numpy as np

# 변수 정의
a=1.3
b = 1.5
c=0.2
theta = np.arange(-3, 4, 1)
L = a * (theta - b)
ex_L = np.exp(-L)
ex_1 = 1 + ex_L
p = (1/ex_1)*(1-c) + c


# 데이터프레임 생성
df = pd.DataFrame({
    'theta': theta,
    'L': L,
    'ex_L': ex_L,
    'ex_1': ex_1,
    'p': p
})

# 결과 출력
df

 

theta L ex_L ex_1 P
-3 -5.85 347.234380 348.234380 0.202297
-2 -4.55 94.632408 95.632408 0.208365
-1 -3.25 25.790340 26.790340 0.229862
0 -1.95 7.028688 8.028688 0.299643
1 -0.65 1.915541 2.915541 0.474392
2 0.65 0.522046 1.522046 0.725608
3 1.95 0.142274 1.142274 0.900357

 

plt.plot(theta,p)
plt.yticks([0,0.5,1])
plt.xlabel('Ability')
plt.ylabel('Probabilty of Correct Responses')
plt.show()

 

2.5 Negative Discrimination

문항곡선의 기울기가 음수일 수도 있다.

이 경우는 두 개인데,

1) 맞출 확률이 +이면 틀릴 확률은 -가 된다.

2) 문항의 설계가 잘못되었을 수 있다

 

 

2.7  Computational session

위에서 했던 것을 함수로 구현해보자.

 

데이터프레임 만들기

def icccal(b,a=1,c=0):
  theta= np.arange(-3,4,1)
  L = a* (theta-b)
  expnl = np.exp(-L) ##e^{-L}
  opexpnl = 1+expnl
  P = c + (1-c) /opexpnl
  return pd.DataFrame({'theta':theta,'L':L,'expnl':expnl,'opexpnl':opexpnl,'P':P})

그래프그리기

def icc(b,a=1,c=0): #문항특성곡선
  theta = np.arange(-3,3.1,0.1)
  p = c + (1-c)/(1+np.exp(-a*(theta-b)))
  plt.plot(theta,p,label=f'a={a},b={b},c={c}')
  plt.xlabel('Ability')
  plt.ylabel('Probability of Correct Response')
  plt.legend()
  plt.yticks([0,0.5,1])
  thetai=b
  pthetai = c + (1-c)/(1+np.exp(-a*(thetai-b)))
  vliney=np.arange(0,pthetai+0.01,0.01)
  vlinx=[b+ i*0 for i in vliney]
  plt.plot(vlinx,vliney,linestyle='--')

2.8 연습문제

난이도차이

icc(-2.0)
icc(0.0)
icc(2.0)
plt.show()

 

변별도차이

icc(-2.0,1.0)
icc(0.0,1.5)
icc(2.0,0.5)
plt.show()

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함
반응형