update.Rd
The update
function provides a unified interface for refreshing or modifying
existing analysis objects produced by the Qval package, including CDM
,
validation
, sim.data
and fit
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, ...)
An object of class CDM
, validation
,
and sim.data
.
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
and fit
).
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
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.08396 Deviance = 8531.142
Iter = 3 Max. abs. change = 0.01963 Deviance = 8485.637
Iter = 4 Max. abs. change = 0.01191 Deviance = 8482.626
Iter = 5 Max. abs. change = 0.01264 Deviance = 8482.023
Iter = 6 Max. abs. change = 0.01054 Deviance = 8481.816
Iter = 7 Max. abs. change = 0.00783 Deviance = 8481.731
Iter = 8 Max. abs. change = 0.00543 Deviance = 8481.693
Iter = 9 Max. abs. change = 0.00362 Deviance = 8481.677
Iter = 10 Max. abs. change = 0.00235 Deviance = 8481.669
Iter = 11 Max. abs. change = 0.00151 Deviance = 8481.665
Iter = 12 Max. abs. change = 0.00096 Deviance = 8481.663
Iter = 13 Max. abs. change = 0.00061 Deviance = 8481.662
Iter = 14 Max. abs. change = 0.00038 Deviance = 8481.661
Iter = 15 Max. abs. change = 0.00024 Deviance = 8481.661
Iter = 16 Max. abs. change = 0.00017 Deviance = 8481.661
Iter = 17 Max. abs. change = 0.00010 Deviance = 8481.661
summary(CDM.obj)
#> ==============================================
#> Number of items = 20
#> Number of attributes = 3
#> Number of individuals = 500
#>
#> Model Fit:
#> Deviance npar AIC BIC
#> 8481.661 67.000 8615.661 8898.039
#>
#> 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.57951 Deviance = 10238.69
Iter = 2 Max. abs. change = 0.09509 Deviance = 8501.84
Iter = 3 Max. abs. change = 0.03995 Deviance = 8478.24
Iter = 4 Max. abs. change = 0.01792 Deviance = 8477.13
Iter = 5 Max. abs. change = 0.02604 Deviance = 8477.02
Iter = 6 Max. abs. change = 0.01142 Deviance = 8476.97
Iter = 7 Max. abs. change = 0.01740 Deviance = 8476.96
Iter = 8 Max. abs. change = 0.00686 Deviance = 8476.95
Iter = 9 Max. abs. change = 0.00466 Deviance = 8476.94
Iter = 10 Max. abs. change = 0.00253 Deviance = 8476.94
Iter = 11 Max. abs. change = 0.00030 Deviance = 8476.94
Iter = 12 Max. abs. change = 0.00014 Deviance = 8476.94
Iter = 13 Max. abs. change = 0.00016 Deviance = 8476.94
Iter = 14 Max. abs. change = 0.00760 Deviance = 8476.94
Iter = 15 Max. abs. change = 0.00246 Deviance = 8476.94
Iter = 16 Max. abs. change = 0.00502 Deviance = 8476.94
Iter = 17 Max. abs. change = 0.00017 Deviance = 8476.94
Iter = 18 Max. abs. change = 0.00109 Deviance = 8476.94
Iter = 19 Max. abs. change = 0.00004 Deviance = 8476.94
summary(CDM.updated)
#> ==============================================
#> Number of items = 20
#> Number of attributes = 3
#> Number of individuals = 500
#>
#> Model Fit:
#> Deviance npar AIC BIC
#> 8476.939 87.000 8650.939 9017.610
#>
#> Distribution of Alpha Patterns:
#> 000 001 010 011 100 101 110 111
#> freq 97 20 120 145 4 13 32 69
#> prop 0.194 0.04 0.24 0.29 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.20531 Deviance = 8796.31
Iter = 3 Max. abs. change = 0.09493 Deviance = 8725.28
Iter = 4 Max. abs. change = 0.02365 Deviance = 8719.03
Iter = 5 Max. abs. change = 0.01674 Deviance = 8718.11
Iter = 6 Max. abs. change = 0.01408 Deviance = 8717.82
Iter = 7 Max. abs. change = 0.01043 Deviance = 8717.68
Iter = 8 Max. abs. change = 0.00706 Deviance = 8717.62
Iter = 9 Max. abs. change = 0.00454 Deviance = 8717.58
Iter = 10 Max. abs. change = 0.00201 Deviance = 8717.57
Iter = 11 Max. abs. change = 0.00717 Deviance = 8717.56
Iter = 12 Max. abs. change = 0.00277 Deviance = 8717.56
Iter = 13 Max. abs. change = 0.00088 Deviance = 8717.56
Iter = 14 Max. abs. change = 0.00025 Deviance = 8717.55
Iter = 15 Max. abs. change = 0.00016 Deviance = 8717.55
Iter = 16 Max. abs. change = 0.00035 Deviance = 8717.55
Iter = 17 Max. abs. change = 0.00021 Deviance = 8717.55
Iter = 18 Max. abs. change = 0.00318 Deviance = 8717.55
Iter = 19 Max. abs. change = 0.00007 Deviance = 8717.55
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.04934
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.31187
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
# }