专注系列化高质量的R语言教程

推文索引 | 联系小编 | 付费合集


当存在两个及以上的分组变量时,可以使用多因素方差分析(N-way  ANOVA、Multifactor ANOVA)检验各组的样本均值是否存在显著差异。本篇主要以双因素方差分析(Two-way  ANOVA)为例介绍相关内容。

本篇的目录如下:

  • 2 多因素方差分析

    • 2.1 示例数据

    • 2.2 平衡试验设计

    • 2.3 I型方差分析

    • 2.4 交互效应

    • 2.5 多因素方差分析

    • 未完待续

2 多因素方差分析

2.1 示例数据

本篇使用两个示例数据。

第一个示例数据是来自基础包datasetsnpk

npk
##    block N P K yield
## 1      1 0 1 1  49.5
## 2      1 1 1 0  62.8
## 3      1 0 0 0  46.8
## 4      1 1 0 1  57.0
## 5      2 1 0 0  59.8
## 6      2 1 1 1  58.5
## 7      2 0 0 1  55.5
## ...

npk共有5个变量:yield表示产量,为观测值;block为土地编号,取值为1-6,因子类型;NPK分别表示氮、磷、钾的使用情况,均为二分变量。

第二个示例数据是由mtcars数据集的四个变量组成,记为mpg

library(dplyr)
mpg <- mtcars %>%select(mpg, cyl, gear, carb) %>%mutate(cyl = factor(cyl),gear = factor(gear),carb = factor(carb))
mpg
##                      mpg cyl gear carb
## Mazda RX4           21.0   6    4    4
## Mazda RX4 Wag       21.0   6    4    4
## Datsun 710          22.8   4    4    1
## Hornet 4 Drive      21.4   6    3    1
## Hornet Sportabout   18.7   8    3    2
## Valiant             18.1   6    3    1
## Duster 360          14.3   8    3    4
## ...
  • mpg为观测变量,cylgeargear为分组变量,它们分别将样本分为3、3、6组。

  • 当分组数量在三个及以上时,分组变量应为因子类型。

2.2 平衡试验设计

参照单因素方差分析的模型形式,可以很自然地推测双因素方差分析的模型形式。

例2.1:观察并比较如下两组模型的结果

## npk
aov(yield ~ N + P, npk)
##                        N        P Residuals
## Sum of Squares  189.2817   8.4017  678.6817
## Deg. of Freedom        1        1        21
aov(yield ~ P + N, npk)
## Terms:
##                        P        N Residuals
## Sum of Squares    8.4017 189.2817  678.6817
## Deg. of Freedom        1        1        21## mpg
aov(mpg ~ cyl + gear, mpg)
## Terms:
##                      cyl     gear Residuals
## Sum of Squares  824.7846   8.2519  293.0107
## Deg. of Freedom        2        2        27
aov(mpg ~ gear + cyl, mpg)
## Terms:
##                     gear      cyl Residuals
## Sum of Squares  483.2432 349.7933  293.0107
## Deg. of Freedom        2        2        27

上述两组模型各包含两个方差分析,模型形式的区别仅在于分组变量的顺序不同

  • 对于第一组模型(npk)来说,两个方差分析的结果完全相同;

  • 对于第二组模型(mpg)来说,cylgear变量所对应的离差平方和在两个方差分析中是不同的,但二者之和仍然相同(824.7846 + 8.2519 = 483.2432 + 349.7933 = 833.0365),自由度和组内离差平方和(Residuals)也相同。

以上结果意味着多因素方差分析可能与分组变量顺序有关。实际上,这与样本分组是否符合平衡试验设计(balanced design)有关。平衡设计是指,由多个分组变量形成的交叉组所对应的样本数量完全一致。

对于平衡设计来说,多因素方差分析的结果与变量顺序无关;而对于非平衡设计来说,存在三种类型的多因素方差分析:I型、II型和III型,而aov()函数使用的是I型方差分析,它的结果与变量顺序有关。

aov()函数的帮助文档中作者写道:aov()函数是为平衡设计准备的,对于非平衡设计它的结果很难解释。

统计两个示例数据的交叉组样本数量:

with(npk, {tapply(yield, list(N, P), length)})
##   0 1
## 0 6 6
## 1 6 6with(mpg, {tapply(mpg, list(cyl, gear), length)})
##    3  4 5
## 4  1  8 2
## 6  2  4 1
## 8 12 NA 2

