处理异方差的最佳方法?

机器算法验证 r 广义线性模型 异方差 流明
2022-01-22 09:16:31

我有一个线性模型的残差值与拟合值的函数图,其中异方差性非常明显。但是我不确定我现在应该如何进行,因为据我了解,这种异方差性使我的线性模型无效。(是对的吗?)

  1. rlm()使用包的函数使用稳健的线性拟合,MASS因为它显然对异方差具有稳健性。

  2. 由于我的系数的标准误差由于异方差而错误,我可以调整标准误差以对异方差具有鲁棒性吗?使用此处发布在 Stack Overflow 上的方法:Regression with Heteroskedasticity Corrected Standard Errors

哪种方法是解决我的问题的最佳方法?如果我使用解决方案 2,我的模型的预测能力完全没用吗?

Breusch-Pagan 检验证实方差不是恒定的。

我的拟合值函数残差如下所示:

https://i.gyazo.com/9407a829a168492b31dfa3d1dd33a21d.png

(更大的版本)

4个回答

这是一个很好的问题,但我认为这是一个错误的问题。你的图清楚地表明你有一个比异方差更基本的问题,即你的模型有一个你没有考虑到的非线性。模型可能存在的许多潜在问题(非线性、交互作用、异常值、异方差、非正态性)可以相互伪装。我认为没有硬性规定,但总的来说,我建议按顺序处理问题

outliers > nonlinearity > heteroscedasticity > non-normality

(例如,在检查是否存在扭曲拟合的奇怪观察之前不要担心非线性;在担心异方差之前不要担心正态性)。

在这种特殊情况下,我会拟合一个二次模型y ~ poly(x,2)(或者poly(x,2,raw=TRUE)或者y ~ x + I(x^2)看看它是否会让问题消失。

我在这里列出了一些处理异方差性的方法(带有R示例):Alternatives to one-way ANOVA for heteroskedastic data其中许多建议不太理想,因为您只有一个连续变量,而不是多级分类变量,但无论如何作为概述通读可能会很好。

对于您的情况,加权最小二乘法(如果您怀疑可能存在一些异常值,可能与稳健回归相结合)将是一个合理的选择。使用 Huber-White 三明治错误也很好。

以下是对您的具体问题的一些答案:

  1. 稳健回归是一个可行的选择,但在我看来,如果与权重配对会更好。如果您不担心异方差性是由异常值引起的,您可以使用带权重的常规线性回归。请注意,方差可能对异常值非常敏感,并且您的结果可能对不适当的权重很敏感,因此比对最终模型使用稳健回归更重要的是使用稳健的离散度量来估计权重。例如,在链接的线程中,我使用 1/IQR。
  2. 由于异方差性,标准误是错误的。您可以使用 Huber-White 三明治估计器调整标准误差。这就是@GavinSimpson 在链接的 SO 线程中所做的事情。

异方差性不会使您的线性模型完全无效。它主要影响标准误差。如果您没有异常值,则最小二乘法应保持无偏。因此,预测的预测准确性应该不受影响。如果您没有将方差建模X并使用它来调整预测区间的宽度,条件是X.

加载sandwich package并计算回归的 var-cov 矩阵var_cov<-vcovHC(regression_result, type = "HC4")(阅读手册sandwich)。现在lmtest package使用该coeftest功能:

coeftest(regression_result, df = Inf, var_cov)

您的数据分布情况如何?它看起来像钟形曲线吗?从标的物来看,能不能完全正态分布?例如,电话通话的持续时间可能不是负数。因此,在调用的特定情况下,伽马分布很好地描述了它。使用 gamma,您可以使用广义线性模型(R 中的 glm)