单样本Wilcoxon检验:
当样本分布非正态,且经过一定的数值转换尝试后,仍然无法满足正态性要求时,单样本的Wilcoxon符号秩检验成为备选方法。
## 代码测试##
##单样本的wilcox 检验##
library(datasets)
data(DNase)
ata <- DNase
#实验中的conc变量(蛋白浓度)是否不同于理论值3.0?
shapiro.test(my_data$conc)
#data: my_data$conc
#W = 0.71508, p-value < 2.2e-16 conc不符合正态性分布
# 单样本Wilcoxon检验
test <- wilcox.test(my_data$conc, mu = 3)
test
test$p.value
#V = 7051, p-value = 0.2756 蛋白浓度与3无显著性差异
#################################
#检验蛋白浓度是否小于3(单向测试)
wilcox.test(my_data$conc, mu = 3,
alternative = "less")
#检验蛋白浓度是否大于3(单向测试)
wilcox.test(my_data$conc, mu = 3,
alternative = "greater")
两独样本Wilcoxon检验
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)
)
library(dplyr)
#按性别group计算统计信息
group_by(my_data, group) %>%
summarise(
count = n(),
mean = mean(weight, na.rm = TRUE),
sd = sd(weight, na.rm = TRUE)
)
# Shapiro-Wilk normality test for Men's weights
with(my_data, shapiro.test(weight[group == "Man"]))# p = 0.017
# Shapiro-Wilk normality test for Women's weights
with(my_data, shapiro.test(weight[group == "Woman"])) # p = 0.045
#p值小于显着性水平0.05,说明数据分布不符合正态分布
#两组数据中只有一组不是正态分布,也要使用非参数两样本Wilcoxon秩检验
#F检验来检验方差齐性。可以使用var.test()函数执行以下操作
res.ftest <- var.test(weight ~ group, data = my_data)
res.ftest
#ratio of variances
#0.880622
#F检验为p = 0.8617。它大于显着性水平alpha = 0.05。因此,两组数据的方差之间没有显著差异。因此我们认为男女两组方差相等(方差齐性)。
res <- wilcox.test(weight ~ group, data = my_data, var.equal = TRUE)
res
#p-value = 0.1135 男性的体重与女性的体重没有显著不同。