R语言和医学统计学系列(4):秩和检验
前言
这是R语言和医学统计学的第4篇内容。
第1篇请见:R语言和医学统计学系列(1):t检验
第2篇请见:R语言和医学统计学系列(2):方差分析
第3篇请见:R语言和医学统计学系列(3):卡方检验
使用R语言进行统计学是我学习R语言最开始的初衷,没想到从此一发不可收拾,打开了新世界的大门。这个系列也是我最开始学习R语言时的笔记。希望对大家有帮助。
主要是用R语言复现课本中的例子。我使用的课本是孙振球主编的《医学统计学》第4版,封面如下:
我的研究生课程并没有把整本书的全部学完,只学习了其中的一部分,因此本系列也是只针对其中学过的部分进行复现。另外对于统计描述部分也不在这里探讨。
配对样本比较的Wilcoxon符号秩检验
使用课本例8-1的数据,自己手动摘录:
test1<-c(60,142,195,80,242,220,190,25,198,38,236,95)
test2<-c(76,152,243,82,240,220,205,38,243,44,190,100)
两列数据,和配对t检验的数据结果完全一样。
简单看一下数据情况:
boxplot(test1,test2)
进行秩和检验:
wilcox.test(test1,test2,paired = T,alternative = "two.sided",exact = F, correct = F)
##
## Wilcoxon signed rank test
##
## data: test1 and test2
## V = 11.5, p-value = 0.05581
## alternative hypothesis: true location shift is not equal to 0
结果和课本一致!
两独立样本比较的Wilcoxon符号秩检验
和两样本t检验的数据格式完全一样!
使用课本例8-3的数据,自己手动摘录。。
RD1<-c(2.78,3.23,4.20,4.87,5.12,6.21,7.18,8.05,8.56,9.60)
RD2<-c(3.23,3.50,4.04,4.15,4.28,4.34,4.47,4.64,4.75,4.82,4.95,5.10)
进行两独立样本比较的Wilcoxon符号秩检验:
wilcox.test(RD1,RD2,paired = F, correct = F)
##
## Wilcoxon rank sum test
##
## data: RD1 and RD2
## W = 86.5, p-value = 0.08049
## alternative hypothesis: true location shift is not equal to 0
结果取单侧检验,还是和课本一致!
完全随机设计多个样本比较的 Kruskal-Wallis H 检验
使用课本例8-5的数据,手动摘录:
rm(list = ls())
death_rate <- c(32.5,35.5,40.5,46,49,16,20.5,22.5,29,36,6.5,9.0,12.5,18,24)
drug <- rep(c("Drug_A","drug_B","drug_C"),each=5)
mydata <- data.frame(death_rate,drug)
str(mydata)
## 'data.frame': 15 obs. of 2 variables:
## $ death_rate: num 32.5 35.5 40.5 46 49 16 20.5 22.5 29 36 ...
## $ drug : chr "Drug_A" "Drug_A" "Drug_A" "Drug_A" ...
数据一共2列,第1列是死亡率,第2列是药物(3种)。
简单看下数据:
boxplot(death_rate ~ drug, data = mydata)
进行 Kruskal-Wallis H 检验:
kruskal.test(death_rate ~ drug, data = mydata)
##
## Kruskal-Wallis rank sum test
##
## data: death_rate by drug
## Kruskal-Wallis chi-squared = 9.74, df = 2, p-value = 0.007673
算出来结果和课本一致!
随记区组设计多个样本比较的 Friedman M 检验
使用课本例8-9的数据:
df <- foreign::read.spss("E:/各科资料/医学统计学/研究生课程/6非参数检验18-9研/例08-09.sav", to.data.frame = T)
str(df)
## 'data.frame': 8 obs. of 4 variables:
## $ 频率A: num 8.4 11.6 9.4 9.8 8.3 8.6 8.9 7.8
## $ 频率B: num 9.6 12.7 9.1 8.7 8 9.8 9 8.2
## $ 频率C: num 9.8 11.8 10.4 9.9 8.6 9.6 10.6 8.5
## $ 频率D: num 11.7 12 9.8 12 8.6 10.6 11.4 10.8
数据一共4列,分别是4中不同频率下的反应率。
简单看下数据:
boxplot(df$频率A,df$频率B,df$频率C,df$频率D)
进行 Friedman M 检验前先把数据格式转换一下:
M <- as.matrix(df) # 变成矩阵
进行 Friedman M 检验:
friedman.test(M)
##
## Friedman rank sum test
##
## data: M
## Friedman chi-squared = 15.152, df = 3, p-value = 0.001691
结果和课本一致!
欢迎大家交流讨论,可以直接在评论区留言或添加我的微信。
欢迎关注我的公众号:医学和生信笔记
“医学和生信笔记 公众号主要分享:1.医学小知识、肛肠科小知识;2.R语言和Python相关的数据分析、可视化、机器学习等;3.生物信息学学习资料和自己的学习笔记!
往期精彩内容:
R语言和医学统计学系列(1):t检验
R语言和医学统计学系列(2):方差分析
R语言缺失值插补之simputation包