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, ...)

Arguments

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.

Value

An updated object of the same class as x, reflecting any changes in the supplied parameters.

Details

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.

Methods (by class)

  • 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

Examples

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 
# }