4  Rをつかった項目反応理論の実習

4.1 準備しましょう

4.1.1 サンプルデータを用います

  • RStudioでプロジェクトを開いているか確認してくださいね
  • exametrikaが持っているJ15S500を例に
library(exametrika)
dat <- J15S500
dat$U |> head()
     Item01 Item02 Item03 Item04 Item05 Item06 Item07 Item08 Item09 Item10
[1,]      0      1      1      0      1      1      0      0      0      1
[2,]      1      1      1      1      1      1      0      1      0      1
[3,]      1      1      1      1      1      1      0      0      0      1
[4,]      1      1      1      1      1      1      1      1      0      0
[5,]      1      1      0      1      1      0      0      0      0      1
[6,]      1      1      1      1      1      1      1      1      0      0
     Item11 Item12 Item13 Item14 Item15
[1,]      1      0      1      0      1
[2,]      0      0      1      0      1
[3,]      0      0      1      1      1
[4,]      0      1      1      1      0
[5,]      0      0      0      1      0
[6,]      1      0      1      1      1

4.2 実行しちゃいましょう

  • 何やら色々出てきますので,順次解説していきます
result <- IRT(dat)

iter 1 LogLik -3915.61 
iter 2 LogLik -3901.1 
iter 3 LogLik -3896.89 
iter 4
LogLik -3894.98 
iter 5 LogLik -3894.02 
iter 6 LogLik -3893.53 
iter 7 LogLik
-3893.28 
iter 8 LogLik -3893.15 
iter 9 LogLik -3893.08 
iter 10 LogLik -3893.04

iter 11 LogLik -3893.03
result
Item Parameters
       slope location PSD(slope) PSD(location)
Item01 0.698   -1.683     0.1093         0.266
Item02 0.810   -1.552     0.1166         0.221
Item03 0.559   -1.838     0.0988         0.338
Item04 1.416   -1.178     0.1569         0.113
Item05 0.681   -2.242     0.1152         0.360
Item06 0.997   -2.162     0.1499         0.273
Item07 1.084   -1.039     0.1281         0.130
Item08 0.694   -0.558     0.1002         0.153
Item09 0.347    1.630     0.0766         0.427
Item10 0.492   -1.421     0.0907         0.306
Item11 1.122    1.020     0.1314         0.124
Item12 1.216    1.031     0.1385         0.117
Item13 0.875   -0.720     0.1111         0.133
Item14 1.200   -1.232     0.1407         0.134
Item15 0.823   -1.203     0.1127         0.180

Item Fit Indices
       model_log_like bench_log_like null_log_like model_Chi_sq null_Chi_sq
Item01       -263.524       -240.190      -283.343       46.669      86.307
Item02       -252.914       -235.436      -278.949       34.954      87.025
Item03       -281.083       -260.906      -293.598       40.353      65.383
Item04       -205.851       -192.072      -265.962       27.558     147.780
Item05       -232.072       -206.537      -247.403       51.070      81.732
Item06       -173.930       -153.940      -198.817       39.981      89.755
Item07       -252.039       -228.379      -298.345       47.320     139.933
Item08       -313.754       -293.225      -338.789       41.057      91.127
Item09       -325.692       -300.492      -327.842       50.399      54.700
Item10       -309.448       -288.198      -319.850       42.500      63.303
Item11       -250.836       -224.085      -299.265       53.501     150.360
Item12       -240.247       -214.797      -293.598       50.900     157.603
Item13       -291.816       -262.031      -328.396       59.571     132.730
Item14       -224.330       -204.953      -273.212       38.754     136.519
Item15       -273.120       -254.764      -302.847       36.713      96.166
       model_df null_df   NFI   RFI   IFI   TLI   CFI RMSEA    AIC    CAIC
