欢迎大家关注全网生信学习者系列:
方差分析(ANOVA)是一种统计方法,用于比较两组或多组数据之间的均值差异。在R语言中,实现方差分析主要涉及到以下步骤:
首先,你需要一个数据集,其中包含至少一个分类变量(通常是因子类型)和一个或多个数值型变量。这些数值型变量是你要分析的目标,而分类变量则用于将数据分成不同的组。
如果你的数据已经存储在一个外部文件中(如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()
函数来执行方差分析。这个函数需要一个公式,该公式描述了你要分析的数值型变量和分类变量之间的关系。
install.packages(c("ggplot2", "ggpubr", "tidyverse"))
library(tidyverse) # 数据预处理R包
library(readxl) # 读取xlsx数据R包
library(ggpubr) # 画图R包
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))
write.table(data, file = "data.txt", sep = "\t", quote = F, row.names = F)
xlsx::write.xlsx(data, file = "data.xlsx", row.names = F)
data <- read.table("data.txt", header = T)
data <- read_xlsx("data.xlsx", sheet = 1)
data_drop <- data %>%
dplyr::filter(D != "A")#%>%
#dplyr::mutate(Test = "test")
head(data_drop)
data %>%
group_by(D) %>%
summarise(N=n(),
Means=mean(RR),
SS=sum((RR - Means)^2),
SD=sd(RR),
SEM=SD/N^.5)
ggboxplot(data_drop,
x = "D",
y = "RR",
color = "D",
ylab = "RR", xlab = "D")
# 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值发生的概率大小。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)
TukeyHD
函数TukeyHSD(one.way)
diff
: 两组的均值之差;Lwr, upr
: 95%置信区间的下限和上限(默认值) ;P adj
: 多次比较调整后的P值。plot(one.way, 2)
shapiro.test(x = residuals(object = one.way))
结果显示:残差不显著也即是表明残差服从正态分布,可以采用ANOVA分析方法判断RR在D分组的分布水平。
library(car)
leveneTest(RR ~ D, data = data_drop, center = mean)
bartlett.test(RR ~ D, data = data_drop)
方差分析需要注意数据的分布情况,根据分布情况决定是否采样方差分析方法。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。