为了更好的帮助大家理解,下面简要介绍相关结构,大家也可以自行回顾一下本公众号推送的回归分析与方差分析模型的结构;
(1)对于回归分析:
被解释变量(因变量)=回归系数1 回归系数2·解释变量(自变量) ··· 随机误差。
(2)对于方差分析:
总离差=分组变量离差 随机误差
协方差分析的模型:
由上图可以看出:对于协方差分析:
总离差=分组变量离差 协变量离差 随机误差
在方差分析中,协变量离差包含在了随机误差中,在协方差分析中,单独将其分离出来,可以进一步提高实验精确度和统计检验灵敏度。
协方差分析的作用:
(1)协方差分析可以用来检测因子和因子组合的回归线的斜率和截距是否有差异;完整的统计学模型应当包括所有主效应和交互效应的截距和斜率项,反映某项的随机测量误差。它可以用来证明高阶交互作用很小,不必在模型中包括所有项。
(2) 用来度量两个变量之间 “协同变异”大小的总体参数,即二个变量相互影响大小的参数,协方差的绝对值越大,两个变量相互影响越大。
由于协方差分析模型应用时涉及方差分析和回归分析模型,并且涉及大量的推导公式。我们这里利用R语言做分析,默认读者已经具备统计学基础,具体可以观看第二章:R语言数据分析与挖掘(第二章):统计学基础(视频)。
这里以hotdog 数据集为例,进行协方差分析。
R语言中用于协方差分析的函数是ancova(),该函数存在包HH中,基本书写格式为:
代码语言:javascript复制ancova(formula, data.in = NULL, ...,
x, groups, transpose = FALSE,
display.plot.command = FALSE,
superpose.level.name = "superpose",
ignore.groups = FALSE, ignore.groups.name = "ignore.groups",
blocks, blocks.pch = letters[seq(levels(blocks))],
layout, between, main,
pch=trellis.par.get()$superpose.symbol$pch)
重要参数:
formula:指定协方差分析的公式;
data.in:一个数据框,指定协方差分析的数据对象;
x:指定协方差中的协变量,若在作图是参数formula中没有x则需要将其指定出来;
groups:一个因子,在参数formula的条件项中没有groups时则需要指定出来。
下面利用包HH中的数据集hotdog进行操作演练,该数据集包含53个观测值,每个观测值中含有3个变量,分别为:种类(Type)、卡路里含量(Calories)和钠含量(Sodium),其中变量Type为分类变量,共包含Beef、Meat和Poultry 3个类别。
代码语言:javascript复制> data(hotdog)
> dim(hotdog)
[1] 54 3
> head(hotdog)
Type Calories Sodium
1 Beef 186 495
2 Beef 181 477
3 Beef 176 425
4 Beef 149 322
5 Beef 184 482
6 Beef 190 587
> table(hotdog$Type)
Beef Meat Poultry
20 17 17
> summary(hotdog)
Type Calories Sodium
Beef :20 Min. : 86.0 Min. :144.0
Meat :17 1st Qu.:132.0 1st Qu.:362.5
Poultry:17 Median :145.0 Median :405.0
Mean :145.4 Mean :424.8
3rd Qu.:172.8 3rd Qu.:503.5
Max. :195.0 Max. :645.0
下面利用该数据集进行协方差分析,由于hotdog中肉质的种类可以人为控制,但肉质的卡路里是难以控制的,故考虑将 Sodium作为响应变量,Calories作为协变量进行方差分析。
代码语言:javascript复制> ancova(Sodium ~ Calories,data=hotdog, groups=Type)
Analysis of Variance Table
Response: Sodium
Df Sum Sq Mean Sq F value Pr(>F)
Calories 1 106270 106270 14.515 0.0003693 ***
Residuals 52 380718 7321
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
若考虑变量Type和Calories进行协方差分析,代码如下:
代码语言:javascript复制> ancova(Sodium ~ Calories Type, data=hotdog)
Analysis of Variance Table
Response: Sodium
Df Sum Sq Mean Sq F value Pr(>F)
Calories 1 106270 106270 34.654 3.281e-07 ***
Type 2 227386 113693 37.074 1.336e-10 ***
Residuals 50 153331 3067
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
>