TAM Object into a mirt Objecttam2mirt.RdConverts a fitted TAM object into a mirt object.
As a by-product, lavaan syntax is generated which can
be used with lavaan2mirt for re-estimating
the model in the mirt package.
Up to now, only single group models are supported.
There must not exist background covariates (no latent regression
models!).
tam2mirt(tamobj)
| tamobj | Object of class |
|---|
A list with following entries
Object generated by mirt function if
est.mirt=TRUE
Generated mirt model
Generated mirt syntax
Generated parameter specifications
in mirt
Used lavaan model transformed by
lavaanify function
Used dataset. If necessary, only items used in the model are included in the dataset.
Generated lavaan syntax
with fixed parameter estimates.
Generated lavaan syntax
with freed parameters for estimation.
See mirt.wrapper for convenience wrapper functions
for mirt objects.
See lavaan2mirt for converting lavaan
syntax to mirt syntax.
if (FALSE) { library(TAM) library(mirt) ############################################################################# # EXAMPLE 1: Estimations in TAM for data.read dataset ############################################################################# data(data.read) dat <- data.read #************************************** #*** Model 1: Rasch model #************************************** # estimation in TAM package mod <- TAM::tam.mml( dat ) summary(mod) # conversion to mirt res <- sirt::tam2mirt(mod) # generated lavaan syntax cat(res$lavaan.syntax.fixed) cat(res$lavaan.syntax.freed) # extract object of class mirt mres <- res$mirt # print and parameter values print(mres) mirt::mod2values(mres) # model fit mirt::M2(mres) # residual statistics mirt::residuals(mres, type="Q3") mirt::residuals(mres, type="LD") # item fit mirt::itemfit(mres) # person fit mirt::personfit(mres) # compute several types of factor scores (quite slow) f1 <- mirt::fscores(mres, method='WLE',response.pattern=dat[1:10,]) # method=MAP and EAP also possible # item plot mirt::itemplot(mres,"A3") # item A3 mirt::itemplot(mres,4) # fourth item # some more plots plot(mres,type="info") plot(mres,type="score") plot(mres,type="trace") # compare estimates with estimated Rasch model in mirt mres1 <- mirt::mirt(dat,1,"Rasch" ) print(mres1) mirt.wrapper.coef(mres1) #************************************** #*** Model 2: 2PL model #************************************** # estimation in TAM mod <- TAM::tam.mml.2pl( dat ) summary(mod) # conversion to mirt res <- sirt::tam2mirt(mod) mres <- res$mirt # lavaan syntax cat(res$lavaan.syntax.fixed) cat(res$lavaan.syntax.freed) # parameter estimates print(mres) mod2values(mres) mres@nest # number of estimated parameters # some plots plot(mres,type="info") plot(mres,type="score") plot(mres,type="trace") # model fit mirt::M2(mres) # residual statistics mirt::residuals(mres, type="Q3") mirt::residuals(mres, type="LD") # item fit mirt::itemfit(mres) #************************************** #*** Model 3: 3-dimensional Rasch model #************************************** # define Q-matrix Q <- matrix( 0, nrow=12, ncol=3 ) Q[ cbind(1:12, rep(1:3,each=4) ) ] <- 1 rownames(Q) <- colnames(dat) colnames(Q) <- c("A","B","C") # estimation in TAM mod <- TAM::tam.mml( resp=dat, Q=Q, control=list(snodes=1000,maxiter=30) ) summary(mod) # mirt conversion res <- sirt::tam2mirt(mod) mres <- res$mirt # mirt syntax cat(res$mirt.syntax) ## Dim01=1,2,3,4 ## Dim02=5,6,7,8 ## Dim03=9,10,11,12 ## COV=Dim01*Dim01,Dim02*Dim02,Dim03*Dim03,Dim01*Dim02,Dim01*Dim03,Dim02*Dim03 ## MEAN=Dim01,Dim02,Dim03 # lavaan syntax cat(res$lavaan.syntax.freed) ## Dim01=~ 1*A1+1*A2+1*A3+1*A4 ## Dim02=~ 1*B1+1*B2+1*B3+1*B4 ## Dim03=~ 1*C1+1*C2+1*C3+1*C4 ## A1 | t1_1*t1 ## A2 | t1_2*t1 ## A3 | t1_3*t1 ## A4 | t1_4*t1 ## B1 | t1_5*t1 ## B2 | t1_6*t1 ## B3 | t1_7*t1 ## B4 | t1_8*t1 ## C1 | t1_9*t1 ## C2 | t1_10*t1 ## C3 | t1_11*t1 ## C4 | t1_12*t1 ## Dim01 ~ 0*1 ## Dim02 ~ 0*1 ## Dim03 ~ 0*1 ## Dim01 ~~ Cov_11*Dim01 ## Dim02 ~~ Cov_22*Dim02 ## Dim03 ~~ Cov_33*Dim03 ## Dim01 ~~ Cov_12*Dim02 ## Dim01 ~~ Cov_13*Dim03 ## Dim02 ~~ Cov_23*Dim03 # model fit mirt::M2(mres) # residual statistics residuals(mres,type="LD") # item fit mirt::itemfit(mres) #************************************** #*** Model 4: 3-dimensional 2PL model #************************************** # estimation in TAM mod <- TAM::tam.mml.2pl( resp=dat, Q=Q, control=list(snodes=1000,maxiter=30) ) summary(mod) # mirt conversion res <- sirt::tam2mirt(mod) mres <- res$mirt # generated lavaan syntax cat(res$lavaan.syntax.fixed) cat(res$lavaan.syntax.freed) # write lavaan syntax on disk sink( "mod4_lav_freed.txt", split=TRUE ) cat(res$lavaan.syntax.freed) sink() # some statistics from mirt print(mres) summary(mres) mirt::M2(mres) mirt::residuals(mres) mirt::itemfit(mres) # estimate mirt model by using the generated lavaan syntax with freed parameters res2 <- sirt::lavaan2mirt( dat, res$lavaan.syntax.freed, technical=list(NCYCLES=3), verbose=TRUE) # use only few cycles for illustrational purposes mirt.wrapper.coef(res2$mirt) summary(res2$mirt) print(res2$mirt) ############################################################################# # EXAMPLE 4: mirt conversions for polytomous dataset data.big5 ############################################################################# data(data.big5) # select some items items <- c( grep( "O", colnames(data.big5), value=TRUE )[1:6], grep( "N", colnames(data.big5), value=TRUE )[1:4] ) # O3 O8 O13 O18 O23 O28 N1 N6 N11 N16 dat <- data.big5[, items ] library(psych) psych::describe(dat) library(TAM) #****************** #*** Model 1: Partial credit model in TAM mod1 <- TAM::tam.mml( dat[,1:6] ) summary(mod1) # convert to mirt object mmod1 <- sirt::tam2mirt( mod1 ) rmod1 <- mmod1$mirt # coefficients in mirt coef(rmod1) mirt.wrapper.coef(rmod1) # model fit mirt::M2(rmod1) # item fit mirt::itemfit(rmod1) # plots plot(rmod1,type="trace") plot(rmod1, type="trace", which.items=1:4 ) mirt::itemplot(rmod1,"O3") #****************** #*** Model 2: Generalized partial credit model in TAM mod2 <- TAM::tam.mml.2pl( dat[,1:6], irtmodel="GPCM" ) summary(mod2) # convert to mirt object mmod2 <- sirt::tam2mirt( mod2 ) rmod2 <- mmod2$mirt # coefficients in mirt mirt.wrapper.coef(rmod2) # model fit mirt::M2(rmod2) # item fit mirt::itemfit(rmod2) }