LoginSignup
0
0

More than 1 year has passed since last update.

RでマルチレベルIRT

Posted at

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)
0
0
0

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
0
0