sim.gdina.Rd
The function sim.gdina.prepare
creates necessary design matrices
Mj
, Aj
and necc.attr
. In most cases, only the list
of item parameters delta
must be modified by the user when
applying the simulation function sim.gdina
. The distribution of latent
classes \(\alpha\) is represented by an underlying multivariate normal distribution
\(\alpha^\ast\) for which a mean vector thresh.alpha
and a
covariance matrix cov.alpha
must be specified.
Alternatively, a matrix of skill classes alpha
can be given as an input.
Note that this version of sim.gdina
only works for dichotomous attributes.
sim.gdina(n, q.matrix, delta, link="identity", thresh.alpha=NULL,
cov.alpha=NULL, alpha=NULL, Mj, Aj, necc.attr)
sim.gdina.prepare( q.matrix )
Number of persons
Q-matrix (see sim.din
)
List with \(J\) entries where \(J\) is the number of items. Every list element corresponds to the parameter of an item.
Link function. Choices are identity
(default), logit
and log
.
Vector of thresholds (means) of \(\alpha^\ast\)
Covariance matrix of \(\alpha^\ast\)
Matrix of skill classes if they should not be simulated
Design matrix, see gdina
Design matrix, see gdina
List with \(J\) entries containing necessary attributes for each item
The output of sim.gdina
is a list with following entries:
Simulated item responses
Data frame with simulated attributes
Used Q-matrix
Used delta item parameters
Design matrices \(A_j\)
Design matrices \(M_j\)
Used link function
The function sim.gdina.prepare
possesses the following values as output
in a list: delta
, necc.attr
, Aj
and Mj
.
de la Torre, J. (2011). The generalized DINA model framework. Psychometrika, 76, 179--199.
#############################################################################
# EXAMPLE 1: Simulating the GDINA model
#############################################################################
n <- 50 # number of persons
# define Q-matrix
q.matrix <- matrix( c(1,1,0, 0,1,1, 1,0,1, 1,0,0,
0,0,1, 0,1,0, 1,1,1, 0,1,1, 0,1,1), ncol=3, byrow=TRUE)
# thresholds for attributes alpha^\ast
thresh.alpha <- c( .65, 0, -.30 )
# covariance matrix for alpha^\ast
cov.alpha <- matrix(1,3,3)
cov.alpha[1,2] <- cov.alpha[2,1] <- .4
cov.alpha[1,3] <- cov.alpha[3,1] <- .6
cov.alpha[3,2] <- cov.alpha[2,3] <- .8
# prepare design matrix by applying sim.gdina.prepare function
rp <- CDM::sim.gdina.prepare( q.matrix )
delta <- rp$delta
necc.attr <- rp$necc.attr
Aj <- rp$Aj
Mj <- rp$Mj
# define delta parameters
# intercept - main effects - second order interactions - ...
str(delta) #=> modify the delta parameter list which contains only zeroes as default
## List of 9
## $ : num [1:4] 0 0 0 0
## $ : num [1:4] 0 0 0 0
## $ : num [1:4] 0 0 0 0
## $ : num [1:2] 0 0
## $ : num [1:2] 0 0
## $ : num [1:2] 0 0
## $ : num [1:8] 0 0 0 0 0 0 0 0
## $ : num [1:4] 0 0 0 0
## $ : num [1:4] 0 0 0 0
delta[[1]] <- c( .2, .1, .15, .4 )
delta[[2]] <- c( .2, .3, .3, -.2 )
delta[[3]] <- c( .2, .2, .2, 0 )
delta[[4]] <- c( .15, .6 )
delta[[5]] <- c( .1, .7 )
delta[[6]] <- c( .25, .65 )
delta[[7]] <- c( .25, .1, .1, .1, 0, 0, 0, .25 )
delta[[8]] <- c( .2, 0, .3, -.1 )
delta[[9]] <- c( .2, .2, 0, .3 )
#******************************************
# Now, the "real simulation" starts
sim.res <- CDM::sim.gdina( n=n, q.matrix=q.matrix, delta=delta, link="identity",
thresh.alpha=thresh.alpha, cov.alpha=cov.alpha,
Mj=Mj, Aj=Aj, necc.attr=necc.attr)
# sim.res$data # simulated data
# sim.res$alpha # simulated alpha
if (FALSE) {
#############################################################################
# EXAMPLE 2: Simulation based on already estimated GDINA model for data.ecpe
#############################################################################
data(data.ecpe)
dat <- data.ecpe$data
q.matrix <- data.ecpe$q.matrix
#***
# (1) estimate GDINA model
mod <- CDM::gdina( data=dat[,-1], q.matrix=q.matrix )
#***
# (2) simulate data according to GDINA model
set.seed(977)
# prepare design matrix by applying sim.gdina.prepare function
rp <- CDM::sim.gdina.prepare( q.matrix )
necc.attr <- rp$necc.attr
# number of subjects to be simulated
n <- 3000
# simulate attribute patterns
probs <- mod$attribute.patt$class.prob # probabilities
patt <- mod$attribute.patt.splitted # response patterns
alpha <- patt[ sample( 1:(length(probs) ), n, prob=probs, replace=TRUE), ]
# simulate data using estimated item parameters
sim.res <- CDM::sim.gdina( n=n, q.matrix=q.matrix, delta=mod$delta, link="identity",
alpha=alpha, Mj=mod$Mj, Aj=mod$Aj, necc.attr=rp$necc.attr)
# extract data
dat <- sim.res$data
#############################################################################
# EXAMPLE 3: Simulation based on already estimated RRUM model for data.ecpe
#############################################################################
dat <- CDM::data.ecpe$data
q.matrix <- CDM::data.ecpe$q.matrix
#***
# (1) estimate reduced RUM model
mod <- CDM::gdina( data=dat[,-1], q.matrix=q.matrix, rule="RRUM" )
summary(mod)
#***
# (2) simulate data according to RRUM model
set.seed(977)
# prepare design matrix by applying sim.gdina.prepare function
rp <- CDM::sim.gdina.prepare( q.matrix )
necc.attr <- rp$necc.attr
# number of subjects to be simulated
n <- 5000
# simulate attribute patterns
probs <- mod$attribute.patt$class.prob # probabilities
patt <- mod$attribute.patt.splitted # response patterns
alpha <- patt[ sample( 1:(length(probs) ), n, prob=probs, replace=TRUE), ]
# simulate data using estimated item parameters
sim.res <- CDM::sim.gdina( n=n, q.matrix=q.matrix, delta=mod$delta, link=mod$link,
alpha=alpha, Mj=mod$Mj, Aj=mod$Aj, necc.attr=rp$necc.attr)
# extract data
dat <- sim.res$data
}