R语言 | 多元回归分析中的对照编码(contrast coding) | 第二节 deviation coding(偏差编码)

Deviation coding(或称为Effect Coding)是一种contrast编码方式。因为采用该contrast的回归方程的回归系数之和等于0,又称作sum contrast。


Deviation Coding的定义是每个Level的反应变量的均值(Mean_per_Level)每个Level的反应变量的均值的均值(Grand_Mean)进行对比。


参考dummy coding文中的例子。

如下是每个Level在反应变量weight上的均值(Mean_per_Level)

> tapply(ChickWeight$weight, ChickWeight$Diet, mean)
       1        2        3        4 
102.6455 122.6167 142.9500 135.2627 

Grand_Mean=(102.6455+122.6167+142.9500+135.2627) / 4=125.8687


对于Deviation Coding,R会创建从第1个Level到第K-1个Level的dummy variable,并将之与Grand_Mean进行对照(求差)而得到该Level上的dummy variable的系数。这个系数的含义是:该Level上的反应变量的均值 与 总体的均值的偏差大小。(注:dummy coding,即treatment,的含义是该Level上的反应变量的均值与第一个Level的均值的偏差大小)

另外,第K个Level的dummy variable是不需要的,因为可以通过其他的dummy variable推导。


我们先来看个例子(还是用dummy coding文中的例子)

> options(contrasts=c("contr.sum", "contr.poly")) #options用以修改默认的treatment contrasts为sum contrasts;注:poly是ordinal factor的默认的contrasts,这里无需修改
> contrasts(ChickWeight$Diet)
  [,1] [,2] [,3]
1    1    0    0
2    0    1    0
3    0    0    1
4   -1   -1   -1
> summary(lm(weight~Diet, data=ChickWeight))

Call:
lm(formula = weight ~ Diet, data = ChickWeight)

Residuals:
    Min      1Q  Median      3Q     Max 
-103.95  -53.65  -13.64   40.38  230.05 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  125.869      2.986  42.150  < 2e-16 ***
Diet1        -23.223      4.454  -5.214 2.59e-07 ***
Diet2         -3.252      5.380  -0.604  0.54576    
Diet3         17.081      5.380   3.175  0.00158 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 69.33 on 574 degrees of freedom
Multiple R-squared:  0.05348,	Adjusted R-squared:  0.04853 
F-statistic: 10.81 on 3 and 574 DF,  p-value: 6.433e-07

这个contrasts matrix用来创建dummy variable并作为赋值的依据。Level4全部赋值为-1,表示不参与对比。


来看模型:

截距就是Grand_Mean

根君Deviation coding的定义,Diet1的系数 -23.223 = Mean_of_Weight_Given_Diet1 - Grand_Mean = 102.6455 - 125.869 = -23.223

也就是说我们想知道在Diet1下的Weight的均值只要把截距+Diet1的系数即可:125.869 +(-23.223) = 102.646

以此类推,可以轻易获知Diet2、Diet3下的weight的均值。

那么,Diet4的系数怎么计算内?推导如下(共4步):

  1. Intercept(grand mean) = (Level1 mean+Level2 mean+Level3 mean+Level4 mean)/4 = [((Intercept(grand mean) + Diet1) + (Intercept(grand mean) + Diet2) +( Intercept(grand mean) + Diet3) +Level4 mean)] / 4
  2. Level4 mean = Intercept(grand mean) - (Diet1+Diet2+Diet3)
  3. Level4 mean = Intercept(grand mean) + Diet4
  4. Diet4 = Intercept(grand mean) - (Diet1+Diet2+Diet3) - Intercept(grand mean) = -(Diet1+Diet2+Diet3)

通过推导,Diet4的系数其实就是Diet1,Diet2,Diet3的系数求和的负数,这就是本文开篇称之为Sum Contrast的原因。这样可以轻易算出在Diet4下的weight的均值。


Sum Contrast可以通过每个dummy variable的系数查看在每个Level上的效用的大小(这里的效用是比较与总体的均值的偏差,主要用于比较各个Level的影响程度;而treatment方法下的系数的效用是指当给定该Level后,其他因素不考虑,该Level对反应变量提升(或降低)的偏差)


参考文献

http://www.ats.ucla.edu/stat/r/library/contrast_coding.htm

http://www.jds-online.com/files/JDS-563.pdf

你可能感兴趣的:(大数据,数据挖掘,R语言)