The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
This vignette shows the CMR extensions for multiple bounded outcomes.
Outcomes can be combined into a weighted index or protected as
co-primary outcomes. The outcome object y is a matrix with
one row per pilot unit and one column per outcome.
The simulated pilot has a test-score outcome and an attendance
outcome, both scaled to [0, 1].
set.seed(303)
n_pilot <- 180
d <- rbinom(n_pilot, size = 1, prob = 0.5)
test_score <- numeric(n_pilot)
attendance <- numeric(n_pilot)
test_score[d == 1] <- rbeta(sum(d == 1), shape1 = 5.5, shape2 = 3.5)
test_score[d == 0] <- rbeta(sum(d == 0), shape1 = 4, shape2 = 4)
attendance[d == 1] <- rbeta(sum(d == 1), shape1 = 7, shape2 = 2.5)
attendance[d == 0] <- rbeta(sum(d == 0), shape1 = 5, shape2 = 3.5)
y <- cbind(test_score = test_score, attendance = attendance)
weights <- c(test_score = 0.7, attendance = 0.3)
by_arm_mean <- rbind(
treatment = colMeans(y[d == 1, , drop = FALSE]),
control = colMeans(y[d == 0, , drop = FALSE])
)
round(by_arm_mean, 3)
#> test_score attendance
#> treatment 0.627 0.728
#> control 0.492 0.568With estimand = "index", the package forms the weighted
index first and then constructs the two-arm confidence rectangle for
that index.
fit_index <- cmr_multiple_outcomes(
y = y,
d = d,
weights = weights,
estimand = "index",
method = "bounded"
)
fit_index$pi
#> [1] 0.4693132
round(fit_index$rectangle, 4)
#> v_l1 v_u1 v_l0 v_u0
#> 0.0000 0.1725 0.0000 0.2206
fit_index$estimand
#> [1] "index"
fit_index$weights
#> test_score attendance
#> 0.7 0.3This is the natural option when the main estimand is a prespecified index.
With estimand = "coprimary", the package builds
outcome-by-arm confidence bounds and combines them into an effective
two-arm variance rectangle using the prespecified weights.
fit_coprimary <- cmr_multiple_outcomes(
y = y,
d = d,
weights = weights,
estimand = "coprimary",
method = "bounded"
)
fit_coprimary$pi
#> [1] 0.484048
round(fit_coprimary$rectangle, 4)
#> v_l1 v_u1 v_l0 v_u0
#> 0.00 0.22 0.00 0.25
fit_coprimary$joint_error_bound
#> [1] 0.05The outcome-specific pieces remain available for audit.
comparison <- rbind(
index = c(pi = fit_index$pi, U_CMR = fit_index$U_CMR),
coprimary = c(pi = fit_coprimary$pi, U_CMR = fit_coprimary$U_CMR)
)
round(comparison, 4)
#> pi U_CMR
#> index 0.4693 0.1951
#> coprimary 0.4840 0.2345The two designs need not agree because they place different requirements on the pilot confidence set.
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.