Learn R Programming

gap (version 1.1-16)

metareg: Fixed and random effects model for meta-analysis

Description

Given $k=n$ studies with $b_1, ..., b_N$ being $\beta$'s and $se_1, ..., se_N$ standard errors from regression, the fixed effects model uses inverse variance weighting such that $w_1=1/se_1^2$, ..., $w_N=1/se_N^2$ and the combined $\beta$ as the weighted average, $\beta_f=(b_1*w_1+...+b_N*w_N)/w$, with $w=w_1+...+w_N$ being the total weight, the se for this estimate is $se_f=\sqrt{1/w}$. A normal z-statistic is obtained as $z_f=\beta_f/se_f$, and the corresponding p value $p_f=2*pnorm(-abs(z_f))$. For the random effects model, denote $q_w=w_1*(b_1-\beta_f)^2+...+w_N*(b_N-\beta_f)^2$ and $dl=max(0,(q_w-(k-1))/(w-(w_1^2+...+w_N^2)/w))$, corrected weights are obtained such that ${w_1}_c=1/(1/w_1+dl)$, ..., ${w_N}_c=1/(1/w_N+dl)$, totaling $w_c={w_1}_c+...+{w_N}_c$. The combined $\beta$ and se are then $\beta_r=(b_1*{w_1}_c+...+b_N*{w_N}_c)/w_c$ and $se_r=sqrt(1/wc)$, leading to a z-statistic $z_r=\beta_r/se_r$ and a p-value $p_r=2*pnorm(-abs(z_r))$. Moreover, a p-value testing for heterogeneity is $p_{heter}=pchisq(q_w,k-1,lower.tail=FALSE)$.

Usage

metareg(data, N, verbose="Y", prefixb="b", prefixse="se")

Arguments

data
Data frame to be used
N
Number of studies
verbose
A control for screen output
prefixb
Prefix of estimate; default value is "b"
prefixse
Prefix of standard error; default value is "se"

Value

The returned value is a data frame with the following variables:
p_f
P value (fixed effects model)
p_r
P value (random effects model)
beta_f
regression coefficient
beta_r
regression coefficient
se_f
standard error
se_r
standard error
z_f
z value
z_r
z value
p_heter
heterogeneity test p value
i2
$I^2$ statistic
k
No of tests used
eps
smallest double-precision number

References

JPT Higgins, SG Thompson, JJ Deeks, DG Altman. Measuring inconsistency in meta-analyses. BMJ 327:557-60

Examples

Run this code
## Not run: 
# abc <- data.frame(chromosome=1,rsn='abcd',startpos=1234,
#                   b1=1,se1=2,p1=0.1,b2=2,se2=6,p2=0,b3=3,se3=8,p3=0.5)
# metareg(abc,3)
# abc2 <- data.frame(b1=c(1,2),se1=c(2,4),b2=c(2,3),se2=c(4,6),b3=c(3,4),se3=c(6,8))
# print(metareg(abc2,3))
# ## End(Not run)

Run the code above in your browser using DataLab