我不会说经典的一个样本(包括成对的样本)和两个样本的等方差t检验确实已经过时了,但是有很多替代品具有优良的性能,在许多情况下,应该使用它们。
我也不会说对大型样本快速执行Wilcoxon-Mann-Whitney测试(甚至是排列测试)的能力是最近才出现的,我在30多年前作为一名学生就经常这样做,而这样做的能力那时已经有很长时间了。
尽管编写置换测试(甚至是从头开始)要比曾经曾经的容易得多,但即使那样也并不困难(如果您曾经编写过一次代码,则可以在不同情况下进行修改以提供不同的统计信息) ,不同的数据等-很简单,通常不需要编程背景)。†
因此,这里有一些替代方法,以及它们可以提供帮助的原因:
Welch-Satterthwaite-当您不确定方差将接近相等时(如果样本大小相同,则均方差假设并不重要)
Wilcoxon-Mann-Whitney-如果尾巴正常或比正常重,则非常好,尤其是在对称的情况下。如果尾巴趋向于接近正常值,则对装置进行置换测试将提供稍微更大的功效。
稳固的t检验 -在正常情况下,它们具有多种能力,但在较重的尾部或偏斜的替代品下也能很好地发挥作用(并保持良好的能力)。
GLM-适用于计数或连续右偏的情况(例如伽马);设计用于处理方差与均值相关的情况。
在存在特定形式的依存关系的情况下,随机效应或时间序列模型可能会有用
贝叶斯方法,自举和大量其他重要技术可以为上述思想提供类似的优势。例如,贝叶斯方法是完全有可能,可以占污染过程,处理计数或偏斜数据的模型,并处理相关的具体形式,都在同一时间。
尽管存在许多方便的替代方法,但只要种群与正常值相距不远(例如,尾巴很重),旧的股票标准等方差两样本t检验通常可以在大型,等量样本中表现良好。 / skew),我们几乎可以独立。
这些替代方案在许多情况下很有用,在这些情况下,我们可能对普通的t检验不那么有信心...尽管如此,当满足或接近满足t检验的假设时,通常情况下效果良好。
如果分布趋于不偏离正常值太远(较大的样本允许更多的回旋余地),那么Welch是明智的默认选择。
尽管排列检验非常出色,但在假设成立的情况下,与t检验相比,功率没有损失(以及直接推论利息量的有用好处),Wilcoxon-Mann-Whitney可以说是一个更好的选择尾巴可能很重;只要稍加假设,WWW就能得出与均值漂移有关的结论。(还有其他原因可能会比置换测试更受欢迎)
[如果您知道要处理的是计数,等待时间或类似类型的数据,则GLM路线通常是明智的。如果您对潜在的依赖形式有所了解,那么也很容易处理,应考虑潜在的依赖关系。]
因此,尽管t检验肯定不会成为过去,但在应用t检验时,您几乎总是可以做得差不多,在没有采用t检验时,您可能会收获很多。就是说,我大致同意那篇关于t检验的观点……在很多时候,您甚至可能在收集数据之前就应该考虑一下自己的假设,如果真的没有预期的话要忍受,使用t检验通常不会造成任何损失,只需简单地不做这个假设即可,因为替代方法通常效果很好。
如果要在收集数据方面遇到很大麻烦,则毫无理由不花一点时间真诚地考虑最好的方法来推论。
请注意,我通常建议不要对假设进行显式测试-不仅要回答错误的问题,而且要这样做,然后根据对假设的拒绝或不拒绝进行选择分析,从而影响两种测试选择的性质;如果您不能合理地安全地做出假设(或者是因为您对流程足够了解,可以进行假设,或者因为该过程对您的情况不敏感),通常来说,最好使用该过程那没有假设。
†如今,它是如此简单以至于变得微不足道。这是针对R中均值的两个样本比较的置换检验和随机检验:
# set up some data
x <- c(53.4, 59.0, 40.4, 51.9, 43.8, 43.0, 57.6)
y <- c(49.1, 57.9, 74.8, 46.8, 48.8, 43.7)
xyv <- stack(list(x=x,y=y))$values
nx <- length(x)
# do sample-x mean for all combinations for permutation test
permmean = combn(xyv,nx,mean)
# do the equivalent resampling for a randomization test
randmean <- replicate(100000,mean(sample(xyv,nx)))
# find p-value for permutation test
left = mean(permmean<=mean(x))
# for the other tail, "at least as extreme" being as far above as the sample
# was below
right = mean(permmean>=(mean(xyv)*2-mean(x)))
pvalue_perm = left+right
"Permutation test p-value"; pvalue_perm
# this is easier:
# pvalue = mean(abs(permmean-mean(xyv))>=abs(mean(x)-mean(xyv)))
# but I'd keep left and right above for adapting to other tests
# find p-value for randomization test
left = mean(randmean<=mean(x))
right = mean(randmean>=(mean(xyv)*2-mean(x)))
pvalue_rand = left+right
"Randomization test p-value"; pvalue_rand
(所得p值分别为0.538和0.539;相应的普通两个样本t检验的p值为0.504,Welch-Satterthwaite t检验的p值为0.522。)
请注意,对于置换测试的组合,计算代码分别为1行,p值也可以在1行中完成。
使它适应执行置换检验或随机检验并产生输出的功能,就像t检验一样,将是一件小事。
这是结果的显示:
# Draw a display to show distn & p-vale region for both
opar <- par()
par(mfrow=c(2,1))
hist(permmean, n=100, xlim=c(45,58))
abline(v=mean(x), col=3)
abline(v=mean(xyv)*2-mean(x), col=3, lty=2)
abline(v=mean(xyv), col=4)
hist(randmean, n=100, xlim=c(45,58))
abline(v=mean(x), col=3)
abline(v=mean(xyv)*2-mean(x), col=3, lty=2)
abline(v=mean(xyv), col=4)
par(opar)