update.RdThe update function provides a unified interface for refreshing or modifying
existing analysis objects produced by the Qval package, including CDM,
validation, sim.data, fit,
is.Qident, att.hierarchy classes. By passing additional arguments,
users can rerun fitting or simulation routines without reconstructing the entire object
from scratch.
update(x, ...)
# S3 method for class 'CDM'
update(x, ...)
# S3 method for class 'validation'
update(x, ...)
# S3 method for class 'sim.data'
update(x, ...)
# S3 method for class 'fit'
update(x, ...)
# S3 method for class 'is.Qident'
update(x, ...)
# S3 method for class 'att.hierarchy'
update(x, ...)An object of class CDM, validation,
sim.data, fit, is.Qident,
att.hierarchy.
Additional arguments specific to the method being updated:
For CDM: Y, Q, model, method,
mono.constraint, maxitr, verbose.
For validation: Y, Q, CDM.obj, par.method,
mono.constraint, model, method, search.method,
iter.level, maxitr, eps, alpha.level, criter,
verbose.
For sim.data: Q, N, IQ, model,
distribute, control, verbose.
For fit: Y, Q, model.
...
An updated object of the same class as x, reflecting any changes
in the supplied parameters.
The update methods internally extract the original call arguments
from the input object, combine them with any new parameters provided in
..., and re-invoke the corresponding constructor (CDM,
validation, sim.data, fit,
is.Qident), att.hierarchy.
This approach ensures consistency and preserves all untouched settings from the original object.
update(CDM): Update method for CDM objects
update(validation): Update method for validation objects
update(sim.data): Update method for sim.data objects
update(fit): Update method for fit objects
update(is.Qident): Update method for is.Qident objects
update(att.hierarchy): Update method for att.hierarchy objects
set.seed(123)
library(Qval)
# \donttest{
################################################################
# Example 1: summary a CDM object #
################################################################
Q <- sim.Q(3, 20)
IQ <- list(P0 = runif(20, 0, 0.2), P1 = runif(20, 0.8, 1))
data.obj <- sim.data(Q, N = 500, IQ = IQ,
model = "GDINA", distribute = "horder")
#> distribute = horder
#> model = GDINA
#> number of attributes: 3
#> number of items: 20
#> num of examinees: 500
#> average of P0 = 0.083
#> average of P1 = 0.894
#> theta_mean = -0.055 , theta_sd = 0.996
#> a = 1.5 1.5 1.5
#> b = -1.5 1.5 0
CDM.obj <- CDM(data.obj$dat, Q, model = "GDINA", method = "BM")
#>
Iter = 1 Max. abs. change = 0.47416 Deviance = 10618.124
Iter = 2 Max. abs. change = 0.08438 Deviance = 8530.162
Iter = 3 Max. abs. change = 0.01996 Deviance = 8483.338
Iter = 4 Max. abs. change = 0.01259 Deviance = 8480.464
Iter = 5 Max. abs. change = 0.01288 Deviance = 8479.946
Iter = 6 Max. abs. change = 0.01062 Deviance = 8479.774
Iter = 7 Max. abs. change = 0.00786 Deviance = 8479.705
Iter = 8 Max. abs. change = 0.00546 Deviance = 8479.675
Iter = 9 Max. abs. change = 0.00364 Deviance = 8479.662
Iter = 10 Max. abs. change = 0.00237 Deviance = 8479.656
Iter = 11 Max. abs. change = 0.00152 Deviance = 8479.653
Iter = 12 Max. abs. change = 0.00097 Deviance = 8479.652
Iter = 13 Max. abs. change = 0.00062 Deviance = 8479.651
Iter = 14 Max. abs. change = 0.00039 Deviance = 8479.651
Iter = 15 Max. abs. change = 0.00025 Deviance = 8479.651
Iter = 16 Max. abs. change = 0.00016 Deviance = 8479.651
Iter = 17 Max. abs. change = 0.00010 Deviance = 8479.651
Iter = 18 Max. abs. change = 0.00007 Deviance = 8479.651
summary(CDM.obj)
#> ==============================================
#> Number of items = 20
#> Number of attributes = 3
#> Number of individuals = 500
#>
#> Model Fit:
#> Deviance npar AIC BIC
#> 8479.651 67.000 8613.651 8896.029
#>
#> Distribution of Alpha Patterns:
#> 000 001 010 011 100 101 110 111
#> freq 97 21 120 144 4 9 32 73
#> prop 0.194 0.042 0.24 0.288 0.008 0.018 0.064 0.146
CDM.updated <- update(CDM.obj, method = "EM", maxitr = 1000)
#>
Iter = 1 Max. abs. change = 0.58226 Deviance = 10238.69
Iter = 2 Max. abs. change = 0.09628 Deviance = 8499.25
Iter = 3 Max. abs. change = 0.03447 Deviance = 8474.14
Iter = 4 Max. abs. change = 0.01418 Deviance = 8473.11
Iter = 5 Max. abs. change = 0.01087 Deviance = 8473.00
Iter = 6 Max. abs. change = 0.00870 Deviance = 8472.98
Iter = 7 Max. abs. change = 0.00678 Deviance = 8472.96
Iter = 8 Max. abs. change = 0.00521 Deviance = 8472.96
Iter = 9 Max. abs. change = 0.00398 Deviance = 8472.95
Iter = 10 Max. abs. change = 0.00303 Deviance = 8472.95
Iter = 11 Max. abs. change = 0.00230 Deviance = 8472.95
Iter = 12 Max. abs. change = 0.00174 Deviance = 8472.95
Iter = 13 Max. abs. change = 0.00131 Deviance = 8472.95
Iter = 14 Max. abs. change = 0.00099 Deviance = 8472.95
Iter = 15 Max. abs. change = 0.00075 Deviance = 8472.95
Iter = 16 Max. abs. change = 0.00056 Deviance = 8472.95
Iter = 17 Max. abs. change = 0.00042 Deviance = 8472.95
Iter = 18 Max. abs. change = 0.00032 Deviance = 8472.95
Iter = 19 Max. abs. change = 0.00024 Deviance = 8472.95
Iter = 20 Max. abs. change = 0.00018 Deviance = 8472.95
Iter = 21 Max. abs. change = 0.00014 Deviance = 8472.95
Iter = 22 Max. abs. change = 0.00010 Deviance = 8472.95
Iter = 23 Max. abs. change = 0.00008 Deviance = 8472.95
summary(CDM.updated)
#> ==============================================
#> Number of items = 20
#> Number of attributes = 3
#> Number of individuals = 500
#>
#> Model Fit:
#> Deviance npar AIC BIC
#> 8472.948 87.000 8646.948 9013.619
#>
#> Distribution of Alpha Patterns:
#> 000 001 010 011 100 101 110 111
#> freq 97 21 120 144 4 13 32 69
#> prop 0.194 0.042 0.24 0.288 0.008 0.026 0.064 0.138
################################################################
# Example 2: summary a validation object #
################################################################
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.obj2 <- CDM(data.obj$dat, MQ)
#>
Iter = 1 Max. abs. change = 0.55372 Deviance = 11376.15
Iter = 2 Max. abs. change = 0.20467 Deviance = 8794.76
Iter = 3 Max. abs. change = 0.09264 Deviance = 8719.26
Iter = 4 Max. abs. change = 0.02536 Deviance = 8711.41
Iter = 5 Max. abs. change = 0.01925 Deviance = 8709.92
Iter = 6 Max. abs. change = 0.01285 Deviance = 8709.44
Iter = 7 Max. abs. change = 0.00801 Deviance = 8709.25
Iter = 8 Max. abs. change = 0.00478 Deviance = 8709.17
Iter = 9 Max. abs. change = 0.00281 Deviance = 8709.14
Iter = 10 Max. abs. change = 0.00167 Deviance = 8709.13
Iter = 11 Max. abs. change = 0.00101 Deviance = 8709.12
Iter = 12 Max. abs. change = 0.00064 Deviance = 8709.12
Iter = 13 Max. abs. change = 0.00041 Deviance = 8709.12
Iter = 14 Max. abs. change = 0.00029 Deviance = 8709.11
Iter = 15 Max. abs. change = 0.00021 Deviance = 8709.11
Iter = 16 Max. abs. change = 0.00015 Deviance = 8709.11
Iter = 17 Max. abs. change = 0.00011 Deviance = 8709.11
Iter = 18 Max. abs. change = 0.00008 Deviance = 8709.11
validation.obj <- validation(data.obj$dat, MQ, CDM.obj2,
method = "GDI")
#> GDI method with PAA in test level iteration ...
#> Iter = 1/ 1, 9 items have changed, ΔPVAF=1.04625
summary(validation.obj)
#> ==============================================
#>
#> Suggested Q-matrix:
#>
#> A1 A2 A3
#> item 1 0 1 0
#> item 2 1 0 1
#> item 3 1 0* 1
#> item 4 0 0 1
#> item 5 1* 0 1
#> item 6 0* 0 1
#> item 7 0 0 1
#> item 8 0* 1 0
#> item 9 0 0 1
#> item 10 0* 1 1
#> item 11 1 1 0*
#> item 12 0 1 1*
#> item 13 1 0 0
#> item 14 0 0 1
#> item 15 1 0* 0
#> item 16 0 1 1
#> item 17 1 1 1
#> item 18 1 0 1
#> item 19 0 1 0*
#> item 20 1 1 1
#> Note: * denotes a modified element.
validation.updated <- update(validation.obj, method = "Hull")
#> Hull method with PAA in test level iteration ...
#> Iter = 1/ 1, 12 items have changed, ΔPVAF=1.29641
summary(validation.updated)
#> ==============================================
#>
#> Suggested Q-matrix:
#>
#> A1 A2 A3
#> item 1 0 1 1*
#> item 2 1 0 1
#> item 3 1 0* 1
#> item 4 0 0 1
#> item 5 1* 0 1
#> item 6 0* 0 1
#> item 7 0 0 1
#> item 8 0* 1 0
#> item 9 0 0 1
#> item 10 0* 1 1
#> item 11 1 1 0*
#> item 12 0 1 1*
#> item 13 1 0 0
#> item 14 0 0 1
#> item 15 1 0* 0
#> item 16 0 1 1
#> item 17 0* 1 0*
#> item 18 1 0 1
#> item 19 0 1 0*
#> item 20 1 1 0*
#> Note: * denotes a modified element.
################################################################
# Example 3: summary a sim.data object #
################################################################
data.obj2 <- sim.data(Q = sim.Q(3, 10), N = 1000)
#> distribute = uniform
#> model = GDINA
#> number of attributes: 3
#> number of items: 10
#> num of examinees: 1000
#> average of P0 = 0.134
#> average of P1 = 0.865
summary(data.obj2)
#> ==============================================
#> Number of items = 10
#> Number of attributes = 3
#> Number of individuals = 1000
#>
#> Distribution of Alpha Patterns:
#> 000 001 010 011 100 101 110 111
#> freq 134 106 119 117 127 139 130 128
#> prop 0.134 0.106 0.119 0.117 0.127 0.139 0.13 0.128
data.updated <- update(data.obj2, N = 200)
#> distribute = uniform
#> model = GDINA
#> number of attributes: 3
#> number of items: 10
#> num of examinees: 200
#> average of P0 = 0.124
#> average of P1 = 0.876
summary(data.updated)
#> ==============================================
#> Number of items = 10
#> Number of attributes = 3
#> Number of individuals = 200
#>
#> Distribution of Alpha Patterns:
#> 000 001 010 011 100 101 110 111
#> freq 29 30 22 27 24 22 24 22
#> prop 0.145 0.15 0.11 0.135 0.12 0.11 0.12 0.11
################################################################
# Example 4: summary a fit object #
################################################################
fit.obj <- fit(data.obj$dat, Q, model = "GDINA")
#>
Iter = 1 Max. abs. change = 0.58226 Deviance = 10238.69
Iter = 2 Max. abs. change = 0.09628 Deviance = 8499.25
Iter = 3 Max. abs. change = 0.03447 Deviance = 8474.14
Iter = 4 Max. abs. change = 0.01418 Deviance = 8473.11
Iter = 5 Max. abs. change = 0.01087 Deviance = 8473.00
Iter = 6 Max. abs. change = 0.00870 Deviance = 8472.98
Iter = 7 Max. abs. change = 0.00678 Deviance = 8472.96
Iter = 8 Max. abs. change = 0.00521 Deviance = 8472.96
Iter = 9 Max. abs. change = 0.00398 Deviance = 8472.95
Iter = 10 Max. abs. change = 0.00303 Deviance = 8472.95
Iter = 11 Max. abs. change = 0.00230 Deviance = 8472.95
Iter = 12 Max. abs. change = 0.00174 Deviance = 8472.95
Iter = 13 Max. abs. change = 0.00131 Deviance = 8472.95
Iter = 14 Max. abs. change = 0.00099 Deviance = 8472.95
Iter = 15 Max. abs. change = 0.00075 Deviance = 8472.95
Iter = 16 Max. abs. change = 0.00056 Deviance = 8472.95
Iter = 17 Max. abs. change = 0.00042 Deviance = 8472.95
Iter = 18 Max. abs. change = 0.00032 Deviance = 8472.95
Iter = 19 Max. abs. change = 0.00024 Deviance = 8472.95
Iter = 20 Max. abs. change = 0.00018 Deviance = 8472.95
Iter = 21 Max. abs. change = 0.00014 Deviance = 8472.95
Iter = 22 Max. abs. change = 0.00010 Deviance = 8472.95
Iter = 23 Max. abs. change = 0.00008 Deviance = 8472.95
summary(fit.obj)
#> ==============================================
#> Number of parameters = 87
#>
#> Relative fit indices = :
#> -2LL AIC BIC CAIC SABIC
#> 8472.948 8646.948 9013.619 9100.619 8737.475
#>
#> Absolute fit indices = :
#> M2 df p.value RMSEA2 SRMSR
#> 126.958 123.000 0.385 0.008 0.028
data.updated <- update(fit.obj, model = "DINA")
#>
Iter = 1 Max. abs. change = 0.59291 Deviance = 10238.69
Iter = 2 Max. abs. change = 0.06920 Deviance = 9793.16
Iter = 3 Max. abs. change = 0.04277 Deviance = 9750.58
Iter = 4 Max. abs. change = 0.03099 Deviance = 9736.79
Iter = 5 Max. abs. change = 0.02597 Deviance = 9728.43
Iter = 6 Max. abs. change = 0.02258 Deviance = 9722.29
Iter = 7 Max. abs. change = 0.01978 Deviance = 9717.38
Iter = 8 Max. abs. change = 0.01727 Deviance = 9713.31
Iter = 9 Max. abs. change = 0.01501 Deviance = 9709.93
Iter = 10 Max. abs. change = 0.01301 Deviance = 9707.14
Iter = 11 Max. abs. change = 0.01162 Deviance = 9704.83
Iter = 12 Max. abs. change = 0.01043 Deviance = 9702.96
Iter = 13 Max. abs. change = 0.00928 Deviance = 9701.43
Iter = 14 Max. abs. change = 0.00819 Deviance = 9700.22
Iter = 15 Max. abs. change = 0.00719 Deviance = 9699.27
Iter = 16 Max. abs. change = 0.00629 Deviance = 9698.52
Iter = 17 Max. abs. change = 0.00550 Deviance = 9697.96
Iter = 18 Max. abs. change = 0.00481 Deviance = 9697.53
Iter = 19 Max. abs. change = 0.00421 Deviance = 9697.21
Iter = 20 Max. abs. change = 0.00369 Deviance = 9696.97
Iter = 21 Max. abs. change = 0.00324 Deviance = 9696.79
Iter = 22 Max. abs. change = 0.00284 Deviance = 9696.67
Iter = 23 Max. abs. change = 0.00250 Deviance = 9696.57
Iter = 24 Max. abs. change = 0.00220 Deviance = 9696.50
Iter = 25 Max. abs. change = 0.00195 Deviance = 9696.45
Iter = 26 Max. abs. change = 0.00172 Deviance = 9696.41
Iter = 27 Max. abs. change = 0.00153 Deviance = 9696.38
Iter = 28 Max. abs. change = 0.00135 Deviance = 9696.36
Iter = 29 Max. abs. change = 0.00120 Deviance = 9696.34
Iter = 30 Max. abs. change = 0.00107 Deviance = 9696.33
Iter = 31 Max. abs. change = 0.00095 Deviance = 9696.32
Iter = 32 Max. abs. change = 0.00085 Deviance = 9696.31
Iter = 33 Max. abs. change = 0.00075 Deviance = 9696.30
Iter = 34 Max. abs. change = 0.00067 Deviance = 9696.30
Iter = 35 Max. abs. change = 0.00060 Deviance = 9696.30
Iter = 36 Max. abs. change = 0.00054 Deviance = 9696.29
Iter = 37 Max. abs. change = 0.00048 Deviance = 9696.29
Iter = 38 Max. abs. change = 0.00043 Deviance = 9696.29
Iter = 39 Max. abs. change = 0.00038 Deviance = 9696.29
Iter = 40 Max. abs. change = 0.00034 Deviance = 9696.28
Iter = 41 Max. abs. change = 0.00031 Deviance = 9696.28
Iter = 42 Max. abs. change = 0.00027 Deviance = 9696.28
Iter = 43 Max. abs. change = 0.00024 Deviance = 9696.28
Iter = 44 Max. abs. change = 0.00022 Deviance = 9696.28
Iter = 45 Max. abs. change = 0.00020 Deviance = 9696.28
Iter = 46 Max. abs. change = 0.00018 Deviance = 9696.28
Iter = 47 Max. abs. change = 0.00016 Deviance = 9696.28
Iter = 48 Max. abs. change = 0.00014 Deviance = 9696.28
Iter = 49 Max. abs. change = 0.00013 Deviance = 9696.28
Iter = 50 Max. abs. change = 0.00011 Deviance = 9696.28
Iter = 51 Max. abs. change = 0.00010 Deviance = 9696.28
Iter = 52 Max. abs. change = 0.00009 Deviance = 9696.28
summary(data.updated)
#> ==============================================
#> Number of parameters = 47
#>
#> Relative fit indices = :
#> -2LL AIC BIC CAIC SABIC
#> 9696.279 9790.279 9988.366 10035.366 9839.185
#>
#> Absolute fit indices = :
#> M2 df p.value RMSEA2 SRMSR
#> 644.528 163.000 0.000 0.077 0.147
# }