第十一讲 R-两独立样本Wilcoxon检验
在“R与生物统计专题”中,我们会从介绍R的基本知识展开到生物统计原理及其在R中的实现。以从浅入深,层层递进的形式在投必得医学公众号更新。
上一讲中,我们介绍了第十讲 R-两独立样本t检验,然而两独立样本t检验仅适用于正态分布的样本,对于分布非正态,且经过一定的数值转换尝试后,仍然无法满足正态性要求的样本,无法使用t检验。
此时,两独立样本的Wilcoxon秩和检验成为备选方法,它将两独立样本组的非正态样本值进行比较。它是一种非参数样本检验,基于样本的秩次排列,而非平均值。
单样本Wilcoxon检验用于检验一组样本和理论值是否有差异。当我们比较两组样本间是否存在差异时,就需要用到今天的统计学方法:两独立样本Wilcoxon符号秩检验。
两独立样本Wilcoxon检验
当您的数据不是正态分布时使用。
当数据呈非正态分布时,选择Wilcoxon检验。可以使用Shapiro-Wilk test进行检查。请参看第六讲 R-数据正态分布检验。
1. 研究问题和统计假设
A组中位数(mA)是否等于B组中位数(mB)?
A组中位数(mA)是否小于B组中位数(mB)?
A组中位数(mA)是否大于B组中位数(mB)?
在统计数据中,我们可以定义相应的无效假设(H0) 如下:
H0:mA = mB
H0:mA ≤ mB
H0:mA ≥ mB
相应的备择假设(H1)如下:
H1:mA ≠ mB (不同)
H1:mA > mB(大于)
H1:mA < mB(小于)
注意
假设1)称为双向检验
假设2)和3)称为单向检验
2.两独立样本Wilcoxon检验的公式
检验的具体步骤:
第一步:将两个样本数据混合并由小到大进行等级排列(最小的数据秩次编为1,最大的数据秩次编为n1 + n2)。
第二步:把容量较小的样本中各数据的等级相加,即秩和,用T表示。
第三步:把T值与秩和检验表中某α显著性水平下的临界值相比较,如果T1 < T < T2,则两样本差异不显著;如果T不等于T1或T大于等于T2, 则表明两样本差异显著。
当两个样本容量都大于10时,秩和T的分布接近于正态分布,因此可以用Z检验,其基本公式为:
式中:T为较小的样本的秩和。
我们可以为自由度(df)计算与检验统计量(| z|),通过查询其相对性的z界值表,对比其在df=n1+n2-1处的P值。
如果p值低于或等于显着性水平0.05,我们可以拒绝无效假设并接受备择假设。换句话说,我们得出结论,两组样本代表的总体间存在有显着差异。
3. 用R完成两独立样本Wilcoxon检验
可以使用R函数wilcox.test()计算两独立样本Wilcoxon检验:
wilcox.test(x, y, alternative = "two.sided")
x,y:
数值向量
alternative:
备择假设。
允许值为“two.sided”(默认),也可以根据需要设置为“greater”或“less”之一。
在这里,我们将使用一个示例数据集,其中包含18个人(9名女性和9名男性)的体重:
women_weight <- c(88.9, 81.2, 73.3, 21.8, 63.4, 84.6, 28.4, 28.8, 28.5)
men_weight <- c(37.8, 80, 33.4, 36, 89.4, 83.3, 97.3, 81.3, 92.4)
# 建立一个数据框
my_data <- data.frame(
group = rep(c("Woman", "Man"), each = 9),
weight = c(women_weight, men_weight)
)
我们想知道,女性体重是否与男性体重不同?
# 打印所有数据
print(my_data)
输出结果:
group weight
1 Woman 88.9
2 Woman 81.2
3 Woman 73.3
4 Woman 21.8
5 Woman 63.4
6 Woman 84.6
7 Woman 28.4
8 Woman 28.8
9 Woman 28.5
10 Man 37.8
11 Man 80.0
12 Man 33.4
13 Man 36.0
14 Man 89.4
15 Man 83.3
16 Man 97.3
17 Man 81.3
18 Man 92.4
按性别计算统计信息(中位数和四分位数范围(IQR))。可以使用dplyr软件包。
安装及导入dplyr软件包
install.packages("dplyr")
library(dplyr)
按性别group计算统计信息:
group_by(my_data, group) %>%
summarise(
count = n(),
mean = mean(weight, na.rm = TRUE),
sd = sd(weight, na.rm = TRUE)
)
# A tibble: 2 x 4
group count mean sd
1 Man 9 70.1 26.4
2 Woman 9 55.4 28.1
假设1:两个样本是否独立?
是的,因为来自男性和女性的样本无关。
假设2:两组中每组的数据是否服从正态分布?
我们将使用with()和shapiro.test()的函数来为每组样本计算Shapiro-Wilk测试。
# Shapiro-Wilk normality test for Men's weights
with(my_data, shapiro.test(weight[group == "Man"]))
#输出结果 p = 0.01
# Shapiro-Wilk normality test for Women's weights
with(my_data, shapiro.test(weight[group == "Woman"]))
#输出结果 p = 0.045
输出结果中,两个p值小于显着性水平0.05,说明两组数据的分布与正态分布有显着差异。数据分布不符合正态分布的假设检验成立。
请注意,如果两组数据中只有一组不是正态分布,也要使用非参数两样本Wilcoxon秩检验。
假设3:这两个总体是否符合方差齐性?
我们将使用F检验来检验方差齐性。可以使用var.test()函数执行以下操作:
res.ftest <- var.test(weight ~ group, data = my_data)
res.ftest
输出结果
F test to compare two variances
data: weight by group
F = 0.88062, num df = 8, denom df = 8, p-value = 0.8617
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
0.1986398 3.9040261
sample estimates:
ratio of variances
0.880622
F检验为p = 0.8617。它大于显着性水平alpha = 0.05。因此,两组数据的方差之间没有显著差异。因此我们认为男女两组方差相等(方差齐性)。
由于以上3个假设综合,由于数据不符合正态分布,因此,我们不可以使用student-t检验。需要使用两独立样本Wilcoxon检验。
问题:男女体重之间有显着差异吗?
res <- wilcox.test(weight ~ group, data = my_data, var.equal = TRUE)
res
输出结果
Wilcoxon rank sum test
data: weight by group
W = 59, p-value = 0.1135
alternative hypothesis: true location shift is not equal to 0
在上面的结果中:
p值是wilcoxon检验的显着性水平(p值= 0.1135)。
如果要检验男性的体重是否小于女性的体重,请输入以下内容:
wilcoxon.test(weight ~ group, data = my_data,var.equal = TRUE, alternative = "less")
或者,如果您想测试男性的体重是否大于女性的体重,请输入
wilcoxon.test(weight ~ group, data = my_data,var.equal = TRUE, alternative = "greater")
检验的p值为 0.1135,大于显着性水平alpha = 0.05。我们可以得出结论,男性的体重与女性的体重没有显著不同。
好了,本期讲解就先到这里。小伙伴们赶紧试起来吧。
在之后的更新中,我们会进一步为您介绍R的入门,以及常用生物统计方法和R实现。欢迎关注,投必得医学手把手带您走入R和生物统计的世界。
当然啦,R语言的掌握是在长期训练中慢慢积累的。一个人学习太累,不妨加入“R与统计交流群”,和数百位硕博一起学习。
快扫二维码撩客服,
带你进入投必得医学交流群,
让我们共同进步!
↓↓
- END -
长按二维码关注「投必得医学」,更多科研干货在等你!