dat <- expand.table(deAyala)
mod <- mirt(dat)
# marginal estimate treating item parameters as known
marginal_rxx(mod)
# compare to alpha
itemstats(dat)$overall$alpha
# \donttest{
# empirical estimate (assuming the same prior)
fscores(mod, returnER = TRUE)
# empirical rxx the alternative way, given theta scores and SEs
fs <- fscores(mod, full.scores.SE=TRUE)
head(fs)
empirical_rxx(fs)
#############
# example demonstrating correlation attenuation
theta <- rnorm(1000)
X <- theta + rnorm(1000, sd=2)
cor(X, theta) # correlation without measurement error (what you want)
# measured with a 10 item GRM test
nitems <- 10
a <- matrix(rlnorm(nitems,.2,.3))
diffs <- t(apply(matrix(runif(nitems*4, .3, 1), nitems), 1, cumsum))
diffs <- -(diffs - rowMeans(diffs))
d <- diffs + rnorm(nitems)
dat <- simdata(a, d, itemtype = 'graded', Theta=matrix(theta))
# correlation with total score (attenuated)
cor(rowSums(dat), X)
# fit single group model
mod <- mirt(dat)
# EAP correlation (also attenuated)
fs <- fscores(mod)
cor(fs, X)
# correction for attenuation, r_x.theta = r_x.theta.hat / sqrt(rxx_theta.hat)
(rxx <- marginal_rxx(mod)) # alternatively, could use empirical_rxx()
cor(fs, X) / sqrt(rxx) # correction estimate
cor(X, theta) # compare to true correlation
# }
Run the code above in your browser using DataLab