The load_data function takes in raw data and creates a
data object that can be accepted by the plot_design and
analyze functions. We use the made-up dataframe
sw_data_example to demonstrate the workflow.
data(sw_data_example)
head(sw_data_example)
#> cluster period trt prob outcome_bin outcome_cont denominator numerator
#> 1 1 1 0 0.5667807 0 -3.02179837 14 4
#> 2 1 1 0 0.5667807 0 -0.07145287 5 2
#> 3 1 1 0 0.5667807 1 0.96807617 8 6
#> 4 1 1 0 0.5667807 0 0.29456948 5 4
#> 5 1 1 0 0.5667807 1 -0.83921584 11 10
#> 6 1 1 0 0.5667807 1 -0.42335941 10 6
dat <- load_data(
time = "period",
cluster_id = "cluster",
individual_id = NULL,
treatment = "trt",
outcome = "outcome_bin",
data = sw_data_example
)
#> Stepped wedge dataset loaded. Discrete time design with 15 clusters, 5 sequences, and 6 time points.The plot_design function produces a diagram of the
stepped wedge design and a summary of the variables.
plot_dat <- plot_design(dat)
print(plot_dat)
#> $design_plot
The analyze function analyzes the stepped wedge data.
First, we analyze the data using a mixed effects model, with the Time
Average Treament Effect (TATE) as the estimand, assuming an Immediate
Treatment (IT) effect, passing the family = "binomial" and
link = "logit" arguments to glmer.
analysis_1 <- analyze(
dat = dat,
method = "mixed",
estimand_type = "TATE",
exp_time = "IT",
family = binomial,
re = c("clust", "time")
)
print(analysis_1)
#> Treatment effect estimate: -0.189
#> Treatment effect 95% confidence interval: -0.448, 0.07
#> Converged: TRUERepeat the analysis, but including a random effect for cluster only, not for cluster-time interaction.
analysis_1b <- analyze(
dat = dat,
method = "mixed",
estimand_type = "TATE",
exp_time = "IT",
family = binomial,
re = "clust"
)
print(analysis_1b)
#> Treatment effect estimate: -0.189
#> Treatment effect 95% confidence interval: -0.448, 0.07
#> Converged: TRUERepeat the analysis, but using GEE rather than a mixed model.
analysis_2 <- analyze(
dat = dat,
method = "GEE",
estimand_type = "TATE",
exp_time = "IT",
family = binomial,
corstr = "exchangeable"
)
print(analysis_2)
#> Treatment effect estimate: -0.188
#> Treatment effect 95% confidence interval: -0.438, 0.061
#> Converged:Mixed model, with Time Average Treament Effect (TATE) as the estimand, using an Exposure Time Indicator (ETI) model.
analysis_3 <- analyze(
dat = dat,
method = "mixed",
estimand_type = "TATE",
exp_time = "ETI",
family = binomial
)
#> boundary (singular) fit: see help('isSingular')
print(analysis_3)
#> Treatment effect estimate: -0.184
#> Treatment effect 95% confidence interval: -0.496, 0.129
#> Converged: TRUEMixed model, with Time Average Treatment Effect (TATE) as the estimand, using a Natural Cubic Splines (NCS) model.
analysis_4 <- analyze(
dat = dat,
method = "mixed",
estimand_type = "TATE",
exp_time = "NCS",
family = binomial
)
#> boundary (singular) fit: see help('isSingular')
print(analysis_4)
#> Treatment effect estimate: -0.184
#> Treatment effect 95% confidence interval: -0.497, 0.128
#> Converged: TRUEContinuous outcome
Mixed model, with Time Average Treament Effect (TATE) as the estimand, using a Natural Cubic Splines (NCS) model.
dat_cont <- load_data(
time = "period",
cluster_id = "cluster",
individual_id = NULL,
treatment = "trt",
outcome = "outcome_cont",
data = sw_data_example
)
#> Stepped wedge dataset loaded. Discrete time design with 15 clusters, 5 sequences, and 6 time points.
analysis_6 <- analyze(
dat = dat_cont,
method = "mixed",
estimand_type = "TATE",
exp_time = "NCS",
family = gaussian
)
print(analysis_6)
#> Treatment effect estimate: 0.026
#> Treatment effect 95% confidence interval: -0.171, 0.223
#> Converged: TRUEBinomial outcome
When loading data where the outcome is binomial, specify the names of
the “# of successes” and “# of trials” variables as the
outcome argument.
dat_binom <- load_data(
time ="period",
cluster_id = "cluster",
individual_id = NULL,
treatment = "trt",
outcome = c("numerator", "denominator"),
data = sw_data_example
)
#> Stepped wedge dataset loaded. Discrete time design with 15 clusters, 5 sequences, and 6 time points.Mixed model, with Time Average Treament Effect (TATE) as the estimand, using an Exposure Time Indicator (ETI) model.
analysis_binom <- analyze(
dat = dat_binom,
method = "mixed",
family = binomial,
estimand_type = "TATE",
exp_time = "ETI")
#> boundary (singular) fit: see help('isSingular')
print(analysis_binom)
#> Treatment effect estimate: 0.04
#> Treatment effect 95% confidence interval: -0.051, 0.13
#> Converged: TRUEPlotting effect curves
The plot_effect_curve function plots effect estimates by
exposure time for one or more analyze objects.
IT_model <- analyze(
dat = dat_cont, method = "mixed", estimand_type = "TATE",
estimand_time = c(1, 4), exp_time = "IT"
)
ETI_model <- analyze(
dat = dat_cont, method = "mixed", estimand_type = "TATE",
estimand_time = c(1, 4), exp_time = "ETI"
)
NCS_4_model <- analyze(
dat = dat_cont, method = "mixed", estimand_type = "TATE",
estimand_time = c(1, 4), exp_time = "NCS",
advanced = advanced(n_knots_exp = 4)
)
plot_effect_curves(IT_model, NCS_4_model, ETI_model, facet_nrow = 1)
