出现的一个缺陷是Stouffer的方法可以检测到系统变化,这是当一个替代方案始终为真时人们通常希望发生的变化,而卡方方法似乎没有那么大的能力。快速仿真表明情况确实如此。卡方方法检测单边替代方法的功能较弱。这是两种方法(red = Stouffer,blue = chi-square)的两种方法的p值的直方图,其中N = 10且有单侧标准化效果μ的10 5次独立迭代,范围从无(μ = 0)到0.6 SD (0.6zi105N=10μμ=00.6μ=0.6)。
更好的过程将有更大的面积接近零。对于所示的所有正值,该程序为Stouffer程序。μ
R代码
这包括用于比较的费舍尔方法(已注释)。
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)
})