可以看出,npk数据的4个交叉组的样本均为6,属于平衡设计;而mpg数据的9个交叉组的样本并不完全一致,并且有一个交叉组没有样本(NA),属于非平衡设计。

2.3 I型方差分析

对于平衡设计来说,三种类型的方差分析的结果一致,因此下文仅针对非平衡设计的方差分析,示例数据为mpg

例2.2aov()函数执行的是I型方差分析,使用它运行如下模型

aov(mpg ~ cyl, mpg)
aov(mpg ~ gear, mpg)
aov(mpg ~ cyl + gear, mpg)
aov(mpg ~ gear + cyl, mpg)

为了方便比较,我们将模型的离差平方和汇总如下:

模型形式 SS(cyl) SS(gear) SS(Residuals)
cyl 824.7846 - 301.2626
gear - 483.2432 642.8040
cyl + gear 824.7846 8.2519 293.0107
gear + cyl 349.7933 483.2432 293.0107

SS表示离差平方和(Sum of Squares)。

通过比较可以得到如下结论:

  • 所有模型的离差平方和之和(即总离差平方和)是相等的;

  • 在双因素方差分析中,分组变量的离差平方和与它的顺序有关,其中第一个分组变量的离差平方和与它对应的单因素方差分析的结果相同;

  • 在双因素方差分析中,cylgear的离差平方和与顺序无关。

总离差平方和():

只与观察变量有关,而与分组变量无关,其计算方法和单因素方差分析完全一致。使用表示样本标识,表示全体样本的均值,有

组间离差平方和(和):

这里组间离差平方和由两部分组成,分别对应两个分组变量的离差平方和,记为、。使用、表示两个分组变量的水平数,、表示分组标识。

假设对应的是第一个分组变量的离差平方和,我们已经知道它和单因素方差分析的结果一样:

其中,表示第组的样本均值。

不易直接计算,但是我们知道它与之和为定值:

因此只要计算出即可反推出。

组内离差平方和():

相当于“剩余”部分,在输出结果中也使用Residuals标识。方差分析与线性回归存在内在联系联系,实际就等于线性回归的残差平方和。

fit.lm <- lm(mpg ~ cyl + gear, mpg)
sum(residuals(fit.lm)^2)
## [1] 293.0107

自由度和F统计量

的自由度为(为样本总量),、的自由度分别为和,的自由度为。

2.4 交互效应

分组变量之间可能存在交互效应。

例2.3:比较不含和含有交互项的双因素方差分析

aov(mpg ~ cyl + gear, mpg)
## Terms:
##                      cyl     gear Residuals
## Sum of Squares  824.7846   8.2519  293.0107
## Deg. of Freedom        2        2        27aov(mpg ~ cyl*gear, mpg)
## Terms:
##                      cyl     gear cyl:gear Residuals
## Sum of Squares  824.7846   8.2519  23.8907  269.1200
## Deg. of Freedom        2        2        3        24

在有交互项的情况下,组间离差平方和由三部分组成:、、,其中表示交互项的离差平方和。

可以看出,交互项的出现不影响、、的值。那的值和自由度应如何确定呢?

我们依然可以先使用线性回归求出再反推:

fit2.lm <- lm(mpg ~ cyl*gear, mpg)
sum(residuals(fit2.lm)^2)
## [1] 269.12

不过也可以直接求出、、的和:

其中,表示交叉组的样本均值。

将交叉组看作是由单个变量分组形成的,也可以使用类似单因素方差分析的方法直接计算:

假设交叉组的个数为,则、、的自由度之和为,因此的自由度为。

显然,交叉组的最大数目为,在此情况下:

前文已经提到,mpg数据中有一个交叉组不存在,因此,而对于平衡设计来说,总是成立的。

例2.4:手动计算和

data <- mpg %>%mutate(mean = mean(mpg)) %>%group_by(cyl, gear) %>%mutate(mean2 = mean(mpg)) %>%ungroup() %>%mutate(SSAB = (mean2 - mean)^2,SSE = (mpg - mean2)^2)sum(data$SSAB) - 824.7846 - 8.2519
## [1] 23.89069
sum(data$SSE)
## [1] 269.12

