处理异方差的最佳方法?


19

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

  1. 使用封装的rlm()功能使用健壮的线性拟合,MASS因为它显然对异方差具有健壮性。

  2. 由于我的系数的标准误差由于异方差性而错了,因此我可以调整标准误差以使其对异方差性很强吗?使用此处发布在堆栈溢出上的方法:具有异方差的回归校正的标准错误

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

Breusch-Pagan检验确认方差不是恒定的。

我的残差在拟合值的函数中看起来像这样:

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

(较大版本)


您是说“ stackoverflow”而不是“ stackexchange”吗?(您仍然在这里进行stackexchange。)如果是SO,通常最好迁移问题而不是发布第二个副本(帮助请求不要多次发布相同的Q,而是选择一个最佳位置)。
Glen_b-恢复莫妮卡2015年

价差的变化并不大,以至于影响将是严重的(也就是说,虽然它将使您的标准误差产生偏差,从而影响推论,但可能不会产生很大的变化)。我倾向于考虑点差是否与均值有关,也许可以看一下GLM或可能的转换(它肯定与拟合有关)。y变量是多少?
Glen_b-恢复莫妮卡2015年

2
另一种可能性是,例如,使用gls包nlme中的方差结构之一来对异方差建模。
罗兰

Answers:


18

这是一个好问题,但我认为这是错误的问题。您的数据清楚地表明,与异方差相比,您有一个更根本的问题,即您的模型具有尚未考虑的非线性。模型可能具有的许多潜在问题(非线性,相互作用,离群值,异方差,非正态性)会相互伪装。我认为没有硬性规定,但总的来说,我建议按顺序处理问题

outliers > nonlinearity > heteroscedasticity > non-normality

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

在这种情况下,我将拟合一个二次模型y ~ poly(x,2)(或poly(x,2,raw=TRUE)y ~ x + I(x^2)然后看它是否使问题消失了。


该图很小,并且轴未标记。我不知道这是否是残差与拟合图。我假设OP包含平方项,例如。如果没有,那你显然是对的。
gung-恢复莫妮卡

1
在我的浏览器中,我可以看到y轴范围从-4到3,这似乎表明残差与拟合图/排除了比例位置图……
Ben Bolker

1
嗨,本,热爱您的工作。您能否扩大“离群值”是最大问题的观念?您是否将单个高杠杆点包含为“离群值”,即使它们的残差很小?我一直在工作中处理极端价值的观察(环境统计数据),并且发现有些人(尤其是EPA)倾向于将异常值吹大(请避免任何无意的双关语),并渴望排除它们。如果找不到很好的证据证明它们显然是数据(收集,输入)错误的结果,那么我倾向于对异常值采取宽容的态度。
道尔顿·汉斯

1
@DaltonHance:我们可能在同一页面上。我的意思是,如果您有异常值(按任何定义),而您使用的任何统计模型/方法(混合模型,稳健的统计数据,粗尾分布等)都未将它们考虑在内,那么它将会使您的所有其他诊断工作更加混乱-会使残差看起来像是非线性/异方差/非正态的。我当然同意,您不应该无所顾忌地/反身地将它们丢弃。
本·博克

8

我在这里列出了多种处理异方差性的方法(带有R示例):异方差数据的单向ANOVA的替代方法。这些建议中的许多都不理想,因为您只有一个连续变量,而不是多级分类变量,但是总的来说,通读它可能会很不错。

对于您的情况,加权最小二乘法(如果您怀疑可能存在一些离群值,则可以结合鲁棒回归)是一个合理的选择。使用Huber-White三明治误差也将是不错的选择。

以下是针对您的特定问题的一些答案:

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

XX


1
使用lmrob软件包中的可靠回归会自动推断出一些权重,为什么不在#1中使用权重呢?
tool.ish

1

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

coeftest(regression_result, df = Inf, var_cov)

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.