티스토리 뷰
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()
'심리학 > 문항반응이론' 카테고리의 다른 글
[Basic of IRT using R] 4. The Test characteristic curve (0) | 2024.01.16 |
---|---|
[Basic of IRT using R] 3. Estimating Item Parameters (1) | 2024.01.14 |
[Basic of IRT using R] 1. The item Characteristic Curve (1) | 2024.01.09 |
2. The one-parameter Model (1) | 2023.11.15 |
1. Introduction to Measurement (0) | 2023.11.05 |
- Total
- Today
- Yesterday
- 열혈프로그래밍
- 통계학
- 사회심리학
- 오블완
- C
- K-MOOC
- 티스토리챌린지
- Python
- 뇌와행동의기초
- 류근관
- 파이썬
- 일본어문법무작정따라하기
- 코딩테스트
- 일문따
- 백준
- 보세사
- c++
- 통계
- 인지부조화
- 여인권
- 인프런
- 심리학
- 회계
- 일본어
- C/C++
- 데이터분석
- 강화학습
- 윤성우
- 정보처리기사
- stl
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |