| Type: | Package |
| Title: | The Generalized DINA Model Framework |
| Version: | 2.9.12 |
| Date: | 2025-07-01 |
| Description: | A set of psychometric tools for cognitive diagnosis modeling based on the generalized deterministic inputs, noisy and gate (G-DINA) model by de la Torre (2011) <doi:10.1007/s11336-011-9207-7> and its extensions, including the sequential G-DINA model by Ma and de la Torre (2016) <doi:10.1111/bmsp.12070> for polytomous responses, and the polytomous G-DINA model by Chen and de la Torre <doi:10.1177/0146621613479818> for polytomous attributes. Joint attribute distribution can be independent, saturated, higher-order, loglinear smoothed or structured. Q-matrix validation, item and model fit statistics, model comparison at test and item level and differential item functioning can also be conducted. A graphical user interface is also provided. For tutorials, please check Ma and de la Torre (2020) <doi:10.18637/jss.v093.i14>, Ma and de la Torre (2019) <doi:10.1111/emip.12262>, Ma (2019) <doi:10.1007/978-3-030-05584-4_29> and de la Torre and Akbay (2019). |
| License: | GPL-3 |
| LazyData: | TRUE |
| Depends: | R (≥ 3.5) |
| Imports: | alabama, foreach, graphics, ggplot2, MASS, numDeriv, nloptr,Rcpp (≥ 0.12.1), Rsolnp, stats, shiny, shinydashboard, utils |
| Suggests: | CDM, cdmTools, doRNG, doParallel, Matrix, testthat, poLCA,stringr, knitr, rmarkdown |
| LinkingTo: | Rcpp, RcppArmadillo |
| URL: | https://github.com/Wenchao-Ma/GDINA,https://wenchao-ma.github.io/GDINA/ |
| BugReports: | https://github.com/Wenchao-Ma/GDINA/issues |
| RoxygenNote: | 7.3.2 |
| Encoding: | UTF-8 |
| NeedsCompilation: | yes |
| Author: | Wenchao Ma [aut, cre, cph], Jimmy de la Torre [aut, cph], Miguel Sorrel [ctb], Zhehan Jiang [ctb], Pablo Najera [ctb] |
| Maintainer: | Wenchao Ma <wma@umn.edu> |
| VignetteBuilder: | knitr |
| Collate: | 'CA.R' 'CR.R' 'DTM.R' 'ExportedFuncs.R' 'GDINA.R' 'GDI.R''GDINA-package.R' 'GMSCDM.R' 'HO.R' 'ILCA.R' 'M2.R' 'MCmodel.R''Mstep.R' 'Mstep_DTM.R' 'MultipleGroup_Estimation.R''RcppExports.R' 'SingleGroup_Estimation.R' 'anova.GDINA.R''autoGDINA.R' 'bootSE.R' 'coef.R' 'dif.R' 'simGDINA.R''itemfit.R' 'modelcomp.R' 'extract.R' 'itemfitPD.R''itemparm.GDINA.R' 'monocheck.R' 'personparm.GDINA.R''plotIRF.GDINA.R' 's3GDINA.R' 'print.GDINA.R' 'realdata_ECPE.R''realdata_Tatsuoka1990.R' 'score.R' 'sim10GDINA.R''sim10MCDINA.R' 'sim10MCDINA2.R' 'sim20seqGDINA.R''sim21seqDINA.R' 'sim30DINA.R' 'sim30GDINA.R' 'sim30pGDINA.R''startGDINA.R' 'structuralparm.R' 'summary.GDINA.R' 'utils.R''zzz.R' |
| Packaged: | 2025-07-02 11:19:38 UTC; wma |
| Repository: | CRAN |
| Date/Publication: | 2025-07-02 17:00:02 UTC |
The Generalized DINA Model Framework
Description
For conducting CDM analysis within the G-DINA model framework
Details
This package (Ma & de la Torre, 2020a) provides a framework for a series of cognitively diagnostic analysesfor dichotomous and polytomous responses.
Various cognitivediagnosis models (CDMs) can be calibrated using theGDINAfunction, including the G-DINA model (de la Torre, 2011), the deterministic inputs,noisy and gate (DINA; de la Torre, 2009; Junker & Sijtsma, 2001) model,the deterministic inputs, noisy or gate (DINO; Templin & Henson, 2006)model, the reduced reparametrized unified model (R-RUM; Hartz, 2002),the additive CDM (A-CDM; de la Torre, 2011), and the linear logisticmodel (LLM; Maris, 1999), the multiple-strategy DINA model (de la Torre, & Douglas, 2008) and models definedby users under the G-DINA framework using different link functions and designmatrices (de la Torre, 2011). Note that the LLM is also calledcompensatory RUM and the RRUM is equivalent to the generalized NIDA model.
For ordinal and nominal responses,the sequential G-DINA model (Ma, & de la Torre, 2016) can be fitted and most of theaforementioned CDMs can be used as the processing functions (Ma, & de la Torre, 2016) at the category level.Different CDMs can be assigned to different items within a single assessment.Item parameters are estimated using the MMLE/EM algorithm. Details about the estimation algorithmcan be found in Ma and de la Torre (2020).The joint attribute distribution can be modeled using an independent model,a higher-order IRT model (de la Torre, & Douglas, 2004), a loglinear model (Xu & von Davier, 2008),a saturated model or a hierarchical structures (e.g., linear, divergent). Monotonicity constraints for item/category successprobabilities can also be specified.
In addition, to handle multiple strategies, generalized multiple-strategy CDMs for dichotomous response (Ma & Guo, 2019) can be fitted usingGMSCDM function anddiagnostic tree model (Ma, 2019) can also be estimated usingDTM function for polytomous responses. Note that these functions are experimental, and are expected to be further extendedin the future. Other diagnostic approaches include the multiple-choice model (de la Torre, 2009) and an iterative latent class analysis (ILCA; Jiang, 2019).
Various Q-matrix validation methods (de la Torre, & Chiu, 2016; de la Torre & Ma, 2016; Ma & de la Torre, 2020b; Najera, Sorrel, & Abad, 2019; seeQval),model-data fit statistics (Chen, de la Torre, & Zhang, 2013; Hansen, Cai, Monroe, & Li, 2016; Liu, Tian, & Xin, 2016; Ma, 2020; seemodelfit anditemfit),model comparison at test and item level (de la Torre, 2011; de la Torre, & Lee, 2013;Ma, Iaconangelo, & de la Torre, 2016; Ma & de la Torre, 2019; Sorrel, Abad, Olea, de la Torre, & Barrada, 2017; Sorrel, de la Torre, Abad, & Olea, 2017; seemodelcomp),and differential item functioning (Hou, de la Torre, & Nandakumar, 2014; Ma, Terzi, Lee, & de la Torre, 2017;seedif) can also be conducted.
To use the graphical user interface, checkstartGDINA.
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.eduJimmy de la Torre, The University of Hong Kong
See Also
CDM for estimating G-DINA model and a set of other CDMs;ACTCD andNPCDfor nonparametric CDMs;dina for DINA model in Bayesian framework
Calculate classification accuracy
Description
This function calculates test-, pattern- and attribute-level classification accuracy indices based on GDINA estimates fromtheGDINA function using approaches in Iaconangelo (2017) and Wang, Song, Chen, Meng, and Ding (2015).It is only applicable for dichotomous attributes.
Usage
CA(GDINA.obj, what = "MAP")Arguments
GDINA.obj | estimated GDINA object returned from |
what | what attribute estimates are used? Default is |
Value
a list with elements
- tau
estimated test-level classification accuracy, see Iaconangelo (2017, Eq 2.2)
- tau_l
estimated pattern-level classification accuracy, see Iaconangelo (2017, p. 13)
- tau_k
estimated attribute-level classification accuracy, see Wang, et al (2015, p. 461 Eq 6)
- CCM
Conditional classification matrix, see Iaconangelo (2017, p. 13)
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.edu
References
Iaconangelo, C.(2017).Uses of Classification Error Probabilities in the Three-Step Approach to Estimating Cognitive Diagnosis Models. (Unpublished doctoral dissertation). New Brunswick, NJ: Rutgers University.
Ma, W., & de la Torre, J. (2020). GDINA: An R Package for Cognitive Diagnosis Modeling.Journal of Statistical Software, 93(14), 1-26.
Wang, W., Song, L., Chen, P., Meng, Y., & Ding, S. (2015). Attribute-Level and Pattern-Level Classification Consistency and Accuracy Indices for Cognitive Diagnostic Assessment.Journal of Educational Measurement, 52 , 457-476.
Examples
## Not run: dat <- sim10GDINA$simdatQ <- sim10GDINA$simQfit <- GDINA(dat = dat, Q = Q, model = "GDINA")fitCA(fit)## End(Not run)Classification Rate Evaluation
Description
This function evaluates the classification rates for two sets of attribute profiles
Usage
ClassRate(att1, att2)Arguments
att1 | a matrix or data frame of attribute profiles |
att2 | a matrix or data frame of attribute profiles |
Value
a list with the following components:
- PCA
the proportion of correctly classified attributes (i.e., attribute level classification rate)
- PCV
a vector giving the proportions of correctly classified attribute vectors (i.e., vector level classification rate).The fist element is the proportion of at least one attribute in the vector are correctly identified; the secondelement is the proportion of at least two attributes in the vector are correctly identified; and so forth. The lastelement is the proportion of all elements in the vector are correctly identified.
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.edu
References
Ma, W., & de la Torre, J. (2020). GDINA: An R Package for Cognitive Diagnosis Modeling.Journal of Statistical Software, 93(14), 1-26.
Examples
## Not run: N <- 2000# model does not matter if item parameter is probability of successQ <- sim30GDINA$simQJ <- nrow(Q)gs <- matrix(0.1,J,2)set.seed(12345)sim <- simGDINA(N,Q,gs.parm = gs)GDINA.est <- GDINA(sim$dat,Q)CR <- ClassRate(sim$attribute,personparm(GDINA.est))CR## End(Not run)Diagnostic multiple-strategy CDMs
Description
This function estimates the diagnostic tree model (Ma, 2018) for polytomous responses with multiple strategies.It can also handle various polytomous models discussed in Gao, et al. (2021).
Usage
DTM( dat, Qc, type = "tree", linkfunc = "logit", eq.const = FALSE, delta = NULL, Tmatrix = NULL, conv.crit = 0.001, conv.type = "pr", maxitr = 1000)Arguments
dat | A required |
Qc | A required |
type | what type of model is to be fit; can be |
linkfunc | link function used; |
eq.const | whether effects are constrained to be equal across categories; |
delta | initial item parameters |
Tmatrix | The mapping matrix showing the relation between the OBSERVED responses (rows) and the PSEDUO items (columns);The first column gives the observed responses. |
conv.crit | The convergence criterion for max absolute change in item parameters. |
conv.type | convergence criteria; Can be |
maxitr | The maximum iterations allowed. |
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.edu
References
Gao, X., Ma, W., Wang, D., Cai, Y., & Tu, D. (2021). A class of cognitive diagnosis models for polytomous data.Journal of Educational and Behavioral Statistics, 46, 297-322.Ma, W. (2018). A Diagnostic Tree Model for Polytomous Responses with Multiple Strategies.British Journal of Mathematical and Statistical Psychology.
See Also
GDINA for MS-DINA model and single strategy CDMs,andGMSCDM for generalized multiple strategies CDMs for dichotomous response data
Examples
## Not run: ##################################### Example 1. ## sequential G-DINA model. ## #####################################dat <- sim20seqGDINA$simdatQc <- sim20seqGDINA$simQfit=DTM(sim20seqGDINA$simdat,Qc,type="sequential")fitfit$testfit$AIC##################################### Example 2. ## Tree model ## #####################################K=5g=0.2item.no <- rep(1:6,each=4)# the first node has three response categories: 0, 1 and 2node.no <- rep(c(1,1,2,3),6)Q1 <- matrix(0,length(item.no),K)Q2 <- cbind(7:(7+K-1),rep(1,K),diag(K))for(j in 1:length(item.no)) { Q1[j,sample(1:K,sample(3,1))] <- 1}Qc <- rbind(cbind(item.no,node.no,Q1),Q2)Tmatrix.set <- list(cbind(c(0,1,2,3,3),c(0,1,2,1,2),c(NA,0,NA,1,NA),c(NA,NA,0,NA,1)),cbind(c(0,1,2,3,4),c(0,1,2,1,2),c(NA,0,NA,1,NA),c(NA,NA,0,NA,1)),cbind(c(0,1),c(0,1)))Tmatrix <- Tmatrix.set[c(1,1,1,1,1,1,rep(3,K))]sim <- simDTM(N=2000,Qc=Qc,gs.parm=matrix(0.2,nrow(Qc),2),Tmatrix=Tmatrix)est <- DTM(dat=sim$dat,Qc=Qc,Tmatrix = Tmatrix)## End(Not run)CDM calibration under the G-DINA model framework
Description
GDINA calibrates the generalized deterministic inputs, noisy andgate (G-DINA; de la Torre, 2011) model for dichotomous responses, and its extension, the sequentialG-DINA model (Ma, & de la Torre, 2016a; Ma, 2017) for ordinal and nominal responses.By setting appropriate constraints, the deterministic inputs,noisy and gate (DINA; de la Torre, 2009; Junker & Sijtsma, 2001) model,the deterministic inputs, noisy or gate (DINO; Templin & Henson, 2006)model, the reduced reparametrized unified model (R-RUM; Hartz, 2002),the additive CDM (A-CDM; de la Torre, 2011), the linear logisticmodel (LLM; Maris, 1999), and the multiple-strategy DINA model (MSDINA; de la Torre & Douglas, 2008; Huo & de la Torre, 2014)can also be calibrated. Note that the LLM is equivalent tothe C-RUM (Hartz, 2002), a special case of the GDM (von Davier, 2008), and that the R-RUMis also known as a special case of the generalized NIDA model (de la Torre, 2011).
In addition, users are allowed to specify design matrix and link function for each item, anddistinct models may be used in a single test for different items.The attributes can be either dichotomous or polytomous(Chen & de la Torre, 2013). Joint attribute distribution may be modelled using independent or saturated model,structured model, higher-order model (de la Torre & Douglas, 2004), or loglinear model (Xu & von Davier, 2008).Marginal maximum likelihood method with Expectation-Maximization (MMLE/EM) alogrithm is used for item parameter estimation.
To compare two or moreGDINA objects, use methodanova.
To calculate structural parameters for item and joint attribute distributions, use methodcoef.
To calculate lower-order incidental (person) parametersuse methodpersonparm. To extract other components returned, useextract.To plot item/category response function, useplot. Tocheck whether monotonicity is violated, usemonocheck. To conduct anaysis in graphical user interface,usestartGDINA.
Usage
GDINA( dat, Q, model = "GDINA", sequential = FALSE, att.dist = "saturated", mono.constraint = FALSE, group = NULL, linkfunc = NULL, design.matrix = NULL, no.bugs = 0, att.prior = NULL, att.str = NULL, verbose = 1, higher.order = list(), loglinear = 2, catprob.parm = NULL, control = list(), item.names = NULL, solver = NULL, nloptr.args = list(), auglag.args = list(), solnp.args = list(), ...)## S3 method for class 'GDINA'anova(object, ...)## S3 method for class 'GDINA'coef( object, what = c("catprob", "delta", "gs", "itemprob", "LCprob", "rrum", "lambda"), withSE = FALSE, SE.type = 2, digits = 4, ...)## S3 method for class 'GDINA'extract(object, what, SE.type = 2, ...)## S3 method for class 'GDINA'personparm(object, what = c("EAP", "MAP", "MLE", "mp", "HO"), digits = 4, ...)## S3 method for class 'GDINA'logLik(object, ...)## S3 method for class 'GDINA'deviance(object, ...)## S3 method for class 'GDINA'nobs(object, ...)## S3 method for class 'GDINA'vcov(object, ...)## S3 method for class 'GDINA'npar(object, ...)## S3 method for class 'GDINA'indlogLik(object, ...)## S3 method for class 'GDINA'indlogPost(object, ...)## S3 method for class 'GDINA'summary(object, ...)Arguments
dat | A required |
Q | A required matrix; The number of rows occupied by a single-strategy dichotomous item is 1, by a polytomous item isthe number of nonzero categories, and by a mutiple-strategy dichotomous item is the number of strategies.The number of column is equal to the number of attributes if all items are single-strategy dichotomous items, butthe number of attributes + 2 if any items are polytomous or have multiple strategies.For a polytomous item, the first column represents the item number and the second column indicates the nonzero category number.For a multiple-strategy dichotomous item, the first column represents the item number and the second column indicates the strategy number.For binary attributes, 1 denotes the attributes are measured by the items and 0 means the attributes are notmeasured. For polytomous attributes, non-zero elements indicate which levelof attributes are needed (see Chen, & de la Torre, 2013). See |
model | A vector for each item or nonzero category, or a scalar which will be used for allitems or nonzero categories to specify the CDMs fitted. The possible optionsinclude |
sequential | logical; |
att.dist | How is the joint attribute distribution estimated? It can be (1) |
mono.constraint | logical; |
group | a factor or a vector indicating the group each individual belongs to. Its length must be equal to the number of individuals. |
linkfunc | a vector of link functions for each item/category; It can be |
design.matrix | a list of design matrices; Its length must be equal to the number of items (or nonzero categories for sequential models).If CDM for item j is specified as "UDF" in argument |
no.bugs | A numeric scalar (whole numbers only) indicating the number of bugs or misconceptions in the Q-matrix. The bugs must be included in the last |
att.prior | A vector of length |
att.str | Specify attribute structures. |
verbose | How to print calibration informationafter each EM iteration? Can be 0, 1 or 2, indicating to print no information,information for current iteration, or information for all iterations. |
higher.order | A list specifying the higher-order joint attribute distribution with the following components:
|
loglinear | the order of loglinear smooth for attribute space. It can be either 1 or 2 indicating the loglinear model with main effect onlyand with main effect and first-order interaction; It can also be a matrix, representing the design matrix for the loglinear model. |
catprob.parm | A list of initial success probability parameters for each nonzero category. |
control | A list of control parameters with elements:
|
item.names | A vector giving the item names. By default, items are named as "Item 1", "Item 2", etc. |
solver | A string indicating which solver should be used in M-step. By default, the solver is automatically chosen according to the models specified.Possible options includeslsqp,nloptr,solnp andauglag. |
nloptr.args | a list of control parameters to be passed to |
auglag.args | a list of control parameters to be passed to the alabama::auglag() function. It can contain two elements: |
solnp.args | a list of control parameters to be passed to |
... | additional arguments |
object | GDINA object for various S3 methods |
what | argument for various S3 methods; For calculating structural parameters using
For calculating incidental parameters using
|
withSE | argument for method |
SE.type | type of standard errors. For now, SEs are calculated based on outper-product of gradient.It can be |
digits | How many decimal places in each number? The default is 4. |
Value
GDINA returns an object of classGDINA. Methods forGDINA objectsincludeextract for extracting various components,coeffor extracting structural parameters,personparmfor calculating incidental (person) parameters,summary for summary information.AIC,BIC,logLik,deviance andnpar can also be used tocalculate AIC, BIC, observed log-likelihood, deviance and number of parameters.
Methods (by generic)
anova(GDINA): Model comparison using likelihood ratio testcoef(GDINA): extract structural parameter estimatesextract(GDINA): extract various elements of GDINA estimatespersonparm(GDINA): calculate person attribute patterns and higher-order abilitylogLik(GDINA): calculate log-likelihooddeviance(GDINA): calculate deviancenobs(GDINA): calculate number of observationsvcov(GDINA): calculate covariance-matrix for delta parametersnpar(GDINA): calculate the number of parametersindlogLik(GDINA): extract log-likelihood for each individualindlogPost(GDINA): extract log posterior for each individualsummary(GDINA): print summary information
The G-DINA model
The generalized DINA model (G-DINA; de la Torre, 2011) is an extension of the DINA model.Unlike the DINA model, which collaspes all latent classes into two latent groups foreach item, if itemj requiresK_j^*attributes, the G-DINA model collapses2^K latent classes into2^{K_j^*}latent groups with unique success probabilities on itemj, whereK_j^*=\sum_{k=1}^{K}q_{jk}.
Let\boldsymbol{\alpha}_{lj}^* be the reduced attributepattern consisting of the columns of the attributes required by itemj, wherel=1,\ldots,2^{K_j^*}. For example, if only the first and the last attributes arerequired,\boldsymbol{\alpha}_{lj}^*=(\alpha_{l1},\alpha_{lK}). For notationalconvenience, the firstK_j^* attributes can be assumed to be the required attributesfor itemj as in de la Torre (2011). The probability of successP(X_{j}=1|\boldsymbol{\alpha}_{lj}^*) is denotedbyP(\boldsymbol{\alpha}_{lj}^*). To model this probability of success, different link functionsas in the generalized linear models are used in the G-DINA model. The item responsefunction of the G-DINA model using the identity link can be written as
f[P(\boldsymbol{\alpha}_{lj}^*)]=\delta_{j0}+\sum_{k=1}^{K_j^*}\delta_{jk}\alpha_{lk}+\sum_{k'=k+1}^{K_j^*}\sum_{k=1}^{K_j^*-1}\delta_{jkk'}\alpha_{lk}\alpha_{lk'}+\cdots+\delta_{j12{\cdots}K_j^*}\prod_{k=1}^{K_j^*}\alpha_{lk},
or in matrix form,
f[\boldsymbol{P}_j]=\boldsymbol{M}_j\boldsymbol{\delta}_j,
where\delta_{j0} is the intercept for itemj,\delta_{jk} is the main effectdue to\alpha_{lk},\delta_{jkk'} is the interaction effect due to\alpha_{lk} and\alpha_{lk'},\delta_{j12{\ldots}K_j^*} is the interactioneffect due to\alpha_{l1}, \cdots,\alpha_{lK_j^*}. The log and logit links can alsobe employed.
Other CDMs as special cases
Several widely used CDMs can be obtained by setting appropriate constraints to the G-DINA model.This section introduces the parameterizationof different CDMs within the G-DINA model framework very breifly. Readers interested in this please refer tode la Torre(2011) for details.
DINA modelIn DINA model, each item has two item parameters - guessing (
g) and slip (s). In traditionalparameterization of the DINA model, a latent variable\etafor personianditemjis defined as\eta_{ij}=\prod_{k=1}^K\alpha_{ik}^{q_{jk}}Briefly speaking, if individual
imaster all attributes required by itemj,\eta_{ij}=1; otherwise,\eta_{ij}=0.Item response function of the DINA model can be written byP(X_{ij}=1|\eta_{ij})=(1-s_j)^{\eta_{ij}}g_j^{1-\eta_{ij}}To obtain the DINA model from the G-DINA model,all terms in identity link G-DINA model except
\delta_0and\delta_{12{\ldots}K_j^*}need to be fixed to zero, that is,P(\boldsymbol{\alpha}_{lj}^*)= \delta_{j0}+\delta_{j12{\cdots}K_j^*}\prod_{k=1}^{K_j^*}\alpha_{lk}In this parameterization,
\delta_{j0}=g_jand\delta_{j0}+\delta_{j12{\cdots}K_j^*}=1-s_j.DINO modelThe DINO model can be given by
P(\boldsymbol{\alpha}_{lj}^{*})= \delta_{j0}+\delta_{j1}I(\boldsymbol{\alpha}_{lj}^*\neq \boldsymbol{0})where
I(\cdot)is an indicator variable. The DINO model is also a constrained identitylink G-DINA model. As shown by de la Torre (2011), the appropriate constraint is\delta_{jk}=-\delta_{jk^{'}k^{''}}=\cdots=(-1)^{K_j^*+1}\delta_{j12{\cdots}K_j^*},for
k=1,\cdots,K_j^*, k^{'}=1,\cdots,K_j^*-1, andk^{''}>k^{'},\cdots,K_j^*.Additive models with different link functionsThe A-CDM, LLM and R-RUM can be obtained by setting all interactions to be zero inidentity, logit and log link G-DINA model, respectively. Specifically, the A-CDM can be formulated as
P(\boldsymbol{\alpha}_{lj}^*)= \delta_{j0}+\sum_{k=1}^{K_j^*}\delta_{jk}\alpha_{lk}The item response function forLLM can be given by
logit[P(\boldsymbol{\alpha}_{lj}^*)]=\delta_{j0}+\sum_{k=1}^{K_j^*}\delta_{jk}\alpha_{lk},and lastly, the RRUM, can be written as
log[P(\boldsymbol{\alpha}_{lj}^*)]=\delta_{j0}+\sum_{k=1}^{K_j^*}\delta_{jk}\alpha_{lk}.It should benoted that the LLM is equivalent to the compensatory RUM, which is subsumed by the GDM, and thatthe RRUM is a special case of the generalized noisy inputs, deterministic “And" gate model (G-NIDA).
Simultaneously identifying skills and misconceptions (SISM)The SISM can be can be reformulated as
P(\boldsymbol{\alpha}_{lj}^*)= \delta_{j0}+\delta_{j1}I[{mastering all skills}]+ \delta_{j2}I[{having no bugs}]+\delta_{j12}I[{mastering all skills and having no bugs}].As a result,the success probability of students who have mastered all the measured skills and possessnone of the measured misconceptions (
h_jin Equation 4 of Kuo, et al, 2018) is\delta_{j0}+\delta_{j1}+\delta_{j2}+\delta_{j12}, the success probability of students who havemastered all the measured skills but possess some of the measured misconceptions (\omega_j)is\delta_{j0}+\delta_{j1}, the success probability of students who have not mastered all themeasured skills and possess none of the measured misconceptions (g_j) is\delta_{j0}+\delta_{j2}and success probability of students who have not mastered all themeasured skills and possess at least one of the measured misconceptions(\epsilon_j) is\delta_{j0}.By specifying
no.bugsbeing equal to the number of attributes, the Bug-DINO is obtained, as inP(\boldsymbol{\alpha}_{lj}^*)=\delta_{j0}+\delta_{j1}I[{having no bugs}].
Joint Attribute Distribution
The joint attribute distribution can be modeled using various methods. This section mainly focuses on the so-calledhigher-order approach, which was originally proposed by de la Torreand Douglas (2004) for the DINA model. It has been extended in this package for all condensation rules.Particularly, three approaches are available for the higher-order attribute structure:intercept only approach, common slope approach and varied slope approach.For the intercept only approach, the probability of mastering attributek for individuali is defined as
P(\alpha_k=1|\theta_i,\lambda_{0k})=\frac{exp(\theta_i+\lambda_{0k})}{1+exp(\theta_i+\lambda_{0k})}
For the common slope approach, the probability of mastering attributek for individuali is defined as
P(\alpha_k=1|\theta_i,\lambda_{0k},\lambda_{1})=\frac{exp(\lambda_{1}\theta_i+\lambda_{0k})}{1+exp(\lambda_{1}\theta_i+\lambda_{0k})}
For the varied slope approach, the probability of mastering attributek for individuali is defined as
P(\alpha_k=1|\theta_i,\lambda_{0k},\lambda_{1k})=\frac{exp(\lambda_{1k}\theta_i+\lambda_{0k})}{1+exp(\lambda_{1k}\theta_i+\lambda_{0k})}
where\theta_i is the ability of examineei.\lambda_{0k} and\lambda_{1k} are the interceptand slope parameters for attributek, respectively.The probability of joint attributes can be written as
P(\boldsymbol{\alpha}|\theta_i,\boldsymbol{\lambda})=\prod_k P(\alpha_k|\theta_i,\boldsymbol{\lambda})
.
Model Estimation
The MMLE/EM algorithm is implemented in this package. For G-DINA, DINA and DINO models, closed-form solutions exist.See de la Torre (2009) and de la Torre (2011) for details.For ACDM, LLM and RRUM, closed-form solutions do not exist, and therefore some general optimization techniques areadopted in M-step (Ma, Iaconangelo & de la Torre, 2016). The selection of optimization techniques mainly depends on whethersome specific constraints need to be added.
The sequential G-DINA model is a special case of the diagnostic tree model (DTM; Ma, 2019) and estimated usingthe mapping matrix accordingly (See Tutz, 1997; Ma, 2019).
The Number of Parameters
For dichotomous response models:Assume a test measuresK attributes and itemj requiresK_j^* attributes:The DINA and DINO model has 2 item parameters for each item;if itemj is ACDM, LLM or RRUM, it hasK_j^*+1 item parameters; if it is G-DINA model, it has2^{K_j^*} item parameters.Apart from item parameters, the parameters involved in the estimation of joint attribute distribution need to be estimated as well.When using the saturated attribute structure, there are2^K-1 parameters for joint attribute distribution estimation; whenusing a higher-order attribute structure, there areK,K+1, and2\times K parameters for the intercept only approach, common slope approach and varied slope approach, respectively.For polytomous response data using the sequential G-DINA model, the number of item parametersare counted at category level.
Note
anova function does NOT check whether models compared are nested or not.
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.eduJimmy de la Torre, The University of Hong Kong
References
Bock, R. D., & Aitkin, M. (1981). Marginal maximum likelihood estimation of item parameters: Application of an EM algorithm.Psychometrika, 46, 443-459.
Bock, R. D., & Lieberman, M. (1970). Fitting a response model forn dichotomously scored items.Psychometrika, 35, 179-197.
Bor-Chen Kuo, Chun-Hua Chen, Chih-Wei Yang, & Magdalena Mo Ching Mok. (2016). Cognitive diagnostic models for tests with multiple-choice and constructed-response items.Educational Psychology, 36, 1115-1133.
Carlin, B. P., & Louis, T. A. (2000). Bayes and empirical bayes methods for data analysis. New York, NY: Chapman & Hall
de la Torre, J., & Douglas, J. A. (2008). Model evaluation and multiple strategies in cognitive diagnosis: An analysis of fraction subtraction data.Psychometrika, 73, 595-624.
de la Torre, J. (2009). DINA Model and Parameter Estimation: A Didactic.Journal of Educational and Behavioral Statistics, 34, 115-130.
de la Torre, J. (2011). The generalized DINA model framework.Psychometrika, 76, 179-199.
de la Torre, J., & Douglas, J. A. (2004). Higher-order latent trait models for cognitive diagnosis.Psychometrika, 69, 333-353.
de la Torre, J., & Lee, Y. S. (2013). Evaluating the wald test for item-level comparison ofsaturated and reduced models in cognitive diagnosis.Journal of Educational Measurement, 50, 355-373.
Haertel, E. H. (1989). Using restricted latent class models to map the skill structure of achievement items.Journal of Educational Measurement, 26, 301-321.
Hartz, S. M. (2002). A bayesian framework for the unified model for assessing cognitive abilities:Blending theory with practicality (Unpublished doctoral dissertation). University of Illinois at Urbana-Champaign.
Huo, Y., & de la Torre, J. (2014). Estimating a Cognitive Diagnostic Model for Multiple Strategies via the EM Algorithm.Applied Psychological Measurement, 38, 464-485.
Junker, B. W., & Sijtsma, K. (2001). Cognitive assessment models with few assumptions, and connections with nonparametricitem response theory.Applied Psychological Measurement, 25, 258-272.
Kuo, B.-C., Chen.-H., & de la Torre,J. (2018). A cognitive diagnosis model for identifying coexisting skills and misconceptions.Applied Psychological Measuremet, 179–191.
Ma, W., & de la Torre, J. (2016). A sequential cognitive diagnosis model for polytomous responses.British Journal of Mathematical and Statistical Psychology. 69, 253-275.
Ma, W., & de la Torre, J. (2020). GDINA: An R Package for Cognitive Diagnosis Modeling.Journal of Statistical Software, 93(14), 1-26.
Ma, W. (2019). A diagnostic tree model for polytomous responses with multiple strategies.British Journal of Mathematical and Statistical Psychology, 72, 61-82.
Ma, W., Iaconangelo, C., & de la Torre, J. (2016). Model similarity, model selection and attribute classification.Applied Psychological Measurement, 40, 200-217.
Ma, W. (2017).A Sequential Cognitive Diagnosis Model for Graded Response: Model Development, Q-Matrix Validation,and Model Comparison. Unpublished doctoral dissertation. New Brunswick, NJ: Rutgers University.
Maris, E. (1999). Estimating multiple classification latent class models.Psychometrika, 64, 187-212.
Tatsuoka, K. K. (1983). Rule space: An approach for dealing with misconceptions based on item response theory.Journal of Educational Measurement, 20, 345-354.
Templin, J. L., & Henson, R. A. (2006). Measurement of psychological disorders using cognitive diagnosis models.Psychological Methods, 11, 287-305.
Tutz, G. (1997). Sequential models for ordered responses. In W.J. van der Linden & R. K. Hambleton (Eds.), Handbook of modern item response theory p. 139-152). New York, NY: Springer.
Xu, X., & von Davier, M. (2008). Fitting the structured general diagnostic model to NAEP data. ETS research report, RR-08-27.
See Also
SeeautoGDINA for Q-matrix validation, item-level model comparison and model calibrationin one run; Seemodelfit anditemfit for model and item fit analysis,Qval for Q-matrix validation,modelcomp for item level model comparison andsimGDINA for data simulation.GMSCDM for a series of multiple strategy CDMs for dichotomous data,andDTM for diagnostic tree model for multiple strategies in polytomous response dataAlso seegdina inCDM package for the G-DINA model estimation.
Examples
## Not run: ##################################### Example 1. ## GDINA, DINA, DINO ## ACDM, LLM and RRUM ## estimation and comparison ## #####################################dat <- sim10GDINA$simdatQ <- sim10GDINA$simQ#--------GDINA model --------#mod1 <- GDINA(dat = dat, Q = Q, model = "GDINA")mod1# summary informationsummary(mod1)AIC(mod1) #AICBIC(mod1) #BIClogLik(mod1) #log-likelihood valuedeviance(mod1) # deviance: -2 log-likelihoodnpar(mod1) # number of parametershead(indlogLik(mod1)) # individual log-likelihoodhead(indlogPost(mod1)) # individual log-posterior# structural parameters# see ?coefcoef(mod1) # item probabilities of success for each latent groupcoef(mod1, withSE = TRUE) # item probabilities of success & standard errorscoef(mod1, what = "delta") # delta parameterscoef(mod1, what = "delta",withSE=TRUE) # delta parameterscoef(mod1, what = "gs") # guessing and slip parameterscoef(mod1, what = "gs",withSE = TRUE) # guessing and slip parameters & standard errors# person parameters# see ?personparmpersonparm(mod1) # EAP estimates of attribute profilespersonparm(mod1, what = "MAP") # MAP estimates of attribute profilespersonparm(mod1, what = "MLE") # MLE estimates of attribute profiles#plot item response functions for item 10plot(mod1,item = 10)plot(mod1,item = 10,withSE = TRUE) # with error bars#plot mastery probability for individuals 1, 20 and 50plot(mod1,what = "mp", person =c(1,20,50))# Use extract function to extract more components# See ?extract# ------- DINA model --------#dat <- sim10GDINA$simdatQ <- sim10GDINA$simQmod2 <- GDINA(dat = dat, Q = Q, model = "DINA")mod2coef(mod2, what = "gs") # guess and slip parameterscoef(mod2, what = "gs",withSE = TRUE) # guess and slip parameters and standard errors# Model comparison at the test level via likelihood ratio testanova(mod1,mod2)# -------- DINO model -------#dat <- sim10GDINA$simdatQ <- sim10GDINA$simQmod3 <- GDINA(dat = dat, Q = Q, model = "DINO")#slip and guessingcoef(mod3, what = "gs") # guess and slip parameterscoef(mod3, what = "gs",withSE = TRUE) # guess and slip parameters + standard errors# Model comparison at test level via likelihood ratio testanova(mod1,mod2,mod3)# --------- ACDM model -------#dat <- sim10GDINA$simdatQ <- sim10GDINA$simQmod4 <- GDINA(dat = dat, Q = Q, model = "ACDM")mod4# --------- LLM model -------#dat <- sim10GDINA$simdatQ <- sim10GDINA$simQmod4b <- GDINA(dat = dat, Q = Q, model = "LLM")mod4b# --------- RRUM model -------#dat <- sim10GDINA$simdatQ <- sim10GDINA$simQmod4c <- GDINA(dat = dat, Q = Q, model = "RRUM")mod4c# --- Different CDMs for different items --- #dat <- sim10GDINA$simdatQ <- sim10GDINA$simQmodels <- c(rep("GDINA",3),"LLM","DINA","DINO","ACDM","RRUM","LLM","RRUM")mod5 <- GDINA(dat = dat, Q = Q, model = models)anova(mod1,mod2,mod3,mod4,mod4b,mod4c,mod5)##################################### Example 2. ## Model estimations ## With monotonocity constraints #####################################dat <- sim10GDINA$simdatQ <- sim10GDINA$simQ# for item 10 onlymod11 <- GDINA(dat = dat, Q = Q, model = "GDINA",mono.constraint = c(rep(FALSE,9),TRUE))mod11mod11a <- GDINA(dat = dat, Q = Q, model = "DINA",mono.constraint = TRUE)mod11amod11b <- GDINA(dat = dat, Q = Q, model = "ACDM",mono.constraint = TRUE)mod11bmod11c <- GDINA(dat = dat, Q = Q, model = "LLM",mono.constraint = TRUE)mod11cmod11d <- GDINA(dat = dat, Q = Q, model = "RRUM",mono.constraint = TRUE)mod11dcoef(mod11d,"delta")coef(mod11d,"rrum")##################################### Example 3a. ## Model estimations ## With Higher-order att structure #####################################dat <- sim10GDINA$simdatQ <- sim10GDINA$simQ# --- Higher order G-DINA model ---#mod12 <- GDINA(dat = dat, Q = Q, model = "DINA", att.dist="higher.order",higher.order=list(nquad=31,model = "2PL"))personparm(mod12,"HO") # higher-order ability# structural parameters# first column is slope and the second column is interceptcoef(mod12,"lambda")# --- Higher order DINA model ---#mod22 <- GDINA(dat = dat, Q = Q, model = "DINA", att.dist="higher.order", higher.order=list(model = "2PL",Prior=TRUE))##################################### Example 3b. ## Model estimations ## With log-linear att structure ###################################### --- DINA model with loglinear smoothed attribute space ---#dat <- sim10GDINA$simdatQ <- sim10GDINA$simQmod23 <- GDINA(dat = dat, Q = Q, model = "DINA",att.dist="loglinear",loglinear=1)coef(mod23,"lambda") # intercept and three main effects##################################### Example 3c. ## Model estimations ## With independent att structure ###################################### --- GDINA model with independent attribute space ---#dat <- sim10GDINA$simdatQ <- sim10GDINA$simQmod33 <- GDINA(dat = dat, Q = Q, att.dist="independent")coef(mod33,"lambda") # mastery probability for each attribute##################################### Example 4. ## Model estimations ## With fixed att structure ###################################### --- User-specified attribute priors ----## prior distribution is fixed during calibration# Assume each of 000,100,010 and 001 has probability of 0.1# and each of 110, 101,011 and 111 has probability of 0.15# Note that the sum is equal to 1#prior <- c(0.1,0.1,0.1,0.1,0.15,0.15,0.15,0.15)# fit GDINA model with fixed prior dist.dat <- sim10GDINA$simdatQ <- sim10GDINA$simQmodp1 <- GDINA(dat = dat, Q = Q, att.prior = prior, att.dist = "fixed")extract(modp1, what = "att.prior")##################################### Example 5a. ## G-DINA ## with hierarchical att structure ###################################### --- User-specified attribute structure ----#Q <- sim30GDINA$simQK <- ncol(Q)# divergent structure A1->A2->A3;A1->A4->A5diverg <- list(c(1,2), c(2,3), c(1,4), c(4,5))struc <- att.structure(diverg,K)set.seed(123)# data simulationN <- 1000true.lc <- sample(c(1:2^K),N,replace=TRUE,prob=struc$att.prob)table(true.lc) #check the sampletrue.att <- attributepattern(K)[true.lc,] gs <- matrix(rep(0.1,2*nrow(Q)),ncol=2) # data simulation simD <- simGDINA(N,Q,gs.parm = gs, model = "GDINA",attribute = true.att) dat <- extract(simD,"dat")modp1 <- GDINA(dat = dat, Q = Q, att.str = diverg, att.dist = "saturated")modp1coef(modp1,"lambda")##################################### Example 5b. ## Reduced model (e.g.,ACDM) ## with hierarchical att structure ###################################### --- User-specified attribute structure ----#Q <- sim30GDINA$simQK <- ncol(Q)# linear structure A1->A2->A3->A4->A5linear <- list(c(1,2), c(2,3), c(3,4), c(4,5))struc <- att.structure(linear,K)set.seed(123)# data simulationN <- 1000true.lc <- sample(c(1:2^K),N,replace=TRUE,prob=struc$att.prob)table(true.lc) #check the sampletrue.att <- attributepattern(K)[true.lc,] gs <- matrix(rep(0.1,2*nrow(Q)),ncol=2) # data simulation simD <- simGDINA(N,Q,gs.parm = gs, model = "ACDM",attribute = true.att) dat <- extract(simD,"dat")modp1 <- GDINA(dat = dat, Q = Q, model = "ACDM", att.str = linear, att.dist = "saturated")coef(modp1)coef(modp1,"lambda")##################################### Example 6. ## Specify initial values for item ## parameters ##################################### # check initials to see the format for initial item parameters initials <- sim10GDINA$simItempar dat <- sim10GDINA$simdat Q <- sim10GDINA$simQ mod.initial <- GDINA(dat,Q,catprob.parm = initials) # compare initial item parameters Map(rbind, initials,extract(mod.initial,"initial.catprob"))##################################### Example 7a. ## Fix item and structure parameters## Estimate person attribute profile##################################### # check initials to see the format for initial item parameters initials <- sim10GDINA$simItempar prior <- c(0.1,0.1,0.1,0.1,0.15,0.15,0.15,0.15) dat <- sim10GDINA$simdat Q <- sim10GDINA$simQ mod.ini <- GDINA(dat,Q,catprob.parm = initials,att.prior = prior, att.dist = "fixed",control=list(maxitr = 0)) personparm(mod.ini) # compare item parameters Map(rbind, initials,coef(mod.ini))##################################### Example 7b. ## Fix parameters for some items ## Estimate person attribute profile##################################### # check initials to see the format for initial item parameters initials <- sim10GDINA$simItempar prior <- c(0.1,0.1,0.1,0.1,0.15,0.15,0.15,0.15) dat <- sim10GDINA$simdat Q <- sim10GDINA$simQ # fix parameters of the first 5 items; do not fix mixing proportion parameters mod.ini <- GDINA(dat,Q,catprob.parm = initials, att.dist = "saturated",control=list(maxitr = c(rep(0,5),rep(2000,5)))) personparm(mod.ini) # compare item parameters Map(rbind, initials,coef(mod.ini))##################################### Example 8. ## polytomous attribute ## model estimation ## see Chen, de la Torre 2013 ###################################### --- polytomous attribute G-DINA model --- #dat <- sim30pGDINA$simdatQ <- sim30pGDINA$simQ#polytomous G-DINA modelpout <- GDINA(dat,Q)# ----- polymous DINA model --------#pout2 <- GDINA(dat,Q,model="DINA")anova(pout,pout2)##################################### Example 9. ## Sequential G-DINA model ## see Ma, & de la Torre 2016 ###################################### --- polytomous attribute G-DINA model --- #dat <- sim20seqGDINA$simdatQ <- sim20seqGDINA$simQQ# Item Cat A1 A2 A3 A4 A5# 1 1 1 0 0 0 0# 1 2 0 1 0 0 0# 2 1 0 0 1 0 0# 2 2 0 0 0 1 0# 3 1 0 0 0 0 1# 3 2 1 0 0 0 0# 4 1 0 0 0 0 1# ...#sequential G-DINA modelsGDINA <- GDINA(dat,Q,sequential = TRUE)sDINA <- GDINA(dat,Q,sequential = TRUE,model = "DINA")anova(sGDINA,sDINA)coef(sDINA) # processing functioncoef(sDINA,"itemprob") # success probabilities for each itemcoef(sDINA,"LCprob") # success probabilities for each category for all latent classes##################################### Example 10a. ## Multiple-Group G-DINA model #####################################Q <- sim10GDINA$simQK <- ncol(Q)# parameter simulation# Group 1 - femaleN1 <- 3000gs1 <- matrix(rep(0.1,2*nrow(Q)),ncol=2)# Group 2 - maleN2 <- 3000gs2 <- matrix(rep(0.2,2*nrow(Q)),ncol=2)# data simulation for each groupsim1 <- simGDINA(N1,Q,gs.parm = gs1,model = "DINA",att.dist = "higher.order", higher.order.parm = list(theta = rnorm(N1), lambda = data.frame(a=rep(1.5,K),b=seq(-1,1,length.out=K))))sim2 <- simGDINA(N2,Q,gs.parm = gs2,model = "DINO",att.dist = "higher.order", higher.order.parm = list(theta = rnorm(N2), lambda = data.frame(a=rep(1,K),b=seq(-2,2,length.out=K))))# combine data - all items have the same item parametersdat <- rbind(extract(sim1,"dat"),extract(sim2,"dat"))gr <- rep(c(1,2),c(3000,3000))# Fit G-DINA modelmg.est <- GDINA(dat = dat,Q = Q,group = gr)summary(mg.est)extract(mg.est,"posterior.prob")coef(mg.est,"lambda")##################################### Example 10b. ## Multiple-Group G-DINA model #####################################Q <- sim30GDINA$simQK <- ncol(Q)# parameter simulationN1 <- 3000gs1 <- matrix(rep(0.1,2*nrow(Q)),ncol=2)N2 <- 3000gs2 <- matrix(rep(0.2,2*nrow(Q)),ncol=2)# data simulation for each group# two groups have different theta distributionssim1 <- simGDINA(N1,Q,gs.parm = gs1,model = "DINA",att.dist = "higher.order", higher.order.parm = list(theta = rnorm(N1), lambda = data.frame(a=rep(1,K),b=seq(-2,2,length.out=K))))sim2 <- simGDINA(N2,Q,gs.parm = gs2,model = "DINO",att.dist = "higher.order", higher.order.parm = list(theta = rnorm(N2,1,1), lambda = data.frame(a=rep(1,K),b=seq(-2,2,length.out=K))))# combine data - different groups have distinct item parameters# see ?bdiagMatrixdat <- bdiagMatrix(list(extract(sim1,"dat"),extract(sim2,"dat")),fill=NA)Q <- rbind(Q,Q)gr <- rep(c(1,2),c(3000,3000))mg.est <- GDINA(dat = dat,Q = Q,group = gr)# Fit G-DINA modelmg.est <- GDINA(dat = dat,Q = Q,group = gr,att.dist="higher.order",higher.order=list(model = "Rasch"))summary(mg.est)coef(mg.est,"lambda")personparm(mg.est)personparm(mg.est,"HO")extract(mg.est,"posterior.prob")##################################### Example 11. ## Bug DINO model #####################################set.seed(123)Q <- sim10GDINA$simQ # 1 represents misconceptions/bugsN <- 1000J <- nrow(Q)gs <- data.frame(guess=rep(0.1,J),slip=rep(0.1,J))sim <- simGDINA(N,Q,gs.parm = gs,model = "BUGDINO")dat <- extract(sim,"dat")est <- GDINA(dat=dat,Q=Q,model = "BUGDINO")coef(est)##################################### Example 12. ## SISM model ###################################### The Q-matrix used in Kuo, et al (2018)# The first four columns are for Attributes 1-4# The last three columns are for Bugs 1-3Q <- matrix(c(1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,1,0,1,1,0,1,1,1,0,0,1,1,1,1,1,0),ncol = 7,byrow = TRUE)J <- nrow(Q)N <- 1000gs <- data.frame(guess=rep(0.1,J),slip=rep(0.1,J))sim <- simGDINA(N,Q,gs.parm = gs,model = "SISM",no.bugs=3)dat <- extract(sim,"dat")est <- GDINA(dat=dat,Q=Q,model="SISM",no.bugs=3)coef(est,"delta")##################################### Example 13a. ## user specified design matrix ## LCDM (logit G-DINA) #####################################dat <- sim30GDINA$simdatQ <- sim30GDINA$simQ# LCDMlcdm <- GDINA(dat = dat, Q = Q, model = "logitGDINA", control=list(conv.type="neg2LL"))#Another way is to find design matrix for each item first => must be a listD <- lapply(rowSums(Q),designmatrix,model="GDINA")# for comparison, use change in -2LL as convergence criterion# LCDMlcdm2 <- GDINA(dat = dat, Q = Q, model = "UDF", design.matrix = D,linkfunc = "logit", control=list(conv.type="neg2LL"),solver="slsqp")# identity link GDINAiGDINA <- GDINA(dat = dat, Q = Q, model = "GDINA",control=list(conv.type="neg2LL"),solver="slsqp")# compare all three models => identicalanova(lcdm,lcdm2,iGDINA)##################################### Example 13b. ## user specified design matrix ## RRUM #####################################dat <- sim30GDINA$simdatQ <- sim30GDINA$simQ# specify design matrix for each item => must be a list# D can be defined by the userD <- lapply(rowSums(Q),designmatrix,model="ACDM")# for comparison, use change in -2LL as convergence criterion# RRUMlogACDM <- GDINA(dat = dat, Q = Q, model = "UDF", design.matrix = D,linkfunc = "log", control=list(conv.type="neg2LL"),solver="slsqp")# identity link GDINARRUM <- GDINA(dat = dat, Q = Q, model = "RRUM", control=list(conv.type="neg2LL"),solver="slsqp")# compare two models => identicalanova(logACDM,RRUM)##################################### Example 14. ## Multiple-strategy DINA model #####################################Q <- matrix(c(1,1,1,1,0,1,2,0,1,1,2,1,1,0,0,3,1,0,1,0,4,1,0,0,1,5,1,1,0,0,5,2,0,0,1),ncol = 5,byrow = TRUE)d <- list( item1=c(0.2,0.7), item2=c(0.1,0.6), item3=c(0.2,0.6), item4=c(0.2,0.7), item5=c(0.1,0.8)) set.seed(12345)sim <- simGDINA(N=1000,Q = Q, delta.parm = d, model = c("MSDINA","MSDINA","DINA", "DINA","DINA","MSDINA","MSDINA"))# simulated datadat <- extract(sim,what = "dat")# estimation# MSDINA need to be specified for each strategyest <- GDINA(dat,Q,model = c("MSDINA","MSDINA","DINA", "DINA","DINA","MSDINA","MSDINA"))coef(est,"delta")## End(Not run)Estimating multiple-strategy cognitive diagnosis models
Description
An (experimental) function for calibrating the multiple-strategy CDMs for dichotomous response data (Ma & Guo, 2019)
Usage
GMSCDM( dat, msQ, model = "ACDM", s = 1, att.prior = NULL, delta = NULL, control = list())Arguments
dat | A required binary item response matrix |
msQ | A multiple-strategy Q-matrix; the first column gives item numbers and the second column givesthe strategy number. See examples. |
model | CDM used; can be |
s | strategy selection parameter. It is equal to 1 by default. |
att.prior | mixing proportion parameters. |
delta | delta parameters in list format. |
control | a list of control arguments |
Value
an object of classGMSCDM with the following components:
- IRF
A matrix of success probabilities for each latent class on each item (IRF)
- delta
A list of delta parameters
- attribute
A list of estimated attribute profiles including EAP, MLE and MAP estimates.
- testfit
A list of test fit statistics including deviance, number of parameters, AIC and BIC
- sIRF
strategy-specific item response function
- pjmc
Probability of adopting each strategy on each item for each latent class
- sprv
Strategy pravelence
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.edu
References
Ma, W., & de la Torre, J. (2020). GDINA: An R Package for Cognitive Diagnosis Modeling.Journal of Statistical Software, 93(14), 1-26.
Ma, W., & Guo, W. (2019). Cognitive Diagnosis Models for Multiple Strategies.British Journal of Mathematical and Statistical Psychology.
See Also
GDINA for MS-DINA model and single strategy CDMs,andDTM for diagnostic tree model for multiple strategies in polytomous response data
Examples
## Not run: #################### data simulation###################set.seed(123)msQ <- matrix(c(1,1,0,1,1,2,1,0,2,1,1,0,3,1,0,1,4,1,1,1,5,1,1,1),6,4,byrow = T)# J x L - 00,10,01,11LC.prob <- matrix(c(0.2,0.7727,0.5889,0.8125,0.1,0.9,0.1,0.9,0.1,0.1,0.8,0.8,0.2,0.5,0.4,0.7,0.2,0.4,0.7,0.9),5,4,byrow=TRUE)N <- 10000att <- sample(1:4,N,replace=TRUE)dat <- 1*(t(LC.prob[,att])>matrix(runif(N*5),N,5))est <- GMSCDM(dat,msQ)# item response functionest$IRF# strategy specific IRFest$sIRF################################## Example 14 from GDINA function#################################Q <- matrix(c(1,1,1,1,0,1,2,0,1,1,2,1,1,0,0,3,1,0,1,0,4,1,0,0,1,5,1,1,0,0,5,2,0,0,1),ncol = 5,byrow = TRUE)d <- list( item1=c(0.2,0.7), item2=c(0.1,0.6), item3=c(0.2,0.6), item4=c(0.2,0.7), item5=c(0.1,0.8)) set.seed(123)sim <- simGDINA(N=1000,Q = Q, delta.parm = d, model = c("MSDINA","MSDINA","DINA", "DINA","DINA","MSDINA","MSDINA"))# simulated datadat <- extract(sim,what = "dat")# estimation# MSDINA need to be specified for each strategyest <- GDINA(dat,Q,model = c("MSDINA","MSDINA","DINA", "DINA","DINA","MSDINA","MSDINA"), control = list(conv.type = "neg2LL",conv.crit = .01))# Approximate the MS-DINA model using GMS DINA modelest2 <- GMSCDM(dat, Q, model = "rDINA", s = 10, control = list(conv.type = "neg2LL",conv.crit = .01))## End(Not run)Iterative latent-class analysis
Description
This function implements an iterative latent class analysis (ILCA; Jiang, 2019) approach to estimating attributes for cognitive diagnosis.
Usage
ILCA(dat, Q, seed.num = 5)Arguments
dat | A required binary item response matrix. |
Q | A required binary item and attribute association matrix. |
seed.num | seed number; Default = 5. |
Value
Estimated attribute profiles.
Author(s)
Zhehan Jiang, Peking University
References
Jiang, Z. (2019). Using the iterative latent-class analysis approach to improve attribute accuracy in diagnostic classification models.Behavior research methods, 1-10.
Examples
## Not run: ILCA(sim10GDINA$simdat, sim10GDINA$simQ)## End(Not run)Transformation between latent classes and latent groups
Description
This function gives the equivalent latent classes which have the same category successprobabilities for each category or item.
Usage
LC2LG(Q, sequential = FALSE, att.str = NULL)Arguments
Q | A required |
sequential | logical; whether the Q-matrix is a Qc-matrix for sequential models? |
att.str | attribute structure. See |
Value
An item or category by latent class matrix. In the G-DINA model,if item j measuresKj attributes,2^K latent classes canbe combined into2^{Kj} latent groups. This matrix giveswhich latent group each of2^K latent classes belongs to for each item.
Author(s)
Wenchao Ma, The University of Alabama,wenchao.ma@ua.edu
Jimmy de la Torre, The University of Hong Kong
Examples
attributepattern(3)q <- matrix(scan(text = "0 1 0 1 0 1 1 1 0"),ncol = 3)qLC2LG(Q = q)Multiple-choice models
Description
This function estimates the multiple-choice DINA model (de la Torre, 2009).
Usage
MCmodel( dat, Qc, model = "MCDINA", key = NULL, group = NULL, conv.crit = 0.001, maxitr = 2000, conv.type = "pr", SE = FALSE)Arguments
dat | A required |
Qc | A required category and attribute association matrix.The first column gives the item number, which mustbe numeric (i.e., 1,2,...) and match the number of column in the data.The second column indicates the coded category of each item. The number in the second column must matchwith the number in the data, but if a category is not coded, it should not be included in the Q-matrix.Entry 1 indicates that the attribute is measured by the category, and 0 otherwise.Note that the MC-DINA model assumes that the category with the largest number of 1s is the key and that the coded distractors shouldallow to assign examinees uniquely. |
model |
|
key | a numeric vector giving the key of each item. See |
group | Group membership vector if a multiple group model is considered. It must only contain whole numbers and start from 1. Thelength must be equal to the number of rows of the data. |
conv.crit | The convergence criterion for max absolute change in |
maxitr | The maximum iterations allowed. |
conv.type | convergence criteria; Can be |
SE | logical; estimating standard error of item parameters? Default is |
Value
an object of classMCmodel with the following components:
- prob.parm
A list of success probabilities for each reduced latent class on each item (IRF)
- prob.se
A list of standard errors of item parameters
- attribute
A list of estimated attribute profiles including EAP, MLE and MAP estimates.
- testfit
A list of test fit statistics including deviance, number of parameters, AIC and BIC
- R
expected # of individuals in each latent group choosing each option
- lik
posterior probability
- itr
Total # of iterations
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.edu
References
De La Torre, J. (2009). A cognitive diagnosis model for cognitively based multiple-choice options.Applied Psychological Measurement, 33, 163–183.
Ma, W., & de la Torre, J. (2020). GDINA: An R Package for Cognitive Diagnosis Modeling.Journal of Statistical Software, 93(14), 1-26.
See Also
GDINA for G-DINA model
Examples
## Not run: # check the format of the data # Entry 0 is not allowed head(sim10MCDINA$simdat) #--------------------------------- # check the format of the Q-matrix #--------------------------------- # Take item 1 as an example: # category 2 has a q-vector (1,0,0) # category 1 has a q-vector (0,1,0) # category 4 has a q-vector (1,1,0) # category 3 is not included in the Q-matrix because it is not coded # the order of the coded categories in the Q-matrix doesn't matter sim10MCDINA$simQ # Item coded cat A1 A2 A3 # 1 2 1 0 0 # 1 1 0 1 0 # 1 4 1 1 0 #... est <- MCmodel(sim10MCDINA$simdat,sim10MCDINA$simQ) est est$testfit #-------------------------------------- # Distractors involving more attributes #-------------------------------------- # some distractors may involve attributes that are not invovled by the key option # this is not allowed by the "original" MC-DINA (de la Torre, 2009) but is allowed # in the current implementation # Users need to specify the key for each item to appropriate handle such an issue # Note item 1 below: category 1 is the key (as indicated in the key argument below) # The distractor (category 4) involves an attribute not included by the key option Qc <- matrix(c(1,1,0,1,1, 1,2,0,1,0, 1,3,1,0,0, 1,4,1,0,1, 2,1,1,0,0, 2,3,1,1,0, 2,2,1,1,1, 3,4,1,1,1, 3,2,1,1,0, 3,3,0,1,1, 4,1,0,1,1, 4,2,0,0,1, 5,1,1,0,0, 6,3,0,1,0, 7,2,0,0,1, 8,4,1,0,0, 9,1,0,1,0, 10, 4,0,0,1),ncol = 5,byrow = TRUE) est2 <- MCmodel(sim10MCDINA2$simdat,Qc, key = c(1,2,4,1,1,3,2,4,1,4)) est2 est2$prob.parm est2$testfit est2$attribute ############################### # a multiple group model ###############################est <- MCmodel(sim10MCDINA$simdat, sim10MCDINA$simQ, group = rep(1:2, 1500))# log posterior of different groupsest$lik$logprior## End(Not run)Q-matrix validation
Description
Q-matrix validation for the (sequential) G-DINA model based on PVAF (de la Torre & Chiu, 2016; Najera, Sorrel, & Abad, 2019; Najera et al., 2020), stepwise Wald test (Ma & de la Torre, 2020) or mesa plot (de la Torre & Ma, 2016).All these methods are suitable for dichotomous and ordinal response data. If too many modifications are suggested based on the default PVAF method, you are suggested to try the stepwise Wald test method, iterative procedures or predicted cutoffs.You should always check the mesa plots for further examination.
Usage
Qval( GDINA.obj, method = "PVAF", iter = "none", eps = 0.95, digits = 4, wald.args = list(), iter.args = list(empty.att = FALSE, max.iter = 150, verbose = FALSE))## S3 method for class 'Qval'extract(object, what = c("sug.Q", "varsigma", "PVAF", "eps", "Q"), ...)## S3 method for class 'Qval'summary(object, ...)Arguments
GDINA.obj | an estimated model object of class |
method | which Q-matrix validation method is used? Can be either |
iter | implement the method iteratively? Can be |
eps | cutoff value for PVAF from 0 to 1. Default = 0.95. Note that it can also be -1, indicating the predicted cutoff based on Najera, Sorrel, and Abad (2019). |
digits | how many decimal places in each number? The default is 4. |
wald.args | a list of arguments for the stepwise Wald test method.
|
iter.args | a list of arguments for the iterative implementation.
|
object |
|
what | argument for S3 method |
... | additional arguments |
Value
An object of classQval. Elements that can beextracted usingextract method include:
- sug.Q
suggested Q-matrix
- Q
original Q-matrix
- varsigma
varsigma index
- PVAF
PVAF
Methods (by generic)
extract(Qval): extract various elements fromQvalobjectssummary(Qval): print summary information
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.eduMiguel A. Sorrel, Universidad Autónoma de MadridJimmy de la Torre, The University of Hong Kong
References
de la Torre, J. & Chiu, C-Y. (2016). A General Method of Empirical Q-matrix Validation.Psychometrika, 81, 253-273.
de la Torre, J., & Ma, W. (2016, August). Cognitive diagnosis modeling: A general framework approach and its implementation in R. A Short Course at the Fourth Conference on Statistical Methods in Psychometrics, Columbia University, New York.
Ma, W., & de la Torre, J. (2020). An empirical Q-matrix validation method for the sequential G-DINA model.British Journal of Mathematical and Statistical Psychology, 73, 142-163.
Najera, P., Sorrel, M. A., & Abad, F.J. (2019). Reconsidering cutoff points in the general method of empirical Q-matrix validation.Educational and Psychological Measurement, 79, 727-753.
Najera, P., Sorrel, M. A., de la Torre, J., & Abad, F. J. (2020). Improving robustness in Q-matrix validation using an iterative and dynamic procedure.Applied Psychological Measurement.
See Also
Examples
## Not run: ################################## Binary response#################################dat <- sim10GDINA$simdatQ <- sim10GDINA$simQQ[10,] <- c(0,1,0)# Fit the G-DINA modelmod1 <- GDINA(dat = dat, Q = Q, model = "GDINA")# Q-validation using de la Torre and Chiu's methodpvaf <- Qval(mod1,method = "PVAF",eps = 0.95)pvafextract(pvaf,what = "PVAF")#See also:extract(pvaf,what = "varsigma")extract(pvaf,what = "sug.Q")# Draw mesa plots using the function plotplot(pvaf,item=10)#The stepwise Wald teststepwise <- Qval(mod1,method = "wald")stepwiseextract(stepwise,what = "PVAF")#See also:extract(stepwise,what = "varsigma")extract(stepwise,what = "sug.Q")#Set eps = -1 to determine the cutoff empiricallypvaf2 <- Qval(mod1,method = "PVAF",eps = -1)pvaf2#Iterative procedure (test-attribute level)pvaf3 <- Qval(mod1, method = "PVAF", eps = -1, iter = "test.att", iter.args = list(verbose = 1))pvaf3################################## Ordinal response#################################seq.est <- GDINA(sim20seqGDINA$simdat,sim20seqGDINA$simQ, sequential = TRUE)stepwise <- Qval(seq.est, method = "wald")## End(Not run)Generate hierarchical attribute structures
Description
This function can be used to generate hierarchical attributes structures, andto provide prior joint attribute distribution with hierarchical structures.
Usage
att.structure(hierarchy.list = NULL, K, Q, att.prob = "uniform")Arguments
hierarchy.list | a list specifying the hierarchical structure between attributes. Eachelement in this list specifies a DIRECT prerequisite relation between two or more attributes.See |
K | the number of attributes involved in the assessment |
Q | Q-matrix |
att.prob | How are the probabilities for latent classes simulated? It can be |
Value
att.str reduced latent classes under the specified hierarchical structure
impossible.latentclass impossible latent classes under the specified hierarchical structure
att.prob probabilities for all latent classes; 0 for impossible latent classes
Author(s)
Wenchao Ma, The University of Alabama,wenchao.ma@ua.edu
Jimmy de la Torre, The University of Hong Kong
See Also
Examples
## Not run: ################### Leighton et al. (2004, p.210)#################### linear structure A1->A2->A3->A4->A5->A6K <- 6linear=list(c(1,2),c(2,3),c(3,4),c(4,5),c(5,6))att.structure(linear,K)# convergent structure A1->A2->A3->A5->A6;A1->A2->A4->A5->A6K <- 6converg <- list(c(1,2),c(2,3),c(2,4), c(3,4,5), #this is how to show that either A3 or A4 is a prerequisite to A5 c(5,6))att.structure(converg,K)# convergent structure [the difference between this one and the previous one is that# A3 and A4 are both needed in order to master A5]K <- 6converg2 <- list(c(1,2),c(2,3),c(2,4), c(3,5), #this is how to specify that both A3 and A4 are needed for A5 c(4,5), #this is how to specify that both A3 and A4 are needed for A5 c(5,6))att.structure(converg2,K)# divergent structure A1->A2->A3;A1->A4->A5;A1->A4->A6diverg <- list(c(1,2), c(2,3), c(1,4), c(4,5), c(4,6))att.structure(diverg,K)# unstructured A1->A2;A1->A3;A1->A4;A1->A5;A1->A6unstru <- list(c(1,2),c(1,3),c(1,4),c(1,5),c(1,6))att.structure(unstru,K)## See Example 4 and 5 in GDINA function## End(Not run)Generate all possible attribute patterns
Description
This function generates all possible attribute patterns. The Q-matrix needs to be specified for polytomous attributes.
Usage
attributepattern(K, Q)Arguments
K | number of attributes |
Q | Q-matrix; required when Q-matrix is polytomous |
Value
A2^K\times K matrix consisting of attribute profiles for2^K latent classes
Author(s)
Wenchao Ma, The University of Alabama,wenchao.ma@ua.edu
Jimmy de la Torre, The University of Hong Kong
Examples
attributepattern(3)q <- matrix(scan(text = "0 1 2 1 0 1 1 2 0"),ncol = 3)qattributepattern(Q=q)q <- matrix(scan(text = "0 1 1 1 0 1 1 1 0"),ncol = 3)qattributepattern(K=ncol(q),Q=q)Q-matrix validation, model selection and calibration in one run
Description
autoGDINA conducts a series of CDM analyses within the G-DINA framework. Particularly,the GDINA model is fitted to the data first using theGDINA function;then, the Q-matrix is validated using the functionQval.Based on the suggested Q-matrix, the data is fitted by the G-DINA model again, followedby an item level model selection via the Wald test usingmodelcomp. Lastly,the selected models are calibrated based on the suggested Q-matrix using theGDINA function.The Q-matrix validation and item-level model selection can be disabled by the users.Possible reduced CDMs for Wald test include the DINA model, the DINO model, A-CDM, LLM and RRUM.SeeDetails for the rules of item-level model selection.
Usage
autoGDINA( dat, Q, modelselection = TRUE, modelselectionrule = "simpler", alpha.level = 0.05, modelselection.args = list(), Qvalid = TRUE, Qvalid.args = list(), GDINA1.args = list(), GDINA2.args = list(), CDM.args = list())## S3 method for class 'autoGDINA'summary(object, ...)Arguments
dat | A required |
Q | A required matrix; The number of rows occupied by a single-strategy dichotomous item is 1, by a polytomous item isthe number of nonzero categories, and by a mutiple-strategy dichotomous item is the number of strategies.The number of column is equal to the number of attributes if all items are single-strategy dichotomous items, butthe number of attributes + 2 if any items are polytomous or have multiple strategies.For a polytomous item, the first column represents the item number and the second column indicates the nonzero category number.For a multiple-strategy dichotomous item, the first column represents the item number and the second column indicates the strategy number.For binary attributes, 1 denotes the attributes are measured by the items and 0 means the attributes are notmeasured. For polytomous attributes, non-zero elements indicate which levelof attributes are needed (see Chen, & de la Torre, 2013). See |
modelselection | logical; conducting model selection or not? |
modelselectionrule | how to conducted model selection? Possible options include |
alpha.level | nominal level for the Wald test. The default is 0.05. |
modelselection.args | arguments passed to |
Qvalid | logical; validate Q-matrix or not? |
Qvalid.args | arguments passed to |
GDINA1.args | arguments passed to GDINA function for initial G-DINA calibration |
GDINA2.args | arguments passed to GDINA function for the second G-DINA calibration |
CDM.args | arguments passed to GDINA function for final calibration |
object | GDINA object for various S3 methods |
... | additional arguments |
Details
After the Wald statistics for each reduced CDM were calculated for each item, thereduced models with p values less than the pre-specified alpha level were rejected.If all reduced models were rejected for an item, the G-DINA model was used as the best model;if at least one reduced model was retained, three diferent rules can be implemented for selectingthe best model:
Whenmodelselectionrule issimpler:
If (a) the DINA or DINO modelwas one of the retained models, then the DINA or DINO model with the larger pvalue was selected as the best model; but if (b) both DINA and DINO were rejected, the reducedmodel with the largest p value was selected as the best model for this item. Note thatwhen the p-values of several reduced models were greater than 0.05, the DINA and DINO models werepreferred over the A-CDM, LLM, and R-RUM because of their simplicity. This procedure is originallyproposed by Ma, Iaconangelo, and de la Torre (2016).
Whenmodelselectionrule islargestp:
The reduced model with the largest p-values is selected as the most appropriate model.
Whenmodelselectionrule isDS:
The reduced model with non-significant p-values but the smallest dissimilarity index is selected as the most appropriate model.Dissimilarity index can be viewed as an effect size measure, which quatifies how dis-similar the reduced model is from theG-DINA model (See Ma, Iaconangelo, and de la Torre, 2016 for details).
Value
a list consisting of the following elements:
- GDINA1.obj
initial GDINA calibration of class
GDINA- GDINA2.obj
second GDINA calibration of class
GDINA- Qval.obj
Q validation object of class
Qval- Wald.obj
model comparison object of class
modelcomp- CDM.obj
Final CDM calibration of class
GDINA
Methods (by generic)
summary(autoGDINA): print summary information
Note
ReturnedGDINA1.obj,GDINA2.obj andCDM.obj are objects of classGDINA,and all S3 methods suitable forGDINA objects can be applied. SeeGDINA andextract.Similarly, returnedQval.obj andWald.obj are objects of classQval andmodelcomp.
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.edu
References
Ma, W., & de la Torre, J. (2020). GDINA: An R Package for Cognitive Diagnosis Modeling.Journal of Statistical Software, 93(14), 1-26.
Ma, W., Iaconangelo, C., & de la Torre, J. (2016). Model similarity, model selection and attribute classification.Applied Psychological Measurement, 40, 200-217.
See Also
Examples
## Not run: # simulated responsesQ <- sim10GDINA$simQdat <- sim10GDINA$simdat#misspecified QmisQ <- QmisQ[10,] <- c(0,1,0)out1 <- autoGDINA(dat,misQ,modelselectionrule="largestp")out1summary(out1)AIC(out1$CDM.obj)# simulated responsesQ <- sim30GDINA$simQdat <- sim30GDINA$simdat#misspecified QmisQ <- QmisQ[1,] <- c(1,1,0,1,0)auto <- autoGDINA(dat,misQ,Qvalid = TRUE, Qvalid.args = list(method = "wald"), modelselectionrule="simpler")autosummary(auto)AIC(auto$CDM.obj)#using the other selection ruleout11 <- autoGDINA(dat,misQ,modelselectionrule="simpler", modelselection.args = list(models = c("DINO","DINA")))out11summary(out11)# disable model selection functionout12 <- autoGDINA(dat,misQ,modelselection=FALSE)out12summary(out12)# Disable Q-matrix validationout3 <- autoGDINA(dat = dat, Q = misQ, Qvalid = FALSE)out3summary(out3)## End(Not run)Create a block diagonal matrix
Description
Create a block diagonal matrix
Usage
bdiagMatrix(mlist, fill = 0)Arguments
mlist | a list of matrices |
fill | value to fill the non-diagnoal elements |
Value
a block diagonal matrix
See Also
bdiag inMatrix
Examples
m1 <- bdiagMatrix(list(matrix(1:4, 2), diag(3)))m2 <- bdiagMatrix(list(matrix(1:4, 2), diag(3)),fill = NA)Calculating standard errors and variance-covariance matrix using bootstrap methods
Description
This function conducts nonparametric and parametric bootstrap to calculate standard errors of model parameters.Parametric bootstrap is only applicable to single group models.
Usage
bootSE( GDINA.obj, bootsample = 50, type = "nonparametric", cores = 1, seed = 12345)Arguments
GDINA.obj | an object of class GDINA |
bootsample | the number of bootstrap samples |
type | type of bootstrap method. Can be |
cores | number of cores to be used for calculation; Default = 1; if |
seed | random seed for resampling |
Value
itemparm.se standard errors for item probability of success in list format
delta.se standard errors for delta parameters in list format
lambda.se standard errors for structural parameters of joint attribute distribution
boot.est resample estimates
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.edu
References
Ma, W., & de la Torre, J. (2020). GDINA: An R Package for Cognitive Diagnosis Modeling.Journal of Statistical Software, 93(14), 1-26.
Examples
## Not run: # For illustration, only 5 resamples are run# results are definitely not reliabledat <- sim30GDINA$simdatQ <- sim30GDINA$simQfit <- GDINA(dat = dat, Q = Q, model = "GDINA",att.dist = "higher.order")boot.fit <- bootSE(fit,bootsample = 5,seed=123)boot.fit$delta.seboot.fit$lambda.se## End(Not run)Combine R Objects by Columns
Description
Combine a sequence of vector, matrix or data-frame arguments by columns. Vector is treated as a column matrix.
Usage
cjoint(..., fill = NA)Arguments
... | vectors or matrices |
fill | a scalar used when these objects have different number of rows. |
Value
a data frame
See Also
Examples
cjoint(2,c(1,2,3,4),matrix(1:6,2,3))cjoint(v1 = 2, v2 = c(3,2), v3 = matrix(1:6,3,2), v4 = data.frame(c(3,4,5,6,7),rep("x",5)),fill = 99)Generate design matrix
Description
This function generates the design matrix for an item
Usage
designmatrix(Kj = NULL, model = "GDINA", Qj = NULL, no.bugs = 0)Arguments
Kj | Required except for the MS-DINA model; The number of attributes required for item j |
model | the model associated with the design matrix; It can be "GDINA","DINA","DINO", "ACDM","LLM", "RRUM", "MSDINA", "BUGDINO", and "SISM".The default is "GDINA". Note that models "LLM" and "RRUM" have the same design matrix as the "ACDM". |
Qj | the Q-matrix for item j; This is required for "MSDINA", and "SISM" models; The number of rows is equal to the numberof strategies for "MSDINA", and the number of columns is equal to the number of attributes. |
no.bugs | the number of bugs (or misconceptions). Note that bugs must be given in the last no.bugs columns. |
Value
a design matrix (Mj). See de la Torre (2011) for details.
References
de la Torre, J. (2011). The generalized DINA model framework.Psychometrika, 76, 179-199.
Examples
## Not run: designmatrix(Kj = 2, model = "GDINA")designmatrix(Kj = 3, model = "DINA")msQj <- matrix(c(1,0,0,1, 1,1,0,0),nrow=2,byrow=TRUE)designmatrix(model = "MSDINA",Qj = msQj)## End(Not run)Differential item functioning for cognitive diagnosis models
Description
This function is used to detect differential item functioning using the Wald test (Hou, de la Torre, & Nandakumar, 2014; Ma, Terzi, & de la Torre, 2021) and the likelihood ratiotest (Ma, Terzi, & de la Torre, 2021). The forward anchor item search procedure developed in Ma, Terzi, and de la Torre (2021) was implemented. Note that it can only detect DIF for two groups currently.
Usage
dif( dat, Q, group, model = "GDINA", sequential = FALSE, method = "wald", anchor.items = NULL, dif.items = "all", p.adjust.methods = "holm", approx = FALSE, SE.type = 2, FS.args = list(on = FALSE, alpha.level = 0.05, maxit = 10, verbose = FALSE), ...)## S3 method for class 'dif'summary(object, ...)Arguments
dat | item responses from two groups; missing data need to be coded as |
Q | Q-matrix specifying the association between items and attributes |
group | a factor or a vector indicating the group each individual belongs to. Its length must be equal to the number of individuals. |
model | model for each item. |
sequential | Logical; whether a sequential model is fit to the data. Default is |
method | DIF detection method; It can be |
anchor.items | which items will be used as anchors? Default is |
dif.items | which items are subject to DIF detection? Default is |
p.adjust.methods | adjusted p-values for multiple hypothesis tests. This is conducted using |
approx | Whether an approximated LR test is implemented? If TRUE, parameters of items except the studied one will not be re-estimated. |
SE.type | Type of standard error estimation methods for the Wald test. |
FS.args | arguments for the forward anchor item search procedure developed in Ma, Terzi, and de la Torre (2021). A list with the following elements:
|
... | arguments passed to GDINA function for model calibration |
object | dif object for S3 method |
Value
A data frame giving the Wald statistics and associated p-values.
Methods (by generic)
summary(dif): print summary information
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.eduJimmy de la Torre, The University of Hong Kong
References
Hou, L., de la Torre, J., & Nandakumar, R. (2014). Differential item functioning assessment in cognitive diagnostic modeling: Application of the Wald test toinvestigate DIF in the DINA model.Journal of Educational Measurement, 51, 98-125.
Ma, W., Terzi, R., & de la Torre, J. (2021). Detecting differential item functioning using multiple-group cognitive diagnosis models.Applied Psychological Measurement.
See Also
Examples
## Not run: set.seed(123456)N <- 3000Q <- sim30GDINA$simQgs <- matrix(.2,ncol = 2, nrow = nrow(Q))# By default, individuals are simulated from uniform distribution# and deltas are simulated randomlysim1 <- simGDINA(N,Q,gs.parm = gs,model="DINA")sim2 <- simGDINA(N,Q,gs.parm = gs,model=c(rep("DINA",nrow(Q)-1),"DINO"))dat <- rbind(extract(sim1,"dat"),extract(sim2,"dat"))gr <- rep(c("G1","G2"),each=N)# DIF using Wald testdif.wald <- dif(dat, Q, group=gr, method = "Wald")dif.wald# DIF using LR testdif.LR <- dif(dat, Q, group=gr, method="LR")dif.LR# DIF using Wald test + forward search algorithmdif.wald.FS <- dif(dat, Q, group=gr, method = "Wald", FS.args = list(on = TRUE, verbose = TRUE))dif.wald.FS# DIF using LR test + forward search algorithmdif.LR.FS <- dif(dat, Q, group=gr, method = "LR", FS.args = list(on = TRUE, verbose = TRUE))dif.LR.FS## End(Not run)extract elements from objects of various classes
Description
A generic function to extract elements from objects of classGDINA,itemfit,modelcomp,Qval orsimGDINA. Thispage gives the elements that can be extracted from the classGDINA.To see what can be extracted fromitemfit,modelcomp, andQval, go to the corresponding function help page.
Objects which can be extracted fromGDINA objects include:
- AIC
AIC
- att.prior
attribute prior weights for calculating marginalized likelihood in the last EM iteration
- attributepattern
all attribute patterns involved in the current calibration
- BIC
BIC
- CAIC
Consistent AIC
- catprob.cov
covariance matrix of item probability parameter estimates; Need to specify
SE.type- catprob.parm
item parameter estimates
- catprob.se
standard error of item probability parameter estimates; Need to specify
SE.type- convergence
TRUEif the calibration is converged.- dat
raw data
- del.ind
deleted observation number
- delta.cov
covariance matrix of delta parameter estimates; Need to specify
SE.type- delta.parm
delta parameter estimates
- delta.se
standard error of delta parameter estimates; Need to specify
SE.type- designmatrix
A list of design matrices for each item/category
- deviance
deviance, or negative two times observed marginal log likelihood
- discrim
GDINA discrimination index
- expectedCorrect
expected # of examinees in each latent group answering item correctly
- expectedTotal
expected # of examinees in each latent group
- higher.order
higher-order model specifications
- LCprob.parm
success probabilities for all latent classes
- logLik
observed marginal log likelihood
- linkfunc
link functions for each item
- initial.catprob
initial item category probability parameters
- natt
number of attributes
- ncat
number of categories
- ngroup
number of groups
- nitem
number of items
- nitr
number of EM iterations
- nobs
number of observations, or sample size
- nLC
number of latent classes
- prevalence
prevalence of each attribute
- posterior.prob
posterior weights for each latent class
- reduced.LG
Reduced latent group for each item
- SABIC
Sample size Adusted BIC
- sequential
is a sequential model fitted?
Usage
extract(object, what, ...)Arguments
object | objects from class |
what | what to extract |
... | additional arguments |
Examples
## Not run: dat <- sim10GDINA$simdatQ <- sim10GDINA$simQfit <- GDINA(dat = dat, Q = Q, model = "GDINA")extract(fit,"discrim")extract(fit,"designmatrix")## End(Not run)Extract log-likelihood for each individual
Description
Extract individual log-likelihood.
Usage
indlogLik(object, ...)Arguments
object | GDINA object |
... | additional arguments |
Examples
## Not run: dat <- sim10GDINA$simdatQ <- sim10GDINA$simQfit <- GDINA(dat = dat, Q = Q, model = "GDINA")iL <- indlogLik(fit)iL[1:6,]## End(Not run)Extract log posterior for each individual
Description
Extract individual log posterior.
Usage
indlogPost(object, ...)Arguments
object | GDINA object |
... | additional arguments |
Examples
## Not run: dat <- sim10GDINA$simdatQ <- sim10GDINA$simQfit <- GDINA(dat = dat, Q = Q, model = "GDINA")iP <- indlogPost(fit)iP[1:6,]## End(Not run)Item fit statistics
Description
Calculate item fit statistics (Chen, de la Torre, & Zhang, 2013) and draw heatmap plot for item pairs
Usage
itemfit( GDINA.obj, person.sim = "post", p.adjust.methods = "holm", cor.use = "pairwise.complete.obs", digits = 4, N.resampling = NULL, randomseed = 123456)## S3 method for class 'itemfit'extract(object, what, ...)## S3 method for class 'itemfit'summary(object, ...)Arguments
GDINA.obj | An estimated model object of class |
person.sim | Simulate expected responses from the posterior or based on EAP, MAP and MLE estimates. |
p.adjust.methods | p-values for the proportion correct, transformed correlation, and log-odds ratiocan be adjusted for multiple comparisons at test and item level. This is conducted using |
cor.use | how to deal with missing values when calculating correlations? This argument will be passed to |
digits | How many decimal places in each number? The default is 4. |
N.resampling | the sample size of resampling. By default, it is the maximum of 1e+5 and ten times of current sample size. |
randomseed | random seed; This is used to make sure the results are replicable. The default random seed is 123456. |
object | objects of class |
what | argument for S3 method |
... | additional arguments |
Value
an object of classitemfit consisting of several elements that can be extracted usingmethodextract. Components that can be extracted include:
- p
the proportion correct statistics, adjusted and unadjusted p values for each item
- r
the transformed correlations, adjusted and unadjusted p values for each item pair
- logOR
the log odds ratios, adjusted and unadjusted p values for each item pair
- maxitemfit
the maximum proportion correct, transformed correlation, and log-odds ratio for each item with associated item-level adjusted p-values
Methods (by generic)
extract(itemfit): extract various elements fromitemfitobjectssummary(itemfit): print summary information
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.eduJimmy de la Torre, The University of Hong Kong
References
Chen, J., de la Torre, J., & Zhang, Z. (2013). Relative and Absolute Fit Evaluation in Cognitive Diagnosis Modeling.Journal of Educational Measurement, 50, 123-140.
Ma, W., & de la Torre, J. (2020). GDINA: An R Package for Cognitive Diagnosis Modeling.Journal of Statistical Software, 93(14), 1-26.
Examples
## Not run: dat <- sim10GDINA$simdatQ <- sim10GDINA$simQmod1 <- GDINA(dat = dat, Q = Q, model = "GDINA")mod1itmfit <- itemfit(mod1)# Print "test-level" item fit statistics# p-values are adjusted for multiple comparisons# for proportion correct, there are J comparisons# for log odds ratio and transformed correlation,# there are J*(J-1)/2 comparisonsitmfit# The following gives maximum item fit statistics for# each item with item level p-value adjustment# For each item, there are J-1 comparisons for each of# log odds ratio and transformed correlationsummary(itmfit)# use extract to extract various componentsextract(itmfit,"r")mod2 <- GDINA(dat,Q,model="DINA")itmfit2 <- itemfit(mod2)#misfit heatmapplot(itmfit2)itmfit2## End(Not run)Item fit statistics from the power-divergence family
Description
Calculate item fit statistics from the power-divergence family
Usage
itemfitPD( GDINA.obj, lambda = 2/3, bootstrap = FALSE, R = 1000, Stone = FALSE, init.parm = FALSE, p.adjust.method = "holm", person.sim = "post", cores = 2, digits = 4, bound = 1e-10, seed = 123456)Arguments
GDINA.obj | Object containing a model fitted with the |
lambda | Numeric; parameter for the power-divergence fit statistic. |
bootstrap | Logical; whether parametric bootstrap should be used. |
R | Integer; number of replicates in the bootstrap procedure if used. |
Stone | Logical; whether Stone indices should be computed (only available if |
init.parm | Logical; whether the estimated item parameters are used in the estimation of the bootstrap replications. |
p.adjust.method | p-values can be adjusted for multiple comparisons at item level. This is conducted using |
person.sim | Character; how to simulate attribute profiles in the bootstrap replications. |
cores | Integer; number of cores for parallelization during bootstrap. |
digits | Integer; number of decimal digits to report. |
bound | Numeric; minimum possible value for probabilities. |
seed | random seed. |
Value
an object of classitemfitPD consisting of several elements including:
- p
the proportion correct statistics, adjusted and unadjusted p values for each item
- r
the transformed correlations, adjusted and unadjusted p values for each item pair
- logOR
the log odds ratios, adjusted and unadjusted p values for each item pair
- maxitemfit
the maximum proportion correct, transformed correlation, and log-odds ratio for each item with associated item-level adjusted p-values
#' @importFrom foreach
Author(s)
Pablo NajeraUniversidad Pontificia Comillaspnajera@comillas.edu
Wenchao MaUniversity of Minnesotawma@umn.edu
References
Najera, P., Ma, W., Sorrel, M. A. and Abad, F. J. (Under review). Assessing Item-Level Fit for the Sequential G-DINA Model.
Examples
## Not run: dat <- sim10GDINA$simdatQ <- sim10GDINA$simQmod1 <- GDINA(dat = dat, Q = Q, model = "GDINA")mod1PDfit <- itemfitPD(mod1)PDfitdat <- sim21seqDINA$simdatQ <- sim21seqDINA$simQsDINA <- GDINA(dat,Q,model="DINA",sequential = TRUE)PDfit <- itemfitPD(sDINA)PDfitPDfit <- itemfitPD(sDINA, bootstrap = TRUE, Stone = TRUE, cores = 10)PDfit## End(Not run)extract item parameters (deprecated)
Description
This function has been deprecated; usecoef instead.
Usage
itemparm( object, what = c("catprob", "gs", "delta", "rrum", "itemprob", "LCprob"), withSE = FALSE, SE.type = 2, digits = 4, ...)## S3 method for class 'GDINA'itemparm( object, what = c("catprob", "gs", "delta", "rrum", "itemprob", "LCprob"), withSE = FALSE, SE.type = 2, digits = 4, ...)Arguments
object | estimated GDINA object returned from |
what | what to show. |
withSE | show standard errors or not? |
SE.type | Type of standard errors. |
digits | how many decimal places for the ouput? |
... | additional arguments |
References
Philipp, M., Strobl, C., de la Torre, J., & Zeileis, A.(2017). On the estimation of standard errors in cognitive diagnosis models.Journal of Educational and Behavioral Statistics, 43, 88-115.
Examples
## Not run: dat <- sim10GDINA$simdatQ <- sim10GDINA$simQfit <- GDINA(dat = dat, Q = Q, model = "GDINA")# deprecateditemparm(fit)coef(fit)## End(Not run)Item-level model comparison using Wald, LR or LM tests
Description
This function evaluates whether the saturated G-DINA model can be replaced by reducedCDMs without significant loss in model data fit for each item using the Wald test, likelihood ratio (LR) test or Lagrange multiplier (LM) test.For Wald test, see de la Torre (2011), de la Torre and Lee (2013), Ma, Iaconangelo and de la Torre (2016) and Ma & de la Torre (2018) for details.For LR test and a two-step LR approximation procedure, see Sorrel, de la Torre, Abad, and Olea (2017), Ma (2017) and Ma & de la Torre (2019).For LM test, which is only applicable for DINA, DINO and ACDM, see Sorrel, Abad, Olea, de la Torre, and Barrada (2017).This function also calculates the dissimilaritybetween the reduced models and the G-DINA model, which can be viewed as a measure of effect size (Ma, Iaconangelo & de la Torre, 2016).
Usage
modelcomp( GDINA.obj = NULL, method = "Wald", items = "all", p.adjust.methods = "holm", models = c("DINA", "DINO", "ACDM", "LLM", "RRUM"), decision.args = list(rule = "largestp", alpha.level = 0.05, adjusted = FALSE), DS = FALSE, Wald.args = list(SE.type = 2, varcov = NULL), LR.args = list(LR.approx = FALSE), LM.args = list(reducedMDINA = NULL, reducedMDINO = NULL, reducedMACDM = NULL, SE.type = 2))## S3 method for class 'modelcomp'extract( object, what = c("stats", "pvalues", "adj.pvalues", "df", "DS", "selected.model"), digits = 4, ...)## S3 method for class 'modelcomp'summary(object, ...)Arguments
GDINA.obj | An estimated model object of class |
method | method for item level model comparison; can be |
items | a vector of items to specify the items for model comparsion |
p.adjust.methods | adjusted p-values for multiple hypothesis tests. This is conducted using |
models | a vector specifying which reduced CDMs are possible reduced CDMs for eachitem. The default is "DINA","DINO","ACDM","LLM",and "RRUM". |
decision.args | a list of options for determining the most appropriate models including (1) |
DS | whether dissimilarity index should be calculated? |
Wald.args | a list of options for Wald test including (1) |
LR.args | a list of options for LR test including for now only |
LM.args | a list of options for LM test including |
object | object of class |
what | argument for S3 method |
digits | How many decimal places in each number? The default is 4. |
... | additional arguments |
Details
After the test statistics for each reduced CDM were calculated for each item, thereduced models with p values less than the pre-specified alpha level were rejected.If all reduced models were rejected for an item, the G-DINA model was used as the best model;if at least one reduced model was retained, two diferent rules can be implemented for selectingthe best model specified in argumentdecision.args:
(1) whenrule="simpler",
If (a) the DINA or DINO modelwas one of the retained models, then the DINA or DINO model with the larger pvalue was selected as the best model; but if (b) both DINA and DINO were rejected, the reducedmodel with the largest p value was selected as the best model for this item. Note thatwhen the p-values of several reduced models were greater than 0.05, the DINA and DINO models werepreferred over the A-CDM, LLM, and R-RUM because of their simplicity.
(2) Whenrule="largestp" (default),
The reduced model with the largest p-values is selected as the most appropriate model.
Value
an object of classmodelcomp. Elements that can beextracted usingextract method include
- stats
Wald or LR statistics
- pvalues
p-values associated with the test statistics
- adj.pvalues
adjusted p-values
- df
degrees of freedom
- DS
dissimilarity between G-DINA and other CDMs
Methods (by generic)
extract(modelcomp): extract various elements frommodelcompobjectssummary(modelcomp): print summary information
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.eduMiguel A. Sorrel, Universidad Autonoma de MadridJimmy de la Torre, The University of Hong Kong
References
de la Torre, J., & Lee, Y. S. (2013). Evaluating the wald test for item-level comparison ofsaturated and reduced models in cognitive diagnosis.Journal of Educational Measurement, 50, 355-373.
Ma, W., Iaconangelo, C., & de la Torre, J. (2016). Model similarity, model selection and attribute classification.Applied Psychological Measurement, 40, 200-217.
Ma, W. (2017).A Sequential Cognitive Diagnosis Model for Graded Response: Model Development, Q-Matrix Validation,and Model Comparison. Unpublished doctoral dissertation. New Brunswick, NJ: Rutgers University.
Ma, W., & de la Torre, J. (2019). Category-Level Model Selection for the Sequential G-DINA Model.Journal of Educational and Behavioral Statistics. 44, 61-82.
Ma, W., & de la Torre, J. (2020). GDINA: An R Package for Cognitive Diagnosis Modeling.Journal of Statistical Software, 93(14), 1-26.
Sorrel, M. A., Abad, F. J., Olea, J., de la Torre, J., & Barrada, J. R. (2017). Inferential Item-Fit Evaluation in Cognitive Diagnosis Modeling.Applied Psychological Measurement, 41, 614-631.
Sorrel, M. A., de la Torre, J., Abad, F. J., & Olea, J. (2017). Two-Step Likelihood Ratio Test for Item-Level Model Comparison in Cognitive Diagnosis Models.Methodology, 13, 39-47.
See Also
Examples
## Not run: dat <- sim10GDINA$simdatQ <- sim10GDINA$simQ# --- GDINA model ---#fit <- GDINA(dat = dat, Q = Q, model = "GDINA")fit##################### Wald test####################w <- modelcomp(fit)w# wald statisticsextract(w,"stats")#p valuesextract(w,"pvalues")# selected modelsextract(w,"selected.model")############################ LR and Two-step LR test###########################lr <- modelcomp(fit,method = "LR")lrTwostepLR <- modelcomp(fit,items =c(6:10),method = "LR",LR.args = list(LR.approx = TRUE))TwostepLR############################ LM test###########################dina <- GDINA(dat = dat, Q = Q, model = "DINA")dino <- GDINA(dat = dat, Q = Q, model = "DINO")acdm <- GDINA(dat = dat, Q = Q, model = "ACDM")lm <- modelcomp(method = "LM",LM.args=list(reducedMDINA = dina,reducedMDINO = dino, reducedMACDM = acdm))lm## End(Not run)Model fit statistics
Description
Calculate various absolute model-data fit statistics
Usage
modelfit(GDINA.obj, CI = 0.9, ItemOnly = FALSE)Arguments
GDINA.obj | An estimated model object of class |
CI | numeric value from 0 to 1 indicating the range of the confidence interval for RMSEA. Default returns the 90% interval. |
ItemOnly | should joint attribute distribution parameters be considered? Default = FALSE. See Ma (2019). |
Details
Various model-data fit statistics including M2 statistic for G-DINA model with dichotmous responses (Liu, Tian, & Xin, 2016; Hansen, Cai, Monroe, & Li, 2016) and for sequential G-DINA model with graded responses (Ma, 2020).It also calculates SRMSR and RMSEA2.
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.edu
References
Hansen, M., Cai, L., Monroe, S., & Li, Z. (2016). Limited-information goodness-of-fit testing of diagnostic classification item response models.British Journal of Mathematical and Statistical Psychology. 69, 225–252.
Liu, Y., Tian, W., & Xin, T. (2016). An Application of M2 Statistic to Evaluate the Fit of Cognitive Diagnostic Models.Journal of Educational and Behavioral Statistics, 41, 3-26.
Ma, W. (2020). Evaluating the fit of sequential G-DINA model using limited-information measures.Applied Psychological Measurement, 44, 167-181.
Ma, W., & de la Torre, J. (2020). GDINA: An R Package for Cognitive Diagnosis Modeling.Journal of Statistical Software, 93(14), 1-26.
Maydeu-Olivares, A. (2013). Goodness-of-Fit Assessment of Item Response Theory Models.Measurement, 11, 71-101.
Examples
## Not run: dat <- sim10GDINA$simdatQ <- sim10GDINA$simQmod1 <- GDINA(dat = dat, Q = Q, model = "DINA")modelfit(mod1)## End(Not run)This function checks if monotonicity is violated
Description
If mastering an additional attribute lead to a lower probabilities of success,the monotonicity is violated.
Usage
monocheck(object, strict = FALSE)Arguments
object | object of class |
strict | whether a strict monotonicity is checked? |
Value
a logical vector for each item or category indicating whetherthe monotonicity is violated (TRUE) or not (FALSE)
Examples
## Not run: dat <- sim10GDINA$simdatQ <- sim10GDINA$simQmod1 <- GDINA(dat = dat, Q = Q, model = "GDINA")check <- monocheck(mod1)checkmod2 <- GDINA(dat = dat, Q = Q, model = "GDINA",mono.constraint = check)check2 <- monocheck(mod2)check2## End(Not run)Calculate the number of parameters
Description
Calculate the number of parameters for GDINA estimates.Returned the total number of parameters, the number of item parameters andthe number parameters of joint attribute distribution.
Usage
npar(object, ...)Arguments
object | GDINA object |
... | additional arguments |
Examples
## Not run: dat <- sim10GDINA$simdatQ <- sim10GDINA$simQfit <- GDINA(dat = dat, Q = Q, model = "GDINA")npar(fit)## End(Not run)calculate person (incidental) parameters
Description
Function to calculate various person attribute parameters, including"EAP","MAP", and"MLE", for EAP, MAP and MLE estimates ofattribute patterns (see Huebner & Wang, 2011),"mp" for marginal mastery probabilities, and"HO"for higher-order ability estimates if a higher-order model is fitted.SeeGDINA for examples.
Usage
personparm(object, what = c("EAP", "MAP", "MLE", "mp", "HO"), digits = 4, ...)Arguments
object | estimated GDINA object returned from |
what | what to extract; It can be |
digits | number of decimal places. |
... | additional arguments |
Author(s)
Wenchao Ma, The University of Alabama,wenchao.ma@ua.edu
Jimmy de la Torre, The University of Hong Kong
References
Huebner, A., & Wang, C. (2011). A note on comparing examinee classification methods for cognitive diagnosis models.Educational and Psychological Measurement, 71, 407-419.
Examples
## Not run: dat <- sim10GDINA$simdatQ <- sim10GDINA$simQfit <- GDINA(dat = dat, Q = Q, model = "GDINA")# EAPhead(personparm(fit))# MAPhead(personparm(fit, what = "MAP"))## End(Not run)Create plots for GDINA estimates
Description
Create various plots for GDINA estimates
Usage
## S3 method for class 'GDINA'plot( x, what = "IRF", item = "all", withSE = FALSE, SE.type = 2, person = 1, att.names = NULL, ...)Arguments
x | model object of class |
what | type of plot. Can be |
item | A scalar or vector specifying the item(s) for IRF plots. |
withSE | logical; Add error bar (estimate - SE, estimate + SE) to the IRF plots? |
SE.type | How is SE estimated. By default, it's based on OPG using incomplete information. |
person | A scalar or vector specifying the number of individuals for mastery plots. |
att.names | Optional; a vector for attribute names. |
... | additional arguments |
See Also
Examples
## Not run: dat <- sim10GDINA$simdatQ <- sim10GDINA$simQmod1 <- GDINA(dat = dat, Q = Q, model = "GDINA")#plot item response functions for item 10plot(mod1, item = 10)plot(mod1, what = "IRF", item = 10,withSE = TRUE)# plot mastery probabilities for individuals 4 and 10plot(mod1, what = "mp", person = c(4,10))plot(mod1, what = "mp", person = c(4,10,15),att.names = c("addition","subtraction","multiplication"))## End(Not run)Mesa plot for Q-matrix validation
Description
The mesa plot was first proposed by de la Torre and Ma (2016) for graphically illustrating the best q-vector(s) for each item.The q-vector on the edge of the mesa is likely to be the best q-vector.
Usage
## S3 method for class 'Qval'plot( x, item, type = "best", no.qvector = 10, data.label = TRUE, eps = "auto", original.q.label = FALSE, auto.ylim = TRUE, ...)Arguments
x | model object of class |
item | a vector specifying which item(s) the plots are drawn for |
type | types of the plot. It can be |
no.qvector | the number of q vectors that need to be plotted when |
data.label | logical; To show data label or not? |
eps | the cutoff for PVAF. If not |
original.q.label | logical; print the label showing the original q-vector or not? |
auto.ylim | logical; create y range automatically or not? |
... | additional arguments passed to |
References
de la Torre, J., & Ma, W. (2016, August). Cognitive diagnosis modeling: A general framework approach and its implementation in R. A Short Course at the Fourth Conference on Statistical Methods in Psychometrics, Columbia University, New York.
See Also
Examples
## Not run: dat <- sim10GDINA$simdatQ <- sim10GDINA$simQQ[1,] <- c(0,1,0)mod1 <- GDINA(dat = dat, Q = Q, model = "GDINA")out <- Qval(mod1,eps = 0.9)item <- c(1,2,10)plot(out,item=item,data.label=FALSE,type="all")plot(out,item=10,type="best",eps=0.95)plot(out,item=10,type="all",no.qvector=6)## End(Not run)Item fit plots
Description
Create plots of bivariate heatmap for item fit
Usage
## S3 method for class 'itemfit'plot(x, type = "all", adjusted = TRUE, ...)Arguments
x | model object of class |
type | type of heatmap plot |
adjusted | logical; plot adjusted or unadjusted p-values? |
... | additional arguments |
See Also
Examples
## Not run: dat <- sim10GDINA$simdatQ <- sim10GDINA$simQfit <- GDINA(dat = dat, Q = Q, model = "GDINA")ift <- itemfit(fit)# plot the adjusted p values for log odds or transformed correlationplot(ift)# plot unadjusted p values for log oddsplot(ift,adjusted = FALSE, type = "logOR")## End(Not run)Examination for the Certificate of Proficiency in English (ECPE) data
Description
Examination for the Certificate of Proficiency in English (ECPE) data (the grammar section) has been usedin Henson and Templin (2007), Templin and Hoffman (2013), Feng, Habing, and Huebner (2014), andTemplin and Bradshaw (2014), among others.
Usage
realdata_ECPEFormat
A list of responses and Q-matrix with components:
datResponses of 2922 examinees to 28 items.
QThe
28 \times 3Q-matrix.
Details
The data consists of responses of 2922 examinees to 28 items involving 3 attributes.Attribute 1 is morphosyntactic rules, Attribute 2 is cohesive rules andAttribute 3 is lexical rules.
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.edu
References
Ma, W., & de la Torre, J. (2020). GDINA: An R Package for Cognitive Diagnosis Modeling.Journal of Statistical Software, 93(14), 1-26.
Feng, Y., Habing, B. T., & Huebner, A. (2014). Parameter estimation of the reduced RUM using the EM algorithm.Applied Psychological Measurement, 38, 137-150.
Henson, R. A., & Templin, J. (2007, April). Large-scale language assessment using cognitive diagnosis models. Paper presented at the annual meeting of the National Council for Measurement in Education in Chicago, Illinois.
Templin, J., & Bradshaw, L. (2014). Hierarchical diagnostic classification models: A family of models for estimating and testing attribute hierarchies.Psychometrika, 79, 317-339.
Templin, J., & Hoffman, L. (2013). Obtaining diagnostic classification model estimates using Mplus.Educational Measurement: Issues and Practice, 32, 37-50.
Examples
## Not run: mod1 <- GDINA(realdata_ECPE$dat,realdata_ECPE$Q)mod1summary(mod1)mod2 <- GDINA(realdata_ECPE$dat,realdata_ECPE$Q,model="RRUM")mod2anova(mod1,mod2)# You may compare the following results with Feng, Habing, and Huebner (2014)coef(mod2,"rrum")# G-DINA with hierarchical structure# see Templin & Bradshaw, 2014ast <- att.structure(list(c(3,2),c(2,1)),K=3)est.gdina2 <- GDINA(realdata_ECPE$dat,realdata_ECPE$Q,model = "GDINA", control = list(conv.crit = 1e-6), att.str = list(c(3,2),c(2,1)))# see Table 7 in Templin & Bradshaw, 2014summary(est.gdina2)## End(Not run)Tatsuoka's fraction subtraction data
Description
Fraction Subtraction data (Tatsuoka, 1990, 2002) consists of responses of 536 examinees to 20 items measuring 8 attributes.
Usage
realdata_Tatsuoka1990Format
A list of responses and Q-matrix with components:
datresponses of 536 examinees to 20 items
QThe
20 \times 8Q-matrix
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.edu
References
Ma, W., & de la Torre, J. (2020). GDINA: An R Package for Cognitive Diagnosis Modeling.Journal of Statistical Software, 93(14), 1-26.Tatsuoka, K. K. (1990). Toward an integration of item-response theory and cognitive error diagnosis. In N. Frederiksen, R. Glaser, A. Lesgold, & M. Shafto (Eds.), Diagnostic monitoring of skill and knowledge acquisition (pp. 453-488). Hillsdale, NJ: Erlbaum.Tatsuoka, C. (2002). Data analytic methods for latent partially ordered classification models.Journal of the Royal Statistical Society, Series C, Applied Statistics, 51, 337-350.
Examples
## Not run: mod1 <- GDINA(realdata_Tatsuoka1990$dat,realdata_Tatsuoka1990$Q,model="DINA")mod1summary(mod1)# Higher order modelmod2 <- GDINA(realdata_Tatsuoka1990$dat,realdata_Tatsuoka1990$Q,model="DINA",att.dist="higher.order")mod2anova(mod1,mod2)## End(Not run)Count the frequency of a row vector in a data frame
Description
Count the frequency of a row vector in a data frame
Usage
rowMatch(df, vec = NULL)Arguments
df | a data frame or matrix |
vec | the vector for matching |
Value
count the number of vector vec in the data frame
row.no row numbers of the vector vec in the data frame
Examples
df <- data.frame(V1=c(1L,2L),V2=LETTERS[1:3],V3=rep(1,12))rowMatch(df,c(2,"B",1))Score function
Description
Calculate score function for each dichotomous item or each nonzero category for polytomous itemsOnly applicable to saturated model ofr joint attribute distribution
Usage
score(object, parm = "delta")Arguments
object | an object of class GDINA |
parm | Either |
Value
a list where elements give the score functions for each item or category
Examples
## Not run: dat <- sim10GDINA$simdatQ <- sim10GDINA$simQfit <- GDINA(dat = dat, Q = Q, model = "GDINA")score(fit)## End(Not run)Simulated data (10 items, G-DINA model)
Description
Simulated data, Q-matrix and item parameters for a 10-item test with 3 attributes.
Usage
sim10GDINAFormat
A list with components:
simdatsimulated responses of 1000 examinees
simQartificial Q-matrix
simItemparartificial item parameters (probability of success for each latent group)
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.edu
References
Ma, W., & de la Torre, J. (2020). GDINA: An R Package for Cognitive Diagnosis Modeling.Journal of Statistical Software, 93(14), 1-26.
Simulated data (10 items, MC-DINA model)
Description
Simulated data, Q-matrix and item parameters for a 10-item test measuring 3 attributes.
Usage
sim10MCDINAFormat
A list with components:
simdatsimulated responses of 3000 examinees
simQartificial Q-matrix
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.edu
References
Ma, W., & de la Torre, J. (2020). GDINA: An R Package for Cognitive Diagnosis Modeling.Journal of Statistical Software, 93(14), 1-26.
Simulated data (10 items, MC-DINA model)
Description
Simulated data, Q-matrix and item parameters for a 10-item test measuring 5 attributes.
Usage
sim10MCDINA2Format
A list with components:
simdatsimulated responses of 3000 examinees
simQartificial Q-matrix
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.edu
References
Ma, W., & de la Torre, J. (2020). GDINA: An R Package for Cognitive Diagnosis Modeling.Journal of Statistical Software, 93(14), 1-26.
Simulated data (20 items, sequential G-DINA model)
Description
Simulated data, Qc-matrix and item parameters for a 20-item test measuring 5 attributes.
Usage
sim20seqGDINAFormat
A list with components:
simdatsimulated polytomous responses of 2000 examinees
simQartificial Qc-matrix
simItemparartificial item parameters (category level probability of success for each latent group)
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.edu
References
Ma, W., & de la Torre, J. (2020). GDINA: An R Package for Cognitive Diagnosis Modeling.Journal of Statistical Software, 93(14), 1-26.
Simulated data (21 items, sequential DINA model)
Description
Simulated data, and Qc-matrix for a 21-item test measuring 5 attributes.
Usage
sim21seqDINAFormat
A list with components:
simdatsimulated responses of 2000 examinees
simQartificial Qc-matrix
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.edu
References
Ma, W., & de la Torre, J. (2020). GDINA: An R Package for Cognitive Diagnosis Modeling.Journal of Statistical Software, 93(14), 1-26.
Simulated data (30 items, DINA model)
Description
Simulated data, Q-matrix and item parameters for a 30-item test measuring 5 attributes.
Usage
sim30DINAFormat
A list with components:
simdatsimulated responses of 1000 examinees
simQartificial Q-matrix
simItemparartificial item parameters (probability of success for each latent group)
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.edu
References
Ma, W., & de la Torre, J. (2020). GDINA: An R Package for Cognitive Diagnosis Modeling.Journal of Statistical Software, 93(14), 1-26.
Simulated data (30 items, G-DINA model)
Description
Simulated data, Q-matrix and item parameters for a 30-item test measuring 5 attributes.
Usage
sim30GDINAFormat
A list with components:
simdatsimulated responses of 1000 examinees
simQartificial
30 \times 5Q-matrixsimItemparartificial item parameters(probability of success for each latent group)
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.edu
References
Ma, W., & de la Torre, J. (2020). GDINA: An R Package for Cognitive Diagnosis Modeling.Journal of Statistical Software, 93(14), 1-26.
Simulated data (30 items, polytomous G-DINA model)
Description
Simulated data, Q-matrix and item parameters for a 30-item test measuring 5 attributes.
Usage
sim30pGDINAFormat
A list with components:
simdatsimulated responses of 3000 examinees
simQartificial Q-matrix
simItemparartificial item parameters(probability of success for each latent group)
Simulating data for diagnostic tree model
Description
Data generation for diagnostic tree model
Usage
simDTM(N, Qc, gs.parm, Tmatrix, red.delta = NULL, att.gr = NULL)Arguments
N | sample size |
Qc | Association matrix between attributes (column) and PSEUDO items (row); The first column is item number andthe second column is the pseudo item number for each item. If a pseudo item has more than one nonzero categories,more than one rows are needed. |
gs.parm | the same as the gs.parm in simGDINA function in the GDINA package. It is a list with the same number ofelements as the number of rows in the Qc matrix |
Tmatrix | mapping matrix showing the relation between the OBSERVED responses (rows) and the PSEDUO items (columns);The first column gives the observed responses. |
red.delta | reduced delta parameters using logit link function |
att.gr | attribute group indicator |
Examples
## Not run: K=5g=0.2item.no <- rep(1:6,each=4)# the first node has three response categories: 0, 1 and 2node.no <- rep(c(1,1,2,3),6)Q1 <- matrix(0,length(item.no),K)Q2 <- cbind(7:(7+K-1),rep(1,K),diag(K))for(j in 1:length(item.no)) { Q1[j,sample(1:K,sample(3,1))] <- 1}Qc <- rbind(cbind(item.no,node.no,Q1),Q2)Tmatrix.set <- list(cbind(c(0,1,2,3,3),c(0,1,2,1,2),c(NA,0,NA,1,NA),c(NA,NA,0,NA,1)),cbind(c(0,1,2,3,4),c(0,1,2,1,2),c(NA,0,NA,1,NA),c(NA,NA,0,NA,1)),cbind(c(0,1),c(0,1)))Tmatrix <- Tmatrix.set[c(1,1,1,1,1,1,rep(3,K))]sim <- simDTM(N=2000,Qc=Qc,gs.parm=matrix(0.2,nrow(Qc),2),Tmatrix=Tmatrix)est <- DTM(dat=sim$dat,Qc=Qc,Tmatrix = Tmatrix)## End(Not run)Data simulation based on the G-DINA models
Description
Simulate responses based on the G-DINA model (de la Torre, 2011) and sequential G-DINA model(Ma & de la Torre, 2016), or CDMs subsumed by them, including the DINA model, DINO model, ACDM,LLM and R-RUM. Attributes can be simulated from uniform, higher-order or multivariate normaldistributions, or be supplied by users. SeeExamples andDetails forhow item parameter specifications. See the help page ofGDINAfor model parameterizations.
Usage
simGDINA( N, Q, gs.parm = NULL, delta.parm = NULL, catprob.parm = NULL, model = "GDINA", sequential = FALSE, no.bugs = 0, gs.args = list(type = "random", mono.constraint = TRUE), design.matrix = NULL, linkfunc = NULL, att.str = NULL, attribute = NULL, att.dist = "uniform", item.names = NULL, higher.order.parm = list(theta = NULL, lambda = NULL), mvnorm.parm = list(mean = NULL, sigma = NULL, cutoffs = NULL), att.prior = NULL, digits = 4)## S3 method for class 'simGDINA'extract( object, what = c("dat", "Q", "attribute", "catprob.parm", "delta.parm", "higher.order.parm", "mvnorm.parm", "LCprob.parm"), ...)Arguments
N | Sample size. |
Q | A required matrix; The number of rows occupied by a single-strategy dichotomous item is 1, by a polytomous item isthe number of nonzero categories, and by a mutiple-strategy dichotomous item is the number of strategies.The number of column is equal to the number of attributes if all items are single-strategy dichotomous items, butthe number of attributes + 2 if any items are polytomous or have multiple strategies.For a polytomous item, the first column represents the item number and the second column indicates the nonzero category number.For a multiple-strategy dichotomous item, the first column represents the item number and the second column indicates the strategy number.For binary attributes, 1 denotes the attributes are measured by the items and 0 means the attributes are notmeasured. For polytomous attributes, non-zero elements indicate which levelof attributes are needed. See |
gs.parm | A matrix or data frame for guessing and slip parameters. The number of rows occupied by a dichotomous item is 1, and by a polytomous item isthe number of nonzero categories. The number of columns must be 2, where the first column represents the guessing parameters (or |
delta.parm | A list of delta parameters of each latent group for each item or category. This may need to be used in conjunction withthe argument |
catprob.parm | A list of success probabilities of each latent group for each non-zero category of each item. See |
model | A character vector for each item or nonzero category, or a scalar which will be used for allitems or nonzero categories to specify the CDMs. The possible optionsinclude |
sequential | logical; |
no.bugs | the number of bugs (or misconceptions) for the |
gs.args | a list of options when
|
design.matrix | a list of design matrices; Its length must be equal to the number of items (or nonzero categories for sequential models). |
linkfunc | a vector of link functions for each item/category; It can be |
att.str | attribute structure. |
attribute | optional user-specified person attributes. It is a |
att.dist | A string indicating the distribution for attribute simulation. It can be |
item.names | A vector giving the name of items or categories. If it is |
higher.order.parm | A list specifying parameters for higher-order distribution for attributesif |
mvnorm.parm | a list of parameters for multivariate normal attribute distribution. |
att.prior | probability for each attribute pattern. Order is the same as that returned from |
digits | How many decimal places in each number? The default is 4. |
object | object of class |
what | argument for S3 method |
... | additional arguments |
Details
Item parameter specifications insimGDINA:
Item parameters can be specified in one of three different ways.
The first and probably the easiest way is to specify the guessing and slip parameters for each item or nonzero category usinggs.parm, which is a matrix or data frame forP(\bm{\alpha}_{lj}^*=0) and1-P(\bm{\alpha}_{lj}^*=1)for all items for dichotomous items andS(\bm{\alpha}_{ljh}^*=0) and1-S(\bm{\alpha}_{ljh}^*=1)for all nonzero categories for polytomous items. Note that1-P(\bm{\alpha}_{lj}^*=0)-P(\bm{\alpha}_{lj}^*=1) or1-S(\bm{\alpha}_{lj}^*=0)-S(\bm{\alpha}_{lj}^*=1) must be greater than 0.For generating ACDM, LLM, and RRUM, delta parameters are generated randomly iftype="random",or in a way that each required attribute contributes equally, as inMa, Iaconangelo, & de la Torre (2016) iftype="equal". For ACDM, LLM and RRUM, generateddelta parameters are always positive, which implies that monotonicity constraints are always satisfied.If the generating model is the G-DINA model,mono.constraint can be used to specify whether monotonicityconstraints should be satisfied.
The second way of simulating responses is to specify success probabilities (i.e.,P(\bm{\alpha}_{lj}^*)orS(\bm{\alpha}_{ljh}^*)) for each nonzero category of each item directlyusing the argumentcatprob.parm. If an item or category requiresK_j^* attributes,2^{K_j^*} success probabilitiesneed to be provided.catprob.parm must be a list, where each element gives the success probabilities for nonzero category of each item.Note that success probabilities cannot be negative or greater than one.
The third way is to specify delta parameters for data simulation. For DINA and DINO model, each nonzero category requires twodelta parameters. For ACDM, LLM and RRUM, if a nonzero category requiresK_j^* attributes,K_j^*+1 delta parametersneed to be specified. For the G-DINA model, a nonzero category requiringK_j^* attributes has2^{K_j^*} delta parameters.It should be noted that specifying delta parameters needs to ascertain the derived success probabilities are within the[0,1] interval.
Please note that you need to specify item parameters in ONLY one of these three ways. Ifgs.parm is specified, it will be used regardless ofthe inputs incatprob.parm anddelta.parm. Ifgs.parm is not specified,simGDINA will checkifdelta.parm is specified; if yes, it will be used for data generation. if bothgs.parm anddelta.parm are not specified,catprob.parm is used for data generation.
Value
an object of classsimGDINA. Elements that can be extracted using methodextractinclude:
- dat
simulated item response matrix
- Q
Q-matrix
- attribute
A
N \times Kmatrix for inviduals' attribute patterns- catprob.parm
a list of non-zero category success probabilities for each latent group
- delta.parm
a list of delta parameters
- higher.order.parm
Higher-order parameters
- mvnorm.parm
multivariate normal distribution parameters
- LCprob.parm
A matrix of item/category success probabilities for each latent class
Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.eduJimmy de la Torre, The University of Hong Kong
References
Chiu, C.-Y., Douglas, J. A., & Li, X. (2009). Cluster analysis for cognitive diagnosis: Theory and applications.Psychometrika, 74, 633-665.
de la Torre, J. (2011). The generalized DINA model framework.Psychometrika, 76, 179-199.
de la Torre, J., & Douglas, J. A. (2004). Higher-order latent trait models for cognitive diagnosis.Psychometrika, 69, 333-353.
Haertel, E. H. (1989). Using restricted latent class models to map the skill structure of achievement items.Journal of Educational Measurement, 26, 301-321.
Hartz, S. M. (2002). A bayesian framework for the unified model for assessing cognitive abilities:Blending theory with practicality (Unpublished doctoral dissertation). University of Illinois at Urbana-Champaign.
Junker, B. W., & Sijtsma, K. (2001). Cognitive assessment models with few assumptions, and connections with nonparametricitem response theory.Applied Psychological Measurement, 25, 258-272.
Ma, W., & de la Torre, J. (2016). A sequential cognitive diagnosis model for polytomous responses.British Journal of Mathematical and Statistical Psychology. 69, 253-275.
Ma, W., & de la Torre, J. (2020). GDINA: An R Package for Cognitive Diagnosis Modeling.Journal of Statistical Software, 93(14), 1-26.
Ma, W., Iaconangelo, C., & de la Torre, J. (2016). Model similarity, model selection and attribute classification.Applied Psychological Measurement, 40, 200-217.
Maris, E. (1999). Estimating multiple classification latent class models.Psychometrika, 64, 187-212.
Templin, J. L., & Henson, R. A. (2006). Measurement of psychological disorders using cognitive diagnosis models.Psychological Methods, 11, 287-305.
Examples
## Not run: ##################################################### Example 1 ## Data simulation (DINA) #####################################################N <- 500Q <- sim30GDINA$simQJ <- nrow(Q)gs <- data.frame(guess=rep(0.1,J),slip=rep(0.1,J))# Simulated DINA model; to simulate G-DINA model# and other CDMs, change model argument accordinglysim <- simGDINA(N,Q,gs.parm = gs,model = "DINA")# True item success probabilitiesextract(sim,what = "catprob.parm")# True delta parametersextract(sim,what = "delta.parm")# simulated dataextract(sim,what = "dat")# simulated attributesextract(sim,what = "attribute")##################################################### Example 2 ## Data simulation (RRUM) #####################################################N <- 500Q <- sim30GDINA$simQJ <- nrow(Q)gs <- data.frame(guess=rep(0.2,J),slip=rep(0.2,J))# Simulated RRUM# deltas except delta0 for each item will be simulated# randomly subject to the constraints of RRUMsim <- simGDINA(N,Q,gs.parm = gs,model = "RRUM")# simulated dataextract(sim,what = "dat")# simulated attributesextract(sim,what = "attribute")##################################################### Example 3 ## Data simulation (LLM) #####################################################N <- 500Q <- sim30GDINA$simQJ <- nrow(Q)gs <- data.frame(guess=rep(0.1,J),slip=rep(0.1,J))# Simulated LLM# By specifying type="equal", each required attribute is# assumed to contribute to logit(P) equallysim <- simGDINA(N,Q,gs.parm = gs,model = "LLM",gs.args = list (type="equal"))#check below for what the equal contribution meansextract(sim,what = "delta.parm")# simulated dataextract(sim,what = "dat")# simulated attributesextract(sim,what = "attribute")##################################################### Example 4 ## Data simulation (all CDMs) #####################################################set.seed(12345)N <- 500Q <- sim10GDINA$simQJ <- nrow(Q)gs <- data.frame(guess=rep(0.1,J),slip=rep(0.1,J))# Simulated different CDMs for different itemsmodels <- c("GDINA","DINO","DINA","ACDM","LLM","RRUM","GDINA","LLM","RRUM","DINA")sim <- simGDINA(N,Q,gs.parm = gs,model = models,gs.args = list(type="random"))# simulated dataextract(sim,what = "dat")# simulated attributesextract(sim,what = "attribute")##################################################### Example 5a ## Data simulation (all CDMs) ## using probability of success in list format ###################################################### success probabilities for each item need to be provided in list format as follows:# if item j requires Kj attributes, 2^Kj success probabilities# need to be specified# e.g., item 1 only requires 1 attribute# therefore P(0) and P(1) should be specified;# similarly, item 10 requires 3 attributes,# P(000),P(100),P(010)...,P(111) should be specified;# the latent class represented by each element can be obtained# by calling attributepattern(Kj)itemparm.list <- list(item1=c(0.2,0.9), item2=c(0.1,0.8), item3=c(0.1,0.9), item4=c(0.1,0.3,0.5,0.9), item5=c(0.1,0.1,0.1,0.8), item6=c(0.2,0.9,0.9,0.9), item7=c(0.1,0.45,0.45,0.8), item8=c(0.1,0.28,0.28,0.8), item9=c(0.1,0.4,0.4,0.8), item10=c(0.1,0.2,0.3,0.4,0.4,0.5,0.7,0.9))set.seed(12345)N <- 500Q <- sim10GDINA$simQ# When simulating data using catprob.parm argument,# it is not necessary to specify model and typesim <- simGDINA(N,Q,catprob.parm = itemparm.list)##################################################### Example 5b ## Data simulation (all CDMs) ## using probability of success in list format ## attribute has a linear structure #####################################################est <- GDINA(sim10GDINA$simdat,sim10GDINA$simQ,att.str = list(c(1,2),c(2,3)))# design matrix# link function# item probabilitiesip <- extract(est,"itemprob.parm")sim <- simGDINA(N=500,sim10GDINA$simQ,catprob.parm = ip,design.matrix = dm,linkfunc = lf,att.str = list(c(1,2),c(2,3)))##################################################### Example 6a ## Data simulation (all CDMs) ## using delta parameters in list format #####################################################delta.list <- list(c(0.2,0.7), c(0.1,0.7), c(0.1,0.8), c(0.1,0.7), c(0.1,0.8), c(0.2,0.3,0.2,0.1), c(0.1,0.35,0.35), c(-1.386294,0.9808293,1.791759), c(-1.609438,0.6931472,0.6), c(0.1,0.1,0.2,0.3,0.0,0.0,0.1,0.1))model <- c("GDINA","GDINA","GDINA","DINA","DINO","GDINA","ACDM","LLM","RRUM","GDINA")N <- 500Q <- sim10GDINA$simQsim <- simGDINA(N,Q,delta.parm = delta.list, model = model)##################################################### Example 6b ## Data simulation (all CDMs) ## using delta parameters in list format ## attribute has a linear structure #####################################################est <- GDINA(sim10GDINA$simdat,sim10GDINA$simQ,att.str = list(c(1,2),c(2,3)))# design matrix# link function# item probabilitiesip <- extract(est,"delta.parm")sim <- simGDINA(N=500,sim10GDINA$simQ,delta.parm = d,design.matrix = dm,linkfunc = lf,att.str = list(c(1,2),c(2,3)))##################################################### Example 7 ## Data simulation (higher order DINA model) #####################################################Q <- sim30GDINA$simQgs <- matrix(0.1,nrow(Q),2)N <- 500set.seed(12345)theta <- rnorm(N)K <- ncol(Q)lambda <- data.frame(a=rep(1,K),b=seq(-2,2,length.out=K))sim <- simGDINA(N,Q,gs.parm = gs, model="DINA", att.dist = "higher.order", higher.order.parm = list(theta = theta,lambda = lambda))##################################################### Example 8 ## Data simulation (higher-order CDMs) #####################################################Q <- sim30GDINA$simQgs <- matrix(0.1,nrow(Q),2)models <- c(rep("GDINA",5), rep("DINO",5), rep("DINA",5), rep("ACDM",5), rep("LLM",5), rep("RRUM",5))N <- 500set.seed(12345)theta <- rnorm(N)K <- ncol(Q)lambda <- data.frame(a=runif(K,0.7,1.3),b=seq(-2,2,length.out=K))sim <- simGDINA(N,Q,gs.parm = gs, model=models, att.dist = "higher.order", higher.order.parm = list(theta = theta,lambda = lambda))##################################################### Example 9 ## Data simulation (higher-order model) ## using the multivariate normal threshold model ###################################################### See Chiu et al., (2009)N <- 500Q <- sim10GDINA$simQK <- ncol(Q)gs <- matrix(0.1,nrow(Q),2)cutoffs <- qnorm(c(1:K)/(K+1))m <- rep(0,K)vcov <- matrix(0.5,K,K)diag(vcov) <- 1simMV <- simGDINA(N,Q,gs.parm = gs, att.dist = "mvnorm", mvnorm.parm=list(mean = m, sigma = vcov,cutoffs = cutoffs))##################################### Example 10 ## Simulation using ## user-specified att structure###################################### --- User-specified attribute structure ----#Q <- sim30GDINA$simQK <- ncol(Q)# divergent structure A1->A2->A3;A1->A4->A5;A1->A4->A6diverg <- list(c(1,2), c(2,3), c(1,4), c(4,5))struc <- att.structure(diverg,K)# data simulationN <- 1000# data simulationgs <- matrix(0.1,nrow(Q),2)simD <- simGDINA(N,Q,gs.parm = gs, model = "DINA",att.dist = "categorical",att.prior = struc$att.prob)##################################################### Example 11 ## Data simulation ## (GDINA with monotonicity constraints) #####################################################set.seed(12345)N <- 500Q <- sim30GDINA$simQJ <- nrow(Q)gs <- data.frame(guess=rep(0.1,J),slip=rep(0.1,J))# Simulated different CDMs for different itemssim <- simGDINA(N,Q,gs.parm = gs,model = "GDINA",gs.args=list(mono.constraint=TRUE))# True item success probabilitiesextract(sim,what = "catprob.parm")# True delta parametersextract(sim,what = "delta.parm")# simulated dataextract(sim,what = "dat")# simulated attributesextract(sim,what = "attribute")##################################################### Example 12 ## Data simulation ## (Sequential G-DINA model - polytomous responses) #####################################################set.seed(12345)N <- 2000# restricted Qc matrixQc <- sim20seqGDINA$simQ#total number of categoriesJ <- nrow(Qc)gs <- data.frame(guess=rep(0.1,J),slip=rep(0.1,J))# simulate sequential DINA modelsimseq <- simGDINA(N, Qc, sequential = TRUE, gs.parm = gs, model = "GDINA")# True item success probabilitiesextract(simseq,what = "catprob.parm")# True delta parametersextract(simseq,what = "delta.parm")# simulated dataextract(simseq,what = "dat")# simulated attributesextract(simseq,what = "attribute")##################################################### Example 13# DINA model Attribute generated using# categorical distribution####################################################Q <- sim10GDINA$simQgs <- matrix(0.1,nrow(Q),2)N <- 5000set.seed(12345)prior <- c(0.1,0.2,0,0,0.2,0,0,0.5)sim <- simGDINA(N,Q,gs.parm = gs, model="DINA", att.dist = "categorical",att.prior = prior)# check latent class sizestable(sim$att.group)/N##################################################### Example 14# MS-DINA model####################################################Q <- matrix(c(1,1,1,1,0,1,2,0,1,1,2,1,1,0,0,3,1,0,1,0,4,1,0,0,1,5,1,1,0,0,5,2,0,0,1),ncol = 5,byrow = TRUE)d <- list( item1=c(0.2,0.7), item2=c(0.1,0.6), item3=c(0.2,0.6), item4=c(0.2,0.7), item5=c(0.1,0.8)) set.seed(12345)sim <- simGDINA(N=1000,Q = Q, delta.parm = d, model = c("MSDINA","MSDINA","DINA","DINA","DINA","MSDINA","MSDINA"))# simulated dataextract(sim,what = "dat")# simulated attributesextract(sim,what = "attribute")############################################################### Example 15# reparameterized SISM model (Kuo, Chen, & de la Torre, 2018)# see GDINA function for more details################################################################ The Q-matrix used in Kuo, et al (2018)# The first four columns are for Attributes 1-4# The last three columns are for Bugs 1-3Q <- matrix(c(1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,1,1,1,0,1,0,1,1,0,1,1,0,1,1,1,0,0,1,1,1,1,1,0),ncol = 7,byrow = TRUE)J <- nrow(Q)N <- 500gs <- data.frame(guess=rep(0.1,J),slip=rep(0.1,J))sim <- simGDINA(N,Q,gs.parm = gs,model = "SISM",no.bugs=3)# True item success probabilitiesextract(sim,what = "catprob.parm")# True delta parametersextract(sim,what = "delta.parm")# simulated dataextract(sim,what = "dat")# simulated attributesextract(sim,what = "attribute")## End(Not run)Graphical user interface of the GDINA function
Description
An interactive Shiny application for running GDINA function. See Ma and de la Torre (2019) and de la Torre and Akbay (2019) for tutorials.
Usage
startGDINA()Author(s)
Wenchao Ma, The University of Minnesota,wma@umn.edu
References
de la Torre, J & Akbay, L. (2019). Implementation of Cognitive Diagnosis Modeling using the GDINA R Package.Eurasian Journal of Educational Research, 80, 171-192.
Ma, W., & de la Torre, J. (2019). Digital Module 05: Diagnostic measurement-The G-DINA framework. Educational Measurement: Issues and Practice, 39, 114-115.
Ma, W., & de la Torre, J. (2020). GDINA: An R Package for Cognitive Diagnosis Modeling.Journal of Statistical Software, 93(14), 1-26.
Examples
## Not run: library(shiny)library(shinydashboard)startGDINA()## End(Not run)Unique values in a vector
Description
Unique values in a vector
Usage
unique_only(vec)Arguments
vec | a vector |
Value
sorted unique values
See Also
Examples
vec <- c(4,2,3,5,4,4,4)unique_only(vec)# see the difference from uniqueunique(vec)vec <- letters[1:5]unique_only(vec)Generate unrestricted Qc matrix from an restricted Qc matrix
Description
Generate unrestricted Qc matrix from an restricted Qc matrix
Usage
unrestrQ(Qc)Arguments
Qc | an restricted Qc matrix |
Value
an unrestricted Qc matrix
Examples
Qc <- sim21seqDINA$simQcQcunrestrQ(Qc)