IRTモデルの識別性#
項目反応理論(IRT)モデルでは、能力パラメータ\(\theta\)と項目パラメータ(\(a, b\)など)を同時に推定する。しかし、何らかの制約を課さなければパラメータが一意に定まらない 識別性(identifiability) の問題がある。
識別性の問題とは#
識別性(identifiability) とは、観測データからモデルのパラメータを一意に決定できるかどうかという性質である。
IRTモデルでは、2パラメータロジスティックモデル(2PLM)を例にとると
というモデルを考える。このとき、能力パラメータ\(\theta\)と項目パラメータ\((a, b)\)の間には本質的な不定性が存在する。
位置の不定性(Location Indeterminacy)#
能力パラメータ\(\theta\)と困難度パラメータ\(b\)に同じ定数\(c\)を加えても、モデルの予測確率は変わらない。
つまり、\((\theta, b)\)と\((\theta + c, b + c)\)は観測データに対して同じ尤度を与える。これを 位置の不定性 という。
直感的には「全員の能力を10点ずつ上げて、全問題の難易度も10点ずつ上げても、正答確率は変わらない」ということである。
尺度の不定性(Scale Indeterminacy)#
能力パラメータ\(\theta\)と困難度パラメータ\(b\)を同じ正の定数\(k > 0\)で割り、識別力パラメータ\(a\)を\(k\)倍しても、モデルの予測確率は変わらない。
つまり、\((a, \theta, b)\)と\((ka, \theta/k, b/k)\)は観測データに対して同じ尤度を与える。これを 尺度の不定性 という。
直感的には「能力と難易度の単位を変えても(例:点数からパーセントに変換)、識別力を適切に調整すれば正答確率は変わらない」ということである。
識別性の確保#
識別性の問題を解決するためには、パラメータに制約を課す必要がある。主に2つのアプローチがある。
能力パラメータへの制約:能力\(\theta\)の分布を固定する
項目パラメータへの制約:特定の項目のパラメータを固定する
能力パラメータへの制約#
最も一般的な方法は、能力パラメータ\(\theta\)が標準正規分布に従うと仮定することである。
この制約により:
位置の不定性の解消:\(\mathrm{E}[\theta] = 0\)と固定することで、\(\theta\)と\(b\)に任意の定数を加える自由度がなくなる
尺度の不定性の解消:\(\mathrm{Var}[\theta] = 1\)と固定することで、\(\theta\)と\(b\)を任意の定数で割る自由度がなくなる
この制約は周辺最尤推定法(MML)やベイズ推定で自然に導入される。
項目パラメータへの制約#
別のアプローチとして、特定の項目パラメータを固定する方法がある。
例えば:
1つの項目の困難度を固定:\(b_1 = 0\)(位置の不定性を解消)
1つの項目の識別力を固定:\(a_1 = 1\)(尺度の不定性を解消)
または、複数の項目パラメータの平均や分散を固定する方法もある:
\(\frac{1}{J}\sum_{j=1}^{J} b_j = 0\)(困難度の平均を0に固定)
\(\frac{1}{J}\sum_{j=1}^{J} a_j = 1\)(識別力の平均を1に固定)
この方法は同時最尤推定法(JML)でよく用いられる。
シミュレーション:識別性の問題の確認#
識別性の問題を具体的に確認するため、同じデータに対して異なるパラメータが同じ尤度を与えることを示す。
import numpy as np
def icc_2pl(theta, a, b):
"""2PLモデルのICC(項目特性曲線)"""
return 1 / (1 + np.exp(-a * (theta - b)))
def log_likelihood(responses, theta, a, b):
"""対数尤度の計算"""
prob = icc_2pl(theta[:, None], a, b)
ll = np.sum(responses * np.log(prob + 1e-10) + (1 - responses) * np.log(1 - prob + 1e-10))
return ll
# 真のパラメータ
np.random.seed(42)
n_persons, n_items = 100, 5
theta_true = np.random.normal(0, 1, n_persons)
a_true = np.array([1.0, 1.2, 0.8, 1.5, 1.1])
b_true = np.array([-1.0, -0.5, 0.0, 0.5, 1.0])
# データ生成
prob = icc_2pl(theta_true[:, None], a_true, b_true)
responses = np.random.binomial(1, prob)
# 真のパラメータでの対数尤度
ll_true = log_likelihood(responses, theta_true, a_true, b_true)
print(f"真のパラメータでの対数尤度: {ll_true:.4f}")
真のパラメータでの対数尤度: -278.3950
位置の不定性の確認#
# 位置の不定性:θとbに同じ定数cを加える
c = 5.0 # 任意の定数
theta_shifted = theta_true + c
b_shifted = b_true + c
ll_shifted = log_likelihood(responses, theta_shifted, a_true, b_shifted)
print(f"位置をシフトしたパラメータでの対数尤度: {ll_shifted:.4f}")
print(f"差: {abs(ll_true - ll_shifted):.10f}")
位置をシフトしたパラメータでの対数尤度: -278.3950
差: 0.0000000000
尺度の不定性の確認#
# 尺度の不定性:θとbをkで割り、aをk倍する
k = 2.0 # 任意の正の定数
theta_scaled = theta_true / k
b_scaled = b_true / k
a_scaled = a_true * k
ll_scaled = log_likelihood(responses, theta_scaled, a_scaled, b_scaled)
print(f"尺度を変換したパラメータでの対数尤度: {ll_scaled:.4f}")
print(f"差: {abs(ll_true - ll_scaled):.10f}")
尺度を変換したパラメータでの対数尤度: -278.3950
差: 0.0000000000
上記のように、異なるパラメータの組み合わせが全く同じ対数尤度を与えることが確認できた。これが識別性の問題である。
視覚的な確認#
異なるパラメータ化でも、正答確率(ICC)は同じになることを確認する。
3つの曲線が完全に重なっており、異なるパラメータ化が同じ正答確率を生成することが確認できる。
ベイズ推定における識別性#
ベイズ推定では、事前分布を通じて識別性を確保することが自然にできる。
標準的な事前分布の設定#
\(\theta \sim \mathcal{N}(0, 1)\):位置と尺度の両方を固定
\(a_j > 0\)の制約:識別力は正であるべき(負だとICCの傾きが反転する)
\(b_j\)には緩い正規分布:困難度の範囲を緩やかに制限
1PLモデル(Raschモデル)の識別性#
1PLモデルでは識別力\(a\)がすべての項目で共通(通常\(a=1\)と固定)であるため、尺度の不定性は最初から存在しない。
この場合、位置の不定性のみを解消すればよく、以下のいずれかの制約を課す:
\(\sum_{i=1}^{I} \theta_i = 0\)(能力の総和を0に固定)
\(\sum_{j=1}^{J} b_j = 0\)(困難度の総和を0に固定)
\(\theta \sim \mathcal{N}(0, \sigma^2)\)(能力の平均を0に固定)
まとめ#
不定性の種類 |
変換 |
解消方法 |
|---|---|---|
位置の不定性 |
\((\theta, b) \to (\theta + c, b + c)\) |
\(\mathrm{E}[\theta] = 0\) または \(\sum b_j = 0\) |
尺度の不定性 |
\((\theta, a, b) \to (\theta/k, ka, b/k)\) |
\(\mathrm{Var}[\theta] = 1\) または \(a_1 = 1\) |
IRTモデルの推定では、これらの制約を意識することが重要である。特に:
使用するソフトウェアがどの制約を採用しているか確認する
異なる研究間でパラメータを比較する際は尺度を揃える
ベイズ推定では事前分布を通じて自然に識別性を確保できる