R语言数据分析与挖掘(第五章):方差分析(3)——协方差分析

2019-12-17 16:55:58 浏览数 (1)

协方差分析的基本原理是将线性回归与方差分析结合起来,调整各组平均数和 F 检验的实验误差项,检验两个或多个调整平均数有无显著差异,以便控制在实验中影响实验效应(因变量)且无法人为控制的协变量(与因变量有密切回归关系的变量)在方差分析中的影响。(协变量的含义举例:当研究学习时间对学习绩效的影响,学生原来的学习基础、智力学习兴趣就是协变量)

为了更好的帮助大家理解,下面简要介绍相关结构,大家也可以自行回顾一下本公众号推送的回归分析与方差分析模型的结构;

(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
>

0 人点赞