library(mirt)
set.seed(1)
N <- 1000 # number of participants
J <- 30 # number of items
D <- 1.7
U <- matrix(1, N, J) # response m atrix
p <- matrix(NA, N, J) # probability of answering all item correctly
# Simulate response -------------------------------------------------------
theta <- rnorm(N) # ability
b <- rnorm(J) # difficulty
theta[theta > 3] <- 3
theta[theta < -3] <- -3
b[b > 3] <- 3
b[b < -3] <- -3
b <- matrix(b,1,J)
theta <- matrix(theta,N,1)
a <- runif(30,0,2)
# method 1, conventional way
for(i in 1:N){
for(j in 1 :J){
p[i, j] <- 1 / (1 + exp(-a[j]* (theta[i] - b[j])))
rand_num <- runif(1)
if (p[i, j] < rand_num) {
U[i, j] <- 0
}
}
}
rn <- sample(N,N*0.1)
for(i in 1:N){
if(i %in% rn)
p[i, sample(J,J*0.3)] <-(0.5)
}
for(i in 1:N){
for(j in 1 :J){
rand_num <- runif(1)
if (p[i, j] < rand_num) {
U[i, j] <- 0
}
}
}
# 建立作答矩阵 ------------------------------------------------------------------
colnames(U) <- c("i1","i2","i3","i4","i5","i6","i7","i8","i9","i10","i11","i12",
"i13","i14","i15","i16","i17","i18","i19","20","i21","i22","i23","i24",
"i25","i26","i27","i28","i29","i30")
#................拟合............
nihe <- function(data){
mod <- mirt(data,1)
theta1<-round(fscores(mod),2)
#..........能力,题目参数...............
t <- coef(mod,IRTpars=T)
vv<-matrix(NA,30,4)
for (z in 1:J) {
vv[z,] <- t[[z]]
}
a1 <- vv[,1]
b1 <- vv[,2]
#................结果输出.................
bias <- mean(theta - theta1)
t_mse<-sum((theta - theta1)^2)/N
t_Rmse<-t_mse^0.5
a_bias <- mean(a - a1)
a_mse<-sum((a - a1)^2)/J
a_Rmse<-a_mse^0.5
b_bias <- mean(b - b1)
b_mse<-sum((b - b1)^2)/J
b_Rmse<-b_mse^0.5
shuju <- c(bias,t_Rmse,a_bias,a_Rmse,b_bias,b_Rmse)
return(shuju)
}
z_0_0 <- matrix(NA,100,6)
for(i in 1:100){
z_0_0[i,] <- nihe(U)
}
mz_0_0 <- apply(z_0_0,2,mean)
IRT模型的参数估计方法(EM算法和MCMC算法)
https://blog.csdn.net/weixin_41524411/article/details/90702670