respondeR re-expresses meta-analyses of continuous trial outcomes in terms of responders. Clinicians and patients reason about “how many people get better”, not about standardized mean differences. It uses only the summary statistics that trials usually report: the mean change, standard deviation and sample size in each arm. From these respondeR estimates the proportion of patients whose change crosses a minimal important difference (MID) threshold, and contrasts the arms as a risk difference (RD), risk ratio (RR), odds ratio (OR) or number needed to treat (NNT).
It follows the interpretability tutorial of Thorlund, Walter, Johnston, Furukawa & Guyatt (2011), implementing the cut-point (“dichotomization”) and standardized-mean-difference conversions it reviews, and adds a threshold-free common-language effect size. The estimation methods were evaluated in a simulation study (Sofi-Mahmudi, 2024).
Try it in the browser (no install): https://choxos.github.io/respondeR/app/
Documentation: https://choxos.github.io/respondeR/
Installation
# From CRAN (when available)
install.packages("respondeR")
# Development version from GitHub
# install.packages("remotes")
remotes::install_github("choxos/respondeR")Quick start
library(respondeR)
# Built-in example: three trials of a continuous change score
sample_responder_data
#> study change_e sd_e n_e change_c sd_c n_c
#> 1 Study 1 0.9581395 1.257593 43 0.217777778 1.195501 45
#> 2 Study 2 0.7920863 1.281364 139 0.003448276 1.324629 145
#> 3 Study 3 1.0230769 1.341201 156 -0.041975309 1.263178 162
# Proportion of responders (change > MID of 1) and between-arm contrasts
responder_analysis(sample_responder_data, mid = 1)| method | p_e | p_c | rd | rd_lb | rd_ub | rr | or | nnt |
|---|---|---|---|---|---|---|---|---|
| individual | NA | NA | 0.255 | 0.187 | 0.324 | 2.15 | 3.20 | 3.9 |
| weighted | 0.474 | 0.221 | 0.254 | 0.201 | 0.306 | 2.15 | 3.19 | 3.9 |
| unweighted | 0.477 | 0.228 | 0.249 | NA | NA | 2.09 | 3.09 | 4.0 |
| median | 0.487 | 0.215 | 0.272 | NA | NA | 2.26 | 3.46 | 3.7 |
Proportions and risk differences are on the [0, 1] scale; multiply by 100 for percentages.
# Random-effects individual method with heterogeneity statistics
responder_analysis(sample_responder_data, mid = 1,
method = "individual", pooling = "random")
# Lower change is better (e.g. a symptom score), 90% logit intervals
responder_analysis(sample_responder_data, mid = 1,
direction = "lower", ci_type = "logit", conf_level = 0.90)
# Threshold-free: how often does a treated patient respond better than a control?
responder_cles(sample_responder_data)Data format
One row per study, with these columns (the experimental arm is _e, the control arm _c):
| Column | Meaning |
|---|---|
study |
Study label |
change_e |
Mean change in the experimental arm |
sd_e |
SD of change in the experimental arm |
n_e |
Experimental arm sample size |
change_c |
Mean change in the control arm |
sd_c |
SD of change in the control arm |
n_c |
Control arm sample size |
Two datasets ship with the package: sample_responder_data (a small toy example) and vas_pain, a real meta-analysis of 20 trials of exercise for spinal health pooled on the VAS pain scale (Li et al., 2025, reproduced under CC BY 4.0). Because VAS change is negative when pain improves, analyze it with direction = "lower":
# Proportion reaching a 1.5 cm VAS reduction, exercise vs control
responder_analysis(vas_pain, mid = -1.5, direction = "lower",
pooling = "random", ci_method = "hksj")Methods
A responder is a patient whose change crosses the MID. Under a Normal model an arm’s responder probability is p = Phi((mu - mid) / sigma) (for direction = "higher"). The methods differ in how the per-arm summaries are pooled across studies before, or after, dichotomizing.
| Method | What it pools | Variance / CI | Notes |
|---|---|---|---|
individual |
Per-study risk differences (fixed/random) | Yes | Most defensible; the default workhorse |
weighted |
IV-pooled mean + within-study pooled SD | Delta method | Paper-aligned pool-then-dichotomize |
unweighted |
Arithmetic mean of study means/SDs | None | Sensitivity summary (point estimate) |
median |
Median of study means/SDs | None | Robustness summary (point estimate) |
smd |
Standardized mean difference to odds ratio | Delta method | Cox logistic bridge; opt-in |
For the summary methods the control proportion uses the same pooling as the experimental arm by default (control = "matched"). Set control = "median" to take the baseline risk from the median control arm for every summary method, as in the simulation study of Sofi-Mahmudi (2024); the experimental arm is still pooled by the chosen method, and the result is then a point estimate (the median control arm carries no variance model).
Effect measures. Every method that yields proportions reports the absolute risk difference, the relative risk ratio and odds ratio, and the number needed to treat. responder_cles() adds the threshold-free common-language effect size (probabilistic index).
Options. pooling = "random" (DerSimonian-Laird or REML), control for the baseline-risk rule, ci_type = "logit" for bounded intervals, se_method for the individual SE model, mid_sd to propagate MID uncertainty, and dist = "lognormal"/"t" for non-Normal change scores.
Key functions
| Function | Purpose |
|---|---|
responder_analysis() |
Pooled responder proportions and effect measures |
responder_rd_individual() |
Per-study risk differences (forest-plot input) |
responder_proportions() |
Per-arm responder probabilities with variances |
responder_cles() |
Threshold-free common-language effect size |
format_responder_results() |
Display-ready formatting |
launch_responder_analysis() |
Launch the Shiny application |
The Shiny application
The package bundles a point-and-click app: upload a CSV or use the bundled example, set the MID and direction, choose methods and options, and view the results table, per-study forest plot and CLES, with CSV downloads.
The same tool runs entirely in your browser (no R, no install) at https://choxos.github.io/respondeR/app/.
Vignettes
-
vignette("respondeR"): getting started; data format, a worked example, and interpreting the output. -
vignette("methodology"): the statistics in full; the cut-point approach, each method and its variance, the relative measures, CLES, the SMD bridge, heterogeneity, assumptions and a method-choice guide.
References
Sofi-Mahmudi, A. (2024). Identifying an optimal strategy for converting pain as a continuous outcome to a responder analysis [Master’s thesis, McMaster University]. MacSphere. http://hdl.handle.net/11375/30210
Thorlund, K., Walter, S. D., Johnston, B. C., Furukawa, T. A., & Guyatt, G. H. (2011). Pooling health-related quality of life outcomes in meta-analysis: a tutorial and review of methods for enhancing interpretability. Research Synthesis Methods, 2(3), 188 to 203. doi:10.1002/jrsm.46
Anzures-Cabrera, J., Sarpatwari, A., & Higgins, J. P. T. (2011). Expressing findings from meta-analyses of continuous outcomes in terms of risks. Statistics in Medicine, 30(25), 2867 to 2880. doi:10.1002/sim.4298
McGraw, K. O., & Wong, S. P. (1992). A common language effect size statistic. Psychological Bulletin, 111(2), 361 to 365.
Chinn, S. (2000). A simple method for converting an odds ratio to effect size for use in meta-analysis. Statistics in Medicine, 19(22), 3127 to 3131.
Bundled data:
Li, Z., Bao, Z., Wang, S., & Zhao, M. (2025). Meta-analysis of the best exercise mode and dose study for improving spinal health. Frontiers in Sports and Active Living, 7, 1614906. doi:10.3389/fspor.2025.1614906 (the
vas_paindataset, Figure 3, reproduced under CC BY 4.0).
Citing respondeR
citation("respondeR")The logo
The hex logo shows two Normal change-score distributions, control and experimental, split by a dashed MID cut-point. The shaded tails beyond the cut are the responder proportions in each arm; their contrast is the risk difference. That is responder analysis in one picture.
License
GPL-3. See https://www.gnu.org/licenses/gpl-3.0 for the full license text.