跳出的一个缺陷是 Stouffer 的方法可以检测到z一世,这是当一个备选方案始终正确时人们通常期望发生的情况,而卡方方法似乎没有这样做的能力。快速模拟表明情况确实如此。卡方方法在检测单边替代方案方面的威力较小。以下是两种方法(红色=斯托弗,蓝色=卡方)的 p 值直方图105独立迭代ñ= 10以及各种单方面的标准化效应μ从无(μ = 0) 通过0.6标清 (μ = 0.6)。
更好的程序将有更多接近零的区域。对于所有正值μ如图所示,该过程是 Stouffer 过程。
R代码
这包括用于比较的 Fisher 方法(已注释掉)。
n <- 10
n.iter <- 10^5
z <- matrix(rnorm(n*n.iter), ncol=n)
sim <- function(mu) {
stouffer.sim <- apply(z + mu, 1,
function(y) {q <- pnorm(sum(y)/sqrt(length(y))); 2*min(q, 1-q)})
chisq.sim <- apply(z + mu, 1,
function(y) 1 - pchisq(sum(y^2), length(y)))
#fisher.sim <- apply(z + mu, 1,
# function(y) {q <- pnorm(y);
# 1 - pchisq(-2 * sum(log(2*pmin(q, 1-q))), 2*length(y))})
return(list(stouffer=stouffer.sim, chisq=chisq.sim, fisher=fisher.sim))
}
par(mfrow=c(2, 3))
breaks=seq(0, 1, .05)
tmp <- sapply(c(0, .1, .2, .3, .4, .6),
function(mu) {
x <- sim(mu);
hist(x[[1]], breaks=breaks, xlab="p", col="#ff606060",
main=paste("Mu =", mu));
hist(x[[2]], breaks=breaks, xlab="p", col="#6060ff60", add=TRUE)
#hist(x[[3]], breaks=breaks, xlab="p", col="#60ff6060", add=TRUE)
})