打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
R 语言教程:方差分析与多重比较
医学研究的R语言应用(4):
方差分析与多重比较

1. 研究实例


在评价某临床新药耐受性及安全性的2a期临床试验中,对符合纳入标准的30名健康自愿者随机分为3组,每组10名。各组注射剂量分别为0.5U、1U、2U,观察48小时部分凝血活酶时间(s),试问不同剂量的部分凝血活酶时间有无不同?数据库见time48.sav(SPSS格式)

2. 数据导入和基本分析

#加载必要的包

library(foreign) # 第1篇介绍

library(nortest) # 第1篇介绍

library(CBCgrps) # 第2篇介绍

library(tidyverse) # 第1篇介绍

library(car)  #用于方差齐性检验

#导入数据

e4=read.spss("time48.sav")  #读取数据集

e4<-as.data.frame(e4)

# 浏览数据变量结构

str(e4)

#利用函数整体进行快速统计描述

fun1<-function(x1,x2){

  median<-tapply(x1,x2,median)

  mean<-tapply(x1,x2,mean)

  IQR<-tapply(x1,x2,IQR)

  sd<-tapply(x1,x2,sd)

  y5<-cbind(median,mean,IQR,sd)

  return(y5)

}

fun1(e4$time,e4$group)

# 此处也可以利用dplyr函数进行

#进行两组数据的正态性检验

tt<-tapply(e4$time,e4$group,shapiro.test)

#绘制箱式图来看看看数据的变异程度

boxplot(time~group,data=e4)

4. 方差分析

用于多个试验组与一个对照组间的比较。R语言中可利用multcomp包中的glht()函数进行包括

方差齐性检验

leveneTest(time~group,data=e4)# spss采用方法,推荐

# 方差分析

 fit<-aov(time~group,data = e4) 

 summary(fit)

# 方差不齐时的welch检验

 oneway.test(time ~ group, data =e4, var.equal = F)

5. 多重比较

R语言可以进行多种多重比较方法。不过,部分多重比较方法并不如SPSS友好,两两比较的P往往不提供。

(1)LSD法
LSD法在R语言中可利用agricolae包中的LSD.test函数实现,其调用格式为:

LSD.test(y, trt, DFerror, MSerror, alpha = 0.05, p.adj=c("none","holm","hommel", "hochberg", "bonferroni", "BH", "BY", "fdr"), …)
其中y为方差分析对象,trt为要进行多重比较的分组变量,p.adj可以选定P值矫正方法。当p.adj=”none”时,为LSD法,p.adj="bonferroni"时为Bonferroni法。

library(agricolae)
out <- LSD.test(fit,"group", p.adj="none")
summary(out) #展示所有结果
out$group#多重比较的关键结果
运行结果并不提供P值,只提供归类结果,具有相同英文字母者表示没有统计学差异。本案例分析结果显示:1 单位剂量与2单位剂量存在着统计学差异,1单位和0.5单位剂量存在着统计学差异,0.5 单位剂量与2单位剂量存在无统计学差异。

(2) Bonferroni法
它是Bonferroni校正在LSD法上的应用。将LSD.test中p.adj设置为"bonferroni"即为Bonferroni法。

out <- LSD.test(fit,"group", p.adj="bonferroni")
summary(out)
out$group#结果显示

运行结果与LSD法类似,不再展示。

(3)Dunnett检验
用于多个试验组与一个对照组间的比较。R语言中可利用multcomp包中的glht()函数进行包括Dunnett检验在内的多种检验,其调用格式为:

glht(model, linfct, alternative = c("two.sided", "less", "greater"), ...)
其中model为方差分析对象,linfct设置要进行多重比较的分组变量和方法。

library(multcomp)
out <- glht(fit,linfct = mcp(group = 'Dunnett'), alternative = 'two.side')
summary(out)

程序运行结果:

(4)SNK法(Student-Newman-Keuls)
实质上是根据预先制定的准则将各组均数分为多个子集, 利用Studentized Range分布来进行假设检验。SNK法可用agricolae包中的SNK.test()函数实现,其调用格式为:

SNK.test(y, trt, alpha = 0.05, …)
其中y为方差分析对象,trt为要进行多重比较的分组变量

library(agricolae)
out <- SNK.test(fit,"group")
out$group#结果显示

程序运行结果与LSD.test类似。

(5)Turkey检验
使用学生化的范围统计量进行组间所有成对比较。Tukey的检验特点:所有各组的样本数相等;各组样本均数之间的全面比较;可能产生较多的假阴性结论。
R中Turkey检验检验的函数为TukeyHSD(model),其调用格式为:

TukeyHSD(model)
其中model为方差分析对象

tuk=TukeyHSD(fit)
tuk
plot(tuk)

程序运行结果:

(6)Duncan法(新复极差法)(SSR)
指定一系列的“range”值,逐步进行计算比较得出结论。
Duncan法可用agricolae包中的duncan.test()函数实现,其调用格式为:

duncan.test(y, trt, …)
其中y为方差分析对象,trt为要进行多重比较的分组变量

(7)Scheffe检验
Scheffe法为均值的所有可能的成对组合执行并发的联合成对比较。使用F取样分布。可用来检查组均值的所有可能的线性组合,而非仅限于成对组合。Scheffe检验特点:各组样本数相等或不等均可以,但是以各组样本数不相等使用较多;如果比较的次数明显地大于均数的个数时,Scheffe法的检验功效可能优于Bonferroni法
Scheffe法可用agricolae包中的scheffe.test()函数实现,其调用格式为:

scheffe.test(y, trt, …)
其中y为方差分析对象,trt为要进行多重比较的分组变量
医学研究R语言应用系列(点击即可学习)
0. R语言基础课程:30天学会R语言
1.正态性检验与判断R教程SPSS教程
2.CBCgrps包的妙用
3.两样本t检验R教程SPSS教程
4.两样本秩和检验R教程SPSS教程


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
R语言组件多重比较
用R语言做单因素方差分析及多重比较
方差分析操作步骤-6683fd3074eeaeaad1f34693daef5ef7bb0d1230
方差分析的两两比较
方差分析中深层次统计学问题
SCI编辑说,请计算Bonferroni校正P值,怎么破!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服