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 月是排除的月份,因为如果您考虑按字母顺序排列,它是第一个。