2.5 多因素方差分析

从前文可以看出,即使只有两个分组变量,I型方差分析的都很难直接计算。那对于多因素方差分析来说该如何计算各个离差平方和呢?下面通过两个例子进行说明。

例2.5:运行形式最简单的三因素方差分析

aov(mpg ~ cyl + gear + carb, mpg)
## Terms:
##                      cyl     gear     carb Residuals
## Sum of Squares  824.7846   8.2519  88.5199  204.4908
## Deg. of Freedom        2        2        5        22

cyl的离差平方和:

fit1 <- lm(mpg ~ cyl, mpg)
sum((fitted(fit1) - mean(mpg$mpg))^2)
## [1] 824.7846

gear的离差平方和:

fit2 <- lm(mpg ~ cyl + gear, mpg)
sum((fitted(fit2) - mean(mpg$mpg))^2) - sum((fitted(fit1) - mean(mpg$mpg))^2)
## [1] 8.251855

carb的离差平方和:

fit3 <- lm(mpg ~ cyl + gear + carb, mpg)
sum((fitted(fit3) - mean(mpg$mpg))^2) - sum((fitted(fit2) - mean(mpg$mpg))^2)
## [1] 88.5199

Residuals的离差平方和:

sum(residuals(fit3)^2)
## [1] 204.4908

因此,I型方差分析可以使用逐步回归的方法计算离差平方和。I型平方和又称为顺序平方和。

例2.6:运行含有交互项的三因素方差分析

aov(mpg ~ cyl*gear + carb, mpg)
## Terms:
##                      cyl     gear     carb cyl:gear Residuals
## Sum of Squares  824.7846   8.2519  88.5199  25.3878  179.1030
## Deg. of Freedom        2        2        5        2        20aov(terms(mpg ~ cyl*gear + carb, keep.order = T), mpg)
## Terms:
##                      cyl     gear cyl:gear     carb Residuals
## Sum of Squares  824.7846   8.2519  23.8907  90.0170  179.1030
## Deg. of Freedom        2        2        3        4        20

默认情况下,交互项会排在所有主效应变量之后;而使用terms()函数可以更改设置。位置不同会导致离差平方和发生变化。

两种情况下cyl:gear的离差平方和:

## 默认情况
fit11 <- lm(mpg ~ cyl + gear + carb, mpg)
fit22 <- lm(mpg ~ cyl*gear + carb, mpg)
sum((fitted(fit22) - mean(mpg$mpg))^2) - sum((fitted(fit11) - mean(mpg$mpg))^2)
## [1] 25.38784## 更改后的情况
fit33 <- lm(mpg ~ cyl + gear, mpg)
fit44 <- lm(mpg ~ cyl*gear, mpg)
sum((fitted(fit44) - mean(mpg$mpg))^2) - sum((fitted(fit33) - mean(mpg$mpg))^2)
## [1] 23.89074

正如aov()函数的帮助文档所言,非平衡设计的I型方差分析的结果很难解释。学堂君注意到<医学方>公众号的一篇推文对其做了非常直观的解释,有兴趣的读者可以阅读:

关于方差分析,您必须知道的四种类型平方和

