R中的lm函数不包括1个虚拟变量
lm function in R is excluding 1 dummy variable
我有一个如下所示的数据框:
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
有了这个数据框,我想 运行 一个以月份列作为虚拟变量的回归模型。
我已经尝试了两种方法来 运行 这个,每次我这样做,它总是排除月份 "April"。
知道为什么会这样吗?
第一种方法:
lm(A ~ MONTH + B, 数据 = 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 <- 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
尝试A ~ B + MONTH -1
-- 如果你的假人是完整的,它们的线性组合与常量相同。因此排名下降,你不能这样做,所以必须做出一些贡献。
要么你保持常量(并删除一个每月的虚拟变量)以产生 "per month offset to intercept",或者,这就是我要做的,删除常量以获得"monthly intercept".
当你处理虚拟变量时,这是正常的。如果你的因子变量有 n 个水平,那么你只需要 n-1 个虚拟变量。因为剩下的情况是所有虚拟变量都为零。我认为 4 月是排除的月份,因为如果您考虑按字母顺序排列,它是第一个。
我有一个如下所示的数据框:
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
有了这个数据框,我想 运行 一个以月份列作为虚拟变量的回归模型。
我已经尝试了两种方法来 运行 这个,每次我这样做,它总是排除月份 "April"。
知道为什么会这样吗?
第一种方法:
lm(A ~ MONTH + B, 数据 = 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 <- 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
尝试A ~ B + MONTH -1
-- 如果你的假人是完整的,它们的线性组合与常量相同。因此排名下降,你不能这样做,所以必须做出一些贡献。
要么你保持常量(并删除一个每月的虚拟变量)以产生 "per month offset to intercept",或者,这就是我要做的,删除常量以获得"monthly intercept".
当你处理虚拟变量时,这是正常的。如果你的因子变量有 n 个水平,那么你只需要 n-1 个虚拟变量。因为剩下的情况是所有虚拟变量都为零。我认为 4 月是排除的月份,因为如果您考虑按字母顺序排列,它是第一个。