#############################################################################
# EXAMPLE 1: Dichotomous data data.sim.rasch
#############################################################################
data(data.sim.rasch)
# estimate Rasch model
mod1 <- TAM::tam.mml(resp=data.sim.rasch)
# item fit
fit1 <- TAM::tam.fit( mod1 )
summary(fit1)
## > summary(fit1)
## parameter Outfit Outfit_t Outfit_p Infit Infit_t Infit_p
## 1 I1 0.966 -0.409 0.171 0.996 -0.087 0.233
## 2 I2 1.044 0.599 0.137 1.029 0.798 0.106
## 3 I3 1.022 0.330 0.185 1.012 0.366 0.179
## 4 I4 1.047 0.720 0.118 1.054 1.650 0.025
if (FALSE) {
#--------
# infit and oufit based on estimated WLEs
library(sirt)
# estimate WLE
wle <- TAM::tam.wle(mod1)
# extract item parameters
b1 <- - mod1$AXsi[, -1 ]
# assess item fit and person fit
fit1a <- sirt::pcm.fit(b=b1, theta=wle$theta, data.sim.rasch )
fit1a$item # item fit statistic
fit1a$person # person fit statistic
#############################################################################
# EXAMPLE 2: Partial credit model data.gpcm
#############################################################################
data( data.gpcm )
dat <- data.gpcm
# estimate partial credit model in ConQuest parametrization 'item+item*step'
mod2 <- TAM::tam.mml( resp=dat, irtmodel="PCM2" )
summary(mod2)
# estimate item fit
fit2 <- TAM::tam.fit(mod2)
summary(fit2)
#=> The first three rows of the data frame correspond to the fit statistics
# of first three items Comfort, Work and Benefit.
#--------
# infit and oufit based on estimated WLEs
# compute WLEs
wle <- TAM::tam.wle(mod2)
# extract item parameters
b1 <- - mod2$AXsi[, -1 ]
# assess fit
fit1a <- sirt::pcm.fit(b=b1, theta=wle$theta, dat)
fit1a$item
#############################################################################
# EXAMPLE 3: Fit statistic testing for local independence
#############################################################################
# generate data with local dependence and User-defined fit statistics
set.seed(4888)
I <- 40 # 40 items
N <- 1000 # 1000 persons
delta <- seq(-2,2, len=I)
theta <- stats::rnorm(N, 0, 1)
# simulate data
prob <- stats::plogis(outer(theta, delta, "-"))
rand <- matrix( stats::runif(N*I), nrow=N, ncol=I)
resp <- 1*(rand < prob)
colnames(resp) <- paste("I", 1:I, sep="")
#induce some local dependence
for (item in c(10, 20, 30)){
# 20
#are made equal to the previous item
row <- round( stats::runif(0.2*N)*N + 0.5)
resp[row, item+1] <- resp[row, item]
}
#run TAM
mod1 <- TAM::tam.mml(resp)
#User-defined fit design matrix
F <- array(0, dim=c(dim(mod1$A)[1], dim(mod1$A)[2], 6))
F[,,1] <- mod1$A[,,10] + mod1$A[,,11]
F[,,2] <- mod1$A[,,12] + mod1$A[,,13]
F[,,3] <- mod1$A[,,20] + mod1$A[,,21]
F[,,4] <- mod1$A[,,22] + mod1$A[,,23]
F[,,5] <- mod1$A[,,30] + mod1$A[,,31]
F[,,6] <- mod1$A[,,32] + mod1$A[,,33]
fit <- TAM::tam.fit(mod1, FitMatrix=F)
summary(fit)
#############################################################################
# EXAMPLE 4: Fit statistic testing for items with differing slopes
#############################################################################
#*** simulate data
library(sirt)
set.seed(9875)
N <- 2000
I <- 20
b <- sample( seq( -2, 2, length=I ) )
a <- rep( 1, I )
# create some misfitting items
a[c(1,3)] <- c(.5, 1.5 )
# simulate data
dat <- sirt::sim.raschtype( rnorm(N), b=b, fixed.a=a )
#*** estimate Rasch model
mod1 <- TAM::tam.mml(resp=dat)
#*** assess item fit by infit and outfit statistic
fit1 <- TAM::tam.fit( mod1 )$itemfit
round( cbind( "b"=mod1$item$AXsi_.Cat1, fit1$itemfit[,-1] )[1:7,], 3 )
#*** compute item fit statistic in mirt package
library(mirt)
library(sirt)
mod1c <- mirt::mirt( dat, model=1, itemtype="Rasch", verbose=TRUE)
print(mod1c) # model summary
sirt::mirt.wrapper.coef(mod1c) # estimated parameters
fit1c <- mirt::itemfit(mod1c, method="EAP") # model fit in mirt package
# compare results of TAM and mirt
dfr <- cbind( "TAM"=fit1, "mirt"=fit1c[,-c(1:2)] )
# S-X2 item fit statistic (see also the output from mirt)
library(CDM)
sx2mod1 <- CDM::itemfit.sx2( mod1 )
summary(sx2mod1)
# compare results of CDM and mirt
sx2comp <- cbind( sx2mod1$itemfit.stat[, c("S-X2", "p") ],
dfr[, c("mirt.S_X2", "mirt.p.S_X2") ] )
round(sx2comp, 3 )
}
Run the code above in your browser using DataLab