見出し画像

IRTに従う回答をランダムに生成するRのコード

IRT(項目反応理論)に従う回答データを人工的に生成したいことが、たまにあります。
既存ライブラリにも同様の機能がありますが、自分でも作ってみました。

item.n=100; person.n=10000
vec_a=runif(item.n,0,2)
vec_b=rnorm(item.n,0,1)
p=function(theta,a,b,D=1) 1/(1+exp(-D*a*(theta-b)))
vec_theta=rnorm(person.n,0,1)
resp=matrix(NA,ncol=item.n,nrow=person.n)
for (i in 1:item.n){
 resp[,i]=as.numeric(sapply(vec_theta,p,vec_a[i],vec_b[i])
   >runif(person.n,0,1))
}

検算のために真のthetaと合計点の相関を求めるとr=.96だったので上手くいっているのではないかと思います。

#検算
plot(vec_theta,rowSums(resp))
cor(vec_theta,rowSums(resp))

あると便利だという話をよく聞くので置いておきます。

この記事が気に入ったらサポートをしてみませんか?