First public release. The package began life as a small Shiny app; this release rebuilds it as a documented, tested R package with the statistics in pure, exported functions and the Shiny app as a thin front end.
In response to an external methodology audit:
ci_method = "hksj" for the Hartung-Knapp-Sidik-Jonkman
interval, better calibrated than Wald when the number of studies is
small.sd/n.binomial SE is documented as a pseudo-binomial
approximation, with delta recommended for summary-statistic
inputs.responder_analysis(): the main entry point. Converts
continuous arm summaries (mean change, SD, n) into responder proportions
and a tidy table of between-arm effect measures: risk difference, risk
ratio, odds ratio and number needed to treat. Pooling methods:
"individual", "weighted",
"unweighted", "median" and
"smd".responder_rd_individual() and
responder_proportions(): exported building blocks for
per-study risk differences and arm responder probabilities.responder_cles(): threshold-free common-language effect
size (the probabilistic index), pooled fixed or random effects,
requiring no MID.format_responder_results(): display-ready formatting
for reports and the app.launch_responder_analysis(): launches the bundled
ResponderAnalysis Shiny application (direction toggle,
method/pooling/interval options, RR/OR/NNT, a per-study forest plot,
CLES and CSV I/O).sample_responder_data: small bundled example
dataset.vas_pain: a real bundled dataset of 20
exercise-for-spinal-health trials pooled on the VAS pain scale (Li et
al., 2025, doi:10.3389/fspor.2025.1614906, reproduced under CC BY
4.0).pooling = "random") with DerSimonian-Laird
(dependency-free) or REML (tau_method = "REML", via
metafor) between-study variance, reporting Cochran’s Q,
I-squared, tau-squared and a prediction interval."smd" method pools the
standardized mean difference (Hedges’ g) and maps it to an odds ratio
through the logistic link, combined with the weighted-pooled control
risk (Cox; Chinn, 2000).ci_type = "logit"); propagation of uncertainty in the MID
threshold (mid_sd); alternative change-score distributions
(dist = "lognormal" or "t").control = "median" takes the control responder proportion
from the median control arm for every summary method (the Sofi-Mahmudi
2024 simulation baseline), while still pooling the experimental arm by
the chosen method; the default control = "matched" pools
the control arm the same way as the experimental arm. Because the median
control arm has no sampling-variance model,
control = "median" returns point estimates only.The earlier Shiny app contained several errors that are fixed here. Numbers from the weighted and unweighted methods, and all confidence intervals, will differ from that app; the individual and median point estimates are unchanged.
control = "median".sqrt(sum((n-1) sd^2) / sum(n-1)) rather than
inverse-variance pooling of SDs, with a delta-method variance for the
risk difference.[0, 1] scale internally,
removing a class of percent-scale variance errors.rr_meta(), rd_meta() and
prop_meta() (which operated on a 2x2 count format the
package never produced; rr_meta() returned swapped
confidence limits) have been removed, along with the duplicated,
unvalidated iv_meta().