###################################################################
# EXAMPLE 1: Simulated DINA data
# different condensation rules
###################################################################
data(sim.dina)
#***
# Model 1: estimation of the GDINA model (identity link)
mod1 <- gdina( data = sim.dina , q.matrix = sim.qmatrix , maxit=700)
summary(mod1)
#***
# Model 2: estimation of the DINA model with gdina function
mod2 <- gdina( data = sim.dina , q.matrix = sim.qmatrix , rule="DINA")
summary(mod2)
#***
# Model 3: compare results with din function
mod2b <- din( data = sim.dina , q.matrix = sim.qmatrix , rule="DINA")
summary(mod2b)
cbind( mod2$coef , mod2b$coef )
#***
# Model 4: DINA model with logit link
mod4 <- gdina( data = sim.dina , q.matrix = sim.qmatrix , maxit= 20 ,
rule="DINA" , linkfct = "logit" )
summary(mod4)
#***
# Model 5: DINA model log link
mod5 <- gdina( data = sim.dina , q.matrix = sim.qmatrix , maxit=100 ,
rule="DINA" , linkfct = "log" )
summary(mod5)
#***
# Model 6: RRUM model
mod6 <- gdina( data = sim.dina, q.matrix = sim.qmatrix, maxit=100, rule="RRUM")
summary(mod6)
#***
# Model 7: Higher order GDINA model
mod7 <- gdina( data = sim.dina, q.matrix = sim.qmatrix, maxit=100, HOGDINA=1)
summary(mod7)
#***
# Model 8: Independence GDINA model
mod8 <- gdina( data = sim.dina, q.matrix = sim.qmatrix, maxit=100, HOGDINA=0)
summary(mod8)
###################################################################
# EXAMPLE 2: Simulated DINO data
# additive cognitive diagnosis model
# with different link functions
###################################################################
#***
# Model 1: additive cognitive diagnosis model (ACDM; identity link)
mod1 <- gdina( data=sim.dino, q.matrix=sim.qmatrix,
rule="ACDM")
summary(mod1)
#***
# Model 2: ACDM logit link
mod2 <- gdina( data=sim.dino, q.matrix=sim.qmatrix,
rule="ACDM", linkfct="logit" )
summary(mod2)
#***
# Model 3: ACDM log link
mod3 <- gdina( data=sim.dino, q.matrix=sim.qmatrix,
rule="ACDM", linkfct="log" )
summary(mod3)
#***
# Model 4: Different condensation rules per item
I <- 9 # number of items
rule <- rep( "GDINA" , I )
rule[1] <- "DINO" # 1st item: DINO model
rule[7] <- "GDINA2" # 7th item: GDINA model with first-
# and second-order interactions
rule[8] <- "ACDM" # 8ht item: additive CDM
rule[9] <- "DINA" # 9th item: DINA model
mod4 <- gdina( data=sim.dino, q.matrix=sim.qmatrix, rule=rule )
summary(mod4)
###################################################################
# EXAMPLE 3: Model with user-specified design matrices
###################################################################
# do a preliminary analysis and modify obtained design matrices
mod0 <- gdina( data = sim.dino , q.matrix = sim.qmatrix , maxit=1)
# extract default design matrices
Mj <- mod0$Mj
Mj.user <- Mj # these user defined design matrices are modified.
#~~~
# For the second item, the following model should hold
# X1 ~ V2 + V2*V3
mj <- Mj[[2]][[1]]
mj.lab <- Mj[[2]][[2]]
mj <- mj[,-3]
mj.lab <- mj.lab[-3]
Mj.user[[2]] <- list( mj , mj.lab )
# [[1]]
# [,1] [,2] [,3]
# [1,] 1 0 0
# [2,] 1 1 0
# [3,] 1 0 0
# [4,] 1 1 1
# [[2]]
# [1] "0" "1" "1-2"
#~~~
# For the eight item an equality constraint should hold
# X8 ~ a*V2 + a*V3 + V2*V3
mj <- Mj[[8]][[1]]
mj.lab <- Mj[[8]][[2]]
mj[,2] <- mj[,2] + mj[,3]
mj <- mj[,-3]
mj.lab <- c("0" , "1=2" , "1-2" )
Mj.user[[8]] <- list( mj , mj.lab )
Mj.user
mod <- gdina( data = sim.dino , q.matrix = sim.qmatrix ,
Mj = Mj.user , maxit=200 )
summary(mod)
###################################################################
# EXAMPLE 4: Design matrix for delta parameters
###################################################################
#~~~
# estimate an initial model
mod0 <- gdina( data = sim.dino , q.matrix = sim.qmatrix ,
rule="ACDM" , maxit=1)
# extract coefficients
c0 <- mod0$coef
I <- 9 # number of items
delta.designmatrix <- matrix( 0 , nrow= nrow(c0) , ncol = nrow(c0) )
diag( delta.designmatrix) <- 1
# set intercept of item 1 and item 3 equal to each other
delta.designmatrix[ 7 , 1 ] <- 1 ; delta.designmatrix[,7] <- 0
# set loading of V1 of item1 and item 3 equal
delta.designmatrix[ 8 , 2 ] <- 1 ; delta.designmatrix[,8] <- 0
delta.designmatrix <- delta.designmatrix[ , -c(7:8) ]
# exclude original parameters with indices 7 and 8
#***
# Model 1: ACDM with designmatrix
mod1 <- gdina( data = sim.dino , q.matrix = sim.qmatrix , rule="ACDM" ,
delta.designmatrix = delta.designmatrix )
summary(mod1)
#***
# Model 2: Same model, but with logit link instead of identity link function
mod2 <- gdina( data = sim.dino , q.matrix = sim.qmatrix , rule="ACDM" ,
delta.designmatrix = delta.designmatrix ,
maxit=100 , linkfct = "logit")
summary(mod2)
###################################################################
# SIMULATED EXAMPLE 5: Multiple group estimation
###################################################################
# simulate data
set.seed(9279)
N1 <- 200 ; N2 <- 100 # group sizes
I <- 10 # number of items
q.matrix <- matrix(0,I,2) # create Q matrix
q.matrix[1:7,1] <- 1 ; q.matrix[ 5:10,2] <- 1
# simulate first group
dat1 <- sim.din(N1, q.matrix=q.matrix , mean = c(0,0) )$dat
# simulate second group
dat2 <- sim.din(N2, q.matrix=q.matrix , mean = c(-.3 , -.7) )$dat
# merge data
dat <- rbind( dat1 , dat2 )
# group indicator
group <- c( rep(1,N1) , rep(2,N2) )
# estimate GDINA model
mod <- gdina( data = dat , q.matrix = q.matrix , group= group)
summary(mod)
# estimate DINA model
mod2 <- gdina( data = dat , q.matrix = q.matrix ,
group= group , rule="DINA")
summary(mod2)
###################################################################
# EXAMPLE 6: User specified reduced skill space
###################################################################
# Some correlations between attributes should be set to zero.
q.matrix <- expand.grid( c(0,1) , c(0,1) , c(0,1) , c(0,1) )
colnames(q.matrix) <- colnames( paste("Attr" , 1:4 ,sep=""))
q.matrix <- q.matrix[ -1 , ]
Sigma <- matrix( .5 , nrow=4 , ncol=4 )
diag(Sigma) <- 1
Sigma[3,2] <- Sigma[2,3] <- 0 # set correlation of attribute A2 and A3 to zero
dat <- sim.din( N=1000 , q.matrix = q.matrix , Sigma = Sigma)$dat
#~~~ Step 1: initial estimation
mod1a <- gdina( data=dat , q.matrix = q.matrix , maxit= 1 , rule="DINA")
# estimate also "full" model
mod1 <- gdina( data=dat , q.matrix = q.matrix , rule="DINA")
#~~~ Step2: modify designmatrix for reduced skillspace
Z.skillspace <- data.frame( mod1a$Z.skillspace )
# set correlations of A2/A4 and A3/A4 to zero
vars <- c("A2_A3","A2_A4")
for (vv in vars){ Z.skillspace[,vv] <- NULL }
#~~~ Step 3: estimate model with reduced skillspace
mod2 <- gdina( data=dat , q.matrix = q.matrix ,
Z.skillspace=Z.skillspace , rule="DINA")
#~~~ eliminate all covariances
Z.skillspace <- data.frame( mod1$Z.skillspace )
colnames(Z.skillspace)
Z.skillspace <- Z.skillspace[ , -
grep( "_" , colnames(Z.skillspace ) , fixed=TRUE)]
colnames(Z.skillspace)
mod3 <- gdina( data=dat , q.matrix = q.matrix ,
Z.skillspace=Z.skillspace , rule="DINA")
summary(mod1); summary(mod2); summary(mod3)
Run the code above in your browser using DataLab