第9章 方差分析

注:R语言的再复习之路
 
 

1. ANOVA模型拟合

1.1 aov()函数

语法为aov(formula, data = dataframe)

符号用法
~分隔符号,左边为响应变量,右边为解释变量
:表示变量的交互项,例如y ~ A + B + C
*表示所有可能交互项,例如y ~ A * B * C等价于y ~ A + B + C + A:B + B:C + A:C + A:B:C
^表示交互项达到某个次数,例如y ~ (A + B + C)^2等价于y ~ A + B + C + A:B + B:C + A:C
.表示包含除因变量外的所有变量,例如y ~ .等价于y ~ A + B + C
设计表达式
单因素ANOVAy ~ A
含单个协变量的单因素ANCOVAy ~ x + A
双因素ANOVAy ~ A * B
含两个协变量的双因素ANCOVAy ~ x1 + x2 + A * B
单因素组内ANOVAy ~ A + Error(Subject/A)
含单个组内因子(W)和单个组间因子(B)的重复测量ANOVAy ~ B * W + Error(Subject/W)

1.2 表达式中各项的顺序

表达式中效应的顺序在两种情况下会造成影响:(a)因子不只一个,并且是非均衡设计;(b)存在协变量。
表达式的抒写规则:首先是协变量,然后是主效应,接着是双因素的交互项,再接着是三因素的交互项,以此类推。
 
 

2. 单因素方差分析

library(multcomp)
attach(cholesterol)

# 基本的统计分析
table(trt)
aggregate(response, by = list(trt), FUN = mean)
aggregate(response, by = list(trt), FUN = sd)

# 单因素方差分析
fit <- aov(response ~ trt)
summary(fit)

# 绘制带有置信区间的组均值图形
library(gplots)
plotmeans(response ~ trt, xlab = 'Treatment', ylab = 'Response', main = 'Mean Plot \n with 95% CI')
detach(cholesterol)

2.1 多重比较

  1. TukeyHSD()函数
TukeyHSD(fit)
par(las = 2)
par(mar = c(2, 2))
plot(TukeyHSD(fit))

若图形中的置信区间包含0,则说明对应的两个水平之间差异不显著
2. glht()函数

library(multcomp)
par(mar = c(5, 4, 6, 2))
tuk <- glht(fit, linfct = mcp(trt = 'Tukey'))
plot(cld(tuk, level = .05), col = 'lightgrey')

2.2 评估检验的假设条件

  1. 因变量服从正态分布(正态性检验)
library(car)
qqPlot(lm(response ~ trt, data = cholesterol), simulate = TRUE, main = 'Q-Q Plot', labels = FALSE)
  1. 各组方差相等(方差齐性检验)
barlett.test(response ~ trt, data = cholesterol)

# 注:方差齐性分析对离群点非常敏感,需要检测离群点
library(car)
outlierTest(fit)

 
 

3. 单因素协方差分析

data(litter, package = 'multcomp')
attach(litter)
fit <- aov(weight ~ gesttime + dose)
summary(fit)

由于使用了协变量,你可能想要获取调整的组均值,即去除协变量效应后的组均值,代码如下:

library(effects)
effect('dose', fit)

3.1 多重比较

library(multcomp)
contrast <- rbind('no drug vs. drug' = c(3, -1, -1, -1))
summary(glht(fit, linfct = mcp(dose = contrast)))

3.2 评估检验的假设条件

  1. 正态性检验
    同上
  2. 方差齐性检验
    同上
  3. 检验回归斜率的同质性
    ANCOVA还假定回归斜率相同,原假设假定各组的回归斜率相等。
library(multcomp)
fit2 <- aov(weight ~ gesttime * dose, data = litter)
summary(fit2)

3.3 结果可视化

library(HH)
ancova(weight ~ gesttime + dose, data = litter)

若图形上的直线平行,则表明回归的斜率相等。
 
 

4. 双因素方差分析

attach(ToothGrowth)
dose <- factor(dose)
fit <- aov(len ~ supp * dose)
summary(fit)
detach(ToothGrowth)

注:这里需要将dose变量转换为因子变量,这样aov()函数才会将它当做一个分组变量,否则函数会把它算作数值型协变量,会发生错误。
注:所以以后用R语言做方差分析,一定要注意将分组变量因子化。

4.1 结果可视化

  1. interaction.plot()函数
interaction.plot(dose, supp, len, type = 'b', col = c('red', 'blue'), pch = c(16, 18), main = 'Interaction between Dose and Supplement Type')

注:前三个参数分别为x变量(这里指dose),分组变量(这里指supp),y变量(这里指len)

  1. plotmeans()函数
library(gplots)
plotmeans(len ~ interaction(supp, dose, sep = ' '),
          connect = list(c(1, 3, 5), c(2, 4, 6)),
          col = c('red', 'darkgreen'),
          main = 'Interaction Plot with 95% CIs',
          xlab = 'Treatment and Dose Combination')
  1. interaction2wt()函数
library(HH)
interaction2wt(len ~ supp*dose)

 
 

5. 重复测量方差分析

# 构建模型
CO2$conc <- factor(CO2$conc)
wlbl <- subset(CO2, Treatment == 'chilled')
fit <- aov(uptake ~ conc*Type + Error(Plant/conc), wlbl)
summary(fit)

# 可视化
par(las = 2)
par(mar = c(10, 4, 4, 2))
with(wlbl, interaction.plot(conc, Type, uptake, type = 'b', col = c('red', 'blue'), pch = c(16, 18), main = 'Interaction Plot for Plant Type and Concentration'))
boxplot(uptake ~ Type*conc, data = wlbl, col = c('gold', 'green'), main = 'Chilled Quebec and Mississippi Plants', ylab = 'Carbon dioxide uptake rate (umol/m^2 sec)')
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值