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().