Item01       12      13 0.459 0.414 0.533 0.488 0.527 0.076 22.669 -39.906
Item02       12      13 0.598 0.565 0.694 0.664 0.690 0.062 10.954 -51.621
Item03       12      13 0.383 0.331 0.469 0.414 0.459 0.069 16.353 -46.222
Item04       12      13 0.814 0.798 0.885 0.875 0.885 0.051  3.558 -59.017
Item05       12      13 0.375 0.323 0.440 0.384 0.432 0.081 27.070 -35.505
Item06       12      13 0.555 0.517 0.640 0.605 0.635 0.068 15.981 -46.595
Item07       12      13 0.662 0.634 0.724 0.699 0.722 0.077 23.320 -39.255
Item08       12      13 0.549 0.512 0.633 0.597 0.628 0.070 17.057 -45.518
Item09       12      13 0.079 0.002 0.101 0.002 0.079 0.080 26.399 -36.177
Item10       12      13 0.329 0.273 0.405 0.343 0.394 0.071 18.500 -44.076
Item11       12      13 0.644 0.615 0.700 0.673 0.698 0.083 29.501 -33.075
Item12       12      13 0.677 0.650 0.733 0.709 0.731 0.081 26.900 -35.675
Item13       12      13 0.551 0.514 0.606 0.570 0.603 0.089 35.571 -27.004
Item14       12      13 0.716 0.692 0.785 0.765 0.783 0.067 14.754 -47.822
Item15       12      13 0.618 0.586 0.706 0.678 0.703 0.064 12.713 -49.862
           BIC
Item01 -27.906
Item02 -39.621
Item03 -34.222
Item04 -47.017
Item05 -23.505
Item06 -34.595
Item07 -27.255
Item08 -33.518
Item09 -24.177
Item10 -32.076
Item11 -21.075
Item12 -23.675
Item13 -15.004
Item14 -35.822
Item15 -37.862

Model Fit Indices
                   value
model_log_like -3890.655
bench_log_like -3560.005
null_log_like  -4350.217
model_Chi_sq     661.300
null_Chi_sq     1580.424
model_df         180.000
null_df          195.000
NFI                0.582
RFI                0.547
IFI                0.656
TLI                0.624
CFI                0.653
RMSEA              0.073
AIC              301.300
CAIC            -637.330
BIC             -457.330

4.3 モデル適合度

  • 尤度Likelihoodとは,観測されたデータが特定のパラメータを持つモデルから生成された可能性を表します。\([0,1]\)の範囲にあって,\(1\)に近いほど「ありえそう」であることを表します。
  • 対数尤度Log-likelihoodとは,その対数をとったものです。
    • 尤度の計算は非常に小さな桁数まで重要なので,計算の精度を保つために対数を取ります
  • 対数尤度の範囲は\((-\infty,0]\)で,\(0\)に近いほど「ありえそう」であることを表します。

4.3.1 モデルの評価

  • モデルを評価する時に,「データにバッチリ完璧に当てはまってるぜモデル」と「データなんか関係ない完璧に当てはまってないモデル」を考えます
  • 前者を飽和モデル(saturated model),後者をヌルモデル(null model)といいます
  • 飽和モデルの代わりに,実質的な飽和モデル/ベンチマークになるモデルと比較することもあります
  • 実際に推定したモデルはこの両モデルの間のどこかに入るはずですね

Test Data Engineering,P.139
  • カイ二乗(Chi-square,\(\chi^2\))値は,対数尤度に変換した後のモデル間の距離と考えることができます

Test Data Engineering,P.144
  • SEMで用いられる標準化された指標は,カイ二乗値を変換・標準化して表現したものです
  • exametrikaではこれらの指標を適合度として表示します

Test Data Engineering,P.148
  • 情報量基準も同様に,カイ二乗値に基づいて考えることができます

Test Data Engineering,P.150

4.3.2 改めて確認してみましょう

  • TestFitIndicesでテスト全体の適合度指標にアクセスできます。
result$TestFitIndices
  model_log_like bench_log_like null_log_like model_Chi_sq null_Chi_sq model_df
