項目反応理論の情報関数
Python描画プログラム
項目反応理論における項目情報関数(Item Information Function)とテスト情報関数(Test Information Function)を描くPythonプログラムを作成した。これらは、フィッシャー情報関数(Fisher Information Function)に基づくものであるが、岡本安晴「計量心理学」培風館、第6.3節で説明している。項目パラメータを設定してプログラムを実行すると、図1のように項目情報関数(緑色)とテスト情報関数(黒色)のグラフが描画され、タイトル部に、テスト情報関数の最大値と最大値をとるときの能力値が表示される。
図1
プログラムでは、次式(1)のロジスティックモデル(岡本安晴「計量心理学」培風館、6.2節参照)を用いている。
式(1)のスクリプトは以下のようである。
def P(t, a, b, c):
v = exp(-1.7 * a * (t - b))
return c + ((1.0 - c) / (1.0
+ v))
式(1)で表される項目 i の項目情報関数は次式で表される。
ここで、
であり、の導関数は、次のスクリプトで与えられる。
def d_P(t, a, b, c):
v = exp(-1.7 * a * (t - b))
return (1.0 - c) * 1.7 * a * v / ((1.0 + v) ** 2.0)
したがって、は次のスクリプトで与えられる。
def I_item(t, i):
v = (d_P(t, a[i], b[i],
c[i]) ** 2.0) / (P(t, a[i], b[i], c[i]) * Q(t, a[i], b[i], c[i]))
return v;
テスト情報関数は
で与えられるので、項目情報関数とテスト情報関数を描画するプログラムを以下のように作成した。
import matplotlib.pyplot as plt
import numpy as np
from math import *
a = [0.865, 0.618, 0.765, 1.2, 0.841]
b = [-1.272, -0.4, 0.3, -0.765,
-0.657]
c = [0.0, 0.0, 0.0, 0.0, 0.0]
M = len(a)
print('M = ', M)
def P(t, a, b, c):
v = exp(-1.7 * a * (t - b))
return c + ((1.0 - c) / (1.0
+ v))
def Q(t, a, b, c):
return 1.0 - P(t, a, b, c)
def d_P(t, a, b, c):
v = exp(-1.7 * a * (t - b))
return (1.0 - c) * 1.7 * a *
v / ((1.0 + v) ** 2.0)
def I_item(t, i):
v = (d_P(t, a[i], b[i],
c[i]) ** 2.0) / (P(t, a[i], b[i], c[i]) * Q(t, a[i], b[i], c[i]))
return v;
x = np.arange(-3.0, 3.0, 0.01)
y
= []
yi = []
for i in range(M):
yi.append([])
for v in x:
sum = 0.0
for i in range(M):
u =
I_item(v, i)
yi[i].append(u)
sum
+= u
y.append(sum)
for i in range(M):
plt.plot(x, yi[i], 'g')
plt.plot(x, y, 'k')
temp_v = x[0]
temp_Max = y[0]
N = len(x)
for i in range(1, N):
if temp_Max < y[i]:
temp_Max = y[i]
temp_v = x[i]
plt.title('Maximum Info. =
{0:.3f} at
{1:.2f}'.format(temp_Max, temp_v))
plt.show()
上のスクリプトでは、項目のパラメータ、、 の値は、リストの要素として設定されている。要素の数は
M = len(a)
とプログラム内で数えているので、任意の個数の項目を扱うことができる。
また、上のスクリプトでは の値はすべて0に設定されている。これは、2パラメータモデルを表すものである。
上のスクリプトのファイルは、圧縮ファイルPrg.zipとして用意した。