Wrapper Function for TAM Language
This function is a convenience wrapper function for
several item response models in TAM. Using the
tamaanify
framework, multidimensional item response models,
latent class models, located and ordered latent class models
and mixture item response models can be estimated.
tamaan(tammodel, resp, tam.method=NULL, control=list(), doparse=TRUE, ...) ## S3 method for class 'tamaan' summary(object,file=NULL,...) ## S3 method for class 'tamaan' print(x,...)
tammodel |
String for specification in TAM, see also |
resp |
Dataset with item responses |
tam.method |
One of the TAM methods |
control |
List with control arguments. See |
doparse |
Optional logical indicating whether |
... |
Further arguments to be passed to
|
object |
Object of class |
file |
A file name in which the summary output will be written |
x |
Object of class |
Values generated by tam.mml
, tam.mml.2pl
or tam.mml.3pl
. In addition, the list also contains the (optional) entries
tamaanify |
Output produced by |
lcaprobs |
Matrix with probabilities for latent class models |
locs |
Matrix with cluster locations (for |
probs_MIXTURE |
Class probabilities (for |
moments_MIXTURE |
Distribution parameters (for |
itempartable_MIXTURE |
Item parameters (for |
ind_classprobs |
Individual posterior probabilities for
latent classes (for |
See tamaanify
for more details about model specification
using tammodel
.
See tam.mml
or tam.mml.3pl
for more examples.
############################################################################# # EXAMPLE 1: Examples dichotomous data data.read ############################################################################# library(sirt) data(data.read,package="sirt") dat <- data.read #********************************************************************* #*** Model 1: Rasch model tammodel <- " LAVAAN MODEL: F1=~ A1__C4 F1 ~~ F1 ITEM TYPE: ALL(Rasch); " # estimate model mod1 <- TAM::tamaan( tammodel, resp=dat) summary(mod1) ## Not run: #********************************************************************* #*** Model 2: 2PL model with some selected items tammodel <- " LAVAAN MODEL: F1=~ A1__B1 + B3 + C1__C3 F1 ~~ F1 " mod2 <- TAM::tamaan( tammodel, resp=dat) summary(mod2) #********************************************************************* #*** Model 3: Multidimensional IRT model tammodel <- " LAVAAN MODEL: G=~ A1__C4 F1=~ A1__B4 F2=~ C1__C4 F1 ~~ F2 # specify fixed entries in covariance matrix F1 ~~ 1*F1 F2 ~~ 1*F2 G ~~ 0*F1 G ~~ 0.3*F2 G ~~ 0.7*G " mod3 <- TAM::tamaan( tammodel, resp=dat, control=list(maxiter=30)) summary(mod3) #********************************************************************* #*** Model 4: Some linear constraints for item slopes and intercepts tammodel <- " LAVAAN MODEL: F=~ lam1__lam10*A1__C2 F=~ 0.78*C3 F ~~ F A1 | a1*t1 A2 | a2*t1 A3 | a3*t1 A4 | a4*t1 B1 | b1*t1 B2 | b2*t1 B3 | b3*t1 C1 | t1 MODEL CONSTRAINT: # defined parameters # only linear combinations are permitted b2==1.3*b1 + (-0.6)*b3 a1==q1 a2==q2 + t a3==q1 + 2*t a4==q2 + 3*t # linear constraints for loadings lam2==1.1*lam1 lam3==0.9*lam1 + (-.1)*lam0 lam8==lam0 lam9==lam0 " mod4 <- TAM::tamaan( tammodel, resp=dat, control=list(maxiter=5) ) summary(mod4) #********************************************************************* #*** Model 5: Latent class analysis with three classes tammodel <- " ANALYSIS: TYPE=LCA; NCLASSES(3); # 3 classes NSTARTS(5,20); # 5 random starts with 20 iterations LAVAAN MODEL: F=~ A1__C4 " mod5 <- TAM::tamaan( tammodel, resp=dat, control=list(maxiter=100) ) summary(mod5) #********************************************************************* #*** Model 6: Ordered latent class analysis with three classes tammodel <- " ANALYSIS: TYPE=OLCA; NCLASSES(3); # 3 classes NSTARTS(20,40); # 20 random starts with 40 iterations LAVAAN MODEL: F=~ A1__C4 " mod6 <- TAM::tamaan( tammodel, dat ) summary(mod6) #********************************************************************* #*** Model 7: Unidimensional located latent class model with three classes tammodel <- " ANALYSIS: TYPE=LOCLCA; NCLASSES(3) NSTARTS(10,40) LAVAAN MODEL: F=~ A1__C4 B2 | 0*t1 " mod7 <- TAM::tamaan( tammodel, resp=dat) summary(mod7) #********************************************************************* #*** Model 8: Two-dimensional located latent class analysis with some # priors and equality constraints among thresholds tammodel <- " ANALYSIS: TYPE=LOCLCA; NCLASSES(4); NSTARTS(10,20); LAVAAN MODEL: AB=~ A1__B4 C=~ C1__C4 A1 | a1diff*t1 B2 | 0*t1 C2 | 0*t1 B1 | a1diff*t1 MODEL PRIOR: # prior distributions for cluster locations DO2(1,4,1,1,2,1) Cl%1_Dim%2 ~ N(0,2); DOEND " # estimate model mod8 <- TAM::tamaan( tammodel, resp=dat ) summary(mod8) #********************************************************************* #*** Model 9: Two-dimensional model with constraints on parameters tammodel <- " LAVAAN MODEL: FA=~ A1+b*A2+A3+d*A4 FB=~ B1+b*B2+B3+d*B4 FA ~~ 1*FA FA ~~ FB FB ~~ 1*FB A1 | c*t1 B1 | c*t1 A2 | .7*t1 " # estimate model mod9 <- TAM::tamaan( tammodel, resp=dat, control=list(maxiter=30) ) summary(mod9) ############################################################################# # EXAMPLE 2: Examples polytomous data | data.Students ############################################################################# library(CDM) data( data.Students, package="CDM") dat <- data.Students[,3:13] ## > colnames(dat) ## [1] "act1" "act2" "act3" "act4" "act5" "sc1" "sc2" "sc3" "sc4" "mj1" "mj2" #********************************************************************* #*** Model 1: Two-dimensional generalized partial credit model tammodel <- " LAVAAN MODEL: FA=~ act1__act5 FS=~ sc1__sc4 FA ~~ 1*FA FS ~~ 1*FS FA ~~ FS " # estimate model mod1 <- TAM::tamaan( tammodel, dat, control=list(maxiter=10) ) summary(mod1) #********************************************************************* #*** Model 2: Two-dimensional model, some constraints tammodel <- " LAVAAN MODEL: FA=~ a1__a4*act1__act4 + 0.89*act5 FS=~ 1*sc1 + sc2__sc4 FA ~~ FA FS ~~ FS FA ~~ FS # some equality constraints act1 + act3 | a13_t1 * t1 act1 + act3 | a13_t2 * t2 " # only create design matrices with tamaanify mod2 <- TAM::tamaanify( tammodel, dat ) mod2$lavpartable # estimate model (only few iterations as a test) mod2 <- TAM::tamaan( tammodel, dat, control=list(maxiter=10) ) summary(mod2) #********************************************************************* #*** Model 3: Two-dimensional model, some more linear constraints tammodel <- " LAVAAN MODEL: FA=~ a1__a5*act1__act5 FS=~ b1__b4*sc1__sc4 FA ~~ 1*FA FA ~~ FS FS ~~ 1*FS act1 + act3 | a13_t1 * t1 act1 + act3 | a13_t2 * t2 MODEL CONSTRAINT: a1==q0 a2==q0 a3==q0 + q1 a4==q2 a5==q2 + q1 " # estimate mod3 <- TAM::tamaan( tammodel, dat, control=list(maxiter=300 ) ) summary(mod3) #********************************************************************* #*** Model 4: Latent class analysis with three latent classes tammodel <- " ANALYSIS: TYPE=LCA; NCLASSES(3); # 3 classes NSTARTS(10,30); # 10 random starts with 30 iterations LAVAAN MODEL: F=~ act1__act5 " # estimate model mod4 <- TAM::tamaan( tammodel, resp=dat) summary(mod4) #********************************************************************* #*** Model 5: Partial credit model with "PCM2" parametrization # select data dat1 <- dat[, paste0("act",1:5) ] # specify tamaan model tammodel <- " LAVAAN MODEL: F=~ act1__act5 F ~~ F # use DO statement as shortages DO(1,5,1) act% | b%_1 * t1 act% | b%_2 * t2 DOEND MODEL CONSTRAINT: DO(1,5,1) b%_1==delta% + tau%_1 b%_2==2*delta% DOEND ITEM TYPE: ALL(PCM) " # estimate model mod5 <- TAM::tamaan( tammodel, dat1 ) summary(mod5) # compare with PCM2 parametrization in tam.mml mod5b <- TAM::tam.mml( dat1, irtmodel="PCM2" ) summary(mod5b) #********************************************************************* #*** Model 6: Rating scale model # select data dat1 <- dat[, paste0("sc",1:4) ] psych::describe(dat1) # specify tamaan model tammodel <- " LAVAAN MODEL: F=~ sc1__sc4 F ~~ F # use DO statement as shortages DO(1,4,1) sc% | b%_1 * t1 sc% | b%_2 * t2 sc% | b%_3 * t3 DOEND MODEL CONSTRAINT: DO(1,4,1) b%_1==delta% + step1 b%_2==2*delta% + step1 + step2 b%_3==3*delta% DOEND ITEM TYPE: ALL(PCM) " # estimate model mod6 <- TAM::tamaan( tammodel, dat1 ) summary(mod6) # compare with RSM in tam.mml mod6b <- TAM::tam.mml( dat1, irtmodel="RSM" ) summary(mod6b) #********************************************************************* #*** Model 7: Partial credit model with Fourier basis for # item intercepts (Thissen, Cai & Bock, 2010) # see ?tamaanify manual # define tamaan model tammodel <- " LAVAAN MODEL: mj=~ mj1__mj4 mj ~~ 1*mj ITEM TYPE: mj1(PCM,2) mj2(PCM,3) mj3(PCM) mj4(PCM,1) " # estimate model mod7 <- TAM::tamaan( tammodel, dat ) summary(mod7) # -> This function can also be applied for the generalized partial credit # model (GPCM). ############################################################################# # EXAMPLE 3: Rasch model and mixture Rasch model (Geiser & Eid, 2010) ############################################################################# data(data.geiser, package="TAM") dat <- data.geiser #********************************************************************* #*** Model 1: Rasch model tammodel <- " LAVAAN MODEL: F=~ mrt1__mrt6 F ~~ F ITEM TYPE: ALL(Rasch); " mod1 <- TAM::tamaan( tammodel, resp=dat ) summary(mod1) #********************************************************************* #*** Model 2: Mixed Rasch model with two classes tammodel <- " ANALYSIS: TYPE=MIXTURE ; NCLASSES(2); NSTARTS(20,25); LAVAAN MODEL: F=~ mrt1__mrt6 F ~~ F ITEM TYPE: ALL(Rasch); " mod2 <- TAM::tamaan( tammodel, resp=dat ) summary(mod2) # plot item parameters ipars <- mod2$itempartable_MIXTURE[ 1:6, ] plot( 1:6, ipars[,3], type="o", ylim=c(-3,2), pch=16, xlab="Item", ylab="Item difficulty") lines( 1:6, ipars[,4], type="l", col=2, lty=2) points( 1:6, ipars[,4], col=2, pch=2) # extract individual posterior distribution post2 <- IRT.posterior(mod2) str(post2) # num [1:519, 1:30] 0.000105 0.000105 0.000105 0.000105 0.000105 ... # - attr(*, "theta")=num [1:30, 1:30] 1 0 0 0 0 0 0 0 0 0 ... # - attr(*, "prob.theta")=num [1:30, 1] 1.21e-05 2.20e-04 2.29e-03 1.37e-02 4.68e-02 ... # - attr(*, "G")=num 1 # There are 2 classes and 15 theta grid points for each class # The loadings of the theta grid on items are as follows mod2$E[1,2,,"mrt1_F_load_Cl1"] mod2$E[1,2,,"mrt1_F_load_Cl2"] # compute individual posterior probability for class 1 (first 15 columns) round( rowSums( post2[, 1:15] ), 3 ) # columns 16 to 30 refer to class 2 ## End(Not run)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.