1      -3890.655      -3560.005     -4350.217     661.2999    1580.424      180
  null_df      NFI       RFI       IFI       TLI       CFI      RMSEA      AIC
1     195 0.581568 0.5466987 0.6563184 0.6236472 0.6525974 0.07320173 301.2999
       CAIC       BIC
1 -637.3296 -457.3296
  • ItemFitIndicesで項目ごとの適合度指標にアクセスできます。
result$ItemFitIndices
       model_log_like bench_log_like null_log_like model_Chi_sq null_Chi_sq
Item01      -263.5243      -240.1896     -283.3432     46.66936    86.30724
Item02      -252.9135      -235.4364     -278.9486     34.95429    87.02454
Item03      -281.0830      -260.9064     -293.5981     40.35322    65.38341
Item04      -205.8510      -192.0718     -265.9618     27.55846   147.77999
Item05      -232.0722      -206.5372     -247.4032     51.06995    81.73195
Item06      -173.9301      -153.9397     -198.8174     39.98072    89.75530
Item07      -252.0388      -228.3788     -298.3455     47.32007   139.93348
Item08      -313.7538      -293.2252     -338.7888     41.05727    91.12723
Item09      -325.6916      -300.4923     -327.8422     50.39860    54.69970
Item10      -309.4482      -288.1984     -319.8497     42.49979    63.30265
Item11      -250.8358      -224.0855     -299.2653     53.50067   150.35960
Item12      -240.2466      -214.7967     -293.5981     50.89986   157.60288
Item13      -291.8161      -262.0307     -328.3959     59.57086   132.73044
Item14      -224.3296      -204.9528     -273.2123     38.75364   136.51897
Item15      -273.1202      -254.7637     -302.8469     36.71311    96.16648
       model_df null_df        NFI         RFI       IFI         TLI        CFI
Item01       12      13 0.45926490 0.414203637 0.5334323 0.487656778 0.52706780
Item02       12      13 0.59833988 0.564868199 0.6940429 0.664068909 0.68990976
Item03       12      13 0.38282179 0.331390267 0.4688759 0.413631444 0.45873672
Item04       12      13 0.81351698 0.797976733 0.8854142 0.874944370 0.88456403
Item05       12      13 0.37515318 0.323082615 0.4397124 0.384190642 0.43156059
Item06       12      13 0.55455868 0.517438573 0.6401439 0.605076843 0.63545555
Item07       12      13 0.66183879 0.633658686 0.7239184 0.698555379 0.72174343
Item08       12      13 0.54945113 0.511905392 0.6327779 0.597084013 0.62807755
Item09       12      13 0.07863107 0.001850328 0.1007290 0.002427174 0.07916354
Item10       12      13 0.32862541 0.272677525 0.4054929 0.343147135 0.39367428
Item11       12      13 0.64418187 0.614530362 0.7000521 0.672690801 0.69786843
Item12       12      13 0.67703721 0.650123645 0.7328359 0.708570665 0.73098831
Item13       12      13 0.55118915 0.513788243 0.6059746 0.569573949 0.60268365
Item14       12      13 0.71612998 0.692474145 0.7851440 0.765354966 0.78340458
Item15       12      13 0.61823378 0.586419932 0.7063782 0.678084978 0.70284767
            RMSEA       AIC      CAIC       BIC
Item01 0.07609077 22.669356 -39.90594 -27.90594
Item02 0.06191430 10.954286 -51.62101 -39.62101
Item03 0.06881138 16.353218 -46.22208 -34.22208
Item04 0.05097326  3.558458 -59.01684 -47.01684
Item05 0.08077566 27.069950 -35.50535 -23.50535
Item06 0.06835787 15.980718 -46.59458 -34.59458
Item07 0.07680154 23.320074 -39.25522 -27.25522
Item08 0.06966049 17.057272 -45.51802 -33.51802
Item09 0.08007866 26.398602 -36.17670 -24.17670
Item10 0.07136865 18.499788 -44.07551 -32.07551
Item11 0.08325046 29.500672 -33.07463 -21.07463
Item12 0.08059965 26.899865 -35.67543 -23.67543
Item13 0.08913117 35.570862 -27.00444 -15.00444
Item14 0.06684217 14.753642 -47.82165 -35.82165
Item15 0.06424256 12.713113 -49.86218 -37.86218

