Learn R Programming

gap (version 1.5-1)

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")

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

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". The function accepts a wide format data with estimates as \(b1,...,bN\) and standard errors as \(se1,...,seN\). More generally, they can be specified by prefixes in the function argument.

Author

Shengxu Li, Jing Hua Zhao

References

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

Examples

Run this code
if (FALSE) {
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