The Number Needed to Treat (NNT) is a measure of treatment effectiveness. The NNT is the number of patients that need to be treated for one to benefit compared with a control in a clinical trial. More precisely, the NNT is the number of patients that need to be treat to avoid some bad outcome. Usually, the NNT is calculated as the inverse of the absolute risk reduction, i.e., the difference between the experimental event rate (EER) and the control event rate (CER):
NNT = 1 / (EER - CER)
More about the NNT can be found in these papers:
Laupacis A, Sackett DL, Roberts RS. An assessment of clinically useful measures of the consequences of treatment. N Engl J Med. 1988;318(26):1728-33. (first article, paywalled) http://www.nejm.org/doi/full/10.1056/NEJM198806303182605
Cook RJ, Sackett DL. The number needed to treat: a clinically useful measure of treatment effect. BMJ. 1995;310(6977):452-4. Erratum in: BMJ 1995;310(6986):1056. https://www.murciasalud.es/recursos/ficheros/58190-BMJ-1.pdf
Zapletal E, LeMaitre D, Menard J and Degoulet P, The Number Needed to Treat: a clinically useful nomogram in its proper context, BMJ 1996;312:426-9. http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2350093/pdf/bmj00529-0042.pdf
Ragan P, Quincy B. Number-needed-to-treat: translating benefits and risks of therapy from clinical trials to a clinical encounter. J Physician Assist Educ. 2013;24(1):45-9. http://www2.paeaonline.org/index.php?ht=action/GetDocumentAction/i/148812
It is quite obvious that the calculation is easy for categorical event rates. However, when you deal with continuous measures it may be difficult to calculate the NNT.
This problem is addressed in an article from two among the most important medical epidemiologists, Toshi A. Furukawa and Stefan Leucht:
Furukawa TA, Leucht S (2011) How to Obtain NNT from Cohen’s d: Comparison of Two Methods. PLoS ONE 6(4): e19070.
The article can be accessed here: http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0019070
As Furukawa and Leucht say in their paper, “When the outcome is continuous, the most common summary Effect Size index in the medical literature is Cohen’s d”.
Cohen’s d is the difference between two means divided by the standard deviation for the data: d = (mean_A - man_B) / s
where s is the pooled standard deviation (SD).
The pooled SD has to be calculated, according to Cohen, as such:
s = squared root ( ((n1 - 1)s1^2 + (n2 - 1)s2^2)/(n1 + n2 - 2) )
n1 and n2 are the sample size in group 1 and group 2, respectively; s1 and s2 are the standard deviation in the cited two groups.
Most programs automatically calculate the Cohen’s d, or its bias-adjusted version, the Hedges’ g, so you do not have to bother about these formulas.
Kraemer and Kupfer, two other Big Kahuna in the field of medical statistics and epidemiology, proposed a method to calculate the NNT from the Cohen’s d or it bias corrected analogue (Hedges’g). The paper is: Kraemer HC, Kupfer DJ. Size of treatment effects and their importance to clinical research and practice. Biol Psychiatry. 2006 Jun 1;59(11):990-6.
The paper is paywalled: http://www.sciencedirect.com/science/article/pii/S0006322305012102
The Kraemer and Kupfer’s method is based on the cumulative distribution function of the standard normal distribution.
You may found the formula in the Furukawa and Leucht (2011) paper. Below you will find a script in r to calculate the NNT both from crude categorical data and from Cohen’s d or Hedges’ g.
You may also want to calculate the Number Needed to Harm (NNH), which is the converse of the categorical NNT. The NNH is the number of patients that need to receive a treatment for one additional adverse event to occur, such as a severe side effect or a real harm, until the death. The NNH is calculated on the basis of the Absolute Risk Increase (ARI), which is the difference between the event rate for the adverse event in the experimental group and that in the control group.
ARI = EER - CER
NNH = 1 / ARI
A treatment should always have a NNH higher than the NNT, and a large ratio (NNH consistently higher than the NNT) is desiderable.
From the NNT and the NNH the likelihood of being helped or harmed (LHH) can be calculated, according to the formula:
LHH = (1/NNT) / (1/NNH)
A LHH = 3 means that the patients are 3 time more likely to benefit from the treatment than to be harmed by it.
If there is some reason to think that a patient has a greater risk of being harmed by a treatment (because age, sex, or comorbidity), or s/he has a lower chance of benefit from the treatment (as before), a correction has to be applied.
This correction incorporates the estimates of reduced benefit (ft) or increased harm (fh).
For example, if the patient has a half chance of benefiting from treatment, the ft = 0.5.
If the patients had a double chance of being harmed, the fh = 2.
The correction is incorporated in the formula:
LHH = ((1/NNT) x ft) / ((1/NNH) x fh)
About the LHH, you may consult these papers:
Straus SE, McAlister F. Applying the results of trials and systematic reviews to our individual patients. Evid Based Ment Health. 2001;4(1):6-7. http://ebmh.bmj.com/content/4/1/6.full
Straus SE. Individualizing treatment decisions. The likelihood of being helped or harmed. Eval Health Prof. 2002;25(2):210-24. http://ehp.sagepub.com/content/25/2/210.short (paywall)
Here is a simple function that I have developed in r to make easy these calculations.
Just copy and paste the script into a ‘new script’ and save it in your main working directory as “NNT.R”.
To use the script, just call it: source(“NNT.R”)
The script will be ready to use in your consolle.
The script calls for the data: just type ‘NNT1()’ if you have categorical outcomes, ‘NNT2()’ if you have Cohen’s d or Hedges’g, ‘NNH()’ if you want the Number Needed to Harm, ‘LHH()’ if you want the likelihood of being helped or harmed.
As far as the Cohen’s d is concerned, you have to call the function for the estimate and its lower and upper confidence interval to get the related NNT.
### NNT, NNH, LHH and NNT from Cohen's d or Hedges' g according to Kraemer and Kupfer (2006)
### Reference: Kraemer HC, Kupfer DJ. Size of treatment effects and their importance to clinical research and practice. Biological Psychiatry. 2006;59:990-996.
### Straus SE, McAlister F. Applying the results of trials and systematic reviews to our individual patients. Evid Based Ment Health. 2001;4(1):6-7.
### #### Call with: source("NNT.R")
cat("Utility to calculate Number Needed to Treat from categorical data and from Cohen's d or Hedges' g \n
Usage --> NNT1() for the categorical data \n
--> the input is the sample size in the experimental and the control group and the number of participants with the bad outcome \n
--> NNT2() for Cohen's d or Hedges'g \n
--> the input is your Cohen's d or Hedges' g (in decimals: e.g., .30) \n
--> NNH() for number needed to harm \n
--> the input is the sample size in the experimental and the control group and the number of participants with the adverse event \n
--> LHH for likelihood of being helped or harmed \n
--> the input is the NNT and the NNH in your study, and the estimates of change in benefit (ft) or change in risk of harm (fh) for the patient \n
")
NNT1 <- function(){
s.e <- readline("What is the sample size in the experimental group? ")
s.c <- readline("What is the sample size in the control group? ")
b.e <- readline("How many participants experienced the bad outcome in the experimental group? ")
b.c <- readline("How many participants experienced the bad outcome in the control group? ")
s.e <- as.numeric(s.e)
s.c <- as.numeric(s.c)
b.e <- as.numeric(b.e)
b.c <- as.numeric(b.c)
### formula to calculate NNT from categorical data
EER <- round((b.e/s.e),2) ### Experimental Event Rate
CER <- round((b.c/s.c),2) ### Control Event Rate
ARR <- CER - EER ### Absolute Risk Reduction
nnt1 <- 1/ARR
nnt1 <- round(nnt1,3) ### round the NNT to the third digit
message(sprintf("\n Control Event Rate = %s \n Experimental Event Rate = %s \n Absolute Risk Reduction = %s \n NNT = %s", CER, EER, ARR, nnt1))
}
NNT2 <- function(){
d <- readline("What is your Cohen's d or Hedges's (e.g., .30)? ")
d <- as.numeric(unlist(strsplit(d, ",")))
### formula to calculate NNT from Cohen's d / Hedges'g based
### on cumulative distribution function of the standard normal distribution
nnt2 <- 1/((2*pnorm(d/sqrt(2))-1))
nnt2 <- round(nnt2,3) ### round the NNT to the third digit
message(sprintf("\n NNT = %s", nnt2))
}
NNH <- function(){
s.e <- readline("What is the sample size in the experimental group? ")
s.c <- readline("What is the sample size in the control group? ")
a.e <- readline("How many participants experienced the adverse event in the experimental group? ")
a.c <- readline("How many participants experienced the adverse event in the control group? ")
s.e <- as.numeric(s.e)
s.c <- as.numeric(s.c)
a.e <- as.numeric(a.e)
a.c <- as.numeric(a.c)
### formula to calculate NNH from categorical data
EER <- round((a.e/s.e),2) ### Experimental Event Rate
CER <- round((a.c/s.c),2) ### Control Event Rate
ARI <- EER - CER ### Absolute Risk Increase
nnh <- 1/ARI
nnh <- round(nnh,3) ### round the NNT to the third digit
message(sprintf("\n Control Event Rate = %s \n Experimental Event Rate = %s \n Absolute Risk Increase = %s \n NNH = %s", CER, EER, ARI, nnh))
}
LHH <- function(){
nnt <- readline("What is the NNT in your study? ")
nnh <- readline("What is the NNH in your study? ")
ft <- readline("What is the estimate of benefit for the patient (digit 1 if no difference from the others)? ")
fh <- readline("What is the estimate of harm for the patient (digit 1 if no difference from the others)? ")
nnt <- as.numeric(nnt)
nnh <- as.numeric(nnh)
ft <- as.numeric(ft)
fh <- as.numeric(fh)
### formula to calculate LHH from NNT and NNH
LHH = ((1/nnt)*ft) / ((1/nnh)*fh) ### Likelihood of being helped or harmed, with ft and fh correction
lhh <- round(LHH,3) ### round the NNT to the third digit
message(sprintf("\n Likelihood of being helped or harmed = %s", lhh))
}
### Please, if you use this script in a study, cite it in the references:
### Preti, A. (2015). How to calculate the Number Needed to Treat (NNT) from Cohen's d or Hedges'g. Retrieved from https://rpubs.com/RatherBit
I hope you’ve enjoyed this!