Converts a standardized mean difference (Cohen's d) into the number needed to treat (NNT) using the Kraemer-Kupfer (2006) framework, which connects d to the success-rate difference (SRD) under the assumption of a continuous, normally distributed outcome with equal variances and a hypothetical median-cut criterion for treatment success. When a confidence interval on d is supplied (or noncentrality parameters / sample sizes are provided so that one can be constructed), the bounds are propagated through the same conversion to give a CI on the NNT.
Usage
nnt_from_smd(
smd,
n_1 = NULL,
n_2 = NULL,
conf_level = 0.95,
smd_lower = NULL,
smd_upper = NULL
)Arguments
- smd
Sample standardized mean difference (Cohen's d); a numeric scalar. Positive values correspond to the treatment group exceeding the control group.
- n_1, n_2
Sample sizes in the treatment and control groups; both required when a noncentral t-based CI on the NNT is desired.
- conf_level
Confidence level for the CI on the NNT (when
n_1andn_2are supplied). Default0.95.- smd_lower, smd_upper
Optional pre-computed confidence limits on d. If supplied, these are used directly to propagate the interval through the SRD-to-NNT map and the noncentral t computation is skipped.
Value
A data.frame with rows for the success-rate
difference (srd), the point estimate of NNT (nnt), and
(when an interval is constructable) the lower and upper NNT limits.
When the lower CI on d is exactly zero, the corresponding NNT
bound is reported as Inf; when it is negative, that bound is a
finite negative value (the NNT to harm), so a CI on d that
spans zero yields an NNT interval passing through the infinite point
that separates benefit from harm.
Details
The conversion. Under bivariate normality with equal variances, Kraemer & Kupfer (2006) showed that the proportion of times a randomly drawn treatment-group observation exceeds a randomly drawn control-group observation is $$p \;=\; \Pr(Y_T > Y_C) \;=\; \Phi\!\bigl(d / \sqrt{2}\bigr),$$ from which the success-rate difference (their effect size) is $$\mathrm{SRD} \;=\; 2 p - 1 \;=\; 2 \Phi\!\bigl(d / \sqrt{2}\bigr) - 1,$$ and the number needed to treat is its reciprocal, $$\mathrm{NNT} \;=\; 1 / \mathrm{SRD}.$$ Larger d produces smaller NNT; \(d = 0\) produces \(\mathrm{NNT} = \infty\) (no advantage). The conversion is monotone, so the SRD/NNT confidence interval is obtained by applying the same transformation to the endpoints of the CI on d; the lower NNT limit comes from the upper d limit and vice versa (Furukawa & Leucht, 2011).
When NNT becomes infinite or negative. If the lower CI on
d is exactly zero, the corresponding upper NNT bound is
Inf: the data do not exclude the possibility that the treatment
produces no advantage (or even harm). Negative values of d are
allowed; the function returns negative NNT values which are conventionally
read as the NNT to harm.
Assumption check. The Kraemer-Kupfer conversion assumes a
continuous, normally distributed outcome with equal variances across
groups. For skewed outcomes, ordinal outcomes, or unequal variances, the
empirical common-language effect size cles or the
Vargha-Delaney A statistic is more defensible. Furukawa & Leucht
(2011) compare four methods and recommend the Kraemer-Kupfer formula as
the most accurate under normality.
References
Furukawa, T. A., & Leucht, S. (2011). How to obtain NNT from Cohen's d: Comparison of four methods. PLoS ONE, 6(4), e19070. doi:10.1371/journal.pone.0019070
Kelley, K. (2007). Confidence intervals for standardized effect sizes: Theory, application, and implementation. Journal of Statistical Software, 20(8), 1–24. (The noncentral t interval on the standardized mean difference that is mapped to the NNT here.) doi:10.18637/jss.v020.i08
Kraemer, H. C., & Kupfer, D. J. (2006). Size of treatment effects and their importance to clinical research and practice. Biological Psychiatry, 59(11), 990–996. doi:10.1016/j.biopsych.2005.09.014
See also
Other effect size estimates:
cles(),
cliff_delta(),
correction_for_attenuation(),
eta_squared(),
eta_squared_generalized(),
eta_squared_partial(),
expected_partial_r(),
expected_r(),
expected_smd(),
omega_squared(),
omega_squared_partial(),
probability_of_superiority_paired(),
proportion_of_superiority(),
responder_analysis(),
smd_trimmed()
Author
Ken Kelley kkelley@nd.edu
Examples
# 1. Point estimate only.
nnt_from_smd(smd = 0.5)
#> term value
#> smd 0.5
#> srd 0.276
#> nnt 3.62
# 2. With a noncentral t CI from sample sizes:
nnt_from_smd(smd = 0.5, n_1 = 50, n_2 = 50, conf_level = 0.95)
#> term value
#> smd 0.5
#> srd 0.276
#> nnt 3.62
#> smd_lower 0.101
#> smd_upper 0.897
#> nnt_lower 2.11
#> nnt_upper 17.6
#>
#> Confidence level: 95%
# 3. With pre-computed CI on d:
nnt_from_smd(smd = 0.5, smd_lower = 0.20, smd_upper = 0.80)
#> term value
#> smd 0.5
#> srd 0.276
#> nnt 3.62
#> smd_lower 0.2
#> smd_upper 0.8
#> nnt_lower 2.33
#> nnt_upper 8.89
#>
#> Confidence level: 95%
# 4. Lower d below zero: upper NNT bound is a finite negative value (NNT to harm).
nnt_from_smd(smd = 0.3, smd_lower = -0.10, smd_upper = 0.70)
#> term value
#> smd 0.3
#> srd 0.168
#> nnt 5.95
#> smd_lower -0.1
#> smd_upper 0.7
#> nnt_lower 2.64
#> nnt_upper -17.7
#>
#> Confidence level: 95%