vcovHC :: sandwich()和coeftest :: lmtest()返回NA值

时间:2015-10-26 17:26:36

标签: r linear-regression lm p-value standard-error

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

考虑到异方差性,我在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

2 个答案:

答案 0 :(得分:1)

有一个尝试为什么coeftest不能使用强大的vcov:如果你的model.matrix禁止非常大的值以及非常小的值,那么算法可能无法在数值上稳定地进行计算。因此,如果是这种情况,请查看model.matrix(formula , data=new_data_p)。如果是这样,请尝试在模型估计之前重新调整(p)data.frame中的一些变量(例如,乘以oder除以100或1000 [有时log()也有意义)。注意,由于尺度的变化,系数的解释会发生变化!

答案 1 :(得分:0)

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

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

此特定变体提供与Eviews相同的结果。