4.3.3 可視化しましょう

  • 項目反応関数(IRF)を表示してみましょう
    • 表示させたい項目をitemsオプションで与えます
    • 表示させたい図の種類をtypeオプションで指定します
      • IRF,TRF,IIC,TICを選ぶことができます。
      • ICC(Item Characteristic Curve)も可(IRFと同じです)
    • 指定しなければ全ての項目をプロットします
plot(result, items = 1, type = "IRF")

  • 項目反応関数(IRF)を表示してみましょう
    • 複数の項目を一気に表示するには,overlayオプションをTRUEにするか,配置の行列指定(次頁)
plot(result, items = 1:6, type = "IRF", overlay = TRUE)

  • 項目反応関数(IRF)を表示してみましょう
    • 複数の項目を一気に表示するには,overlayオプションをTRUEにするか,配置の行列指定
      • nrで行数,ncで列数を指定できます
plot(result, items = 1:6, type = "IRF", nr = 3, nc = 2)

  • テスト反応関数(TRF)を表示してみましょう
    • type=IRFとして,items =0としても同様の出力を得ます
plot(result, type = "TRF")

# plot(result, type = "IRF", items = 0)
  • 項目情報関数(IIF)を表示してみましょう
plot(result, items = 1:15, type = "IIF", overlay = TRUE)

  • テスト情報関数(TIF)を表示してみましょう
plot(result, type = "TIF")

# plot(result, items = 0, type = "IIF")

4.3.4 受検者の情報も含まれています

  • EAP(Expectation A Posterior)推定値を出力します
  • PSD(Posterior Standard Deviation)も出力します
result$ability |> head(20)
           ID         EAP       PSD
1  Student001 -0.66456789 0.5457047
2  Student002 -0.14853712 0.5626979
3  Student003  0.01362519 0.5699764
4  Student004  0.58775673 0.6012839
5  Student005 -0.97796877 0.5415528
6  Student006  0.85892495 0.6187224
7  Student007  0.05696166 0.5720483
8  Student008  0.04790635 0.5716114
9  Student009  1.23035676 0.6433919
10 Student010 -0.19705216 0.5606753
11 Student011 -0.34067175 0.5551509
12 Student012 -0.51385233 0.5495270
13 Student013  1.05114791 0.6316587
14 Student014  0.81625122 0.6158909
15 Student015 -1.35345922 0.5440715
16 Student016 -1.53285016 0.5476039
17 Student017  0.62954568 0.6038740
18 Student018 -0.96955167 0.5415909
19 Student019  0.73791256 0.6107655
20 Student020 -0.80866495 0.5431159

4.3.5 Q3行列

  • 局所独立の仮定が満たされているかどうかを判断する指標として,Q3行列があります
    • 項目特性同士の相関行列です
    • この値が高すぎると局所独立の仮定が満たされていない可能性があります
result$Q3mat
        Item01  Item02   Item03   Item04   Item05   Item06   Item07  Item08
