Learn R Programming

metap (version 1.9)

sumlog: Combine p-values by the sum of logs (Fisher's) method

Description

Combine p-values by the sum of logs method, also known as Fisher's method, and sometimes as the chi-square (2) method

Usage

sumlog(p, log.p = FALSE)
# S3 method for sumlog
print(x, ...)

Value

An object of class ‘sumlog’ and ‘metap’, a list with entries

chisq

Value of chi-squared statistic

df

Associated degrees of freedom

p

Associated p-value

validp

The input vector with the illegal values removed

Arguments

p

A vector of significance values

log.p

Logical, if TRUE result is returned as log(p)

x

An object of class ‘sumlog

...

Other arguments to be passed through

Author

Michael Dewey

Details

The method relies on the fact that _i=1^k - 2 p_isum (-2 log p) is a chi-squared with 2 k2 * k df where k is the number of studies fisher25metap. becker94metap rosenthal78metap sutton00metap

The values of p_i should be such that 0 < p_i 1 and a warning is given if that is not true. A warning is given if, possibly as a result of removing illegal values, fewer than two values remain and the return values are set to NA.

The plot method for class ‘metap’ calls plotp on the valid \(p\)-values. Inspection of the distribution of p-values is highly recommended as extreme values in opposite directions do not cancel out. See last example. This may not be what you want.

References

See Also

See also plotp

Examples

Run this code
data(dat.metap)
teachexpect <- dat.metap$teachexpect
sumlog(teachexpect) # chisq = 69.473, df = 38, p = 0.0014, from Becker
beckerp <- dat.metap$beckerp
sumlog(beckerp) # chisq = 18.533, df = 10, sig
rosenthal <- dat.metap$rosenthal
sumlog(rosenthal$p) # chisq = 22.97, df = 10, p = 0.006 one sided
cholest <- dat.metap$cholest$p
sumlog(cholest) # chisq = 58.62, df = 68, p = 0.78
validity <- dat.metap$validity$p
sumlog(validity) # chisq = 159.82, df = 40, p = 2.91 * 10^{-16}
sumlog(c(0.0001, 0.0001, 0.9999, 0.9999)) # is significant
all.equal(exp(sumlog(validity, log.p = TRUE)$p), sumlog(validity)$p)

Run the code above in your browser using DataLab