din.validate.qmatrix.Rd
Q-matrix entries can be modified by the Q-matrix validation method
of de la Torre (2008). After estimating a mixed DINA/DINO model
using the din
function, item parameters and the item
discrimination parameters \(IDI_j\) are recalculated. Q-matrix rows
are determined by maximizing the estimated item discrimination index
\(IDI_j=1-s_j -g_j\).
din.validate.qmatrix(object, IDI_diff=.02, print=TRUE)
Object of class din
Minimum difference in IDI values for choosing a new Q-matrix vector
An optional logical indicating whether the function should print the progress of iteration in the estimation process.
A list with following entries:
Estimated parameters by applying Q-matrix modifications
A shortened matrix of coef.modified
.
Only Q-matrix rows which increase the \(IDI\) are displayed.
The proposed Q-matrix by Q-matrix validation.
Chiu, C. Y. (2013). Statistical refinement of the Q-matrix in cognitive diagnosis. Applied Psychological Measurement, 37, 598-618.
de la Torre, J. (2008). An empirically based method of Q-matrix validation for the DINA model: Development and applications. Journal of Educational Measurement, 45, 343-362.
The mixed DINA/DINO model can be estimated with din
.
See Chiu (2013) for an alternative estimation approach based on
residual sum of squares which is implemented
NPCD::Qrefine
function in the NPCD package.
See the GDINA::Qval
function in the
GDINA package for extended functionality.
#############################################################################
# EXAMPLE 1: Detection of a mis-specified Q-matrix
#############################################################################
set.seed(679)
# specify true Q-matrix
q.matrix <- matrix( 0, 12, 3 )
q.matrix[1:3,1] <- 1
q.matrix[4:6,2] <- 1
q.matrix[7:9,3] <- 1
q.matrix[10,] <- c(1,1,0)
q.matrix[11,] <- c(1,0,1)
q.matrix[12,] <- c(0,1,1)
# simulate data
dat <- CDM::sim.din( N=4000, q.matrix)$dat
# incorrectly modify Q-matrix rows 1 and 10
Q1 <- q.matrix
Q1[1,] <- c(1,1,0)
Q1[10,] <- c(1,0,0)
# estimate DINA model
mod <- CDM::din( dat, q.matr=Q1, rule="DINA")
# apply Q-matrix validation
res <- CDM::din.validate.qmatrix( mod )
## item itemindex Skill1 Skill2 Skill3 guess slip IDI qmatrix.orig IDI.orig delta.IDI max.IDI
## I001 1 1 0 0 0.309 0.251 0.440 0 0.431 0.009 0.440
## I010 10 1 1 0 0.235 0.329 0.437 0 0.320 0.117 0.437
## I010 10 1 1 1 0.296 0.301 0.403 0 0.320 0.083 0.437
##
## Proposed Q-matrix:
##
## Skill1 Skill2 Skill3
## Item1 1 0 0
## Item2 1 0 0
## Item3 1 0 0
## Item4 0 1 0
## Item5 0 1 0
## Item6 0 1 0
## Item7 0 0 1
## Item8 0 0 1
## Item9 0 0 1
## Item10 1 1 0
## Item11 1 0 1
## Item12 0 1 1
if (FALSE) {
#*****************
# Q-matrix estimation ('Qrefine') in the NPCD package
# See Chiu (2013, APM).
#*****************
library(NPCD)
Qrefine.out <- NPCD::Qrefine( dat, Q1, gate="AND", max.ite=50)
print(Qrefine.out)
## The modified Q-matrix
## Attribute 1 Attribute 2 Attribute 3
## Item 1 1 0 0
## Item 2 1 0 0
## Item 3 1 0 0
## Item 4 0 1 0
## Item 5 0 1 0
## Item 6 0 1 0
## Item 7 0 0 1
## Item 8 0 0 1
## Item 9 0 0 1
## Item 10 1 1 0
## Item 11 1 0 1
## Item 12 0 1 1
##
## The modified entries
## Item Attribute
## [1,] 1 2
## [2,] 10 2
plot(Qrefine.out)
}