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))
あると便利だという話をよく聞くので置いておきます。