Skip to contents

Compute sample size, power, or minimum detectable effect (MDE) for a two-sample test of proportions. Leave exactly one of n, power, or p2 as NULL to solve for that quantity.

Usage

power_prop(p1, ...)

# Default S3 method
power_prop(
  p1,
  p2 = NULL,
  n = NULL,
  power = 0.8,
  alpha = 0.05,
  N = Inf,
  deff = 1,
  resp_rate = 1,
  alternative = c("two.sided", "one.sided"),
  ratio = 1,
  overlap = 0,
  rho = 0,
  method = c("wald", "arcsine", "logodds"),
  plan = NULL,
  ...
)

Arguments

p1

Baseline proportion, in (0, 1).

...

Additional arguments passed to methods.

p2

Alternative proportion, in (0, 1). Leave NULL to solve for the minimum detectable effect (MDE). The solver searches both above and below p1 and returns the alternative closest to p1 that achieves the target power. When p1 is near 0 or 1, the MDE may only be detectable in one direction.

n

Per-group sample size. Scalar (equal groups) or length-2 vector c(n1, n2) for unequal groups. Leave NULL to solve for sample size.

power

Target power, in (0, 1). Leave NULL to solve for power.

alpha

Significance level, default 0.05.

N

Population size for finite-population correction. A scalar applies to both groups; a length-2 vector c(N1, N2) sets group-specific population sizes. Inf disables FPC for the corresponding group.

deff

Design effect multiplier (> 0). Values < 1 are valid for efficient designs (e.g., stratified sampling with Neyman allocation).

resp_rate

Expected response rate, in (0, 1]. Default 1 (no adjustment). The sample size is inflated by 1 / resp_rate.

alternative

Character: "two.sided" (default) or "one.sided".

ratio

Allocation ratio n1/n2 (default 1). Only used when solving for n (n = NULL). For example, ratio = 2 means group 1 gets twice the sample of group 2.

overlap

Panel overlap fraction in [0, 1], for repeated surveys. Defined as the fraction of group 1 that also appears in group 2 (overlap = n12 / n1). Only supported with method = "wald".

rho

Correlation between occasions in [0, 1].

method

Variance method: "wald" (default), "arcsine", or "logodds". Arcsine and log-odds transforms are variance-stabilizing and perform better for rare or extreme proportions (Valliant, 2018, §4.3.4–4.3.5).

plan

Optional svyplan() object providing design defaults.

Value

A svyplan_power object with components:

n

Per-group sample size (scalar or length-2 for unequal groups).

power

Achieved power.

effect

Difference in proportions (abs(p2 - p1)).

solved

Which quantity was solved for ("n", "power", or "mde").

params

List of input parameters.

Details

Three methods are available:

"wald"

Standard Wald test. Supports panel overlap.

"arcsine"

Arcsine-transformed test. The arcsine variance \(1/(4n)\) is approximately constant in \(p\), making it more accurate for rare proportions.

"logodds"

Log-odds (logit) test with separate null and alternative variances. Uses Valliant Eq (4.23)/(4.24).

References

Valliant, R., Dever, J. A., & Kreuter, F. (2018). Practical Tools for Designing and Weighting Survey Samples (2nd ed.). Springer. Chapter 4.

Cochran, W. G. (1977). Sampling Techniques (3rd ed.). Wiley.

See also

power_mean() for continuous outcomes, n_prop() for estimation precision.

Examples

# Sample size to detect a 5pp change from 30%
power_prop(p1 = 0.30, p2 = 0.35)
#> Power analysis for proportions (solved for sample size)
#> n = 1374 (per group), power = 0.800, effect = 0.0500
#> (p1 = 0.300, p2 = 0.350, alpha = 0.05)

# Power given n = 500
power_prop(p1 = 0.30, p2 = 0.35, n = 500, power = NULL)
#> Power analysis for proportions (solved for power)
#> n = 500 (per group), power = 0.394, effect = 0.0500
#> (p1 = 0.300, p2 = 0.350, alpha = 0.05)

# MDE with n = 1000
power_prop(p1 = 0.30, n = 1000)
#> Power analysis for proportions (solved for minimum detectable effect)
#> n = 1000 (per group), power = 0.800, effect = 0.0557
#> (p1 = 0.300, p2 = 0.244, alpha = 0.05)

# Arcsine transform for rare proportions
power_prop(p1 = 0.15, p2 = 0.18, alternative = "one.sided",
           method = "arcsine")
#> Power analysis for proportions (solved for sample size)
#> n = 1890 (per group), power = 0.800, effect = 0.0300
#> (p1 = 0.150, p2 = 0.180, alpha = 0.05, one-sided, method = arcsine)

# Log-odds transform
power_prop(p1 = 0.15, p2 = 0.18, alternative = "one.sided",
           method = "logodds")
#> Power analysis for proportions (solved for sample size)
#> n = 1889 (per group), power = 0.800, effect = 0.0300
#> (p1 = 0.150, p2 = 0.180, alpha = 0.05, one-sided, method = logodds)

# Allocation ratio 2:1
power_prop(p1 = 0.30, p2 = 0.35, ratio = 2)
#> Power analysis for proportions (solved for sample size)
#> n_treat = 2088, n_control = 1044 (total = 3132), power = 0.800, effect = 0.0500
#> (p1 = 0.300, p2 = 0.350, alpha = 0.05, ratio = 2)