前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手把手教你R语言方差分析ANOVA

手把手教你R语言方差分析ANOVA

原创
作者头像
生信学习者
发布2024-06-12 11:38:34
1450
发布2024-06-12 11:38:34

欢迎大家关注全网生信学习者系列:

  • WX公zhong号:生信学习者
  • Xiao hong书:生信学习者
  • 知hu:生信学习者
  • CDSN:生信学习者2

介绍

方差分析(ANOVA)是一种统计方法,用于比较两组或多组数据之间的均值差异。在R语言中,实现方差分析主要涉及到以下步骤:

  • 数据导入
  • 数据清洗
  • ANOVA计算
  • 结果解析
  • ANOVA评估

首先,你需要一个数据集,其中包含至少一个分类变量(通常是因子类型)和一个或多个数值型变量。这些数值型变量是你要分析的目标,而分类变量则用于将数据分成不同的组。

如果你的数据已经存储在一个外部文件中(如CSV、Excel或RData),你需要使用适当的R函数(如read.csv(), readxl::read_excel(), load()等)将其加载到R环境中。然后,你可以使用head(), tail(), summary(), str()等函数来查看数据的结构和内容。

在进行方差分析之前,你可能需要对数据进行一些预处理,例如处理缺失值(使用na.omit(), na.exclude(), na.fill()等函数)、转换数据类型(使用as.factor(), as.numeric()等函数)或进行变量选择(使用子集选择或dplyr包的select()函数)。

在R中,你可以使用aov()函数来执行方差分析。这个函数需要一个公式,该公式描述了你要分析的数值型变量和分类变量之间的关系。

step1: 安装R包

代码语言:javascript
复制
install.packages(c("ggplot2", "ggpubr", "tidyverse"))

step2: 载R包

代码语言:javascript
复制
library(tidyverse) # 数据预处理R包
library(readxl) # 读取xlsx数据R包
library(ggpubr) # 画图R包

step3: 导入数据

  • 随机生成数据
代码语言:javascript
复制
data <- data.frame(D = c(rep("A", 4), rep("B", 4), rep("C", 4), rep("D", 4), rep("E", 4), rep("F", 4)),
                   RR = c(80,83,83,85,75,75,79,79,74,73,76,77,67,72,74,74,62,62,67,69,60,61,64,66))
  • 存储数据
代码语言:javascript
复制
write.table(data, file = "data.txt", sep = "\t", quote = F, row.names = F)
xlsx::write.xlsx(data, file = "data.xlsx", row.names = F)
  • txt数据格式
代码语言:javascript
复制
data <- read.table("data.txt", header = T)
  • xlsx数据格式
代码语言:javascript
复制
data <- read_xlsx("data.xlsx", sheet = 1)

step4: 数据清洗

  • 筛选数据:丢弃A组数据
代码语言:javascript
复制
data_drop <- data %>%
  dplyr::filter(D != "A")#%>%
  #dplyr::mutate(Test = "test")

head(data_drop)

  • 数据平均值和其他指标
代码语言:javascript
复制
data %>%
  group_by(D) %>%
  summarise(N=n(),
            Means=mean(RR),
            SS=sum((RR - Means)^2),
            SD=sd(RR),
            SEM=SD/N^.5)

  • 展示数据: boxplot
代码语言:javascript
复制
ggboxplot(data_drop, 
          x = "D", 
          y = "RR", 
          color = "D",
          ylab = "RR", xlab = "D")

step5: 单因素方差分析

  • one-way ANOVAs: 使用aov函数运行单因素方差分析 (公式是:Y是检验变量,X是分组变量);
  • 再使用summary函数获取单因素方差分析的结果。
代码语言:javascript
复制
# Y=RR; X=D
one.way <- aov(RR ~ D, data = data_drop)

summary(one.way)

结果解析:

  • Residuals是模型的残差,可以理解为截距;
  • Df列显示了自变量的自由度(变量中的水平数减1)和残差的自由度(观察总数减1和自变量中的水平数减1);
  • Sum Sq列显示平方和(即组均值与总体均值之间的总变化)。;
  • Mean Sq列是平方和的平均值,通过将平方和除以每个参数的自由度来计算;
  • F value列是F检验的检验统计量。这是每个自变量的均方除以残差的均方。F值越大,自变量引起的变化越有可能是真实的,而不是偶然的;
  • Pr(>F)列是F统计量的p值。这表明,如果组均值之间没有差异的原假设成立,那么从检验中计算出的F值发生的概率大小。
  • 另一种方法:t-test仅仅适合2组比较,因此需要筛选
代码语言:javascript
复制
data_ttest <- data_drop %>%
  dplyr::filter(D %in% c("B", "C")) #%>%
  #dplyr::filter(RR != 77)

# data_test_filter <- filter(data_drop, D %in% c("B"))
# data_test_filter2 <- filter(data_test_filter, RR != 77)

t.test(RR ~ D, data = data_ttest)

step6: 后置检验

  • ANOVA结果仅仅揭示多个组间的差异结果,具体到哪两个组内部差异还需要做后置检验
  • 后置检验通常采用TukeyHD函数
代码语言:javascript
复制
TukeyHSD(one.way)

  • 该结果给出每个两组之间的结果;
  • diff: 两组的均值之差;
  • Lwr, upr: 95%置信区间的下限和上限(默认值) ;
  • P adj: 多次比较调整后的P值。

step7: 检查残差分布是否符合正态分布

  • ANOVA比较的是均值,需要每个分组的残差服从正态部分
代码语言:javascript
复制
plot(one.way, 2)

  • 采用Shapiro-Wilk对残差进行检验
代码语言:javascript
复制
shapiro.test(x = residuals(object = one.way))

结果显示:残差不显著也即是表明残差服从正态分布,可以采用ANOVA分析方法判断RR在D分组的分布水平。

step8: 方差齐性检验

代码语言:javascript
复制
library(car)

leveneTest(RR ~ D, data = data_drop, center = mean) 

代码语言:javascript
复制
bartlett.test(RR ~ D, data = data_drop) 

总结

方差分析需要注意数据的分布情况,根据分布情况决定是否采样方差分析方法。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • step1: 安装R包
  • step2: 载R包
  • step3: 导入数据
  • step4: 数据清洗
  • step5: 单因素方差分析
  • step6: 后置检验
  • step7: 检查残差分布是否符合正态分布
  • step8: 方差齐性检验
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档