R语言 | 多元回归分析中的对照编码(contrast coding) | 第一节 dummy variable(哑变量) 和 dummy coding

来源:互联网 发布:开普勒第一定律知乎 编辑:程序博客网 时间:2024/06/08 08:19

对于一个自变量是分类变量Categorical Factor的回归模型,需要为该Factor的每个Level创建dummy variable。Contrast Matrix把每个Level映射为dummy variable的值。


我们看一个例子来感性认识下dummy variable和contrast matrix。

我们使用R的dataset包里的ChickWeight数据集。Diet的Level是1,2,3,4。
建立Weight关于Diet的线性模型,从模型的summary的返回结果来看:
  • Intercept是截距
  • Diet2是第一个dummy variable。当Diet等于2,那么Diet2赋值为1,否则为0。以此类推Diet3,Diet4是对应于Level是3或4的dummy variable。
    • 对于Diet这一Categorical Variable(Factor),线性模型只能接受数值型变量,所以R会创建Diet2、Diet3、Diet4这几个dummy variable,并赋值数值,这样线性模型就能够计算系数。

那么,Diet2,Diet3,Diet4的赋值以及其通过建模后得到的系数是怎么来的呢?R语言通过Contrast Matrix来实现。

函数contrasts用来查看某个Factor的Contrast Matrix。一般情况下,对于有K个level的Factor,R会创建K-1个dummy variable,另外一个可以通过K-1个dummy variable推导出来。如下所示,Diet有4个Level(1,2,3,4),所以创建了Diet2,Diet3,Diet4三个变量。R根据这个对照矩阵进行dummy variable的赋值。当Diet=1时,(Diet2,Diet3,Diet4)=(0,0,0);Diet=2,则(Diet2,Diet3,Diet4)=(1,0,0);Diet=3,则(Diet2,Diet3,Diet4)=(0,1,0);当Diet=4,则(Diet2,Diet3,Diet4)=(0,0,1)

赋值方法如下data frame所示
DietDiet2Diet3Diet41000210030104001
那么这种对dummy variable赋值的编码方式(即对照矩阵)究竟是什么意思?

继续以上述线性模型为例。该模型为 y = aDiet2 + bDiet3+cDiet4+d,其中a,b,c是Diet2,Diet3,Diet4的系数,d是截距。

当Diet=1时,y=d
当Diet=2时,y=aDiet2 + d = a + d
当Diet=3时,y=bDiet3 + d = b + d
当Diet=4时,y=cDiet4+d = c + d

也就是说d就是Diet1,而a、b、c则是Diet2、Diet3、Diet4分别相对于Diet1的偏移。

上述这种对照矩阵称为treatment,在R语言中,treatment是针对无序的名字型分类变量(nominal factor)的默认contrast。
Treatment又称为Dummy Coding,首先会选择一个Level作为参考组(通常是第一个Level作为reference group),然后用剩余的Level的应变量的均值分别与参考组的应变量的均值来进行比较。

那么这些系数的含义是什么?

针对于分类变量(Factor),反应变量(Response Variable,即应变量y)反映了在每个Level下的均值(mean)。

继续上例,我们计算在每个Level下weight的均值:

然后我们再看回归模型:weight =102.645 + 19.971Diet2 + 40.305 Diet3 + 32.617Diet4

当Diet = 1时,截距就是weight均值
当Diet = 2时,mean(weight|Diet=2) = 102.645 + 19.971 = 122.6167
...以此类推
也就是说系数a, b, c就是weight在各个水平下相对于截距的偏移,而这里截距就是参考组Diet1的weight的均值。

这个系数又称为效用(Utility),表面给定某Level,会对反应变量的提升(或减少)的幅度。比如,不考虑其他因素,当Diet=2,会对Weight有19.971的提升。









0 0
原创粉丝点击