R中的lm函数排除1个虚拟变量

时间:2017-11-10 17:31:26

标签: r regression lm 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

使用此数据框,我想运行一个回归模型,其中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

2 个答案:

答案 0 :(得分:3)

当您处理虚拟变量时,这是正常的。如果你的因子变量有n个级别,那么你只需要n-1个虚拟变量。由于剩下的情况是所有虚拟变量都为零。我认为4月是被排除在外的月份,如果你考虑按字母顺序排列,那么它是第一个。

答案 1 :(得分:2)

尝试A ~ B + MONTH -1 - 如果您的假人完成,他们的线性组合与常数相同。因此降低等级,你不能这样做,所以必须给予。

要么你保持常量(并删除一个月假人)以产生“每月抵消拦截”,或者,这就是我要做的,删除常数以获得“每月拦截” ”