わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

Rで項目反応曲線のモデルを描く

 項目反応理論に基づいて分析する学生の論文を添削しています.項目反応パターンを作ってRでコマンドを逐一実行し,問題の数と同じだけの項目反応曲線を一つのグラフに描くというのは,毎年やっています.コマンド実行記録を,テキストファイルに残しています.
 先日,事例に基づく描画ではなく,「モデル」としての,項目反応曲線を,図にして論文に貼り付ける必要があることに気づきました.
 これまでのコマンド実行記録では,irtoysライブラリ*1を使用していました.WSL2で「R」を実行し,「> 」にプロンプトが変わったところで「library(irtoys)」を実行したところ,エラーが出ました.「install.packages("irtoys", dependencies=TRUE)」を実行してパッケージをインストールしました.
 もう一度,コマンド実行記録を見ると,est関数の呼び出し結果をresultに代入することで,result$estに,識別力・困難度などの値が入っているのが分かりました.そしてirf(result$est)により,項目特性曲線をプロットするための値を求めています.
 result$estの内容と同等の2次元配列を作ればいい,と考えて,次のように実行しました.

$ R
> install.packages("irtoys", dependencies=TRUE)
> library(irtoys)
> est <- array(c(1,1,1,1,1,0,-2,-1,1,2,0,0,0,0,0),dim=c(5,3))
> icc <- irf(est)
> pdf("icc1.pdf", width=6, height=5)
> plot(icc, label=TRUE, co=NA)
> dev.off()

 出来上がったPDFファイルを開くと,次のように表示されました.

f:id:takehikom:20210211230958j:plain

 タイトルや横軸・縦軸の説明は,デフォルトのままPDFに入れています,論文や発表スライドに貼り付ける時点で,削除したり,日本語に置き換えたりすればいいのです.
 pdf関数で指定しているwidthとheightは,作られるPDFファイルの幅と高さをインチ単位で指定します.コマンド実行記録では「width=11.69, height=8.27」と指定しており,これで横長A4サイズになります.またplot関数のlabel=TRUEにより,各曲線に番号を振り,co=NAにより,各曲線に色をつけます.ちなみにestはestimateの最初の3文字で,iccはItem Characteristic Curveの頭文字です.
 変数estの値は,実行環境でそのまま書くと,出てきます.

> est
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    1   -2    0
[3,]    1   -1    0
[4,]    1    1    0
[5,]    1    2    0

 5行3列の2次元配列です(「est <- array(c(略),dim=c(5,3))」により,代入しています).それぞれの行が,1本の項目反応曲線を作るための情報で,列は左から順に,識別力*2,困難度,当て推量パラメータです.
 上の例は,識別力(曲線の「真ん中」のところの傾き)を1,当て推量パラメータを0(偶然による正解は考えない)で固定し,困難度(曲線が「真ん中」のときの能力値で,当て推量パラメータが0のときは,正答率が0.5となる能力値)を,-2から2まで1刻みで変更した状況です.
 困難度と当て推量パラメータを0にし,識別力を,0.25,0.5,1,2,4にしたときの曲線は,次の通りです.

f:id:takehikom:20210211231009j:plain

 コマンドです.

> est <- array(c(1,0.25,0.5,2,4,0,0,0,0,0,0,0,0,0,0),dim=c(5,3))
> icc <- irf(est)
> pdf("icc2.pdf", width=6, height=5)
> plot(icc, label=TRUE, co=NA)
> dev.off()
> est
     [,1] [,2] [,3]
[1,] 1.00    0    0
[2,] 0.25    0    0
[3,] 0.50    0    0
[4,] 2.00    0    0
[5,] 4.00    0    0

 我々の研究ではこれまで,当て推量パラメータを考えない,2パラメータロジスティックモデル(2PLM)を採用してきましたが,識別力を1,能力値を0に固定して,当て推量パラメータを変化させたときの曲線も,作成してみました.

f:id:takehikom:20210211231020j:plain

> est <- array(c(1,1,1,1,1,0,0,0,0,0,0,0.1,0.2,0.3,0.5),dim=c(5,3))
> icc <- irf(est)
> pdf("icc3.pdf", width=6, height=5)
> plot(icc, label=TRUE, co=NA)
> dev.off()
> est
     [,1] [,2] [,3]
[1,]    1    0  0.0
[2,]    1    0  0.1
[3,]    1    0  0.2
[4,]    1    0  0.3
[5,]    1    0  0.5

 当て推量パラメータの値は,グラフ上では,横軸(能力値)が-∞のときの,曲線の値に対応付けられます.なお横軸が+∞のときの曲線の値は,識別力が正であれば,1になります.全知全能の者は,どんな問題にも正解できるということです.

*1:ドキュメントはhttps://cran.r-project.org/web/packages/irtoys/irtoys.pdf

*2:現実には識別力も困難度も,推定値(パラメータ)であり,wikipedia:項目反応理論に書かれた「識別パラメータ」「難易度(困難度)パラメータ」のほうがより正確と言えますが,慣例により「識別力」「困難度」と表記します.