用两列对单个二进制变量进行编码几乎没有用处。原因是其中一列(等于 0,1)足以描述二进制内容。第二列只是另一列的线性组合,当第一列等于 1 时,第二列必须等于 0,反之亦然。所以第二列的信息是多余的。拥有这样两个(完全相关的)列甚至可能是有害的。
用一个变量 (0,1) 区分组的情况:
作为“虚拟变量”的二进制编码通常用作“对比度”。你是对的,在这种类型的编码中有某种“顺序”。但是,顺序仅在对比方面很重要(“1”与“非 1”)。考虑一个具有两个“虚拟编码”组的简单线性回归。回想一下,只有截距项(或附加虚拟变量)的线性回归简单地给出了是的.
df = data.frame(y=c(9,10,11,19,20,21),x=c(0,0,0,1,1,1))
summary(lm(y~x,data=df))
很容易看出,对于组x = 0, 的平均值是的= ( 9 , 10 , 11 )将会10和团体x = 1平均值是20. 线性回归是的=β0+β1X将产生:
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 10.0000 0.5774 17.32 6.52e-05 ***
x 10.0000 0.8165 12.25 0.000255 ***
所以组的平均值x = 0是10(截距)和组的平均值x = 1是20(截距 + 系数x * 1[假人])。
第 0 组:是的= 10 + 10 * 0 = 10
第一组:是的= 10 + 10 * 1 = 20
现在,当您反转编码时(更改组的 0,1 指示符):
df = data.frame(y=c(9,10,11,19,20,21),x=c(1,1,1,0,0,0))
summary(lm(y~x,data=df))
结果将是:
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 20.0000 0.5774 34.64 4.14e-06 ***
x -10.0000 0.8165 -12.25 0.000255 ***
第 0 组:是的= 20 - 10 * 0 = 20
第一组:是的= 20 - 10 * 1 = 10
所以只是“逆转”。现在,平均值为 20 的组是参考,另一组的平均值针对该参考定义为是的= 20 - 10 * 1.
因此,“顺序”(编码 0,1 的方式)在这里有所不同,在一种情况下可以描述为“比另一组多 10”,在另一种情况下可以描述为“比另一组少 10”。
然而,在预测模型中,这种“顺序”没有或几乎没有作用。仅当您想直接解释估计的系数时才重要。
具有两个变量 (0,1) 的案例- 每组一个:
df = data.frame(y=c(9,10,11,19,20,21),g0=c(1,1,1,0,0,0), g1=c(0,0,0,1,1,1))
summary(lm(y~g0+g1,data=df))
结果将是:
Coefficients: (1 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 20.0000 0.5774 34.64 4.14e-06 ***
g0 -10.0000 0.8165 -12.25 0.000255 ***
g1 NA NA NA NA
因此,由于完美共线性, “指标”之一被删除G1,G2. 所含信息G2是多余的,不能被线性回归消化。所以在这里它是“有害的”G1和G2同时在模型中。
它可能有用G1和g2(同时)在随机森林等模型中,因为这些模型的计算方式(完美共线性不一定是问题)。然而,这些信息通常不会带来“新的见解”(因为g2已经存在于g1反之亦然)。然而,它可能会导致“混乱”。