RMPとIRPの差分ベクトルの積和平均による項目選択ルール

f:id:kituman:20170208044336j:plain

期間内に終わりそうもないのでかわいそうだからまとめる.
これに懲りたら今後は計画的に作業を進めること.

追記:書き終えたあたりでなんか式に矛盾を感じてきた.
とりあえず雰囲気だけ掴んで細かい式は先輩方の論文の方を参考にしてください.

やりたいこと

コンピュータ適応型テスト (略称CAT)
項目応答理論 (略称IRT)によって推定されたパラメータの付与された問題項目(アイテム)をアイテムプールに置き、受験者の回答パターンに応じて、困難度の異なるアイテムを選んで出題することにより、動的、短時間、高精度で受験者特性の測定を判定を行う方法.

これをIRTではなくLRTでやりたいですね.
LRTだと離散的なので例えば
A君はクラス1,B君はクラス3
みたいな感じで受験者をレベルに応じてクラス分けできるぞ.

やりかた概要

  1. 初期暫定RMPを算出
  2. 暫定 RMPとIRPの差分ベクトルの積和平均が最小となるものを選択し出題する(ここを何度も繰り返す)
  3. 条件を満たしたらテスト終了

以下に詳しいやり方を書く.

1番

まずは初期暫定RMPを出す
RMPを出すために受験者に何問か問題を解かせる.
今回はランク(困難度)が3つなので3つ解かせる.(各ランクからランダムに1つずつ)


3つ解かせ終わったら実際にRMPを算出する.
ランク・メンバーシップ・プロファイル(rank membership profile, RMP)は,各被験者のそれぞれの潜在ランクに対する所属確率を見るのに便利


とりあえず先に説明しておくと,RMPはベクトルだよ.
次元数はランクの数と同じだよ
今回は3つだから最終的にRMPを{\vec{p}}とすると
{ \displaystyle
\vec{p} = (p_1, p_2, p_3)
} になるね
つまり,{p_1}はその人がランク1に属する確率だよ


それでは,初期暫定RMPを求めていくよ
RMPを求めるために必要なのは以下の2つ

  • 受験者の回答

今回は最初に3問出題することにしたので{u_1,u_2,u_3}とする.
{u_1}はランク1の問題に対する回答
{u_2}はランク2の問題に対する回答
なお,回答は当たったかどうか(1 or 0)の2値とする
1 : 正答
0 : 誤答

  • 出題した問題のIRP

IRPもベクトルだね.簡単に言うとある問題に対してのそれぞれのランク毎の正答率だね.
ランク i の問題のIRPを{\vec{V_i}}とすると今回はランクが3つなので
{\vec{V_i} = (v_1,v_2,v_3)} ってかんじになるね.
{v_1}{\vec{V_i}}に対するランク1の人の正答率.
また,{\vec{V_i}}も今回は最初に3問出題することにしたので
{\vec{V_1},\vec{V_2},\vec{V_3}}の3つができるね.

↓下図はランク数10のIRP
f:id:kituman:20170208015504g:plain


RMPの要素{p_1}を求める式は
{ \displaystyle
p_1 = \frac{p(u_1|V_1)g(f_1)}{\sum_{i=1}^3 p(u_i|V_i)g(f_i)}
} だよ
{p_2,p_3}も分子を変えるだけで求められるね.
一応だけど分子の p は確率(probability)の p だぞ.

で,これが何を意味しているかというと
正直資料が全然みつからなくてわからないんだぜ.
だから,俺の予想を書くぜ

まず,{g(f_1)} っていうのは事前確率を表しているぞ.
{g(f_1)} = 事前にわかっている回答者がクラス1に分類される確率ってことだね.

さて,今事前にわかっている事前確率{g(f_1)})はいくつかな?

そうだね,まだわからないね.

というわけでまだ分からない

どのクラスに分類される確率も等しい
とうことでクラス数が3つなので
{g(f_1) = \frac{1}{3}} にしましょう.
同じように{g(f_2),g(f_3)}{\frac{1}{3}}だね.

