R语言统计分析之方差分析

R语言是一个很好的做统计分析的语言,本文对R的方差分析做个总结

方差分析我个人理解就是变异分解(作为农学生这些都是田间统计学的),在一组数据中由于数据之间的差异会有一个总的变异即总方差,而基于我们的试验设计以及分析可以将变异分解为试验处理造成的变异(这个一般是我们想要的,方差分析的F测验基本上也是比较处理的变异是否显著大于误差引起的变异以确定处理是都有效)因此在做试验的时候都想要误差小一些才能体现出处理的效应,所以也采取了一些方法,如:设置区组可以将田块的非试验因素造成的差异(如田块肥力有一定的变化趋势)从试验误差分离出来,协方差分析可以利用回归对某些试验外的因素效应进行去除。
简单的说,以下表为例,ABC之间的方差就是处理效应的方差,Value1-2的差异就是取样误差造成的(或许会有一些我们不知道的因素造成的差异均归为误差),我们的目的就是比较处理的方差与误差的方差是否具有显著性,试验设计的目的就是尽可能的减少误差以体现处理的差异。

项目 Value 1 Value2
A 6 9
B 7 8
C 5 10

单因素方差分析

下面基于R做一下简单的分析示例
代码很简单,做的时候需要根据实验处理确定方差分解项
数据sss如下
R语言统计分析之方差分析_第1张图片
R语言统计分析之方差分析_第2张图片

df <- read.csv('sss.csv')
# 正态分布检验
shapiro.test(df[which(df[, 2] == "A"), ] $x)
shapiro.test(df[which(df[, 2] == "B"), ] $x)
shapiro.test(df[which(df[, 2] == "C"), ] $x)
shapiro.test(df[which(df[, 2] == "D"), ] $x)
shapiro.test(df[which(df[, 2] == "E"), ] $x)

# 方差齐次检验
bartlett.test(x~method, data = df)
library(car)
library(carData)
# 离群点检验
outlierTest(aov(x~method, data=df))
# 单因素方差分析
df <- read.csv('sss.csv')
df$method <- factor(df$method)
aov.model <- aov(x~method, data = df)
summary(aov.model)
boxplot(x~method, data = df)
# 多重比较 图基法
TukeyHSD(aov.model, ordered = F)
# TukeyHSD(aov(x~method, data = df), ordered = F)
plot(TukeyHSD(aov(x~method, data = df)))
library(agricolae) # 新复极差法多重比较
out <-duncan.test (aov.model)
out$groups
plot(out) 

# 绘图自动标ab
library(MASS)
library(TH.data)
library(survival)
library(mvtnorm)
library(multcomp)
tuk <- glht(aov(x~method, data = df), linfct = mcp(method = "Tukey"))
plot(cld(tuk, level = 0.05), col = "lightgrey")

两因素方差分析

数据有重复需考虑交互作用
homework3.csv数据如下
R语言统计分析之方差分析_第3张图片

hm2 <- read.csv('homework3.csv')
# 正态分布,离散值,方差均一性检验,太多了没写全
shapiro.test(hm2[which(hm2[, 2] == "A"), ] $血压)
shapiro.test(hm2[which(hm2[, 3] == "T0"), ] $血压)
bartlett.test(血压~诱导方法, data = hm2)
library(car)
library(carData)
outlierTest(aov(血压~诱导方法, data=hm2))

aov.hw <- aov(血压~诱导方法*时间, data = hm2)
summary(aov.hw)
# 不同时间不同诱导方法之间差异显著,诱导方法与时间之间存在较强互作
TukeyHSD(aov.hw, ordered = F)
plot(TukeyHSD(aov.hw))
TukeyHSD(aov(血压~诱导方法*时间, data = hm2), ordered = F)
plot(TukeyHSD(aov(血压~诱导方法*时间, data = hm2)))
# 新复极差法Duncan
library(agricolae)
out <-duncan.test (aov(血压~诱导方法*时间, hm2),"时间")
out$groups
plot(out) 

R语言统计分析之方差分析_第4张图片
具体细节可以继续深入研究,只要知道方差分解项,三因素、裂区等设计实现起来就简单了。

你可能感兴趣的:(R语言统计分析,r语言,数据分析,数据挖掘)