
Estimate a CFA-based threshold for a multi-item questionnaire
Source:R/mim_threshold.R
mim_threshold.Rdmim_threshold() estimates an anchor-based interpretation threshold for
a multi-item measure (MIM) using a one-factor CFA model with an anchor/transition
rating item.
Usage
mim_threshold(
mydata,
var_formula,
item_discretize = FALSE,
item_levels = 10L,
require_all_item_levels = FALSE,
anchor_cut = 1,
B = 0L,
report_every = 50L,
factor_name = "F1",
item_suffix = "_ord",
anchor_suffix = "_bin",
std.lv = TRUE,
parameterization = "theta",
verbose = TRUE,
...
)Arguments
- mydata
Data frame.
- var_formula
Formula of the form
anchor ~ item1 + item2 + .... Useanchor ~ .to use all variables except the anchor as items.- item_discretize
Logical. If
TRUE, discretize each item usingvar_discretize(). IfFALSE, use the item values as observed ordinal categories.- item_levels
Number of levels to use when
item_discretize = TRUE. Must be between 2 and 12.- require_all_item_levels
Logical. Passed to
var_discretize().- anchor_cut
Cutpoint for binarizing the anchor if it has more than two unique non-missing values. Values >=
anchor_cutare coded 1.- B
Number of bootstrap samples. Bootstrap CI is computed only if
B >= 100.- report_every
During bootstrapping, print progress every
report_everyattempted fits.- factor_name
Name of the latent factor.
- item_suffix
Suffix appended to item names when items are discretized or internally recoded.
- anchor_suffix
Suffix appended to the anchor variable name if the anchor has more than two unique values and is dichotomized.
- std.lv
Passed to
lavaan::cfa().- parameterization
Passed to
lavaan::cfa().- verbose
If
TRUE, print item names and generated lavaan model.- ...
Additional arguments passed to
lavaan::cfa().
Value
A mim_threshold object. Additional details can be retrieved with
mim_threshold_details().
Details
This technique is based on Terluin et al (2023) and Terluin et al (2024).
Briefly, the mim_threshold() function:
fits a one-factor CFA model with the MIM items and an anchor item,
computes
theta_star, the latent factor value where the anchor, threshold occurs,maps
theta_starto each item using CFA-implied category probabilities,multiplies item category probabilities by item values or bin midpoints, and
sums the item-level expected values to obtain the MIM threshold.
References
Terluin, B., Koopman, J.E., Hoogendam, L. et al. Estimating meaningful thresholds for multi-item questionnaires using item response theory. Qual Life Res 32, 1819–1830 (2023)
Terluin, B., Trigg, A., Fromy, P. et al. Estimating anchor-based minimal important change using longitudinal confirmatory factor analysis. Qual Life Res 33, 963–973 (2024).
Examples
set.seed(123)
sim <- simdat(N = 500)
dat <- sim$datw
t1_items <- sim$item_names$t1_items
dat_t1 <- dat[, c(t1_items, "trat")]
out <- mim_threshold(
mydata = dat_t1,
var_formula = trat ~ .,
B = 0
)
#> MIM items: item1, item2, item3, item4, item5, item6, item7, item8, item9, item10
#> Generated lavaan model:
#> F1 =~ item1_ord + item2_ord + item3_ord + item4_ord + item5_ord + item6_ord + item7_ord + item8_ord + item9_ord + item10_ord + lambda_anchor*trat
#> trat | tau_anchor*t1
out
#> CFA-based MIM threshold
#> ------------------------
#> Threshold: 13.7125
#> Anchor variable: trat
#> Number of items: 10
#> Items: item1, item2, item3, item4, item5, item6, item7, item8, item9, item10
#>
#> Please use `mim_threshold_details(x)` to retrieve the lavaan fit, CFA data, probabilities, and bootstrap results.