R语言基础 | 方差分析(2):多因素方差分析(上)相关推荐

  1. R语言统计篇:双因素方差分析

    今天介绍双因素方差分析(Two-way ANOVA). 此方法用于检验两个分类变量(自变量)与一个连续变量(因变量)之间的关系. 比方说,如果一个分类变量有两个组别,另外一个分类变量有三个组别,那么一 ...

  2. R语言基础统计分析:正态性检验、方差齐性检验、T检验、方差分析、秩和检验

    R语言基础统计分析 1. 正态性检验 1.1 Shapiro-Wilk正态检验方法 1.2 QQ图 2. 方差齐性检验 2.1 Bartlett检验,适用于正态分布数据 2.2 Levene检验,非正 ...

  3. 2×3卡方检验prism_【SPSS数据分析】方差分析之多因素方差分析(3)Graphpad Prism绘制简单效应折线图...

    在上一期中我们详细的讲解了多因素方差分析中简单效应的SPSS操作方法,以及数据分析结果的解读.今天我们进一步讲解如何对简单效应的成对比较进行统计图形的绘制. 用到的是统计绘图软件GraphPad Pr ...

  4. R语言基础数据分析—单因素方差分析

    有了试验数据,我们就需要进行数据的处理与分析,而在试验设计中,通常分为单因素试验或者双因素试验.试验中要考察的指标称为试验指标,影响试验指标的条件称为因素,因素所处的状态称为水平,若试验中只有一个因素 ...

  5. %3c- r语言运算符,R语言基础教程之运算符

    原标题:R语言基础教程之运算符 运算符类型 在R编程中有以下类型的运算符 - 算术运算符 关系运算符 逻辑运算符 赋值运算符 其他运算符1.算术运算符 下表显示了R语言支持的算术运算符.运算符对向量的 ...

  6. R语言基础知识详解及概括

    R语言基础知识详解及概括 目录 R语言基础知识详解及概括 R数据可视化示例 R语言进行数据创建

  7. 数据分析必备:掌握这个R语言基础包1%的功能让你事半功倍!(附代码)

    来源:大数据 本文约7100字,建议阅读15分钟. 本文介绍了utils包在R语言基础的用途. [ 导读 ]无论数据分析的目的是什么,将数据导入R中的过程都是不可或缺的.毕竟巧妇难为无米之炊.util ...

  8. 双因素方差分析_多因素方差分析

    总第173篇/张俊红 01.前言 在前面我们讲过简单的单因素方差分析,这一篇我们讲讲双因素方差分析以及多因素方差分析,双因素方差分析是最简单的多因素方差分析. 单因素分析就是只考虑一个因素会对要比较的 ...

  9. R语言基础学习记录4:重要函数

    时间: 2018-07-18(学习) 2018-07-22(学习记录) 教程:慕课网 <R语言基础> 讲师:Angelayuan 补充内容: R语言常用函数总结大全.gl()函数 学习内容 ...

  10. R语言基础数据操作fBasics

    R语言基础数据操作&fBasics xlsx文件的导入 library(readxl) data1 <- read_excel("C:/Users/12241/Desktop/ ...

最新文章

  1. 数组遍历——Vue.js
  2. 【服务器框架】(AsyncSelect模型、Windows平台)
  3. 【cocos2d-js官方文档】二十五、Cocos2d-JS v3.0中的单例对象
  4. 【Java】兔子问题
  5. 两台服务器数据库怎么自动同步数据库,mysql 多台数据库同步server-id 重复导致的问题...
  6. 解决虚拟机克隆后eth0不见的问题
  7. Response.End() 与Response.Close()的区别
  8. html元素 按键精灵鼠标移动,按键精灵后台鼠标移动和点击脚本怎么制作。
  9. Excel文件的读取-xls格式篇
  10. 汇千网-五年后,我们能用脑机接口做什么?
  11. 阿里巴巴、Amazon、Windows、Android、Google、Internet、iPhone、汽车底盘、以及信用卡都属于平台经济--产品平台---供应链平台---产业平台--双边市场平台
  12. 先验概率、后验概率以及共轭先验
  13. 亚信大数据平台产品经理 杨晋:大数据是怎么应用于技术方面的
  14. 大学英语综合教程一 Unit 6 课文内容英译中 中英翻译
  15. 计算机视觉——张正友棋盘格标定法
  16. 为什么服务器系统会异常,windows服务器查看系统异常
  17. js获取随机色,也可以 指定获取 深色 or 浅色。
  18. UWB无线精准定位技术,超宽带测距通信交互,实时厘米级精度应用
  19. tcp通信服务器获取当前时间并发送到客户端
  20. JS遍历数组的几种常用方法

热门文章

  1. 六角星问题---蓝桥杯练习
  2. android如何定时息屏_Android亮屏和熄屏控制实例详解
  3. 【有利可图网】PS实战系列:巧用PS设计海报字体效果
  4. PHP判断几天是某月的上旬、中旬或下旬
  5. 优质碳素结构钢60号钢退火、正火或高温回火
  6. java markdown 转 pdf_将Rmarkdown文件转为pdf文件
  7. 未明学院:Numpy核心要点有哪些?3张思维导图帮你梳理
  8. 2019第十届蓝桥杯-决赛-Java大学-C组
  9. 【渝粤题库】陕西师范大学201401 环境资源法作业
  10. AI、新材料、5G、智慧城市,未来的社会场景在高交会提前上演