在这个问题中,Elias Strehle 指出,如果我们在没有截距的线性模型上保持一次热编码期间的所有级别,冗余特征将起到截距的作用。为什么会这样?
这不是在线性模型中,截距项(,而不是)将始终具有值 1 吗?假设要编码的特征是性别,那么冗余项的某些行将是 0,而其他行将是 1。
在这个问题中,Elias Strehle 指出,如果我们在没有截距的线性模型上保持一次热编码期间的所有级别,冗余特征将起到截距的作用。为什么会这样?
这不是在线性模型中,截距项(,而不是)将始终具有值 1 吗?假设要编码的特征是性别,那么冗余项的某些行将是 0,而其他行将是 1。
让我们看看假人是如何工作的:
示例:
# Some data
df = data.frame(y=c(30,32,28,10,11,9),gender=c(1,1,1,0,0,0), gender2=c(0,0,0,1,1,1))
# 1) Regression with constant and dummy
summary(lm(y~gender,data=df))
# 2) Regression without constant and dummy
summary(lm(y~gender-1,data=df))
# 3) Regression without constant and two dummies
summary(lm(y~gender+gender2-1,data=df))
结果:
案例 1:
由于假人通常作为某些基本类别的“对比”(1 与 0 /“开”与“关”),并且由于基本类别的平均值为 10,截距项等于 10,对于gender = 1
,确定了与基本类别的差异(此处为 20),因为类别的平均值gender = 1
为 30。(请记住,只有截距或虚拟变量的回归只是给出算术平均值)。
Estimate Std. Error t value Pr(>|t|)
(Intercept) 10.0000 0.9129 10.95 0.000394 ***
gender 20.0000 1.2910 15.49 0.000101 ***
情况 2:
只考虑没有常数gender = 1
,因为gender = 0
我们有,所以它被删除了。现在的系数是 的平均值。gender = 0
gender = 1
Coefficients:
Estimate Std. Error t value Pr(>|t|)
gender 30.000 4.546 6.599 0.0012 **
案例 3:在不添加截距的情况下
为两组都包括一个虚拟变量(gender = 0
从上面表示为),现在直接给出每个组的平均值。gender2
请注意,与案例 1 相比,此处对系数的解释不同。
Coefficients:
Estimate Std. Error t value Pr(>|t|)
gender 30.0000 0.9129 32.86 5.11e-06 ***
gender2 10.0000 0.9129 10.95 0.000394 ***
有趣的是当您添加一些额外的时:
一些新数据,现在包括:
df = data.frame(y=c(30,32,28,10,11,9),gender=c(1,1,1,0,0,0), gender2=c(0,0,0,1,1,1), x=c(20,22,25,28,30,29))
两个假人的回归,没有截距:
summary(lm(y~gender2+gender-1+x,data=df))
Coefficients:
Estimate Std. Error t value Pr(>|t|)
gender2 19.8864 12.6285 1.575 0.2134
gender 37.6136 9.7446 3.860 0.0307 *
x -0.3409 0.4342 -0.785 0.4897
是相同的...
一个假人和截距的回归(除了上面讨论的假人解释):
summary(lm(y~gender+x,data=df))
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 19.8864 12.6285 1.575 0.2134
gender 17.7273 3.1973 5.544 0.0116 *
x -0.3409 0.4342 -0.785 0.4897
...所以的边际效应是相同的。这与...形成鲜明对比
带有一个假人的回归,没有截距:
summary(lm(y~gender+x-1,data=df))
Coefficients:
Estimate Std. Error t value Pr(>|t|)
gender 22.38736 1.41677 15.802 9.37e-05 ***
x 0.34086 0.03864 8.822 0.000911 ***
的边际效应完全不同。
为什么是这样?
当您拟合一些新数据时,您会看到拟合线通过(0,0)“模型中没有截距”。
newdata = data.frame(gender=c(0,0,0,0,0,0), x=c(-1,0,1,2,3,4))
predict(lm(y~gender+x-1,data=df), newdata=newdata)
1 2 3 4 5 6
-0.3408643 0.0000000 0.3408643 0.6817286 1.0225929 1.3634572
发生这种情况是因为在某些情况下您有(这是 0 为)。或者作为-matrix(第一行是截距,用于说明 = 0):
但是,当您包含两个假人时,您有:
所以没有你强迫的情况为零。
有关没有常数项的回归的进一步讨论,请参见这篇文章。