First-Class Estimands and Sensitivity Workflows
Source:vignettes/estimands-and-sensitivity.Rmd
estimands-and-sensitivity.RmdWhy estimands are first-class
gp3bayes distinguishes model coefficients from substantive quantities. Binary workflows can report a design-standardised probability contrast. Duration workflows can report conditional-median differences and ratios and a declared posterior predictive upper quantile. None is automatically interpreted as a causal effect.
Binary probability standardisation
The fitting code below is not executed while building the article.
fit_binary <- fit_binary_model_backend(
binary_specification,
backend = "cmdstanr"
)
binary_estimand <- estimate_standardized_probability_contrast(
fit_binary,
target_data = target_population,
target_scale = "raw",
include_group_effects = FALSE
)
summarise_estimand_draws(binary_estimand)
plot(binary_estimand, quantity = "probability_difference")The target rows define the covariate distribution over which expected
probabilities are averaged. With
include_group_effects = FALSE, predictions are
population-level rather than conditioned on observed group effects.
Duration median and predictive-tail estimands
fit_duration <- fit_duration_model_backend(
duration_specification,
backend = "cmdstanr"
)
duration_estimand <- estimate_standardized_duration_estimands(
fit_duration,
predictive_quantile = 0.90,
include_group_effects = FALSE,
seed = 2026
)
summarise_estimand_draws(duration_estimand)
plot(duration_estimand, quantity = "conditional_median_ratio")
plot(duration_estimand, quantity = "predictive_quantile_difference")The exponentiated lognormal location contrast is treated as a conditional median ratio, not an arithmetic-mean ratio. Predictive quantiles include residual predictive variation.
Structural sensitivity
random_slope_plan <- create_random_slope_sensitivity_plan(
binary_specification
)
random_slope_result <- run_random_slope_sensitivity(
random_slope_plan,
backend = "cmdstanr"
)
random_slope_result$comparisonNo structure is selected automatically. The workflow asks whether the declared estimand materially changes under the approved random-slope alternative.
Participant and item deletion
participant_plan <- create_group_deletion_sensitivity_plan(
binary_specification,
group = "participant",
units = c("p001", "p002", "p003")
)
participant_result <- run_group_deletion_sensitivity(
participant_plan,
backend = "cmdstanr"
)Omission is a sensitivity analysis, not an exclusion rule. For designs with many groups, units must be supplied explicitly rather than launching an unbounded sequence of refits.
Parameterisation sensitivity
contrast_spec <- create_contrast_coding_sensitivity_specification(
binary_specification,
condition_coding = c(0, 1),
baseline = 0.35
)
scaling_spec <- create_predictor_scaling_sensitivity_specification(
binary_specification,
predictor = "trial_covariate",
scale_factor = 2,
coefficient_scale = 1.50,
interaction_scale = 0.50
)
seconds_spec <- create_duration_unit_sensitivity_specification(
duration_specification,
multiplier = 0.001,
new_unit = "seconds"
)Alternative codings and scales require explicit prior choices where prior meaning changes. Unit conversion is handled separately because ratios should be unit-free while absolute duration quantities must scale by the declared factor.
Exact K-fold validation
kfold <- compute_kfold_cv(
fit_binary,
K = 5,
folds = "grouped",
group = "participant_id"
)
kfoldExact K-fold is deliberately an optional, expensive predictive-validation adapter. It complements PSIS-LOO when refitting is scientifically appropriate; it never becomes an automatic best-model selector.