Plain-Language Summaries of Evidence
A plain-language summary (PLS) is a concise, jargon-free account of a study's methods, findings, and limitations written for patients, caregivers, and the general public rather than for clinicians or researchers; it translates relative effect measures (hazard ratios, odds ratios) into absolute, natural-frequency statements that lay readers can correctly interpret, and it must be written honestly — without promotional framing, cherry-picked endpoints, or false certainty — to comply with EU Clinical Trial Regulation 536/2014 and emerging journal, registry, and payer requirements.
In plain language
A plain-language summary (PLS) translates a study's findings into everyday language so that patients, caregivers, and the public can understand what the research found without needing a medical or statistics background. Instead of reporting a hazard ratio of 0.75, a PLS says "9 of every 100 people who took the treatment had a heart event, compared with 12 of every 100 in the comparison group — 3 fewer per 100." Since 2022, the EU requires all clinical trial sponsors to publish a lay summary of results; many journals and patient registries now expect one too. The one firm rule: a PLS must describe what the study found honestly, including limitations and side effects, and must not use promotional language or present results as more certain than the evidence supports.
What a plain-language summary is and why it exists
A plain-language summary (PLS) — also called a lay summary, patient summary, or plain- language abstract — is a short document that describes a study in language accessible to adults without medical or statistical training. The core problem it solves is well documented: health statistics as typically reported (relative risks, hazard ratios, p-values, confidence intervals) are systematically misunderstood by most patients, journalists, and even many clinicians. Gigerenzer and colleagues demonstrated that "25% risk reduction" is routinely interpreted as meaning one in four patients benefited, when in fact it often means 1 fewer patient per 1,000 had the outcome. A PLS replaces such statements with natural frequencies and absolute counts that correct this systematic error.
Where PLS is now required or expected
The regulatory and editorial landscape has shifted decisively toward mandatory disclosure:
- EU Clinical Trial Regulation (CTR) 536/2014: Sponsors must publish a lay summary of
- Journal requirements: A growing number of journals — including BMJ, JAMA Network Open,
- Sponsor medical communications: Pharmaceutical and device sponsors increasingly produce
- HTA and payer dossiers: NICE and some other HTA bodies increasingly expect
- RWE and registry communications: Patient registries that collect outcomes from real-
The evidence-based communication toolkit
Research in risk communication provides clear guidance on what works:
Natural frequencies over percentages. Expressing "12 of 100 untreated patients had the event, compared with 9 of 100 treated patients" is understood correctly by far more lay readers than "the hazard ratio was 0.75" or "risk was reduced by 25%." Natural frequencies anchor the probability to a concrete reference class (100 people like you) and make the base rate visible, eliminating the most common misreading. See `risk-ratio-and-risk- difference` for the absolute-vs-relative machinery and `number-needed-to-treat-rwe` for the NNT as the canonical natural-frequency translation of an absolute risk reduction.
Avoid OR-speak entirely. Odds ratios, being non-collapsible and further from a direct frequency interpretation than risk ratios, should not appear in a PLS. If the analysis produced an OR, convert it to an approximate risk ratio (valid when outcome is rare) or to a marginal risk difference via g-computation before writing the PLS.
Icon arrays and pictographs. A grid of 100 person icons, with some colored to indicate the event, conveys the natural frequency visually and is particularly effective for audiences with lower numeracy. Icon arrays outperform bar charts and text alone in comprehension studies.
Framing symmetry. Always report both the event framing ("3 of 100 had the event") and the survival framing ("97 of 100 remained event-free") for both arms. Reporting only the reduction is a form of positive framing bias. Both framings are the same arithmetic fact; presenting both signals honesty and helps readers who think in terms of survivors rather than events.
Numeracy-aware design. Design PLS for the lower-numeracy segment of the audience — typically grade 6 reading level and 40th-percentile numeracy. Avoid decimals when a count-per-100 is available. Avoid "X times as likely," which is frequently misread as "X percentage points more likely." Prefer "3 more people per 100" over "0.03 more."
Uncertainty communication without false precision. A PLS must convey uncertainty without using CI notation that lay readers cannot interpret. Acceptable alternatives: "we are fairly confident the treatment helps, but we cannot rule out a smaller benefit"; "the study was not large enough to be sure about rare side effects." Phrases like "definitely shows" or "proves" are precision-inflating and impermissible.
Readability levels honestly
Readability formulas (Flesch-Kincaid Grade Level, Flesch Reading Ease, SMOG, Gunning Fog) are crude proxies for comprehension. A grade-6-to-8 target is the standard reference for health communications to a general audience. These formulas count syllables, sentences, and word length — they reward short words and short sentences mechanically. A PLS optimized only for a readability formula can still be unintelligible if it uses short but unfamiliar technical words or if its sentence structure is incoherent. The correct use of readability formulas is as a gate — a PLS that scores above grade 12 is almost certainly too technical and should be revised — not as a goal. The goal is genuine comprehension, verified where possible by cognitive interviewing with representative lay readers.
What a PLS must NOT do
- Promotional drift: EU CTR lay summaries are explicitly required to be non-promotional.
- Cherry-picking endpoints: The PLS should report on the same primary endpoint as the
- Certainty inflation: "This treatment works" is not appropriate language in a PLS for
- Omitting harms: If the study detected adverse events, the PLS must describe them in
Structure templates: Good Lay Summary Practice (GLSP)
The Good Lay Summary Practice (GLSP) guidance, which was adopted into EU CTR regulation, provides the canonical structure for clinical trial lay summaries: (1) Why was the study done? (2) Who took part? (3) What happened during the study? (4) What were the results? (5) What were the side effects? (6) What were the limitations? (7) What happens next? This seven-part structure is also useful for journal PLS and RWE communications because it ensures completeness and prevents the omission of limitations and harms.
The RWE-specific challenge: explaining confounding to lay readers
Observational RWE — claims studies, EHR cohorts, registry analyses — presents a unique communication challenge that trial PLS does not face: the study was not randomized, so the treatment groups may have differed at baseline in ways that influence the outcome. A PLS for an observational study must honestly convey this without inducing paralysis. A workable template: "In this study, patients who received Treatment A were compared with patients who received Treatment B. We tried to account for differences between the groups using statistical methods, but because this was not a randomized study, we cannot be certain that other factors did not influence the results." This statement is accurate, non-technical, appropriately hedged, and does not require the lay reader to understand propensity scoring or confounding adjustment.
AI-assisted PLS drafting with human verification
Large language models can produce first-draft PLS text quickly and at scale. The appropriate workflow is: (1) generate a draft that translates the key result statistics into natural-frequency statements; (2) verify the arithmetic is exact (the draft is unreliable for numerical translation); (3) check for promotional drift, omitted harms, and certainty inflation introduced by the model; (4) have a medical writer and at least one patient representative or health-literacy specialist review the draft. See `llm-assisted-abstraction-rwe` for the broader AI-in-evidence-synthesis framework. AI assistance accelerates drafting but does not replace the human verification step, which is the bottleneck where errors — especially wrong numbers and promotional framing — are most consequentially introduced.
Pros, cons, and trade-offs
Pros: Fulfills a regulatory mandate (EU CTR) and emerging journal requirements; increases patient understanding of what studies found; translates effect measures into actionable natural frequencies; corrects the systematic misreading of relative-risk statements; builds trust with patient communities; creates a citable, accessible evidence record alongside the technical publication; supports informed shared decision-making.
Cons: Adding a PLS requires time, subject-matter expertise, and health-literacy expertise that most research teams lack; poorly written PLS can mislead more than technical abstracts by omitting nuance; the readable format can create false certainty through simplification; readability formula optimization can produce grammatically simple but conceptually opaque text; promotional drift is a persistent risk when sponsors write their own PLS without independent review.
Trade-offs: More detail increases accuracy but reduces accessibility; shorter text is more readable but omits uncertainty and limitations; natural frequencies are concrete but require the communicator to have an accurate baseline risk from the study, which can be hard to derive from a reported HR without additional data.
When to use
Use a PLS when: (1) required by regulation (EU CTR 536/2014 mandates one for all EU trials completed after its full entry into force); (2) a journal submission is to a publication that requires or encourages a lay summary; (3) results from a registry or RWE study will be shared with patient communities, advocacy groups, or payer/HTA bodies as part of a stakeholder engagement plan; (4) an evidence brief or formulary submission includes quantitative findings that need to be communicated to non-clinical decision-makers; (5) a clinical trial concludes and participants are owed a return-of-results communication.
When NOT to use — and when a PLS is actively misleading
- When the evidence is too preliminary: Phase I dose-escalation data, animal-model
- When the PLS cannot accurately represent the primary endpoint: If the primary endpoint
- When the arithmetic is wrong: A PLS with an incorrect NNT or natural-frequency count
- When promotional intent overrides accuracy: If organizational or commercial pressures
Interpreting the output
Using the worked example: an observational RWE study produces a hazard ratio of 0.75 for a 2-year cardiovascular endpoint. The comparator-arm 2-year cumulative risk is 12% (0.12). The arithmetic translation yields: treated-arm risk ≈ 0.12 × 0.75 = 0.09 (9 of 100); absolute risk reduction = 0.12 − 0.09 = 0.03 (3 per 100); NNT ≈ 100/3 ≈ 33 (34 rounded up).
(1) Formal interpretation. The approximation risk_treated ≈ baseline_risk × HR is valid when the outcome is relatively rare and the hazard is approximately constant over the window; at 12% baseline risk it introduces modest error, and a competing-risk-aware cumulative incidence approach is more precise. The NNT of approximately 33 is the reciprocal of the absolute risk reduction (1 / 0.03 = 33.3) and is specific to the 2-year horizon and the 12% comparator-arm baseline risk: it cannot be transferred to a lower-risk population without re-anchoring (see `number-needed-to-treat-rwe`). Because this is an observational study, the effect estimate is associational; the 95% CI and any unmeasured confounding caveat must appear alongside the NNT in the PLS.
(2) Practical interpretation. The PLS statement "9 of every 100 people who took this treatment had a cardiovascular event over 2 years; 12 of every 100 people in the comparison group had a cardiovascular event — 3 fewer per 100" gives a lay reader the complete picture without requiring any statistical background. Paired with "this study was not a randomized trial, so other differences between the groups may explain some of this result," and "we estimate that treating about 33 people for 2 years would prevent one event at this baseline risk," the PLS is an honest, numeracy-appropriate communication of the finding. A decision-maker or formulary analyst can read the NNT directly as: treating 33 patients for 2 years at an average risk of 12% prevents one cardiovascular event.
Worked example
Scenario
An observational claims-based RWE study comparing a new cardiovascular drug with a standard comparator reports a hazard ratio (HR) of 0.75 (95% CI 0.60–0.93) for a 2-year composite cardiovascular endpoint. The comparator-arm 2-year cumulative event risk is 12 per 100 patients. A medical writer must translate this into a plain-language summary for a patient registry newsletter using natural frequencies, an absolute risk count, and an honest uncertainty statement. No randomization occurred; this is an observational study.
Dataset
Summary statistics for the two treatment arms over a 2-year follow-up window. The treated-arm risk is derived from the baseline risk and the HR using the approximation HR ≈ RR, which is reasonable when the 2-year risk is below 20%.
| group | n_per_100 | events_per_100 | risk |
|---|---|---|---|
| comparator (untreated) | 100 | 12 | 0.12 |
| index drug (treated) | 100 | 9 | 0.09 |
Steps
Start with the comparator-arm baseline risk: 12 of every 100 patients had the cardiovascular event over 2 years, so risk_untreated = 12 / 100 = 0.12.
Apply the HR as an approximation for the risk ratio: risk_treated = 0.12 * 0.75 = 0.09. This means 9 of every 100 treated patients had the event over the same 2-year window.
Compute the absolute risk reduction in natural-frequency terms: risk_reduction = 12 - 9 = 3 per 100 patients. Three fewer events for every 100 people treated with the index drug rather than the comparator over 2 years.
Compute the number needed to treat: NNT = 100 / 3 ≈ 33 (conventionally rounded up to 34 in practice — you cannot treat a fraction of a person to prevent a fraction of an event). About 33 to 34 patients need the index drug instead of the comparator for 2 years for one additional patient to avoid the endpoint.
Apply framing symmetry: alongside the event framing ("9 of 100 treated had the event"), report the survival framing: "91 of 100 treated patients did not have the event" vs "88 of 100 comparator patients did not have the event." Both facts are the same arithmetic; presenting both prevents one-sided impression.
Add the observational-study caveat in plain language: "This study was not randomized, so we used statistical methods to try to account for differences between the groups. We cannot be certain that other factors did not contribute to the difference we observed."
Result
risk_untreated = 12 / 100 = 0.12; risk_treated = 0.12 * 0.75 = 0.09; risk_reduction = 12 - 9 = 3 per 100; NNT ≈ 100 / 3 ≈ 33 (round up to 34 in practice). The PLS statement reads: "In this observational study, 9 of every 100 people who took the index drug had a cardiovascular event over 2 years, compared with 12 of every 100 in the comparison group — 3 fewer events per 100 people treated. We estimate that treating about 33 to 34 people for 2 years would prevent one event at this baseline risk. Because this was not a randomized study, other differences between the groups may explain part of this result. We cannot rule out a smaller real benefit."
Runnable example
python implementation
Two utilities for PLS authoring: (1) hr_to_natural_freq — converts a hazard ratio and baseline risk to a natural-frequency statement and NNT, using the approximation HR ≈ RR; warns when baseline risk exceeds 10% (approximation degrades). (2)...
import math
import re
def hr_to_natural_freq(hr, baseline_risk, n_per_group=100, horizon_label="2 years"):
"""
Translate a hazard ratio + baseline risk into natural-frequency PLS language.
Uses approximation HR ≈ RR, which is reasonable when:
- baseline_risk < 0.10 (outcome is rare): error is negligible
- baseline_risk 0.10-0.20: small error; flag with a warning
- baseline_risk > 0.20: compute from cumulative incidence functions instead
Returns a dict with counts, ARR, NNT, and a ready-made PLS sentence.
"""
if baseline_risk > 0.20:
raise ValueError(
f"baseline_risk={baseline_risk:.2f} > 0.20; the HR ≈ RR approximation "
"breaks down. Compute treated-arm risk from a cumulative incidence "
"function (Kaplan-Meier or competing-risk model) instead."
)
if baseline_risk > 0.10:
print(
f"WARNING: baseline_risk={baseline_risk:.2f} is above 10%; "
"the HR ≈ RR approximation introduces modest error (~5-10%). "
"Consider competing-risk-aware cumulative incidence for precision."
)
treated_risk = baseline_risk * hr # approximation: HR ≈ RR
control_events = round(baseline_risk * n_per_group)
treated_events = round(treated_risk * n_per_group)
arr = baseline_risk - treated_risk # absolute risk reduction
nnt = 1.0 / arr if arr > 0 else float("inf")
nnt_rounded = math.ceil(nnt) # always round UP
# Framing symmetry: both event and survival framings
control_survivors = n_per_group - control_events
treated_survivors = n_per_group - treated_events
print(f"EVENT FRAMING (per {n_per_group} over {horizon_label}):")
print(f" Comparator: {control_events} had the event | {control_survivors} did not")
print(f" Treated: {treated_events} had the event | {treated_survivors} did not")
print(f" Reduction: {control_events - treated_events} fewer events per {n_per_group}")
print(f" ARR = {arr:.4f} | NNT = {nnt:.1f} (rounded up to {nnt_rounded})")
print()
print("PLS SENTENCE (event framing):")
print(
f" In this study, {treated_events} of every {n_per_group} people who received "
f"the treatment had the event over {horizon_label}, compared with "
f"{control_events} of every {n_per_group} in the comparison group — "
f"{control_events - treated_events} fewer events per {n_per_group} people treated."
)
print(
f" Treating about {nnt_rounded} people for {horizon_label} would be expected "
f"to prevent one event at this baseline risk."
)
return {
"control_events": control_events,
"treated_events": treated_events,
"arr": arr,
"nnt_exact": nnt,
"nnt_rounded": nnt_rounded,
}
def flesch_kincaid_grade(text):
"""
Approximate Flesch-Kincaid Grade Level for a PLS text.
Target for patient communications: grade 6-8.
Formula: 0.39 * (words/sentences) + 11.8 * (syllables/words) - 15.59.
Syllables counted by vowel-group heuristic (adequate for screening, not exact).
"""
sentences = max(1, len(re.split(r"[.!?]+", text.strip())))
words_list = re.findall(r"\b[a-zA-Z]+\b", text)
n_words = max(1, len(words_list))
def count_syllables(word):
word = word.lower()
count = len(re.findall(r"[aeiou]+", word))
if word.endswith("e") and count > 1:
count -= 1 # silent trailing 'e' heuristic
return max(1, count)
syllables = sum(count_syllables(w) for w in words_list)
grade = 0.39 * (n_words / sentences) + 11.8 * (syllables / n_words) - 15.59
label = (
"PASS (target 6-8)" if 6 <= grade <= 8
else "TOO SIMPLE" if grade < 6
else "TOO TECHNICAL — revise"
)
print(f"Flesch-Kincaid Grade Level: {grade:.1f} [{label}]")
return grade
# ── Worked example: HR 0.75, comparator 2-year risk 0.12 ─────────────────────
result = hr_to_natural_freq(hr=0.75, baseline_risk=0.12, n_per_group=100,
horizon_label="2 years")
# risk_treated = 0.12 * 0.75 = 0.09 (exact arithmetic)
# risk_reduction = 12 - 9 = 3 per 100 (exact arithmetic)
# NNT ≈ 100 / 3 ≈ 33 (rounded up to 34)
# ── Readability check on the PLS sentence ─────────────────────────────────────
sample_pls = (
"In this study, 9 out of every 100 people who took the medicine had a heart event "
"over two years. In the comparison group, 12 out of every 100 people had a heart "
"event. That means the medicine may have prevented about 3 heart events for every "
"100 people treated. This was not a randomized study, so we cannot be certain the "
"medicine caused this difference. We estimate treating about 34 people for two years "
"would prevent one event at this level of risk."
)
flesch_kincaid_grade(sample_pls)r implementation
R equivalents of the two Python utilities: hr_to_natural_freq and flesch_kincaid_grade. Both use only base R. Reproduces the worked example (HR 0.75, baseline risk 0.12) and prints a ready-made PLS sentence with both event and survival framings.
# ── 1. HR to natural frequency translation ────────────────────────────────────
hr_to_natural_freq <- function(hr, baseline_risk, n_per_group = 100L,
horizon_label = "2 years") {
if (baseline_risk > 0.20)
stop(sprintf(
"baseline_risk=%.2f > 0.20; HR approx RR breaks down. Use cumulative incidence.",
baseline_risk
))
if (baseline_risk > 0.10)
message(sprintf(
"WARNING: baseline_risk=%.2f > 0.10; HR approx RR has modest error (~5-10%%).",
baseline_risk
))
treated_risk <- baseline_risk * hr # approximation HR approx RR
control_events <- round(baseline_risk * n_per_group)
treated_events <- round(treated_risk * n_per_group)
arr <- baseline_risk - treated_risk
nnt_exact <- if (arr > 0) 1 / arr else Inf
nnt_rounded <- ceiling(nnt_exact) # always round UP
control_survivors <- n_per_group - control_events
treated_survivors <- n_per_group - treated_events
cat(sprintf("EVENT FRAMING (per %d over %s):\n", n_per_group, horizon_label))
cat(sprintf(" Comparator: %d had event | %d did not\n",
control_events, control_survivors))
cat(sprintf(" Treated: %d had event | %d did not\n",
treated_events, treated_survivors))
cat(sprintf(" Reduction: %d fewer events per %d\n",
control_events - treated_events, n_per_group))
cat(sprintf(" ARR = %.4f | NNT = %.1f (rounded up to %d)\n",
arr, nnt_exact, nnt_rounded))
cat("\nPLS SENTENCE:\n")
cat(sprintf(
" In this study, %d of every %d people who received the treatment had the event\n"
" over %s, compared with %d of every %d in the comparison group —\n"
" %d fewer events per %d people treated.\n",
treated_events, n_per_group, horizon_label,
control_events, n_per_group,
control_events - treated_events, n_per_group
))
cat(sprintf(
" Treating about %d people for %s would be expected to prevent one event.\n",
nnt_rounded, horizon_label
))
invisible(list(control_events = control_events, treated_events = treated_events,
arr = arr, nnt_exact = nnt_exact, nnt_rounded = nnt_rounded))
}
# ── 2. Flesch-Kincaid Grade Level (base R, vowel-group syllable heuristic) ────
flesch_kincaid_grade <- function(text) {
sentences <- max(1L, length(unlist(strsplit(text, "[.!?]+"))) - 1L)
words <- unlist(regmatches(text, gregexpr("\\b[A-Za-z]+\\b", text)))
n_words <- max(1L, length(words))
count_syllables <- function(word) {
word <- tolower(word)
count <- length(regmatches(word, gregexpr("[aeiou]+", word))[[1L]])
if (endsWith(word, "e") && count > 1L) count <- count - 1L # silent trailing e
max(1L, count)
}
syllables <- sum(vapply(words, count_syllables, integer(1L)))
grade <- 0.39 * (n_words / sentences) + 11.8 * (syllables / n_words) - 15.59
label <- if (grade >= 6 && grade <= 8) "PASS (target 6-8)"
else if (grade < 6) "TOO SIMPLE"
else "TOO TECHNICAL — revise"
cat(sprintf("Flesch-Kincaid Grade Level: %.1f [%s]\n", grade, label))
invisible(grade)
}
# ── Worked example ────────────────────────────────────────────────────────────
# HR 0.75, comparator 2-year risk 0.12, n = 100 per group
# risk_treated = 0.12 * 0.75 = 0.09 (exact)
# risk_reduction = 12 - 9 = 3 per 100 (exact)
# NNT = 100/3 ≈ 33 (round up to 34)
res <- hr_to_natural_freq(hr = 0.75, baseline_risk = 0.12)
# Readability check on a sample PLS sentence
sample_pls <- paste(
"In this study, 9 out of every 100 people who took the medicine had a heart event",
"over two years. In the comparison group, 12 out of every 100 people had a heart event.",
"That means the medicine may have prevented about 3 heart events for every 100 people",
"treated. This was not a randomized study, so we cannot be certain the medicine caused",
"this difference. We estimate treating about 34 people for two years would prevent",
"one event at this level of risk."
)
flesch_kincaid_grade(sample_pls)