RでマルチレベルIRTを試してみたので、その備忘です。
使用した関数はsirtパッケージのmcmc.2pno.ml関数です。
また、使用したデータは能力値の階層性が出るように、自作しました。それもどこかにアップロードしようか考えています。
パッケージとデータの読み込み
関数を動かすと、codaパッケージも必要と言われるので、読み込みます。
なお、分析に使用する反応行列と集団を表す属性データは分離する必要があります。
library(sirt)
library(coda)
#データ読み込み
dat<- read.csv("file_pass/file_name.csv", header=TRUE, sep=",")
#集団を表す属性データを抽出
group.col <- dat$school_ID
#推定したい項目のみ抽出(集団を表す属性データは反応行列に含めない)
select.item<-c(
'item1', ...
)
dat2<- subset(dat,select=select.item)
項目の集団性を仮定しないモデル
MLIRTには困難度や識別力の集団性を仮定するモデルもありますが、まずは仮定しないモデルを試します。
反応行列と集団を引数に与えたら、困難度と識別力の分布におけるパラメータの推定方法を、以下のようにest.b.Mなどで指定します。
引数 | 推定方法の指定 |
---|---|
est.b.M="n" | 困難度の階層事前分布は仮定しない |
est.a.M="n" | 識別力の階層事前分布は仮定しない |
est.b.Var="n" | 困難度は集団に依存しない |
est.a.Var="n" | 識別力は集団に依存しない |
burnin <- 50 ; iter <- 100
mod1 <- mcmc.2pno.ml(dat2, group.col, est.b.M="n", est.a.M="n", est.b.Var="n", est.a.Var="n", burnin=burnin, iter=iter)
# 項目母数の推定結果の確認
summary(mod1)
# 能力値母数の推定結果の確認
theta.nonGroup.df <- data.frame(mod1$person)
項目の集団性を仮定するモデル1
項目の集団性は、「項目ごとに異なる標準偏差」と「全項目で同じ標準偏差」という仮定を置くことができます。
まずは前者の「項目ごとに異なる標準偏差」を試します。その場合は以下のように引数を設定します。
引数 | 推定方法の指定 |
---|---|
est.b.M="n" | 困難度の階層事前分布は仮定しない |
est.a.M="n" | 識別力の階層事前分布は仮定しない |
est.b.Var="i" | 困難度は集団に依存し、標準偏差は項目ごとに異なると仮定 |
est.a.Var="i" | 識別力は集団に依存し、標準偏差は項目ごとに異なると仮定 |
mod2 <- mcmc.2pno.ml(dat2, group.col, est.b.M="n", est.a.M="n", est.b.Var="i", est.a.Var="i", burnin=burnin, iter=iter)
項目の集団性を仮定するモデル2
「全項目で同じ標準偏差」という仮定を置く場合は以下のように引数を設定します。
引数 | 推定方法の指定 |
---|---|
est.b.M="n" | 困難度の階層事前分布は仮定しない |
est.a.M="n" | 識別力の階層事前分布は仮定しない |
est.b.Var="j" | 困難度は集団に依存し、標準偏差は項目ごとに異なると仮定 |
est.a.Var="j" | 識別力は集団に依存し、標準偏差は項目ごとに異なると仮定 |
mod3 <- mcmc.2pno.ml(dat2, group.col, est.b.M="n", est.a.M="n", est.b.Var="j", est.a.Var="j", burnin=burnin, iter=iter)