Item01  1.0000 -0.0535 -0.08856 -0.13197  0.05521  0.01128 -0.09982  0.0139
Item02 -0.0535  1.0000  0.00440 -0.02750 -0.02981 -0.03641 -0.10196 -0.0638
Item03 -0.0886  0.0044  1.00000  0.00363  0.00902  0.00334  0.01898 -0.0465
Item04 -0.1320 -0.0275  0.00363  1.00000 -0.08089 -0.12016 -0.03221 -0.0855
Item05  0.0552 -0.0298  0.00902 -0.08089  1.00000 -0.06635 -0.04430 -0.0596
Item06  0.0113 -0.0364  0.00334 -0.12016 -0.06635  1.00000 -0.02694  0.0255
Item07 -0.0998 -0.1020  0.01898 -0.03221 -0.04430 -0.02694  1.00000 -0.0245
Item08  0.0139 -0.0638 -0.04653 -0.08547 -0.05961  0.02546 -0.02450  1.0000
Item09  0.0191 -0.0541 -0.03816 -0.05523 -0.08799 -0.07573 -0.01889 -0.0744
Item10 -0.0392 -0.0409 -0.02099 -0.09241 -0.01727 -0.02101  0.00508 -0.0625
Item11 -0.0281 -0.0171 -0.07190 -0.07304 -0.05427 -0.10232 -0.06882  0.0049
Item12 -0.0683 -0.0562 -0.07754 -0.01098 -0.06810 -0.09014 -0.07219 -0.0672
Item13 -0.0342 -0.0820 -0.01490 -0.07015  0.02738 -0.08209 -0.10070 -0.0297
Item14 -0.0209 -0.0496 -0.11632 -0.16292 -0.04666 -0.02432 -0.15965 -0.1019
Item15 -0.0343 -0.0436 -0.07199 -0.03444 -0.05169  0.03602 -0.05857 -0.0781
         Item09   Item10   Item11  Item12   Item13   Item14  Item15
Item01  0.01906 -0.03915 -0.02813 -0.0683 -0.03423 -0.02090 -0.0343
Item02 -0.05412 -0.04094 -0.01708 -0.0562 -0.08200 -0.04963 -0.0436
Item03 -0.03816 -0.02099 -0.07190 -0.0775 -0.01490 -0.11632 -0.0720
Item04 -0.05523 -0.09241 -0.07304 -0.0110 -0.07015 -0.16292 -0.0344
Item05 -0.08799 -0.01727 -0.05427 -0.0681  0.02738 -0.04666 -0.0517
Item06 -0.07573 -0.02101 -0.10232 -0.0901 -0.08209 -0.02432  0.0360
Item07 -0.01889  0.00508 -0.06882 -0.0722 -0.10070 -0.15965 -0.0586
Item08 -0.07436 -0.06251  0.00490 -0.0672 -0.02972 -0.10189 -0.0781
Item09  1.00000 -0.10174 -0.05357  0.0772 -0.00977  0.01932 -0.0708
Item10 -0.10174  1.00000 -0.02597 -0.0902  0.01259  0.02296 -0.0529
Item11 -0.05357 -0.02597  1.00000 -0.0630 -0.15170  0.00762 -0.0948
Item12  0.07724 -0.09020 -0.06302  1.0000 -0.09172 -0.05197 -0.0887
Item13 -0.00977  0.01259 -0.15170 -0.0917  1.00000 -0.03881  0.0113
Item14  0.01932  0.02296  0.00762 -0.0520 -0.03881  1.00000 -0.0680
Item15 -0.07085 -0.05290 -0.09481 -0.0887  0.01128 -0.06801  1.0000

4.4 多値への展開

4.4.1 段階反応モデル

  • 段階反応モデルは順序的な反応段階を仮定したモデルです
    • K段階カテゴリのデータがあったとして,k以上のカテゴリに反応する確率を2PLモデルのように推定します。
  • サンプルデータJ5S1000で様子を見てみましょう
dat <- J5S1000
TestStatistics(dat)
Test Statistics
                   value
SampleSize 1000.00000000
TestLength    5.00000000
Median       12.00000000
Max          18.00000000
Min           4.00000000
Range        14.00000000
Mean         11.45700000
SD            2.92107578
Skewness     -0.08836075
Kurtosis     -0.55776379
Alpha         0.59462241
  • exametrikaの性能(精度+実行速度)はそこまで高くないので、ltmパッケージやmirtパッケージなども参考にしてください。
