我有一个如下所示的数据框:
Date A B MONTH
2016-01-01 3 10 January
2016-01-02 5 13 January
2016-01-03 8 12 January
.
.
.
2016-12-29 4 13 December
2016-12-30 5 12 December
2016-12-31 6 4 December
使用此数据框,我想运行一个回归模型,其中Month列为虚拟变量。
我尝试了两种方法来运行它,每次我这样做时,它总是排除月份“四月”。
知道为什么会这样吗?
第一种方法:
lm(A~MONTH + B,data = df)
示例输出:
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7.248e+01 3.600e+01 0.902 0.36754
MONTHAugust 7.425e+02 3.630e+01 6.680 9.29e-11 ***
MONTHDecember -1.840e+02 3.277e+01 -5.613 4.02e-08 ***
MONTHFebruary -8.673e+00 2.855e+01 -0.129 0.89770
MONTHJanuary -4.084e+01 2.945e+01 -0.368 0.71291
MONTHJuly 9.407e+02 3.100e+01 4.540 7.73e-06 ***
MONTHJune 3.387e+01 3.077e+01 2.401 0.01687 *
MONTHMarch 2.797e+02 2.884e+01 6.231 1.32e-09 ***
MONTHMay -9.500e+01 3.122e+01 -3.043 0.00252 **
MONTHNovember -1.321e+01 3.555e+01 -1.778 0.07626 .
MONTHOctober 7.145e+01 3.200e+01 0.983 0.32637
MONTHSeptember 9.691e+02 3.916e+01 4.319 2.04e-05 ***
B 5.279e-02 1.161e-03 11.013 < 2e-16 ***
第二种方法:
A&lt; - model.matrix(A~B + MONTH,df)
头(A)
(Intercept) Sum.of.Media.Cost MONTHAugust MONTHDecember MONTHFebruary MONTHJanuary MONTHJuly MONTHJune MONTHMarch MONTHMay
1 1 0 0 0 0
1 0 0 0 0
2 1 0 0 0 0
1 0 0 0 0
3 1 0 0 0 0
1 0 0 0 0
4 1 0 0 0 0
1 0 0 0 0
5 1 0 0 0 0
1 0 0 0 0
6 1 0 0 0 0
1 0 0 0 0
MONTHNovember MONTHOctober MONTHSeptember
1 0 0 0
2 0 0 0
3 0 0 0
4 0 0 0
5 0 0 0
6 0 0 0
答案 0 :(得分:3)
当您处理虚拟变量时,这是正常的。如果你的因子变量有n个级别,那么你只需要n-1个虚拟变量。由于剩下的情况是所有虚拟变量都为零。我认为4月是被排除在外的月份,如果你考虑按字母顺序排列,那么它是第一个。
答案 1 :(得分:2)
尝试A ~ B + MONTH -1
- 如果您的假人完成,他们的线性组合与常数相同。因此降低等级,你不能这样做,所以必须给予。
要么你保持常量(并删除一个月假人)以产生“每月抵消拦截”,或者,这就是我要做的,删除常数以获得“每月拦截” ”