5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

岩手県立大学Advent Calendar 2016

Day 21

項目反応理論(IRT)の1PLMをPHPで実装の検証

Last updated at Posted at 2016-12-21

#はじめに
テスト理論では、古典的テスト理論と現在一般的に用いられている項目反応理論(IRT)と呼ばれる理論がある。古典的テスト理論はテスト全体の受験者集団に依存するテスト理論であるが、IRTは、1人の被験者がテストの1項目(問題)に応答する際の解率をモデル化した理論である。モデルには様々なモデルであるが、ここでは比較的分かりやすいパラメータロジスティックモデルを使うことにする。内容は後述。
IRTに関しては、PythonでパッケージやRでもパッケージが存在するが、自分が現状開発したシステムから使うにはハードルが高く振り回されてしまったので今回自作しようと考えた。
実装は理論を知っていれば容易にできるのでここでは、理論についてできる限り分かりやすく説明し簡易的にPHPで実装したソースコードを載せる。

私自身もIRTについては学習途中なので、間違っている点などがあればご指摘お願いします。
#IRTのパラメータロジスティックモデル 1
スクリーンショット 2016-12-21 18.01.45.png・・・・(1)
a=識別度、b=困難度、c=当て推量、D=1.7(定数)、j=項目番号、θ=受験者能力、exp=指数関数
で求めることができる。
主に、IRTは下記のような項目特性曲線を描画して表示されることが多い。 2
img-0288.png
この図は、横軸がθであり、縦軸がPを表した図である。
この図を作るために今回は実装を行うといっても過言ではない。

・1PLM(one - parameter logistic model)
困難度のみをモデル化したもの。困難度は項目ごとに定まるが、全ての項目の識別力パラメタは等しいと考えるモデル。a=1、c=0、θとbは求めることができる。
・2PLM(two - parameter logistic model)
項目の困難度と識別力によってテスト項目の正答確率を表現するモデル
a=1、c=0、θとbは求めることができる。
・3PLM(three - parameter logistic model)
項目の困難度と識別力の他に、当て推量(あてずっぽう)により被験者が偶然正答する確率についてのパラメータを導入しているモデル
すべて求めることができる。
・その他にも4パラメータロジスティックモデルがあるがここでは割愛する。
#実装
以下がコードです。

1plm.php
<?php
echo "IRT項目反応理論1PLM";
$theta = array(-3,-2.5,-2,-1.5,-1,-0.5,0,0.5,1,1.5,2,2.5,3);
$b = 0;
for($i = 0;$i < 13;$i++){
    $P = 1 / (1 + exp(-1.7 * ($theta[$i] - $b)));
    echo "</BR>シータ:". $theta[$i] ." 確率:".$P;
}

こんな感じで表示されるはずです↓
これをプロットすれば項目特性曲線ができる。曲線実装はD3.jsでやる予定。
スクリーンショット 2016-12-21 18.18.26.png

実装方針としては、1PLMでbはあらかじめ求められている前提で書いた。
bの求め方はこちらを参考にすると良い。3
http://www.mizumot.com/method/06-06_Sumi.pdf

θの値はグラフ描画の都合上こちらで定義し、グラフ描画の際に点をプロットすることで項目特性曲線が出来上がる。

θの求め方も同じくこちらを参考にして求めることができる。3
http://www.mizumot.com/method/06-06_Sumi.pdf
Dは定数である1.7を用いた。

#さいごに
正直、実装にかかる時間は4~5分程度であったが、理論を正しく記述できるか見極めることに時間がかかってしまっていた。
IRTは、すでに様々なパッケージ化もされているため、本当にこの実装方法であっているか不安ではあるが、結果から見るとθがあがるにつれて確率が上がっているのでこの計算方式であっていると思われる。
本当はbを求めるコードも実装しようと思ったが、時間の都合上カットした。冬コミ準備が終わったら実装します。絶賛、冬コミ炎上中。修論も書かないと・・・・
また、今回は、1PLMだけであるためそこまで時間はかからないが2PLMなどを実装する場合にはPythonで処理してPHPで表示のような形にするかもしれない。
来年以降頑張っていきたいと思います。
拙い記事で、なおかつ長文で読みにくくて申し訳ありません!
余裕があったら、記事編集してもっと見やすくしたいと思います。

#参考文献

  1. 1PLM,2PLM,3PLM,多段階反応モデル,外国語教育メディア学会 (LET) 関西支部メソドロジー研究部会 2013 年度報告論集 住政二郎 (pp. 34–62)http://www.mizumot.com/method/04-04_Sumi.pdf

  2. 6.2 項目特性曲線と項目パラメータ、奥村太一(上越教育大学)http://www.juen.ac.jp/lab/okumura/test/sect0032.html

  3. 外国語教育メディア学会( LET )関西支部メソドロジー研究部会 2014 年度第 6 号報告論集 住政二郎( pp. 96–116 )http://www.mizumot.com/method/06-06_Sumi.pdf 2

5
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?