result.GRM <- GRM(dat)
Parameters: 18 | Initial LL: -6252.352 
initial  value 6252.351598 
iter  10 value 6032.463982
iter  20 value 6010.861094
final  value 6008.297278 
converged
result.GRM
Item Parameter
   Slope Threshold1 Threshold2 Threshold3
V1 0.928     -1.662     0.0551       1.65
V2 1.234     -0.984     1.1297         NA
V3 0.917     -1.747    -0.0826       1.39
V4 1.479     -0.971     0.8901         NA
V5 0.947     -1.449     0.0302       1.62

Item Fit Indices
   model_log_like bench_log_like null_log_like model_Chi_sq null_Chi_sq
V1      -1297.780      -1086.461     -1363.667      422.638     554.411
V2       -947.222       -840.063     -1048.636      214.317     417.145
V3      -1307.044      -1096.756     -1373.799      420.575     554.085
V4       -936.169       -819.597     -1062.099      233.142     485.003
V5      -1308.149      -1096.132     -1377.883      424.033     563.502
   model_df null_df   NFI   RFI   IFI   TLI   CFI RMSEA     AIC    CAIC     BIC
V1       46      45 0.238 0.254 0.259 0.277 0.261 0.091 330.638  58.881 104.881
V2       31      30 0.486 0.503 0.525 0.542 0.526 0.077 152.317 -30.823   0.177
V3       46      45 0.241 0.257 0.263 0.280 0.264 0.090 328.575  56.819 102.819
V4       31      30 0.519 0.535 0.555 0.570 0.556 0.081 171.142 -11.998  19.002
V5       46      45 0.248 0.264 0.270 0.287 0.271 0.091 332.033  60.277 106.277

Model Fit Indices
                   value
model_log_like -5796.363
bench_log_like -4939.010
null_log_like  -6226.083
model_Chi_sq    1714.706
null_Chi_sq     2574.146
model_df         200.000
null_df          195.000
NFI                0.334
RFI                0.351
IFI                0.362
TLI                0.379
CFI                0.363
RMSEA              0.087
AIC             1314.706
CAIC             133.155
BIC              333.155

4.4.2 可視化しましょう

  • IRTモデルと同じように,IRFを出力することができます。
plot(result.GRM, type = "IRF", items = 2)

plot(result.GRM, type = "IRF", items = c(1, 3, 4, 5), nc = 2, nr = 2)

  • IRTモデルと同じように,IIFを出力することができます。
plot(result.GRM, type = "IIF", nr = 2, nc = 2)

  • IRTモデルと同じように,TIFを出力することができます。
plot(result.GRM, type = "TIF")

4.5 コラム:GRMと他のモデル

  • 段階反応モデルは正規分布する連続的潜在変数\(\theta\)を仮定して,数値が高くなるとより上位のカテゴリに反応しやすくなるモデルです。
    • 社会的態度を測定するリッカート法のIRT版とも言えます
    • 反応カテゴリに順序性を仮定した因子分析と数学的に等価です
    • カテゴリ反応で多因子モデルの場合,mirtパッケージ(Multidimensional IRT)やlavaanパッケージ(LAtent VAriable ANalysis)で推定しましょう
  • IRFを見ることで,項目カテゴリが反応段階を弁別できているかチェックできます

4.6 コラム:態度測定論

  • 社会的態度は社会心理学の分野で考えられてきた連続的潜在変数です
    • サーストンの考えた測定方法(等現間隔法)をつかって測定する,一次元モデルです
    • リッカートの方法はサーストン法の簡易版として出てきた態度モデルです
  • 昨今は,「心の測定」,「心理学的連続体」,「心理尺度の妥当性」が問題になっています
  • 心理尺度(リッカート法)は一朝一夕に作れるものではありません
  • 心理尺度は領域,方法,標準化など使用法によく注意して利用しましょう