我目前正在建立一个回归模型,它有助于使用收入,温度等某些因素来解释销售。在回归后检查残差图,残差是异方差的。
考虑到异方差性,我在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
答案 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相同的结果。