Learn R Programming

CDM (version 2.7-7)

equivalent.dina: Determination of a Statistically Equivalent DINA Model

Description

This function determines a statistically equivalent DINA model given a Q-matrix using the method of von Davier (2014). Thereby, the dimension of the skill space is expanded, but in the reparametrized version, the Q-matrix has a simple structure or the IRT model is no longer be conjuctive (like in DINA) due to a redefinition of the skill space.

Usage

equivalent.dina(q.matrix, reparametrization = "B")

Arguments

q.matrix
The Q-matrix (see din)
reparametrization
The used reparametrization (see von Davier, 2013). A and B are possible reparametrizations.

Value

  • A list with following entries
  • q.matrixOriginal Q-matrix
  • q.matrix.astReparametrized Q-matrix
  • alphaOriginal skill space
  • alpha.astReparametrized skill space

References

von Davier, M. (2014). The DINA model as a constrained general diagnostic model: Two variants of a model equivalency. British Journal of Mathematical and Statistical Psychology, 67, 49-71.

Examples

Run this code
# define a Q-matrix
Q <- matrix( c( 1,0,0 ,  0,1,0 , 
        0,0,1,   1,0,1 ,  1,1,1 ) , byrow=TRUE , ncol=3 )
Q <- Q[ rep(1:(nrow(Q)),each=2) , ]

# equivalent DINA model (using the default reparametrization B)
res1 <- equivalent.dina( q.matrix=Q )
res1

# equivalent DINA model (reparametrization A)
res2 <- equivalent.dina( q.matrix=Q , reparametrization="A")
res2

# simulate data
set.seed(789)
D <- ncol(Q)
mean.alpha <- c( -.5 , .5 , 0  )
r1 <- .5 ; Sigma.alpha <- matrix( r1 , D , D ) + diag(1-r1,D)
dat1 <- sim.din( N=2000 , q.matrix=Q , mean = mean.alpha , Sigma=Sigma.alpha )

# estimate DINA model
mod1 <- din( dat1$dat , q.matrix=Q )

# estimate equivalent DINA model
mod2 <- din( dat1$dat , q.matrix=res1$q.matrix.ast ,
            skillclasses = res1$alpha.ast)
# restricted skill space must be defined by using the argument 'skillclasses'

# compare model summaries
summary(mod2)
summary(mod1)

# compare estimated item parameters
cbind( mod2$coef , mod1$coef )

# compare estimated skill class probabilities
round( cbind( mod2$attribute.patt, mod1$attribute.patt ) , 4 )

Run the code above in your browser using DataLab