get.priority.RdThis function will provide the priorities of attributes for all items.
get.priority(
Y = NULL,
Q = NULL,
att.str = NULL,
CDM.obj = NULL,
mono.constraint = FALSE,
model = "GDINA"
)A required \(N\) × \(I\) matrix or data.frame consisting of the responses of N individuals
to \(N\) × \(I\) items. Missing values need to be coded as NA.
A required binary \(I\) × \(K\) matrix containing the attributes not required or required
master the items. The ith row of the matrix is a binary indicator vector indicating which
attributes are not required (coded by 0) and which attributes are required (coded by 1) to master
item \(i\).
Specify attribute structures. NULL, by default, means there is no structure. Attribute structure
needs be specified as a list - which will be internally handled by att.structure function.
See examples. It can also be a matrix giving all permissible attribute profiles.
An object of class CDM.obj. When it is not NULL, it enables rapid validation
of the Q-matrix without the need for parameter estimation. @seealso CDM.
Logical indicating whether monotonicity constraints should be fulfilled in estimation.
Default = FALSE.
Type of model to fit; can be "GDINA", "LCDM", "DINA", "DINO"
, "ACDM", "LLM", or "rRUM". Default = "GDINA".
@seealso CDM.
A matrix containing all attribute priorities.
The calculation of priorities is straightforward (Qin & Guo, 2025): the priority of an attribute is the regression coefficient obtained from a LASSO multinomial logistic regression, with the attribute as the independent variable and the response data from the examinees as the dependent variable. The formula (Tu et al., 2022) is as follows:
$$ \log[\frac{P(X_{pi} = 1 | \boldsymbol{\Lambda}_{p})}{P(X_{pi} = 0 | \boldsymbol{\Lambda}_{p})}] = logit[P(X_{pi} = 1 | \boldsymbol{\Lambda}_{p})] = \beta_{i0} + \beta_{i1} \Lambda_{p1} + \ldots + \beta_{ik} \Lambda_{pk} + \ldots + \beta_{iK} \Lambda_{pK} $$
Where \(X_{pi}\) represents the response of examinee \(p\) on item \(i\),
\(\boldsymbol{\Lambda}_{p}\) denotes the marginal mastery probabilities of examinee \(p\)
(which can be obtained from the return value alpha.P of the CDM function),
\(\beta_{i0}\) is the intercept term, and \(\beta_{ik}\) represents the regression coefficient.
The LASSO loss function can be expressed as:
$$l_{lasso}(\boldsymbol{X}_i | \boldsymbol{\Lambda}) = l(\boldsymbol{X}_i | \boldsymbol{\Lambda}) - \lambda |\boldsymbol{\beta}_i|$$
Where \(l_{lasso}(\boldsymbol{X}_i | \boldsymbol{\Lambda})\) is the penalized likelihood, \(l(\boldsymbol{X}_i | \boldsymbol{\Lambda})\) is the original likelihood, and \(\lambda\) is the tuning parameter for penalization (a larger value imposes a stronger penalty on \(\boldsymbol{\beta}_i = [\beta_{i1}, \ldots, \beta_{ik}, \ldots, \beta_{iK}]\)). The priority for attribute \(i\) is defined as: \(\boldsymbol{priority}_i = \boldsymbol{\beta}_i = [\beta_{i1}, \ldots, \beta_{ik}, \ldots, \beta_{iK}]\)
Qin, H., & Guo, L. (2025). Priority attribute algorithm for Q-matrix validation: A didactic. Behavior Research Methods, 57(1), 31. DOI: 10.3758/s13428-024-02547-5.
Tu, D., Chiu, J., Ma, W., Wang, D., Cai, Y., & Ouyang, X. (2022). A multiple logistic regression-based (MLR-B) Q-matrix validation method for cognitive diagnosis models: A confirmatory approach. Behavior Research Methods. DOI: 10.3758/s13428-022-01880-x.
# \donttest{
set.seed(123)
library(Qval)
## generate Q-matrix and data
K <- 5
I <- 20
IQ <- list(
P0 = runif(I, 0.1, 0.3),
P1 = runif(I, 0.7, 0.9)
)
Q <- sim.Q(K, I)
data <- sim.data(Q = Q, N = 500, IQ = IQ, model = "GDINA", distribute = "horder")
#> distribute = horder
#> model = GDINA
#> number of attributes: 5
#> number of items: 20
#> num of examinees: 500
#> average of P0 = 0.21
#> average of P1 = 0.815
#> theta_mean = 0.03 , theta_sd = 0.969
#> a = 1.5 1.5 1.5 1.5 1.5
#> b = 1.5 -1.5 0 -0.75 0.75
MQ <- sim.MQ(Q, 0.1)
#> rate of mis-specifications = 0.1
#> rate of over-specifications = 0.07
#> rate of under-specifications = 0.03
CDM.obj <- CDM(data$dat, MQ)
#>
Iter = 1 Max. abs. change = 0.34790 Deviance = 13326.50
Iter = 2 Max. abs. change = 0.17386 Deviance = 11963.73
Iter = 3 Max. abs. change = 0.10554 Deviance = 11845.74
Iter = 4 Max. abs. change = 0.09533 Deviance = 11806.31
Iter = 5 Max. abs. change = 0.08312 Deviance = 11787.70
Iter = 6 Max. abs. change = 0.10179 Deviance = 11777.02
Iter = 7 Max. abs. change = 0.10305 Deviance = 11770.30
Iter = 8 Max. abs. change = 0.09014 Deviance = 11765.75
Iter = 9 Max. abs. change = 0.07415 Deviance = 11762.53
Iter = 10 Max. abs. change = 0.06246 Deviance = 11760.17
Iter = 11 Max. abs. change = 0.05713 Deviance = 11758.42
Iter = 12 Max. abs. change = 0.05098 Deviance = 11757.10
Iter = 13 Max. abs. change = 0.04476 Deviance = 11756.09
Iter = 14 Max. abs. change = 0.03868 Deviance = 11755.30
Iter = 15 Max. abs. change = 0.03271 Deviance = 11754.66
Iter = 16 Max. abs. change = 0.02842 Deviance = 11754.12
Iter = 17 Max. abs. change = 0.03057 Deviance = 11753.67
Iter = 18 Max. abs. change = 0.03320 Deviance = 11753.26
Iter = 19 Max. abs. change = 0.03610 Deviance = 11752.88
Iter = 20 Max. abs. change = 0.03881 Deviance = 11752.52
Iter = 21 Max. abs. change = 0.04042 Deviance = 11752.15
Iter = 22 Max. abs. change = 0.03948 Deviance = 11751.78
Iter = 23 Max. abs. change = 0.03461 Deviance = 11751.40
Iter = 24 Max. abs. change = 0.02599 Deviance = 11751.03
Iter = 25 Max. abs. change = 0.01624 Deviance = 11750.72
Iter = 26 Max. abs. change = 0.00848 Deviance = 11750.49
Iter = 27 Max. abs. change = 0.00383 Deviance = 11750.34
Iter = 28 Max. abs. change = 0.00329 Deviance = 11750.24
Iter = 29 Max. abs. change = 0.00292 Deviance = 11750.17
Iter = 30 Max. abs. change = 0.00258 Deviance = 11750.13
Iter = 31 Max. abs. change = 0.00234 Deviance = 11750.10
Iter = 32 Max. abs. change = 0.00236 Deviance = 11750.08
Iter = 33 Max. abs. change = 0.00242 Deviance = 11750.06
Iter = 34 Max. abs. change = 0.00247 Deviance = 11750.04
Iter = 35 Max. abs. change = 0.00251 Deviance = 11750.03
Iter = 36 Max. abs. change = 0.00254 Deviance = 11750.02
Iter = 37 Max. abs. change = 0.00257 Deviance = 11750.01
Iter = 38 Max. abs. change = 0.00258 Deviance = 11750.00
Iter = 39 Max. abs. change = 0.00259 Deviance = 11749.99
Iter = 40 Max. abs. change = 0.00259 Deviance = 11749.98
Iter = 41 Max. abs. change = 0.00258 Deviance = 11749.98
Iter = 42 Max. abs. change = 0.00256 Deviance = 11749.97
Iter = 43 Max. abs. change = 0.00253 Deviance = 11749.96
Iter = 44 Max. abs. change = 0.00249 Deviance = 11749.95
Iter = 45 Max. abs. change = 0.00243 Deviance = 11749.95
Iter = 46 Max. abs. change = 0.00237 Deviance = 11749.94
Iter = 47 Max. abs. change = 0.00229 Deviance = 11749.93
Iter = 48 Max. abs. change = 0.00220 Deviance = 11749.92
Iter = 49 Max. abs. change = 0.00210 Deviance = 11749.92
Iter = 50 Max. abs. change = 0.00199 Deviance = 11749.91
Iter = 51 Max. abs. change = 0.00187 Deviance = 11749.91
Iter = 52 Max. abs. change = 0.00174 Deviance = 11749.90
Iter = 53 Max. abs. change = 0.00161 Deviance = 11749.89
Iter = 54 Max. abs. change = 0.00148 Deviance = 11749.89
Iter = 55 Max. abs. change = 0.00135 Deviance = 11749.88
Iter = 56 Max. abs. change = 0.00122 Deviance = 11749.88
Iter = 57 Max. abs. change = 0.00109 Deviance = 11749.87
Iter = 58 Max. abs. change = 0.00097 Deviance = 11749.87
Iter = 59 Max. abs. change = 0.00086 Deviance = 11749.86
Iter = 60 Max. abs. change = 0.00076 Deviance = 11749.86
Iter = 61 Max. abs. change = 0.00066 Deviance = 11749.85
Iter = 62 Max. abs. change = 0.00064 Deviance = 11749.85
Iter = 63 Max. abs. change = 0.00064 Deviance = 11749.85
Iter = 64 Max. abs. change = 0.00065 Deviance = 11749.85
Iter = 65 Max. abs. change = 0.00065 Deviance = 11749.84
Iter = 66 Max. abs. change = 0.00065 Deviance = 11749.84
Iter = 67 Max. abs. change = 0.00064 Deviance = 11749.84
Iter = 68 Max. abs. change = 0.00064 Deviance = 11749.84
Iter = 69 Max. abs. change = 0.00064 Deviance = 11749.83
Iter = 70 Max. abs. change = 0.00063 Deviance = 11749.83
Iter = 71 Max. abs. change = 0.00062 Deviance = 11749.83
Iter = 72 Max. abs. change = 0.00061 Deviance = 11749.83
Iter = 73 Max. abs. change = 0.00060 Deviance = 11749.83
Iter = 74 Max. abs. change = 0.00059 Deviance = 11749.83
Iter = 75 Max. abs. change = 0.00058 Deviance = 11749.82
Iter = 76 Max. abs. change = 0.00057 Deviance = 11749.82
Iter = 77 Max. abs. change = 0.00056 Deviance = 11749.82
Iter = 78 Max. abs. change = 0.00055 Deviance = 11749.82
Iter = 79 Max. abs. change = 0.00054 Deviance = 11749.82
Iter = 80 Max. abs. change = 0.00053 Deviance = 11749.82
Iter = 81 Max. abs. change = 0.00051 Deviance = 11749.82
Iter = 82 Max. abs. change = 0.00050 Deviance = 11749.81
Iter = 83 Max. abs. change = 0.00049 Deviance = 11749.81
Iter = 84 Max. abs. change = 0.00048 Deviance = 11749.81
Iter = 85 Max. abs. change = 0.00047 Deviance = 11749.81
Iter = 86 Max. abs. change = 0.00045 Deviance = 11749.81
Iter = 87 Max. abs. change = 0.00044 Deviance = 11749.81
Iter = 88 Max. abs. change = 0.00043 Deviance = 11749.81
Iter = 89 Max. abs. change = 0.00042 Deviance = 11749.81
Iter = 90 Max. abs. change = 0.00041 Deviance = 11749.81
Iter = 91 Max. abs. change = 0.00039 Deviance = 11749.81
Iter = 92 Max. abs. change = 0.00038 Deviance = 11749.81
Iter = 93 Max. abs. change = 0.00037 Deviance = 11749.80
Iter = 94 Max. abs. change = 0.00036 Deviance = 11749.80
Iter = 95 Max. abs. change = 0.00035 Deviance = 11749.80
Iter = 96 Max. abs. change = 0.00034 Deviance = 11749.80
Iter = 97 Max. abs. change = 0.00033 Deviance = 11749.80
Iter = 98 Max. abs. change = 0.00032 Deviance = 11749.80
Iter = 99 Max. abs. change = 0.00031 Deviance = 11749.80
Iter = 100 Max. abs. change = 0.00030 Deviance = 11749.80
Iter = 101 Max. abs. change = 0.00029 Deviance = 11749.80
Iter = 102 Max. abs. change = 0.00028 Deviance = 11749.80
Iter = 103 Max. abs. change = 0.00027 Deviance = 11749.80
Iter = 104 Max. abs. change = 0.00026 Deviance = 11749.80
Iter = 105 Max. abs. change = 0.00026 Deviance = 11749.80
Iter = 106 Max. abs. change = 0.00025 Deviance = 11749.80
Iter = 107 Max. abs. change = 0.00024 Deviance = 11749.79
Iter = 108 Max. abs. change = 0.00023 Deviance = 11749.79
Iter = 109 Max. abs. change = 0.00022 Deviance = 11749.79
Iter = 110 Max. abs. change = 0.00022 Deviance = 11749.79
Iter = 111 Max. abs. change = 0.00021 Deviance = 11749.79
Iter = 112 Max. abs. change = 0.00020 Deviance = 11749.79
Iter = 113 Max. abs. change = 0.00019 Deviance = 11749.79
Iter = 114 Max. abs. change = 0.00019 Deviance = 11749.79
Iter = 115 Max. abs. change = 0.00018 Deviance = 11749.79
Iter = 116 Max. abs. change = 0.00017 Deviance = 11749.79
Iter = 117 Max. abs. change = 0.00017 Deviance = 11749.79
Iter = 118 Max. abs. change = 0.00016 Deviance = 11749.79
Iter = 119 Max. abs. change = 0.00016 Deviance = 11749.79
Iter = 120 Max. abs. change = 0.00015 Deviance = 11749.79
Iter = 121 Max. abs. change = 0.00015 Deviance = 11749.79
Iter = 122 Max. abs. change = 0.00014 Deviance = 11749.79
Iter = 123 Max. abs. change = 0.00013 Deviance = 11749.79
Iter = 124 Max. abs. change = 0.00013 Deviance = 11749.79
Iter = 125 Max. abs. change = 0.00012 Deviance = 11749.79
Iter = 126 Max. abs. change = 0.00012 Deviance = 11749.79
Iter = 127 Max. abs. change = 0.00012 Deviance = 11749.79
Iter = 128 Max. abs. change = 0.00011 Deviance = 11749.79
Iter = 129 Max. abs. change = 0.00011 Deviance = 11749.79
Iter = 130 Max. abs. change = 0.00010 Deviance = 11749.79
Iter = 131 Max. abs. change = 0.00010 Deviance = 11749.79
priority <- get.priority(data$dat, Q, CDM.obj=CDM.obj)
head(priority)
#> A1 A2 A3 A4 A5
#> item 1 0 5.1092248 0.000000 0.000000 0.0000000
#> item 2 0 -0.7697590 -1.459747 -1.246299 7.4984587
#> item 3 0 0.0000000 3.828876 0.000000 0.0000000
#> item 4 0 2.7903102 0.000000 0.000000 0.3352957
#> item 5 0 0.0000000 0.000000 1.217809 2.2270149
#> item 6 0 0.3648282 3.935674 0.000000 0.0000000
# }