4

我目前正在建立一个回归模型,该模型有助于使用收入、温度等某些因素来解释销售。在检查回归后的残差图时,残差是异方差的。

为了解释异方差,我在 R 中使用了 vcovHC() 和 coeftest(),它们可用于在异方差假设下重新计算标准误差及其 p 值。但是这些函数返回 NA 值,因此所有相应的 p 值也是 NA。这个问题可能是什么原因,我该如何解决?代码如下:

fit_p<-lm(formula = final_list_p, data = new_data_p)
s_p<-summary(fit_p)

输出

线性回归输出的汇总统计量为:

Residuals:                  
Min      1Q  Median      3Q     Max                     
-244190  -60770   -5759   59730  311108         


Coefficients:                   
Estimate                    
(Intercept)                 
        Std. Error  t   value   Pr(>|t|)    
var1    -3.36E+05   1.77E+05    -1.893  0.059026    .
var2    -2.90E+04   4.96E+03    -5.86   8.97E-09    ***
var3    -1.75E+05   8.93E+04    -1.958  0.050834    .
var4    -4.62E+00   2.80E+00    -1.653  0.098975    .
var5    2.39E+01    7.85E+00    3.04    0.002503    **
var6    -6.32E+04   1.08E+05    -0.588  0.556682    
var7    -5.38E+03   3.69E+04    -0.146  0.884204    
var8    6.03E+04    6.53E+04    0.923   0.356275    
var9    3.33E-01    4.75E-02    7.011   8.76E-12    ***
var10   -7.94E+04   2.33E+05    -0.34   0.73381 
var11   1.06E+05    1.08E+05    0.986   0.324424    
var12   -1.06E+04   4.41E+03    -2.39   0.017275    *
var14   5.44E+03    8.80E+02    6.182   1.43E-09    ***
var16   9.12E+04    7.34E+04    1.242   0.21481 
var18   1.78E+04    8.41E+04    0.211   0.832674    
var19   -1.75E+05   1.18E+05    -1.487  0.137787    
var20   4.19E+03    6.95E+02    6.023   3.58E-09    ***
var25   2.96E+00    4.82E-01    6.146   1.76E-09    ***


Residual standard error: 87850 on 447 degrees of freedom                
Multiple R-squared:  0.6144,    Adjusted R-squared:0.5958               
F-statistic: 39.57 on 18 and 447 DF,  p-value: <2.2e-16                 

当我检查残差图时,它们是异方差的。为了解决这个问题,使用稳健标准误差 (vcovHC::sandwich) 重新计算标准误差执行 coeftest::lmtest 后的结果如下:

s_p$coefficients <- unclass(coeftest(fit_p, vcov. = vcovHC))
        Estimate    Std.Error t-value Pr(>|t|)
Intercept-3.36E+05  NA          NA    NA
var1    -2.90E+04   NA          NA    NA
var2    -1.75E+05   NA          NA    NA
var3    -4.62E+00   NA          NA    NA
var4    2.39E+01    NA          NA    NA
var5    -6.32E+04   NA          NA    NA
var6    -5.38E+03   NA          NA    NA
var7    6.03E+04    NA          NA    NA
var8    3.33E-01    NA          NA    NA
var9    -7.94E+04   NA          NA    NA
var10   1.06E+05    NA          NA    NA
var11   -1.06E+04   NA          NA    NA
var12   5.44E+03    NA          NA    NA
var14   9.12E+04    NA          NA    NA
var16   1.78E+04    NA          NA    NA
var18   -1.75E+05   NA          NA    NA
var19   4.19E+03    NA          NA    NA
var20   2.96E+00    NA          NA    NA
var25   3.29E+03    NA          NA    NA
4

2 回答 2

3

您应该指定一种 vcovHC。例如:

coeftest(fit_p,vcov.=vcovHC(fit_p,type="HC1"))

这个特殊的变体给出了与 Eviews 相同的结果。

于 2016-09-21T08:08:32.403 回答
1

尝试一下为什么 coeftest 不能使用健壮的 vcov:如果您的 model.matrix 包含非常大的值以及非常小的值,则该算法可能无法进行数值稳定的计算。因此,看看model.matrix(formula , data=new_data_p)是否是这种情况。如果是这样,请在模型估计之前尝试重新调整 (p)data.frame 中的一些变量(例如,将 oder 除以 100 或 1000 [log()有时也有意义)。注意,系数的解释会因尺度的变化而变化!

于 2015-11-20T13:45:37.517 回答