简单 t 检验的非参数替代方案
t检验不假设因变量的正态性;它假设正态性以预测变量为条件。(看这个帖子:Y必须是正态分布的误解从何而来?)。以分组变量为条件的一种简单方法是查看因变量的直方图,根据分组变量拆分数据。
正态性检验,如夏皮罗-威尔克检验,可能没有那么多信息。与正态性的微小偏差可能会很重要(请参阅此线程:正态性测试是否“基本上无用”?)。但是,鉴于您的样本量较小,这可能不是问题。尽管如此,是否违反常态并不重要(实际上),而是违反的程度。
根据您的数据可能有多不正常,您可能不必担心太多。一般线性模型(t检验是其中的一部分)对于违反正态性假设比对其他假设(例如观察的独立性)更稳健。之前在这个网站上讨论过它有多稳健,例如在这个线程中:当样本的分布非正态时,独立样本 t 检验有多稳健?. 还有许多论文研究了这种方法对违反正态性的鲁棒性,以及(通过这个快速的 Scholar 搜索证明:https ://scholar.google.com/scholar?hl=en&as_sdt=0%2C33&q=t-test +稳健+至+非正态性&btnG= )。
您不妨运行一个非参数测试,看看您的结论是否不同;这样做基本上不需要任何费用。最流行的替代方法是 Mann-Whitney 测试,它使用
stats::wilcox.test
R 中的函数完成(http://stat.ethz.ch/R-manual/R-devel/library/stats/html/wilcox.test.html) . 互联网上有很多关于这个测试的很好的介绍——我会到处搜索,直到你点击它的描述。我发现这个手动计算测试统计的视频非常直观:https ://www.youtube.com/watch?v=BT1FKd1Qzjw 。当然,你用电脑来计算这个,但我喜欢知道下面发生了什么。
让我们一次看一个变量。据我了解,您有观测值,分布在和 )的人口 2 的
你想测试和 您可以使用 2 样本 t 检验。除非您之前有使用表明的此类数据的经验,否则最好使用 Welch(独立方差)t 检验,它不需要
具体来说,假设您有以下数据:
sort(x1); summary(x1); sd(x1)
[1] 78.0 78.5 80.1 80.9 87.2 88.8 89.0 90.1 90.7 92.6 92.9 93.7 94.5 97.3 98.3
[16] 98.3 98.6 100.5 100.9 101.1 101.8 101.9 103.2 103.4 104.0 104.1 104.6 104.9 105.1 105.4
[31] 105.8 107.2 107.6 108.1 108.1 108.2 108.7 109.6 109.6 112.0 112.2 112.7 114.0 114.1 114.7
[46] 114.8 116.6 117.0 118.0 118.4 118.6 119.2 123.1 124.1 124.7 125.5 127.4 127.7 136.4 138.2
Min. 1st Qu. Median Mean 3rd Qu. Max.
78.0 98.3 105.6 106.2 114.7 138.2
[1] 13.55809
.
sort(x2); summary(x2); sd(x2)
[1] 65.3 70.1 76.1 76.8 80.9 81.3 82.4 82.5 84.9 85.0 85.6 86.6 87.7 88.6 89.4
[16] 89.7 90.3 91.9 92.2 92.5 93.0 93.0 93.5 94.0 94.4 96.1 96.4 96.9 97.3 97.6
[31] 98.5 98.9 99.7 99.9 100.2 101.3 101.5 101.7 103.3 103.4 103.5 103.6 104.5 104.7 106.0
[46] 106.2 107.2 107.7 109.2 109.3 110.5 110.7 110.9 111.1 111.3 113.8 114.9 115.2 118.1 118.9
Min. 1st Qu. Median Mean 3rd Qu. Max.
65.30 89.62 98.05 97.30 106.05 118.90
[1] 11.89914
boxplot(x1, x2, notch=T, col="skyblue2", pch=19)
两个样本中都没有异常值,样本看起来大致对称。箱线图两侧的缺口是近似的非参数置信区间,此处表明总体中位数不同。
Welch 2 样本 t 检验显示出显着差异。[合并 t 检验的 df = 118;由于样本标准偏差的微小差异,韦尔奇检验只有大约 df = 116。]
t.test(x1, x2)
Welch Two Sample t-test
data: x1 and x2
t = 3.8288, df = 116.05, p-value = 0.0002092
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
4.304113 13.529220
sample estimates:
mean of x mean of y
106.2117 97.2950
现在针对您的具体问题:
(1) 对于 60 的样本量,您不必担心稍微偏离正态性。如果您觉得非正态性可能是一个问题,您可以在一个正态性检验中同时查看该模型中的所有 120 个“残差”。(残差是对于
(2) 通过 Welch 2 样本 t 检验处理任何方差差异。
(3) 如果您确实觉得数据与正态性相去甚远,可以使用非参数双样本 Wilcoxon(有符号秩)检验。这是一个测试,看看一个人口是否从另一个人口转移。(一些作者将此视为对中位数差异的测试,但本月《美国统计学家》中的一篇论文反对这种解释,并对测试采取了更广泛的看法:Dixon et al. (2018), Vol. 72, Nr. 3 , “Wilcoxon-Mann-Whitney 程序作为中位数检验失败。”)在我的示例中,此检验发现两个总体之间存在显着差异,而不假设任一总体正常。
wilcox.test(x1, x2)
Wilcoxon rank sum test with continuity correction
data: x1 and x2
W = 2465, p-value = 0.0004871
alternative hypothesis: true location shift is not equal to 0
(4)附录:一个评论和一个链接的问答提及置换测试,所以我们包括一个可能的置换测试。[关于置换检验的基本讨论,也许见Eudey 等人。(2010 年),尤其是 Sect。3.]
下面是使用汇集的 t 统计量作为“度量”的置换测试的 R 代码。如果两组相同,那么我们将 120 个观察值随机打乱成两组 60 个,这无关紧要。我们认为汇集 t 统计量是衡量两个样本之间距离的合理方法,但不要假设统计量具有学生的分布。
该代码假定数据存在,使用函数进行加扰x1
,并且(方便但效率低下)用于获取置换样本的 t 统计信息。P 值 0.0003 表示拒绝原假设。(每次运行的结果可能会略有不同。)x2
sample(gp)
t.test()$stat
all = c(x1, x2); gp = rep(1:2, each=60)
t.obs = t.test(all ~ gp, var.eq=T)$stat
t.prm = replicate( 10^5, t.test(all ~ sample(gp), var.eq=T)$stat )
mean(abs(t.prm) > abs(t.obs))
[1] 0.00026
下图显示了模拟排列分布的直方图。[它恰好与具有 118 个自由度的学生 t 分布的密度曲线(黑色)非常匹配,因为数据被模拟为具有几乎相等 SD 的正态。] P 值是垂直虚线之外的置换 t 统计量的比例线。
注意:我的数据是在 R 中生成的,如下所示:
set.seed(818)
x1 = round(rnorm(60, 107, 15), 1); x2 = round(rnorm(60, 100, 14), 1)
需要记住的一件事——在物理学的某些背景之外,自然界中没有任何过程会生成纯粹的正态分布数据(或具有任何特定良好分布的数据)。这在实践中意味着什么?这意味着,如果您对正态性进行了万能的检验,那么该检验将在 100% 的情况下拒绝,因为您的数据基本上总是充其量只是近似正常。这就是为什么学习确定近似正态性的程度及其对推理的可能影响对于研究人员来说如此重要,而不是依赖于测试。