This function allows to impute response rates based on the post-test means, standard deviations and sample size using the normal-approximation method by Furukawa et al. (2005). Response rates can be imputed using the 50% symptom decrease threshold, user-defined cut-off values, or the reliable change index (Jacobson & Truax, 1991).
Usage
imputeResponse(m.trt.pre, m.trt.post, sd.trt.post, n.trt,
m.ctr.pre, m.ctr.post, sd.ctr.post, n.ctr,
sd.trt.pre, sd.ctr.pre,
rho = 0.8, cutoff = NULL, lower.is.better = TRUE,
method = c("cutpoint", "rci"))
Arguments
- m.trt.pre
Pre-test mean in the (treatment) arm.
- m.trt.post
Post-test mean in the (treatment) arm.
- sd.trt.post
Post-test standard deviation in the (treatment) arm.
- n.trt
Sample size in the (treatment) arm.
- m.ctr.pre
Optional. Pre-test mean in the control arm.
- m.ctr.post
Optional. Post-test mean in the control arm.
- sd.ctr.post
Optional. Post-test standard deviation in the control arm.
- n.ctr
Optional. Sample size in the control arm.
- sd.trt.pre
Pre-test standard deviation in the (treatment) group. Required if
method = "rci"
.- sd.ctr.pre
Optional. Pre-test standard deviation in the control group. Required if
method = "rci"
.- rho
Reliability coefficient, used to calculate the reliable change when
method = "rci"
. Set to 0.8 by default.- cutoff
User defined cut-off score for response.
NULL
by default, which means that 50% symptom decrease is used as the response criterion.- lower.is.better
Do lower values indicate better outcomes (e.g. less depression)?
TRUE
by default.- method
Method to define response. Either
"cutpoint"
(default; uses 50% symptom decrease as criterion, or a user-specified score incutoff
) or"rci"
, which means that the reliable change index (Jacobson & Truax, 1991) is used.
Value
If only values for the treatment arm are specified, imputeResponse
returns a data.frame
with two columns:
trtResponder
: Number of respondersnTrt
: Total sample size of the treatment arm
If values are also specified for the control group, six additional columns are returned:
ctrResponder
: Number of responders in the control groupnCtr
: Total sample size of the treatment armlogRR
: Log-risk ratio of the difference in response rates in both armsseLogRR
: Standard error of the log-risk ratiologOR
: Log-odds ratio of the difference in response rates in both armsseLogOR
: Standard error of the log-odds ratio
Details
For more details see the Get Started vignette.
References
Furukawa, T. A., Cipriani, A., Barbui, C., Brambilla, P., & Watanabe, N. (2005). Imputing response rates from means and standard deviations in meta-analyses. International Clinical Psychopharmacology, 20(1), 49-52.
Jacobson, N. S., & Truax, P. (1991). Clinical significance: a statistical approach to defining meaningful change in psychotherapy research. Journal of Consulting and Clinical Psychology, 59(1), 12–19. https://doi.org/10.1037//0022-006x.59.1.12
Author
Mathias Harrer mathias.h.harrer@gmail.com
Examples
if (FALSE) {
# Calculate response using 50% method for one group.
imputeResponse(m.trt.pre = 20, m.trt.post = 11,
sd.trt.post = 7, n.trt = 100)
# Calculate response for two groups and calculate effect sizes
imputeResponse(m.trt.pre = 20, m.trt.post = 11,
sd.trt.post = 7, n.trt = 100,
m.ctr.pre = 20, m.ctr.post = 18,
sd.ctr.post = 6, n.ctr = 120)
# Calculate using user-defined response threshold
imputeResponse(m.trt.pre = 20, m.trt.post = 11,
sd.trt.post = 7, n.trt = 100,
m.ctr.pre = 20, m.ctr.post = 18,
sd.ctr.post = 6, n.ctr = 120,
cutoff = 15)
# Assuming higher outcomes are better...
imputeResponse(m.trt.pre = 20, m.trt.post = 11,
sd.trt.post = 7, n.trt = 100,
m.ctr.pre = 20, m.ctr.post = 18,
sd.ctr.post = 6, n.ctr = 120,
cutoff = 15, lower.is.better = FALSE)
# Using RCI, with an assumed reliability of 0.88
imputeResponse(m.trt.pre = 20, m.trt.post = 11,
sd.trt.post = 7, n.trt = 100,
m.ctr.pre = 20, m.ctr.post = 18,
sd.ctr.post = 6, n.ctr = 120,
method = "rci", rho = 0.88,
sd.trt.pre = 8)
# Using a different pre-test SD in the control
imputeResponse(m.trt.pre = 20, m.trt.post = 11,
sd.trt.post = 7, n.trt = 100,
m.ctr.pre = 20, m.ctr.post = 18,
sd.ctr.post = 6, n.ctr = 120,
method = "rci", rho = 0.88,
sd.trt.pre = 8, sd.ctr.pre = 9)
# Calculating many results at the same time
set.seed(123)
imputeResponse(m.trt.pre = runif(10, 10, 30), m.trt.post = runif(10, 8, 14),
sd.trt.post = runif(10, 5, 8), n.trt = rpois(10, 150),
m.ctr.pre = runif(10, 10, 30), m.ctr.post = runif(10, 13, 20),
sd.ctr.post = runif(10, 5, 8), n.ctr = rpois(10, 150),
method = "rci", rho = round(runif(10, 70, 90))/100,
sd.trt.pre = runif(10, 7, 9))
set.seed(123)
imputeResponse(m.trt.pre = runif(10, 10, 30), m.trt.post = runif(10, 8, 14),
sd.trt.post = runif(10, 5, 8), n.trt = rpois(10, 150),
m.ctr.pre = runif(10, 10, 30), m.ctr.post = runif(10, 13, 20),
sd.ctr.post = runif(10, 5, 8), n.ctr = rpois(10, 150))
set.seed(123)
imputeResponse(m.trt.pre = runif(10, 10, 30), m.trt.post = runif(10, 8, 14),
sd.trt.post = runif(10, 5, 8), n.trt = rpois(10, 150),
cutoff = 11:20)
}