Risk Ratio, Odds Ratio, Risk Difference and NNT: One 2×2 Table, Four Answers

On this page
อ่านฉบับภาษาไทย (Thai version)
Abstract
A district hospital committee is deciding whether to pay for C, a new preventive treatment. In a trial, 8 of 66 patients on C and 13 of 60 on usual care had a serious complication within a year. The trial report offers four numbers: 9.55, 11, 0.56 and 0.50. We compute each from the same table and say which question it answers. The risk difference counts complications avoided per 100 patients, and the number needed to treat turns that gap into patients. The risk ratio divides one risk by the other. The odds ratio compares odds, the patients with a complication for each patient without one, so it sits further from 1 when complications are common. Dividing by follow-up time instead gives a third ratio, the incidence rate ratio. We show why 0.50 does not mean half the complications, how pooling groups can move an odds ratio, how wide the trial's uncertainty is, and what the economic model needs for the district's own patients.
One trial table, four numbers on the committee's desk
A district hospital committee must decide whether to pay for C, a new preventive treatment for adults newly diagnosed with a chronic condition. In a trial, 8 of 66 patients given C and 13 of 60 given usual care, A, had a serious complication within one year. The district expects 100 new patients a year. These are illustrative numbers for teaching, not results of a real trial.
The trial report gives four numbers from those counts: 9.55, 11, 0.56 and 0.50. One member reads the 0.50 as "C halves the complications". Another says one complication is prevented for every 11 patients treated. A third asks which number the economic model should use.
All four numbers are correct arithmetic on the same table, but each answers a different question. This article computes them one at a time from the counts and shows when they part company. It ends with the input the model needs: complications avoided among the district's own patients.
First count the risk in each group
Start with the patients, not the formulas. Of the 66 patients given C, 8 had a serious complication within the year: 8 divided by 66 is 12.12%. Of the 60 on usual care, 13 had one: 21.67%. That share, the patients who have the event within a stated time, is called the risk.
The time belongs to the number. A risk of 21.67% within one year is a different fact from the same share over five years, so every number below means within one year.
Lay the counts out as two groups by two outcomes and you have the table every answer in this article comes from. Its four inner cells are 8, 58, 13 and 47.
The trial in one table
| Group | Complication | No complication | Patients | Risk within one year |
|---|---|---|---|---|
| C, new treatment | 8 | 58 | 66 | 12.12% |
| A, usual care | 13 | 47 | 60 | 21.67% |
Subtract the risks: the risk difference and the NNT
Read first on this site: how a risk difference and a risk ratio are read, and how a regression model returns each, is taught in What Is Regression in Clinical Epidemiology? A Simple Guide to Risk Difference and Risk Ratio. Here both are worked on the committee's trial, as far as its model needs them.
The committee pays per patient, so its first question is how many complications C prevents. Out of 100 patients on usual care, 21.67 have a complication in a year; out of 100 on C, 12.12 do. The gap, 9.55 fewer complications per 100 patients a year, is called the risk difference.
Because both risks are percentages, their gap is counted in percentage points: 21.67% minus 12.12% is 9.55 points, not 9.55%. Written as C minus A, the risk difference is -9.55 points, and the minus sign says C has fewer complications.
Now turn the same gap around. If 100 patients on C avoid 9.55 complications, one complication is avoided for every 100 / 9.55 = 10.48 patients. Patients come whole, so round up: 11 patients must take C for one year to prevent one complication. This is the number needed to treat (NNT).
In symbols, with $p_C$ and $p_A$ for the two risks, $RD = p_C - p_A$ and $NNT = 1/|RD|$. Both belong to the one-year horizon: a five-year trial would give a different NNT for the same treatment.
Divide the risks: the risk ratio
A second question is relative: what share of the usual-care risk remains on C? Divide the two risks: 12.12% divided by 21.67% is 0.56. A patient on C carries 0.56 times the risk of a patient on usual care, so C removes a little under half of that risk.
This number is called the risk ratio, or relative risk: $RR = p_C / p_A$. A value of 1 means no effect, and a value below 1 means fewer complications on C.
A ratio on its own cannot say how many complications C prevents. The same 0.56 in a group where complications are rarer prevents fewer of them, a point the district will need later.
Count the odds: the odds ratio
Read first on this site: odds, and how they differ from risk, are taught from the beginning in Understanding Odds and Odds Ratios in Clinical Epidemiology. Here the odds are worked through on the committee's trial.
A fourth number, 0.50, comes from counting the same patients another way. You will meet it often: logistic regression, the statistical model most studies fit to a yes-or-no outcome, reports its results in odds. A case-control study, which starts from patients who already have the outcome and looks back at what they received, also reports its result in odds, and what that comparison estimates depends on how its controls were chosen, as the article on what each study design can actually estimate shows (Design, Model and Estimand: What Each Study Design Can Actually Estimate).
Odds divide those with a complication by those without one, not by everyone. On C that is 8 to 58, or 0.138: about one patient with a complication for every seven without. On usual care it is 13 to 47, or 0.277.
Divide the two odds, 0.138 by 0.277, and you get 0.50. An odds ratio compares the odds of an event, the events divided by the non-events, between two groups. With the four cells it is $OR = \frac{8/58}{13/47} = \frac{8 \times 47}{58 \times 13}$, the cross-product of the table.
Why does it sit further from 1 than the risk ratio? Odds equal the risk multiplied by all the patients over those without the event. On C that is 12.12% × 66/58 = 0.138, a rise of about a seventh; on usual care it is 21.67% × 60/47 = 0.277, a rise of more than a quarter. The group with more complications has its odds pushed further above its risk, so the ratio of the odds, 0.50, lands further from 1 than the ratio of the risks, 0.56.
When an event is rare, those without it are almost everyone, so the multiplier is close to 1 and the two ratios nearly agree. Here about one patient in five on usual care had a complication, so they part.
Reading 0.50 as "half the complications" is the committee member's mistake. Halving the usual-care risk gives 10.83% on C, which would mean 10.83 complications avoided per 100 patients a year as well, because halving removes exactly as much as it leaves. The table says 9.55. An odds ratio of 0.50 is not a 50% risk reduction when one patient in five on usual care has the event.
# The trial: patients with a serious complication within one year, on C and on usual care A.
events <- c(C = 8, A = 13)
patients <- c(C = 66, A = 60)
risk <- events / patients
odds <- events / (patients - events)
cat("Risk within one year, C and A (%):", sprintf("%.2f", 100 * risk), "\n")
cat("Risk difference, C minus A (points):", sprintf("%.2f", 100 * (risk[[1]] - risk[[2]])), "\n")
nnt <- 1 / (risk[[2]] - risk[[1]])
cat("Number needed to treat:", sprintf("%.2f", nnt), "rounded up:", ceiling(nnt), "\n")
cat("Risk ratio:", sprintf("%.2f", risk[[1]] / risk[[2]]), "\n")
cat("Odds, C and A:", sprintf("%.3f", odds), "\n")
cat("Odds ratio:", sprintf("%.2f", odds[[1]] / odds[[2]]), "\n")
cat("Risk on C if 0.50 halved the risk on A (%):", sprintf("%.2f", 100 * 0.50 * risk[[2]]), "\n")
Risk within one year, C and A (%): 12.12 21.67
Risk difference, C minus A (points): -9.55
Number needed to treat: 10.48 rounded up: 11
Risk ratio: 0.56
Odds, C and A: 0.138 0.277
Odds ratio: 0.50
Risk on C if 0.50 halved the risk on A (%): 10.83
A third denominator: time at risk
Both ratios so far divide by people: the risk by everyone in a group, the odds by those without a complication. A third choice divides by time. Suppose each complication came halfway through the year and nobody left the trial early, so a patient stops being at risk of a first complication once it happens.
A person-year is one patient followed for one year. The 58 patients on C with no complication gave 58 person-years, and the 8 with one gave 0.5 each, 4 more: 62.0. On usual care, 47 + 13 × 0.5 = 53.5. Follow-up time added up over a group like this is called its person-time.
Events divided by person-time is an incidence rate, a speed rather than a share: 8 complications in 62.0 person-years is 12.90 per 100 person-years on C, and 13 in 53.5 is 24.30 on usual care. Their ratio, 12.90 / 24.30, is the incidence rate ratio (IRR), 0.53. With complications halfway through the year, it lies between the risk ratio of 0.56 and the odds ratio of 0.50, because the odds take each patient with a complication out of the denominator entirely, while person-time takes out only the half-year after the complication. Had they all come at the very end of the year, person-time would lose nothing and the rate ratio would equal the risk ratio.
A Poisson model, a regression built for counts, reports this ratio when each group's person-time is given as its denominator. A case-control study estimates it too when each case's controls are drawn from those still at risk at that moment, as the article on what each study design can actually estimate shows (Design, Model and Estimand: What Each Study Design Can Actually Estimate).
A rate is still not the chance a patient carries into the economic model, which first turns it into a probability for each step of the model, for example each year. How a rate becomes a probability is taught in the article on incidence and the right denominator (Incidence, Prevalence and the Right Denominator: The Epidemiology Beneath Cost-of-Illness and Markov Models).
# Add follow-up time: each complication taken as halfway through the year, nobody lost early.
events <- c(C = 8, A = 13)
patients <- c(C = 66, A = 60)
person_years <- (patients - events) * 1 + events * 0.5
cat("Person-years of follow-up, C and A:", sprintf("%.1f", person_years), "\n")
rate <- events / person_years
cat("Complications per 100 person-years, C and A:", sprintf("%.2f", 100 * rate), "\n")
cat("Incidence rate ratio:", sprintf("%.2f", rate[["C"]] / rate[["A"]]), "\n")
Person-years of follow-up, C and A: 62.0 53.5
Complications per 100 person-years, C and A: 12.90 24.30
Incidence rate ratio: 0.53
Why the odds ratio drifts from the risk ratio
How far apart the two ratios sit depends on how common the complication is, not on how well C works. To see this, keep C's risk ratio at 0.56 and imagine groups where complications on usual care are rarer or more common.
If 1.00% of usual-care patients had a complication, the odds ratio would also be 0.56: the two agree when events are rare. At the trial's 21.67% it is 0.50. At 60.00% it falls to 0.34, although C still removes the same share of risk.
The rule behind the curve is $OR = RR \times \frac{1 - p_A}{1 - p_C}$, with $p_A$ and $p_C$ the risks on A and on C. At the trial, 1 minus each risk is 78.33% on A and 87.88% on C, so 0.56 × 78.33% / 87.88% = 0.50. At 60.00% on usual care, C's risk is the unrounded risk ratio times 60.00%, which gives 33.57%, so the odds ratio is 0.56 × 40.00% / 66.43% = 0.34. The figure draws the whole curve.
Going back from an odds ratio to a risk ratio
Read first on this site: how to get a risk ratio from a model when the outcome is common is taught in Getting a Risk Ratio for a Common Outcome: The Step-Down When Log-Binomial Hits the Wall, and how a logistic model's odds ratio becomes a risk difference in Risk Difference vs Odds Ratio in Logistic Regression: A Quick Stata User Guide (with Stata Cheats). Here we keep only what the economic model needs from them.
Rarity has to hold in every group being compared. A trial whose overall risk is low can still hold a high-risk subgroup where the two ratios differ widely.
Say a report gives only the odds ratio, 0.50, and you know that 21.67% of patients on usual care have a complication. A's odds are 0.277, so C's are the unrounded odds ratio times A's odds: 0.138, which is a risk of 0.138 / (1 + 0.138) = 0.138 / 1.138 = 12.12%; and 12.12 / 21.67 = 0.56. In one line, $RR = \frac{OR}{1 - p_A + p_A \times OR}$ [1].
The formula is exact for a simple table like ours. Applied to an odds ratio adjusted for other factors it is biased, because one overall risk does not describe every patient [2].
For adjusted results there are better routes, and both end where the model needs to be. A Poisson model that is given person-time as its denominator returns the rate ratio met above. Given no person-time and fitted to each patient's yes-or-no outcome with robust standard errors, a correction that keeps its intervals honest, it estimates the risk ratio directly [3]. Standardisation takes any fitted model, predicts every patient's risk once as if given C and once as if given A, and averages each set [4]: the two averages are the two risks a model takes, with their ratio and their difference.
# Keep the trial's risk ratio; change how common the complication is on usual care A.
rr <- (8 / 66) / (13 / 60)
risk_a <- c(rare = 0.01, trial = 13 / 60, common = 0.60)
odds_ratio <- rr * (1 - risk_a) / (1 - rr * risk_a)
cat("Risk on A (%):", sprintf("%.2f", 100 * risk_a), "\n")
cat("Risk ratio:", sprintf("%.2f", rr), " odds ratio at each:", sprintf("%.2f", odds_ratio), "\n")
cat("Risk on C at each (%):", sprintf("%.2f", 100 * rr * risk_a), "\n")
cat("1 minus the risk on A (%):", sprintf("%.2f", 100 * (1 - risk_a)), "\n")
cat("1 minus the risk on C (%):", sprintf("%.2f", 100 * (1 - rr * risk_a)), "\n")
or_trial <- odds_ratio[["trial"]]
cat("Odds on C, and 1 plus them:", sprintf("%.3f", or_trial * 13 / 47 + 0:1), "\n")
back <- or_trial / (1 - risk_a[["trial"]] + risk_a[["trial"]] * or_trial)
cat("Risk ratio recovered from the trial's odds ratio:", sprintf("%.2f", back), "\n")
Risk on A (%): 1.00 21.67 60.00
Risk ratio: 0.56 odds ratio at each: 0.56 0.50 0.34
Risk on C at each (%): 0.56 12.12 33.57
1 minus the risk on A (%): 99.00 78.33 40.00
1 minus the risk on C (%): 99.44 87.88 66.43
Odds on C, and 1 plus them: 0.138 1.138
Risk ratio recovered from the trial's odds ratio: 0.56
Pooling groups can move the odds ratio
Read first on this site: why an odds ratio changes when patients are grouped differently, even with no confounding, is taught in Same Cohort, Two Odds Ratios: Non-Collapsibility Without Confounding. Here we keep the one example the economic model needs.
The committee's trial report also lists an odds ratio adjusted for disease severity, and it differs from our unadjusted 0.50, which compares the two groups as they are. Randomisation spread severity evenly between C and A, so no third factor distorted the comparison: nothing was confounded. The gap comes from the odds ratio itself, as an imagined trial shows.
Imagine equal numbers of mild and severe patients. On usual care, 20% of mild and 80% of severe patients have a complication within a year. Suppose C halves the odds in each group: mild patients on C then have a risk of 11.11%, and severe patients 66.67%.
Each group's odds ratio is 0.50. Pool the two groups and the risks average to 50.00% on usual care and 38.89% on C, so the odds ratio of the whole trial is 0.64, outside the range of its own groups.
The risk ratio and the risk difference stay between their groups' values. The groups' risk ratios, 0.56 and 0.83, give 0.78 for the whole trial; the risk differences, -8.89 and -13.33 points, give -11.11, halfway because the groups are the same size.
This property is called non-collapsibility: the odds ratio of a whole population need not equal, or even lie between, the odds ratios of its parts [2]. An unadjusted and an adjusted odds ratio therefore answer different questions, and a gap between them is not by itself evidence of confounding (Chance, Bias and Confounding: Why an Association Is Not Yet a Treatment Effect). For the model, pooling adjusted odds ratios from different trials mixes those questions; risks, and their ratio and difference, do not have this problem.
# An imagined trial: equal mild and severe groups, and C halves the odds in each group.
risk_a <- c(mild = 0.20, severe = 0.80)
risk_c <- 0.50 * risk_a / (1 - risk_a + 0.50 * risk_a)
cat("Risk on C, mild and severe (%):", sprintf("%.2f", 100 * risk_c), "\n")
cat("Risk ratio, mild and severe:", sprintf("%.2f", risk_c / risk_a), "\n")
cat("Risk difference, mild and severe (points):", sprintf("%.2f", 100 * (risk_c - risk_a)), "\n")
whole <- c(A = mean(risk_a), C = mean(risk_c))
odds <- whole / (1 - whole)
cat("Whole trial, risk on A and on C (%):", sprintf("%.2f", 100 * whole), "\n")
cat("Whole trial odds ratio:", sprintf("%.2f", odds[["C"]] / odds[["A"]]), "\n")
cat("Whole trial risk ratio:", sprintf("%.2f", whole[["C"]] / whole[["A"]]), "\n")
rd_whole <- whole[["C"]] - whole[["A"]]
cat("Whole trial risk difference (points):", sprintf("%.2f", 100 * rd_whole), "\n")
Risk on C, mild and severe (%): 11.11 66.67
Risk ratio, mild and severe: 0.56 0.83
Risk difference, mild and severe (points): -8.89 -13.33
Whole trial, risk on A and on C (%): 50.00 38.89
Whole trial odds ratio: 0.64
Whole trial risk ratio: 0.78
Whole trial risk difference (points): -11.11
How sure is one small trial?
So far every number came from one small trial. Had the same treatments been tested on another 66 and 60 patients, the counts would differ by chance, and so would every answer. A confidence interval shows how far: it is the range of effects that fit the trial's data, usually at the 95% level.
Ratios need one extra step. A ratio cannot fall below 0, and halving a risk is as big a step away from 1 as doubling it. So the interval is built on the log scale, where those two steps are equal, and then converted back. The worked steps below build the risk ratio's interval and then the risk difference's.
The trial's 95% intervals, step by step
Every step can be checked with a calculator from the numbers shown in it.
-
Take the log of the risk ratio
\[ \ln 0.56 = -0.58 \]
ln is the natural logarithm; raising e to a power undoes it, which step 4 uses. On the log scale, no effect is 0 instead of 1.
-
Find its standard error
\[ SE = \sqrt{\tfrac{1}{8}-\tfrac{1}{66}+\tfrac{1}{13}-\tfrac{1}{60}} = 0.412 \]
The standard error (SE) is the typical size of the chance error in an estimate. It comes from the four counts, and smaller counts give a larger error.
-
Step 1.96 standard errors each way
\[ 1.96 \times 0.412 = 0.81, \quad -0.58 \pm 0.81 = -1.39 \;\text{to}\; 0.23 \]
If the trial were repeated many times, an interval built this way would catch the true value in 95 of every 100 repeats.
-
Convert back
\[ e^{-1.39} = 0.25, \quad e^{0.23} = 1.26 \]
The risk ratio's interval runs from 0.25 to 1.26. It includes 1, so this trial cannot rule out that C does nothing, or even some harm.
-
Find the p value
\[ z = \frac{0.58}{0.412} = 1.41, \quad p = 0.16 \]
z counts how many standard errors the log risk ratio sits from 0. If C did nothing, about 16 in every 100 trials this size would land at least this far from a risk ratio of 1, so chance alone could easily produce this result.
-
Find 1.96 standard errors for the risk difference
\[ 1.96 \times 100\sqrt{\tfrac{8 \times 58}{66^3}+\tfrac{13 \times 47}{60^3}} = 13.064 \]
Each group contributes its risk times one minus that risk, divided by its size (written here with the counts). Add the two and take the square root to get the standard error of the difference, in percentage points, then multiply by 1.96.
-
Build the risk difference's interval directly
\[ -9.545 \pm 13.064 = -22.609 \;\text{to}\; 3.519 \]
A difference can be negative or positive, so no log scale is needed. The unrounded difference, -9.545 points, keeps the limits exact: from 22.609 fewer to 3.519 more complications per 100 patients.
-
Turn the limits into patients
\[ \frac{100}{22.609} = 4.42, \quad \frac{100}{3.519} = 28.42 \]
At the hopeful end, 4.42 patients treated prevent one complication. At the other end, C causes one extra complication for every 28.42 patients treated.
Result: The best estimate favours C, but the interval reaches from a large benefit to some harm. The odds ratio's interval, 0.19 to 1.30, is wider still and also includes 1.
These are the usual large-sample intervals; with very small counts, exact methods are safer.
Reading the NNT interval
The NNT interval needs care. Because the risk difference interval crosses 0, the NNT runs from 4.42 to infinity on the benefit side and from 28.42 to infinity on the harm side. Report it that way, as the number needed to treat for benefit (NNTB) and for harm (NNTH). A single negative NNT would hide the change of direction [5].
The limits are shown unrounded so the arithmetic can be followed. Rounded up like the point NNT of 11, they read NNTB 5 and NNTH 29.
# How sure is the trial? 95% intervals for the risk ratio, odds ratio and risk difference (points).
risk <- c(C = 8 / 66, A = 13 / 60)
log_rr <- log(risk[["C"]] / risk[["A"]])
se <- c(rr = sqrt(1 / 8 - 1 / 66 + 1 / 13 - 1 / 60), or = sqrt(1 / 8 + 1 / 58 + 1 / 13 + 1 / 47))
cat(sprintf("Log risk ratio: %.2f standard error (SE): %.3f\n", log_rr, se[["rr"]]))
ends <- log_rr + c(-1.96, 1.96) * se[["rr"]]
cat("1.96 x SE:", sprintf("%.2f", 1.96 * se[["rr"]]), " limits:", sprintf("%.2f", ends), "\n")
cat("Risk ratio limits:", sprintf("%.2f", exp(ends)), "\n")
cat("OR limits:", sprintf("%.2f", exp(log(8 * 47 / (58 * 13)) + c(-1.96, 1.96) * se[["or"]])), "\n")
rd <- 100 * c(risk[["C"]] - risk[["A"]], sqrt(sum(risk * (1 - risk) / c(66, 60))))
cat(sprintf("Risk difference: %.3f SE: %.3f 1.96 x SE: %.3f\n", rd[1], rd[2], 1.96 * rd[2]))
lims <- rd[1] + c(-1.96, 1.96) * rd[2]
cat("Limits:", sprintf("%.3f", lims), " NNT from:", sprintf("%.2f", c(-100, 100) / lims), "\n")
Log risk ratio: -0.58 standard error (SE): 0.412
1.96 x SE: 0.81 limits: -1.39 0.23
Risk ratio limits: 0.25 1.26
OR limits: 0.19 1.30
Risk difference: -9.545 SE: 6.665 1.96 x SE: 13.064
Limits: -22.609 3.519 NNT from: 4.42 28.42
# The p value for the risk ratio: how many standard errors the log risk ratio sits from 0.
log_rr <- log((8 / 66) / (13 / 60))
se <- sqrt(1 / 8 - 1 / 66 + 1 / 13 - 1 / 60)
z <- abs(log_rr) / se
cat("z, the log risk ratio in standard errors from 0:", sprintf("%.2f", z), "\n")
cat("Two-sided p:", sprintf("%.2f", 2 * pnorm(-z)), "\n")
z, the log risk ratio in standard errors from 0: 1.41
Two-sided p: 0.16
What the economic model needs
The committee's model does not take a ratio. It takes, for each option, the chance that a patient has a complication within a year, and from those it counts complications, costs and health. So the effect has to be turned back into risks for the district's patients.
If the district's patients are like the trial's, the trial's own risks will do. But the district's records may show fewer complications on usual care, say 10.00% within a year. A ratio often carries over between groups better than a difference does, though that is an assumption to check, not a guarantee. So the usual step is to apply the trial's risk ratio to the district's own risk [6].
Complications avoided among the district's 100 new patients a year
The same treatment and the same risk ratio, applied first at the trial's risk on usual care and then at the district's. Each step uses unrounded values, so a calculator with rounded inputs can differ in the last digit.
-
At the trial's risk on A
\[ 100 \times (21.67\% - 12.12\%) = 9.55 \]
9.55 complications avoided a year, and the NNT is 11.
-
The misread: 0.50 taken as halving the risk
\[ \tfrac{1}{2} \times \tfrac{13}{60} = 10.83\% \]
On C the risk would be 10.83%, so 10.83 complications would be avoided per 100 patients a year, because halving removes as much as it leaves. That is more than the table supports.
-
At the district's risk on A
\[ 100 \times 10.00\% = 10.00 \]
10.00 complications a year on usual care.
-
Apply the risk ratio
\[ 10.00 \times \frac{12.12}{21.67} = 5.59 \]
On C, 5.59 complications a year.
-
Count what C avoids
\[ 10.00 - 5.59 = 4.41, \quad \left\lceil \frac{100}{4.41} \right\rceil = 23 \]
4.41 complications avoided a year, and the NNT is 23.
Result: Same treatment, same risk ratio: 9.55 complications avoided a year at the trial's risk, 4.41 at the district's. The NNT rises from 11 to 23.
The district's 10.00% is an illustrative value; a real model takes it from local records.
Two risks go into the model
The economic model therefore receives two risks, 10.00% on usual care and 5.59% on C, not a ratio and not the trial's NNT. Copying NNT 11 from the trial would have promised about twice the benefit C can deliver here. Whether the trial's risk ratio carries over to the district is itself a judgement about the patients, the care and how a complication is defined [6].
Carry the uncertainty into the model
The district's 4.41 rests on the risk ratio, and the trial is unsure of it. A model fed only 0.56 behaves as if the trial had been certain. The honest approach runs the model many times, each time with a different plausible risk ratio, so the result is a share of runs rather than one number.
The draws are made on the log scale, where the interval is symmetric. Each run picks a log risk ratio from a bell-shaped spread centred on -0.58 with a standard deviation of 0.412, the standard error from the worked steps, and converts it back. Most draws land near 0.56, and 95 in 100 land between 0.25 and 1.26, the same interval as before. Converted back, no draw can fall below zero.
Feed the two ends of that interval through the district's numbers. At the district's 10.00% risk on usual care, a risk ratio of 0.25 would avoid 7.51 complications per 100 patients a year, and a risk ratio of 1.26 would add 2.56 (both from the unrounded limits). So the model's 4.41 sits inside a range that runs from a clear benefit to some harm.
The bell curve puts 7.95% of its area above 0 on the log scale, which is a risk ratio of 1. So in about 8 runs in 100 the drawn risk ratio is above 1: C causes more complications than usual care, and the model counts the cost of that harm instead of assuming it cannot happen.
Carrying the interval spreads the trial's uncertainty through the decision, but it does not repair a biased trial [6]. You can practise the four answers and their intervals in econclinicalepidem.
# The district's input: 100 new patients a year, the trial's risk ratio, two risks on A.
patients <- 100
rr <- (8 / 66) / (13 / 60)
risk_a <- c(trial = 13 / 60, district = 0.10)
cat("Complications a year on A:", sprintf("%.2f", patients * risk_a), "\n")
cat("Complications a year on C:", sprintf("%.2f", patients * risk_a * rr), "\n")
cat("Avoided a year:", sprintf("%.2f", patients * risk_a * (1 - rr)), "\n")
cat("NNT, rounded up:", ceiling(1 / (risk_a * (1 - rr))), "\n")
sd_log <- sqrt(1 / 8 - 1 / 66 + 1 / 13 - 1 / 60)
limits <- exp(log(rr) + c(-1.96, 1.96) * sd_log)
cat("District, avoided at the limits:", sprintf("%.2f", patients * 0.10 * (1 - limits)), "\n")
above_1 <- pnorm(0, mean = log(rr), sd = sd_log, lower.tail = FALSE)
cat("Bell-curve area above a risk ratio of 1 (%):", sprintf("%.2f", 100 * above_1), "\n")
Complications a year on A: 21.67 10.00
Complications a year on C: 12.12 5.59
Avoided a year: 9.55 4.41
NNT, rounded up: 11 23
District, avoided at the limits: 7.51 -2.56
Bell-curve area above a risk ratio of 1 (%): 7.95
Terms as we use them
- Risk (ความเสี่ยง)
- The share of a group who have the event within a stated time: 8 of 66, or 12.12%, within one year.
- Risk difference (ผลต่างความเสี่ยง)
- One risk minus the other, in percentage points: here 9.55 fewer complications per 100 patients.
- NNT, NNTB, NNTH (จำนวนที่ต้องรักษา)
- Patients treated for a stated time to prevent one event (NNTB) or cause one extra (NNTH).
- Risk ratio (อัตราส่วนความเสี่ยง)
- One risk divided by the other: 0.56 means C leaves 0.56 times the usual-care risk.
- Odds (ออดส์)
- Those with the event divided by those without it: 8 to 58, or 0.138.
- Odds ratio (อัตราส่วนออดส์)
- One group's odds divided by the other's; further from 1 than the risk ratio when events are common.
- Person-time (เวลาติดตามรวม)
- Follow-up time added up over a group, counted in person-years: 62.0 on C.
- Incidence rate ratio (IRR) (อัตราส่วนอัตราอุบัติการณ์)
- One incidence rate, events per person-time, divided by another: here 0.53, between the risk ratio and the odds ratio.
- Confidence interval (ช่วงความเชื่อมั่น)
- The range of effects that fit the data at a stated level, usually 95%.
- Non-collapsibility (การยุบรวมไม่ได้)
- A whole group's odds ratio can differ from its parts' odds ratios with no confounding.
References
- Zhang J, Yu KF. What is the relative risk? A method of correcting the odds ratio in cohort studies of common outcomes. JAMA. 1998;280(19):1690-1691. doi:10.1001/jama.280.19.1690
- Greenland S. Model-based estimation of relative risks and other epidemiologic measures in studies of common outcomes and in case-control studies. Am J Epidemiol. 2004;160(4):301-305. doi:10.1093/aje/kwh221
- Zou G. A modified Poisson regression approach to prospective studies with binary data. Am J Epidemiol. 2004;159(7):702-706. doi:10.1093/aje/kwh090
- Muller CJ, MacLehose RF. Estimating predicted probabilities from logistic regression: different methods correspond to different target populations. Int J Epidemiol. 2014;43(3):962-970. doi:10.1093/ije/dyu029
- Altman DG. Confidence intervals for the number needed to treat. BMJ. 1998;317(7168):1309-1312. doi:10.1136/bmj.317.7168.1309
- Briggs A, Claxton K, Sculpher M. Decision Modelling for Health Economic Evaluation. Oxford: Oxford University Press; 2006. ISBN 9780198526629
The series, in learning order
- Health Economics Series Guide: Read the Evidence Before the Costs
- Incidence, Prevalence and the Right Denominator: The Epidemiology Beneath Cost-of-Illness and Markov Models
- Design, Model and Estimand: What Each Study Design Can Actually Estimate
- Risk Ratio, Odds Ratio, Risk Difference and NNT: One 2×2 Table, Four Answers (this article)
- The Hazard Ratio Is Not a Risk Ratio: Proportional Hazards, Restricted Mean Survival Time and Model Inputs
- Chance, Bias and Confounding: Why an Association Is Not Yet a Treatment Effect
- Beyond the Evidence Pyramid: GRADE Certainty and Choosing Effectiveness Inputs for Economic Models
- From Sensitivity to Cost per Case Detected: Predictive Values, Prevalence and the Economics of Screening
- Whose Cost, in Which Year? Perspective, Opportunity Cost, Inflation and Discounting
- QALY, DALY and the Utilities Behind Them: What Is Actually Being Measured
- ICER, Dominance and the Cost-Effectiveness Plane: Reading the Thai Threshold of 160,000 Baht per QALY
- Decision Trees, Markov Cohorts and Probabilistic Sensitivity Analysis: How a Model Turns Evidence into a Decision
- Cost-Effective Is Not Affordable, and Efficient Is Not Fair: Budget Impact and Equity
- Parameter Sourcing, Reference Cost Lists and Utility Catalogues When Local Data Are Sparse
- Early Health Technology Assessment, Headroom Pricing and Benefit-Package Decisions
- Communicating Health Economic Evidence: From Model Outputs to Policy Briefs
Key takeaways
- One table gives four answers: 9.55 fewer complications per 100 patients a year, an NNT of 11, a risk ratio of 0.56 and an odds ratio of 0.50.
- An odds ratio of 0.50 is not a 50% risk reduction when one patient in five on usual care has the event.
- Pooling groups can move an odds ratio, from 0.50 to 0.64 here, with nothing confounded.
- Keep the interval: 0.25 to 1.26 for the risk ratio reaches harm, and it goes into the model as draws on the log scale.
- Give the model risks for the target patients: at the district's 10.00%, C avoids 4.41 complications per 100 patients a year, an NNT of 23.
Related in the wiki: Design, Model and Estimand: What Each Study Design Can Actually Estimate · The Hazard Ratio Is Not a Risk Ratio: Proportional Hazards, Restricted Mean Survival Time and Model Inputs · Beyond the Evidence Pyramid: GRADE Certainty and Choosing Effectiveness Inputs for Economic Models · ICER, Dominance and the Cost-Effectiveness Plane: Reading the Thai Threshold of 160,000 Baht per QALY · Getting a Risk Ratio for a Common Outcome: The Step-Down When Log-Binomial Hits the Wall · Pooling 95% Confidence Intervals and Effect Sizes: Fixed-effect, Random-effects, Bootstrap, or Rubin's Rules? · What Is Regression in Clinical Epidemiology? A Simple Guide to Risk Difference and Risk Ratio · Understanding Odds and Odds Ratios in Clinical Epidemiology · Risk Difference vs Odds Ratio in Logistic Regression: A Quick Stata User Guide (with Stata Cheats) · Same Cohort, Two Odds Ratios: Non-Collapsibility Without Confounding