
Dynamic IRTree and transition-model hardening
Source:vignettes/dynamic-irtree-hardening.Rmd
dynamic-irtree-hardening.RmdScope
The dynamic-state layer models transitions among explicitly declared AOI or process states. Observed states may be used directly, or an optional hidden-state model may separate noisy observations from latent states. A hidden state is not automatically a cognitive state; substantive interpretation requires theory and external validation.
Simulation and observed-state models
sim <- simulate_dynamic_irtree_data(
n_person = 100,
n_item = 20,
transitions_per_trial = 10,
state_misclassification = 0.05,
missing_state = 0.10,
seed = 42
)
spec <- dynamic_irtree_spec(
engine = "multinomial",
include_person = TRUE,
include_item = TRUE,
condition_columns = "condition",
transition_predictors = c("time_gap", "score"),
structural_zeros = data.frame(from = "submit", to = "prompt")
)
fit <- fit_dynamic_irtree(sim$transitions, spec)
decode_dynamic_states(fit)
transition_residual_diagnostics(fit)dynamic_transition_design() exposes the exact design
matrix, transition mask, state coding, scaling, participant/item
indices, and uncertainty weights before estimation.
Hidden states with Stan
hidden_spec <- dynamic_irtree_spec(
engine = "stan",
hidden_states = 3L,
missing_state = "marginalize",
person_effect = "random",
item_effect = "random",
chains = 4L,
iter_warmup = 1000L,
iter_sampling = 1000L
)
hidden_fit <- fit_dynamic_irtree(sim$transitions, hidden_spec, seed = 42)
probability <- decode_dynamic_states(hidden_fit, method = "probability")The hidden engine uses a forward algorithm and estimates an emission matrix. The returned probabilities are filtered state probabilities, not claims about named cognition.
Model comparison and recovery
baseline <- fit_dynamic_irtree(sim$transitions, dynamic_irtree_spec(engine = "baseline"))
multinomial <- fit_dynamic_irtree(sim$transitions, dynamic_irtree_spec(engine = "multinomial"))
compare_dynamic_transition_models(list(baseline = baseline, multinomial = multinomial))
programme <- dynamic_irtree_recovery(
grid = expand.grid(
state_misclassification = c(0, 0.05, 0.15),
missing_state = c(0, 0.10)
),
replications = 200L
)Promotion requires recovery, coverage, state-error sensitivity, misspecification studies, grouped validation, engine comparison, and empirical reproduction.