Learn R Programming

gap (version 1.1-20)

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/w_c)\), 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))
# }

Run the code above in your browser using DataLab