r语言中估计量的方差怎么求(基于R语言进行单因素方差分析)
r语言中估计量的方差怎么求(基于R语言进行单因素方差分析)#实际中不同组的因变量可能有不同的方差。#方差分析模型要求误差项独立同正态分布,这意味着各组的因变量方差相等。ggplot(data aes(x=x y=y)) stat_boxplot(geom = "errorbar" width=0.1) geom_boxplot(aes(fill=x) outlier.colour="white") theme(panel.background=element_blank() axis.line=element_line() legend.position="none") scale_fill_manual(values=c("#ffc000" "#80c97f" "#a68dc8" "red")) geo
在对数据进行基础的统计分析过程中,单因素方差分析(one-way analysis of variance)是比较常用的一种分析手段,一般我们要比较试验观测值的某个因变量(称为“指标”)按照一个分组变量(称为“因素”)分组后, 各组的因变量均值有无显著差异。今天,小编给大家展示的内容就是如何基于R语言进行单因素方差分析。
R包加载及数据加载rm(list=ls())#clear Global Environment
setwd('D:\\桌面\\单因素方差分析')#设置工作路径
#加载包
library(ggplot2)
library(reshape)
library(ggpubr)
#读取数据
df <- read.table(file="data.txt" sep="\t" header=T check.names=FALSE)
由于后续数据分析的需要,将数据转换为长格式:
#转换数据
data=melt(df)
colnames(data)<-c('x' 'y')
基于aov()函数进行方差分析:
aov.manu <- aov(y ~ x data=data)
summary(aov.manu)
主效应x(分组)的F检验的p值为1.26e-07, 检验水平为0.05情况下则分组效应显著, 各组之间有显著差异。基于箱线图进行初步展示
ggplot(data aes(x=x y=y))
stat_boxplot(geom = "errorbar" width=0.1)
geom_boxplot(aes(fill=x)
outlier.colour="white")
theme(panel.background=element_blank()
axis.line=element_line()
legend.position="none")
scale_fill_manual(values=c("#ffc000" "#80c97f" "#a68dc8" "red"))
geom_jitter(width=0.2)
geom_signif(comparisons = list(c("A" "B") c("A" "C") c("A" "D") c("B" "C") c("B" "D") c("C" "D"))
map_signif_level=TRUE
test = t.test y_position = c(200 205 210 215 220 225))
从箱线图来看,A组和D组之间以及B组和C组之间没有显著差异, A组与B组、C组之间均有显著差异,B组和C组与D组之间有显著差异。
多重比较为了找到各组两两之间是否有显著差异,可以进行两两的独立两样本t检验,但这样不能利用共同的模型参数,进行多次重复检验也会使得总第一类错误概率变得比较高, 发生过度拟合。为此,可以进行一些调整, 使得报告的检验p值能够控制总第一类错误概率。multcomp包的glht()函数可以对方差分析结果进行多重比较并控制总错误率,一种方法是利用Tukey的HSD(Honest Significant Difference)方法, 程序如下:
library(multcomp quietly=TRUE)
glht(aov.manu linfct = mcp(x = "Tukey")) |>
summary()
Tukey HSD检验的结果显示在0.05水平下, A和D,B和C没有显著差异, A与B、C均有显著差异,B及C和D有显著差异,这与之前箱线图显示结果一致;
方差不相等情形#方差分析模型要求误差项独立同正态分布,这意味着各组的因变量方差相等。
#实际中不同组的因变量可能有不同的方差。
#R中oneway.test()函数可以不要求方差相等,是一种独立两样本t检验的Welch方法推广。
oneway.test(y ~ x data=data)
#p值为3.155e-06,说明在0.05水平下极显著, 说明四组有显著差异。
#多重比较——进行两两t检验并不使用合并的标准差估计, 使用Holm方法进行p值调整以控制总错误率:
with(data
pairwise.t.test(y x pool.sd=FALSE
p.adjust.method="holm"))
#在0.05水平下, A和D、B和C没有显著差异,A与B、C均有显著差异 B及C和D有显著差异,这与之前箱线图显示结果也一致;
非参数方差分析#如果各组的因变量(指标)分布严重偏离正态, 则单因素方差分析所依据的F检验会有很大的误差,这时可以使用非参数方法,Kruskal-Wallis检验就是独立两样本比较的Wilcoxon秩和检验的推广。
kruskal.test(y ~ x data=data)
#Kruskal-Wallis检验p值为0.002,所以在0.05水平下拒绝原假设,认为各组之间有显著差异。
参考:https://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/stat-aov.html#stat-aov-1w-multc