Fit competing models to each generated dataset, apply selection criteria, and compute sensitivity/specificity with respect to a correct-model mapping.
Usage
run_modelchoice_analysis(
design,
correct_model,
selection_criteria = c("chi2_diff_startsimple", "chi2_diff_startcomplex", "bic_diff"),
alpha = 0.05,
reps = 100,
parallel = FALSE,
workers = NULL,
delta_cfi_cutoff = 0.01,
delta_rmsea_cutoff = 0.015,
delta_srmr_cutoff = 0.03,
vote_criteria = NULL,
fit_options = NULL
)Arguments
- design
Design from
create_modelchoice_design().- correct_model
Named vector or list: names =
pop_model_xlevels, values = analysis model labels (fromanalysis_model_labels).- selection_criteria
Character vector:
"chi2_diff_startsimple","chi2_diff_startcomplex","bic_diff","aic_diff","sabic_diff","delta_cfi","delta_rmsea","delta_srmr","delta_cfi_or_delta_rmsea","delta_cfi_and_delta_rmsea","majority_vote".- alpha
Alpha for chi2 difference tests.
- reps
Number of replications per scenario.
- parallel
Use future for parallel execution.
- workers
Number of parallel workers.
- delta_cfi_cutoff, delta_rmsea_cutoff, delta_srmr_cutoff
Cutoffs for delta criteria (defaults: 0.01, 0.015, 0.03).
- vote_criteria
Character vector of criteria for
"majority_vote"(required when"majority_vote"is inselection_criteria).- fit_options
Named list passed to
lavaan::cfa().
Value
List with raw (full results) and summary (sensitivity,
specificity by scenario, DGP, criterion).
Details
Model order: Design analysis_models must be ordered simplest first
(see create_modelchoice_design). Low power: With few items
(e.g., 3), the chi2-difference test for loading invariance has low power; BIC
can prefer the wrong model because it heavily penalizes extra parameters.
Expect sensitivity to improve with more items or larger n.
Examples
dvn <- dySEM::build_dvn(n_items_x = 3, x_stem = "x", x_delim2 = "_",
distinguish_1 = "A", distinguish_2 = "B")
#> Error: 'build_dvn' is not an exported object from 'namespace:dySEM'
script_uni <- dySEM::scriptUni(dvn, scaleset = "FF", lvname = "X",
constr_dy_meas = c("loadings", "intercepts", "residuals"),
constr_dy_struct = "none")
#> Error: object 'dvn' not found
script_cor <- dySEM::scriptCor(dvn, scaleset = "FF", lvname = "X",
constr_dy_meas = c("loadings", "intercepts", "residuals"),
constr_dy_struct = c("variances", "means"))
#> Error: object 'dvn' not found
design <- create_modelchoice_design(
pop_model_x = c("Uni", "Cor"),
analysis_models = list(uni = script_uni, cor = script_cor),
pop_values_x = list(
Uni = list(loadings = c(.75,.8,.55), residuals = c(.44,.36,.7),
coresids = c(.1,.12,.08)),
Cor = list(loadings_p1 = c(.75,.8,.55), loadings_p2 = c(.75,.8,.55),
residuals_p1 = c(.44,.36,.7), residuals_p2 = c(.44,.36,.7),
coresids = c(.1,.12,.08), lv_cov = 0.3)
),
n_dyads = 100,
n_items_x = 3,
.seed = 12345
)
#> Error: object 'script_uni' not found
res <- run_modelchoice_analysis(design, correct_model = c(Uni = "uni", Cor = "cor"),
reps = 25)
#> Error: object 'design' not found
