Title: | Rare Event Meta Analysis |
---|---|
Description: | The rema package implements a permutation-based approach for binary meta-analyses of 2x2 tables, founded on conditional logistic regression, that provides more reliable statistical tests when heterogeneity is observed in rare event data (Zabriskie et al. 2021 <doi:10.1002/sim.9142>). To adjust for the effect of heterogeneity, this method conditions on the sufficient statistic of a proxy for the heterogeneity effect as opposed to estimating the heterogeneity variance. While this results in the model not strictly falling under the random-effects framework, it is akin to a random-effects approach in that it assumes differences in variability due to treatment. Further, this method does not rely on large-sample approximations or continuity corrections for rare event data. This method uses the permutational distribution of the test statistic instead of asymptotic approximations for inference. The number of observed events drives the computation complexity for creating this permutational distribution. Accordingly, for this method to be computationally feasible, it should only be applied to meta-analyses with a relatively low number of observed events. To create this permutational distribution, a network algorithm, based on the work of Mehta et al. (1992) <doi:10.2307/1390598> and Corcoran et al. (2001) <doi:10.1111/j.0006-341x.2001.00941.x>, is employed using C++ and integrated into the package. |
Authors: | Brinley N. Zabriskie [aut, cre]
|
Maintainer: | Brinley N. Zabriskie <[email protected]> |
License: | GPL (>= 3) | file LICENSE |
Version: | 0.0.1 |
Built: | 2025-02-28 03:15:57 UTC |
Source: | https://github.com/cran/rema |
rema
objectPlots the distribution of the test statistic results from a rema
object
with the probabilities on the y-axis and the test statistics on the x-axis.
## S3 method for class 'rema' plot(x, ...)
## S3 method for class 'rema' plot(x, ...)
x |
a |
... |
other arguments that can be specified in plot |
The observed value of the test statistic is marked with an asterisk. The dark
gray bars mark the probabilities that contribute to the two-sided p-value.
The light gray bars highlight probabilities that are greater than the
probability of the observed test statistic and consequently do not contribute
to the two-sided p-value. If dist
is set to FALSE
in the
rema
object, the plot function will return an error.
A barplot of the distribution of the test statistic.
rema
(rare event meta-analysis) performs a permutation-based
meta-analysis for heterogeneous, rare event data.
rema( trt.events = NULL, trt.total = NULL, ctrl.events = NULL, ctrl.total = NULL, rema.obj, mid.p = TRUE, distr = TRUE, one.sided.p = FALSE, alpha = 0.05 )
rema( trt.events = NULL, trt.total = NULL, ctrl.events = NULL, ctrl.total = NULL, rema.obj, mid.p = TRUE, distr = TRUE, one.sided.p = FALSE, alpha = 0.05 )
trt.events |
Numeric vector containing the number of observed events in the treatment group from each independent study. |
trt.total |
Numeric vector containing the total number of observations (events plus non-events) in the treatment group from each independent study. |
ctrl.events |
Numeric vector containing the number of observed events in the control group from each independent study. |
ctrl.total |
Numeric vector containing the total number of observations (events plus non-events) in the control group from each independent study. |
rema.obj |
An object of class |
mid.p |
A logical indicating if the p-values and confidence interval are
adjusted using the mid-p correction to reduce conservatism. If |
distr |
A logical indicating if the permutational distribution of the
test statistic is reported. If |
one.sided.p |
A logical indicating if the one-sided p-value (in the
direction of the treatment effect) is computed and returned. If
|
alpha |
A number between 0 and 1 to create a (1 - alpha)% confidence interval for the treatment effect. |
Conventional meta-analysis approaches tend to perform poorly for
heterogeneous, rare event data. rema
implements a permutation-based
approach for binary meta-analyses of 2x2 tables, founded on conditional
logistic regression, that provides more reliable statistical tests when
heterogeneity is observed in rare event data
(Zabriskie et al. 2021). To adjust for the effect of heterogeneity,
this method conditions on the sufficient statistic of a proxy for the
heterogeneity effect as opposed to estimating the heterogeneity variance.
While this results in the model not strictly falling under the random-effects
framework, it is akin to a random-effects approach in that it assumes
differences in variability due to treatment. Further, this method does not
rely on large-sample approximations or continuity corrections for rare event
data.
This method uses the permutational distribution of the test statistic instead of asymptotic approximations for inference. The number of observed events drives the computation complexity for creating this permutational distribution. Accordingly, for this method to be computationally feasible, it should only be applied to meta-analyses with a relatively low number of observed events. To create this permutational distribution, a network algorithm, based on the work of Mehta et al. (1992) and Corcoran et al. (2001), is employed using C++ and integrated into the package.
An object of class
"rema
" with corresponding
print
, summary
, and plot
(if distr == TRUE
)
functions. The object is a list containing the following elements:
trt.events |
As defined above. |
trt.total |
As defined above. |
ctrl.events |
As defined above. |
ctrl.total |
As defined above. |
mid.p |
As defined above. |
alpha |
As defined above. |
arguments |
A string of the arguments passed into rema . |
TE |
The estimated overall treatment effect (odds ratio). |
CI |
A vector containing the estimated lower and upper bounds of a (1 - alpha)% |
confidence interval of the overall treatment effect (odds ratio). | |
method |
A string specifying the method used to compute the odds ratio and its associated |
confidence interval. Either the conditional maximum likelihood estimate (CMLE) | |
or the median unbiased estimate (MUE) will be used. | |
pval |
The two-sided p-value for the overall treatment effect. |
pval.one.sided |
The one-sided p-value (in the direction of the treatment effect) for the overall |
treatment effect (if
one.sided.p == TRUE ). |
|
dist |
A data frame containing the permutational distribution of the test statistic |
(if
distr == TRUE ). |
|
tstat |
The observed value of the test statistic (if
distr == TRUE ). |
Corcoran C, Ryan L, Senchaudhuri P, Mehta C, Patel N, Molenberghs G (2001).
“An Exact Trend Test for Correlated Binary Data.”
Biometrics, 57, 941–948.
doi:10.1111/j.0006-341x.2001.00941.x.
Mehta CR, Patel N, Senchaudhuri P (1992).
“Exact Stratified Linear Rank Tests for Ordered Categorical and Binary Data.”
Journal of Computational and Graphical Statistics, 1(1), 21–40.
doi:10.2307/1390598.
Normand ST (1999).
“Meta-analysis: formulating, evaluating, combining, and reporting.”
Statistics in Medicine, 18, 321–359.
Zabriskie BN, Corcoran C, Senchaudhuri P (2021).
“A Permutation-Based Approach for Heterogeneous Meta-Analyses of Rare Events.”
Statistics in Medicine, 40(25), 5587–5604.
doi:10.1002/sim.9142.
metabin and metafor for more traditional meta-analysis methods for combining odds ratios.
# Lidocaine data set from Normand (1999) rema(trt.events = c(2, 4, 6, 7, 7, 11), trt.total = c(39, 44, 107, 103, 110, 154), ctrl.events = c(1, 4, 4, 5, 3, 4), ctrl.total = c(43, 44, 110, 100, 106, 146), mid.p = FALSE, distr = FALSE, one.sided.p = TRUE) # Example using a rema object as the input once the permutational # distribution is obtained my.rema.object <- rema(trt.events = c(1, 2, 0, 2, 0, 0, 1, 0, 1, 0), trt.total = c(30, 14, 30, 49, 38, 11, 31, 13, 49, 23), ctrl.events = c(4, 3, 3, 0, 4, 4, 3, 2, 3, 4), ctrl.total = c(15, 26, 42, 24, 40, 26, 47, 24, 27, 26), mid.p = FALSE, distr = TRUE, one.sided.p = FALSE) rema(rema.obj = my.rema.object, mid.p = TRUE) ## Not run: # Vectors of non-whole numbers (such as after applying a continuity correction) rema(trt.events = c(0.5, 0.5, 1, 3), trt.total = c(2, 5, 4, 12), ctrl.events = c(2.5, 4.5, 6, 7), ctrl.total = c(7, 9, 11, 12)) # Vectors with greater observed events than total observations rema(trt.events = c(11, 13, 7, 10), trt.total = c(10, 12, 5, 7), ctrl.events = c(22, 25, 32, 26), ctrl.total = c(20, 20, 30, 25)) ## End(Not run)
# Lidocaine data set from Normand (1999) rema(trt.events = c(2, 4, 6, 7, 7, 11), trt.total = c(39, 44, 107, 103, 110, 154), ctrl.events = c(1, 4, 4, 5, 3, 4), ctrl.total = c(43, 44, 110, 100, 106, 146), mid.p = FALSE, distr = FALSE, one.sided.p = TRUE) # Example using a rema object as the input once the permutational # distribution is obtained my.rema.object <- rema(trt.events = c(1, 2, 0, 2, 0, 0, 1, 0, 1, 0), trt.total = c(30, 14, 30, 49, 38, 11, 31, 13, 49, 23), ctrl.events = c(4, 3, 3, 0, 4, 4, 3, 2, 3, 4), ctrl.total = c(15, 26, 42, 24, 40, 26, 47, 24, 27, 26), mid.p = FALSE, distr = TRUE, one.sided.p = FALSE) rema(rema.obj = my.rema.object, mid.p = TRUE) ## Not run: # Vectors of non-whole numbers (such as after applying a continuity correction) rema(trt.events = c(0.5, 0.5, 1, 3), trt.total = c(2, 5, 4, 12), ctrl.events = c(2.5, 4.5, 6, 7), ctrl.total = c(7, 9, 11, 12)) # Vectors with greater observed events than total observations rema(trt.events = c(11, 13, 7, 10), trt.total = c(10, 12, 5, 7), ctrl.events = c(22, 25, 32, 26), ctrl.total = c(20, 20, 30, 25)) ## End(Not run)