それじゃあ{ \displaystyle
p_1 = \frac{p(u_1|V_1)g(f_1)}{\sum_{i=1}^3 p(u_i|V_i)g(f_i)}
}
分子 { \displaystyle
p(u_1|V_1)g(f_1)} について考えてみよう.

{ \displaystyle
p(u_1|V_1)} っていうのは
{V_1} のとき {u_1} が起こる確率だね.
これは文字に起こすと
IRPが {V_1} のとき回答が {u_1} の確率といえる.
つまり,
とあるクラス1の問題は各ランクの人の正答率が {V_1} なんですけども,その時に正答(or 誤答)する確率は?
って意味だと思う.

で,それに事前確率 {g(f_1)} が掛けられているので,
確率で掛け算は○○かつ××って意味なので
クラス1に属する確率 {g(f_1)} の人が,とあるクラス1の問題(各ランクの人の正答率が {V_1})に,その時に正答(or 誤答)する確率
ってことです.
(余計わかりづらくなった気がする…)


話が逸れたから実際の計算に戻るよ


RMPベクトル : { \displaystyle
\vec{p} = (p_1, p_2, p_3)
}
{ \displaystyle
p_1 = \frac{p(u_1|V_1)g(f_1)}{\sum_{i=1}^3 p(u_i|V_i)g(f_i)}
} ←これを求めるんだったね.


{ \displaystyle p(u_1|V_1) = \mathrm{e}^{(u_1)log v_1 + (1 - u_1)log (1 - v_1)}}

追記:多分ここが間違ってる↑なんか多分総和とかとらないといけないハズ

で求めるよ
実は,ここがマジで資料見つからなかったから曖昧だよ.
なんかややこしいけど,これは結局
正答だったら {u_1 = 1}
誤答だったら {u_1 = 0}
になるから,指数の左側か右側の片方は消えるよ

で,結局
正答だったら {v_1} → IRPから得られる正答確率
誤答だったら {1 - v_1} → IRPから得られる誤答確率
っぽいのが出てくるっぽい.


そんでもって, {p_1} の分母 {\sum_{i=1}^3 p(u_i|V_i)g(f_i)}
これはたぶん{ \displaystyle
\vec{p} = (p_1, p_2, p_3)
} の要素の総和が1になるように正規化するためのものだと思うよ.
総和が1だったらそのまま確率(百分率)で表せるからね.便利.


というわけで,これで初期暫定RMPは求められるはず.

2番&3番

正直疲れたからここ読んでほしい

http://www.rd.dnc.ac.jp/~shojima/ntt/KimuraJART11.pdf

簡単だからすぐわかると思う.

RMPの求め方(初期暫定RMP以外のRMP)

ここら辺あいまい

初期暫定以外の普通のRMPはどうやって求めるかというと,
初期暫定RMPとほとんど同じですよ.

ただし,一つだけ違うのが事前確率 {g(f_i)}
こいつは最初はわからなかったから 1/3 にしたけど,
2回目からはこの値にRMPを使えばいいんじゃない?
だって,RMPって被験者の各クラスに対する所属確率だったもんね.


そんでもって,ここが一番わからないんだけど
RMPの更新についてのお話

例えば,「初期暫定RMPが求まり,その値からクラス2の問題が選ばれた」としよう
↑つまり4問目
その時その問題の回答結果からRMPを更新することとなるが,
俺の中でどっちの更新式が2パターンある.
どっちが正しいかは知らんし,どっちも正しくないのかもしれない.


①どんどん値が増えてくパターン
{ \displaystyle
p_2 = \frac{(p(u_2|V_2)g(f_2) + p(u_4|V_4)g(f_2)) / 2}{\sum_{i=1}^4 p(u_i|V_i)g(f_i)}
}

追記:絶対間違ってる↑

②出題した問題のクラスに対してのみ更新するパターン
{ \displaystyle
p_2 = \frac{p(u_4|V_4)g(f_2)}{\sum_{i=1 (i != 2)}^4 p(u_i|V_i)g(f_i)}
}

追記:絶対間違ってる↑