在第十二讲中,我们讲到了配对样本t检验的假设条件是两组间差值分布需要符合正态性。
但是,当样本差值分布非正态,且经过一定的数值转换尝试后,仍然无法满足正态性要求时,配对样本的Wilcoxon符号秩检验成为备选方法,它将非正态样本的差值的中位数与0进行比较。它是一种非参数样本检验,基于样本差值的秩次排列,而非平均值。
注意,当两样本差值呈非正态分布时,选择Wilcoxon检验。可以使用Shapiro-Wilk test进行检查。请参看第六讲
1. 研究问题和统计假设
典型的研究问题是:
- 样本差值的中位数(m)是否等于0?
- 样本差值的中位数(m)是否小于0?
- 样本差值的中位数(m)是否大于0?
在统计数据中,我们可以定义相应的无效假设(H0) 如下:
- H0:m = 0
- H0:m≤ 0
- H0:m≥ 0
相应的备择假设(H1)如下:
- H1:m ≠ 0 (不同)
- H1:m> 0(大于)
- H1:m< 0(小于)
注意:
- 假设1)称为双向检验
- 假设2)和3)称为单向检验
2. 配对样本Wilcoxon检验的原理
配对样本Wilcoxon符号秩统计量的思想是:首先把配对的两样本组各个个体的差值的绝对值|X1|、|X2|、|X3|……|Xn|进行排序,其顺序统计量为|X|(1)、|X|(2)、|X|(3)……|X|(n)。如果配对两组的数据相同,则其差值会关于零点对称,对称中心两侧数据的疏密和取负值的数据交错出现,取正值数据在样本绝对值样本中的秩和与取负值数据在绝对值样本中的秩和应近似相等,概率均为0.5。
在求得正值秩和和负值秩和后,通过较小秩和和自由度(n-1)查询相应T界值表,获得相应P值。
如何解释结果?
如果p值低于或等于显着性水平0.05,我们可以拒绝无效假设并接受备择假设。换句话说,我们得出结论,两组数据的差值的中位数与0有显着差异。
3. 用R完成两样本Wilcoxon检验
可以使用R函数wilcox.test()计算单样本Wilcoxon检验:
wilcox.test(x, y, paired=TRUE, alternative = "two.sided")
- x,y:数值向量
- paired:一个逻辑值,指定我们要计算配对的Wilcoxon检验
- alternative:备择假设。允许值为“two.sided”(默认),也可以根据需要设置为“greater”或“less”之一。
3.1 将数据导入R
我们将使用一个示例,其中包含治疗前后10只小鼠的体重。
# 治疗前小鼠体重
before <-c(15.4,25.3,25.6,34.7,28.8,18.9,30.0,16.7,15.8,27.7)
# 治疗后小鼠的体重
after <-c(5.5,5.4,5.7,15.7,18.7,72.5,72.4,37.0,66.7,60.0)
# 创建数据框
my_data <- data.frame(
group = rep(c("before", "after"), each = 10),
weight = c(before, after)
)
我们想知道,治疗前后体重是否有显着差异?
3.2 检查数据
print(my_data)
group weight
1 before 15.4
2 before 25.3
3 before 25.6
4 before 34.7
5 before 28.8
6 before 18.9
7 before 30.0
8 before 16.7
9 before 15.8
10 before 27.7
11 after 5.5
12 after 5.4
13 after 5.7
14 after 15.7
15 after 18.7
16 after 72.5
17 after 72.4
18 after 37.0
19 after 66.7
20 after 60.0
使用dplyr软件包按组计算统计信息(平均值和标准差)。
- 要安装dplyr软件包,请输入以下命令:
install.packages("dplyr")
- 按组计算摘要统计信息:
library("dplyr")
group_by(my_data, group) %>%
summarise(
count = n(),
mean = mean(weight, na.rm = TRUE),
sd = sd(weight, na.rm = TRUE)
)
Source: local data frame [2 x 4]
group count mean sd
(fctr) (int) (dbl) (dbl)
1 after 10 36.0 29.2
2 before 10 23.9 6.76
3.3 使用箱形图及配对图可视化数据
(请参看第五讲 R-数据描述性统计分析作图)
箱形图显示了增长与否,但丢失了配对信息。我们可以使用功能plot.paired()[在pairedData包中]绘制配对数据(“ before-after”图)。
- 安装pairedData包:
install.packages("PairedData")
- 绘制配对数据:
# 提取治疗前数据
before <- subset(my_data, group == "before", weight,
drop = TRUE)
# 提取治疗后数据
after <- subset(my_data, group == "after", weight,
drop = TRUE)
# 画配对图
library(PairedData)
pd <- paired(before, after)
plot(pd, type = "profile") + theme_bw()
3.4 初步检验配对样本t检验的假设条件(正态性检验)
(请参看第六讲 R-数据正态分布检验)
假设1:两个样本是否配对?
是的,因为通过测量相同小鼠体重治疗前后两次来收集数据。
假设2:这是一个大样本吗?
否,因为n <30。由于样本大小不够大(小于30),我们需要检查对的差异是否遵循正态分布。
如何检查正常性?
# 计算之前前后的差异
d <- with(my_data, weight[group == "before"] - weight[group == "after"])
#Shapiro-Wilk正态性检验差值是否符合正态分布
shapiro.test(d) # p-value = 0.044
从输出中,p值大于显着性水平0.05,表明差值(d)的分布与正态分布没有显著差异。说明差值(d)不符合正态分布,不可以使用配对样本t检验。
请注意,如果数据符合正态分布,请使用配对样本t检验(我们在上一讲中有讲到,插入链接)
3.5 计算配对样本wilcoxon检验
# 配对样本t检验
res <- wilcox.test(weight ~ group, data = my_data, paired = TRUE)
res
Wilcoxon signed rank test
data: weight by group
V = 40, p-value = 0.2324
alternative hypothesis: true location shift is not equal to 0
在上面的结果中:
- p值是配对样本wilcoxon检验的显着性水平(p值=0.23)。
也可以使用如下代码,输出内容一样。
res <- wilcox.test(weight ~ group, data = my_data, paired = TRUE)
res
注意:
- 如果要测试治疗前的体重是否小于治疗后的体重,请输入以下命令:
wilcox.test(weight ~ group, data = my_data, paired = TRUE,
alternative = "less")
- 或者,如果要测试治疗前的体重是否大于治疗后的体重,请输入
wilcox.test(weight ~ group, data = my_data, paired = TRUE,
alternative = "greater")
3.6 结果解释
检验的p值为 0.23,大于显着性水平alpha = 0.05。然后我们可以肯定原假设,并得出结论,治疗前小鼠的体重与治疗后小鼠的没有显著不同,p值
3.7 获得wilcox.test()函数的返回值
(请参看第九讲 R-单样本wilcox检验)