Compute sample size, power, or minimum detectable effect (MDE) for a
two-group, two-period difference-in-differences (DiD) contrast.
Leave exactly one of n, power, or effect as NULL.
Arguments
- treat
Numeric length-2 vector for treated group outcomes:
c(baseline, endline).- ...
Additional arguments passed to methods.
- control
Numeric length-2 vector for control group outcomes:
c(baseline, endline).- outcome
Outcome scale:
"mean"(default) or"prop".- var
Outcome variance for
outcome = "mean". Length 1: common variance for all four cells. Length 2: group-specific variancesc(var_treat, var_control), assumed equal across waves. Length 4: cell-specific variances in orderc(var_treat_baseline, var_treat_endline, var_control_baseline, var_control_endline).- effect
Absolute DiD effect size to detect (> 0). Leave
NULLto solve for MDE.- n
Per-arm sample size per wave. Scalar (equal treated/control) or length-2 vector
c(n_treat, n_control). LeaveNULLto solve for n.- power
Target power, in (0, 1). Leave
NULLto solve for power.- alpha
Significance level, default 0.05.
- N
Population size for finite-population correction. Scalar applies to both arms; length-2 vector
c(N_treat, N_control).Inf(default) disables FPC.- deff
Design effect multiplier (> 0).
- resp_rate
Expected response rate, in (0, 1]. Default 1.
- alternative
Character:
"two.sided"(default) or"one.sided".- ratio
Allocation ratio
n_treat / n_control(default 1). Used only when solving forn(n = NULL).- overlap
Panel overlap fraction in [0, 1] within each arm across baseline and endline.
- rho
Correlation between baseline and endline outcomes within overlapping units, in [0, 1].
- plan
Optional
svyplan()object providing design defaults.
Value
A svyplan_power object with components:
nPer-arm sample size (scalar or length-2).
powerAchieved power.
effectDiD effect size.
type"did_prop"or"did_mean".solvedWhich quantity was solved for (
"n","power", or"mde").paramsList of input parameters.
Details
The DiD estimand is
(treat_endline - treat_baseline) - (control_endline - control_baseline).
Per-arm variance of the before-after change accounts for panel overlap:
$$V_{\text{arm}} = V_{\text{pre}} + V_{\text{post}} - 2 \cdot \text{overlap} \cdot \rho \cdot \sqrt{V_{\text{pre}} \cdot V_{\text{post}}}$$
The DiD test statistic variance is then:
$$V_d = \text{deff} \left( \frac{V_{\text{trt}} \cdot \text{fpc}_t}{n_t} + \frac{V_{\text{ctrl}} \cdot \text{fpc}_c}{n_c} \right)$$
When overlap = 0, this reduces to the classical flat-variance formula.
References
Valliant, R., Dever, J. A., & Kreuter, F. (2018). Practical Tools for Designing and Weighting Survey Samples (2nd ed.). Springer. Chapter 4.
See also
power_prop() for two-sample proportions, power_mean() for
two-sample means.
Examples
# DiD sample size for means
power_did(
treat = c(50, 55), control = c(50, 52),
outcome = "mean", var = 100, effect = 3
)
#> Power analysis for DiD means (solved for sample size)
#> n = 349 (per group), power = 0.800, effect = 3.0000
#> (treat = (50.000, 55.000), control = (50.000, 52.000), alpha = 0.05, var = (100.00, 100.00, 100.00, 100.00))
# DiD power for proportions
power_did(
treat = c(0.30, 0.36), control = c(0.30, 0.33),
outcome = "prop", effect = 0.03, n = 800, power = NULL
)
#> Power analysis for DiD proportions (solved for power)
#> n = 800 (per group), power = 0.149, effect = 0.0300
#> (treat = (0.300, 0.360), control = (0.300, 0.330), alpha = 0.05)
# MDE for means with n = 500
power_did(
treat = c(50, 55), control = c(50, 52),
outcome = "mean", var = 100, effect = NULL, n = 500
)
#> Power analysis for DiD means (solved for minimum detectable effect)
#> n = 500 (per group), power = 0.800, effect = 2.5058
#> (treat = (50.000, 55.000), control = (50.000, 52.000), alpha = 0.05, var = (100.00, 100.00, 100.00, 100.00))
# Panel overlap reduces required n
power_did(
treat = c(0.50, 0.55), control = c(0.50, 0.48),
outcome = "prop", effect = 0.07, overlap = 0.5, rho = 0.6
)
#> Power analysis for DiD proportions (solved for sample size)
#> n = 1119 (per group), power = 0.800, effect = 0.0700
#> (treat = (0.500, 0.550), control = (0.500, 0.480), alpha = 0.05, overlap = 0.50, rho = 0.60)