我如何解释这个拟合与残差图?

机器算法验证 r 回归 残差 异方差 独立
2022-01-20 15:30:55

在此处输入图像描述

我真的不明白异方差性。根据这个情节,我想知道我的模型是否合适。

2个回答

正如@IrishStat 评论的那样,您需要根据错误检查观察到的值,以查看是否存在可变性问题。我会在最后回到这个。

只是这样您就可以了解我们所说的异方差性的含义:当您在变量上拟合线性模型时,您实际上是在说您假设您的或外行的术语,即您的预计等于加上一些具有方差的误差。这实际上是您的线性模型,其中错误好的,到目前为止很酷,让我们在代码中看到:yyN(Xβ,σ2)yXβσ2y=Xβ+ϵϵN(0,σ2)

set.seed(1);            #set the seed for reproducability
N = 100;                #Sample size
x = runif(N)            #Independant variable
beta = 4;               #Regression coefficient
epsilon = rnorm(N);     #Error with variance 1 and mean 0
y = x * beta + epsilon  #Your generative model
lin_mod <- lm(y ~x)  #Your linear model

没错,我的模型表现如何:

x11(); par(mfrow=c(1,3));   #Make a new 1-by-3 plot
plot(residuals(lin_mod)); 
title("Simple Residual Plot - OK model")
acf(residuals(lin_mod), main = ""); 
title("Residual Autocorrelation Plot - OK model");
plot(fitted(lin_mod), residuals(lin_mod)); 
title("Residual vs Fit. value - OK model");

这应该给你这样的东西: 在此处输入图像描述 这意味着你的残差似乎没有基于你的任意指数的明显趋势(第一个图 - 信息量最少),它们之间似乎没有真正的相关性(第二个图 - 非常重要和可能比同方差更重要)并且拟合值没有明显的失败趋势,即。您的拟合值与残差看起来非常随机。基于此,我们可以说我们没有异方差性问题,因为我们的残差似乎到处都有相同的方差。

好的,你想要异方差。给定线性和可加性的相同假设,让我们定义另一个具有“明显”异方差问题的生成模型。即在某些值之后,我们的观察将更加嘈杂。

epsilon_HS = epsilon;               
epsilon_HS[ x>.55  ] = epsilon_HS[x>.55 ] * 9       #Heteroskedastic errors

y2 = x * beta + epsilon_HS      #Your generative model
lin_mod2 <- lm(y2 ~x)            #Your unfortunate LM

其中模型的简单诊断图:

 par(mfrow=c(1,3));   #Make a new 1-by-3 plot
 plot(residuals(lin_mod2)); 
 title("Simple Residual Plot - Fishy model")
 acf(residuals(lin_mod2), main = ""); 
 title("Residual Autocorrelation Plot - Fishy model");
 plot(fitted(lin_mod2), residuals(lin_mod2)); 
 title("Residual vs Fit. value - Fishy model");

应该给出类似的内容: 在此处输入图像描述 这里的第一个情节似乎有点“奇怪”;看起来我们有一些以小幅度聚集的残差,但这并不总是一个问题......第二个图是好的,这意味着我们在不同滞后的残差之间没有相关性,所以我们可能会呼吸片刻。第三个情节漏了豆子:很明显,当我们获得更高的值时,我们的残差会爆炸。我们在这个模型的残差中肯定存在异方差性,我们需要做一些事情(例如IRLSTheil-Sen 回归等)

这里的问题非常明显,但在其他情况下我们可能会错过;为了减少我们错过它的机会,另一个有见地的情节是 IrishStat 提到的:残差与观察值,或者在我们手头的玩具问题中:

 par(mfrow=c(1,2))
 plot(y, residuals(lin_mod) ); 
 title( "Residual vs Obs. value - OK model")
 plot(y2, residuals(lin_mod2) ); 
 title( "Residual vs Obs. value - Fishy model")

这应该给出类似的东西:

在此处输入图像描述 在这里,第一个图似乎“相对不错”,模型的残差只有一个有点模糊的上升趋势(正如 Scortchi 提到的,请参阅此处了解我们为什么不担心)。第二个情节虽然充分展示了这个问题。很明显,我们的错误很大程度上取决于我们观察到的值。这体现在我们手头模型的决定系数的问题上;例如。“OK”模型的调整后,而“可疑”因此,我们有理由相信模型错误指定可能是一个问题。(感谢 Scortchi 在我的原始答案中指出了误导性陈述。)R2R20.59890.03919

公平地说,您的残差与拟合值图似乎相对还可以。检查残差与观察值可能有助于确保您处于安全状态。(我没有提到QQ 图或类似的东西,以免让事情更加复杂,但您可能也想简要检查一下。)我希望这有助于您理解异方差性以及您应该注意什么。

你的问题似乎是关于异方差性(因为你提到它的名字并添加了标签),但你的明确问题(例如,在标题中和)结束你的帖子更笼统,“我的模型是否合适或不符合这个阴谋”。除了评估异方差性之外,确定模型是否不合适还有更多工作要做。

我使用这个网站(ht @Alexis)抓取了你的数据。请注意,数据按 的升序排序fitted基于回归和左上图,它似乎足够忠实:

mod = lm(residuals~fitted)
summary(mod)
# ...
# Residuals:
#   Min       1Q   Median       3Q      Max 
# -0.78374 -0.13559  0.00928  0.19525  0.48107 
# 
# Coefficients:
#   Estimate Std. Error t value Pr(>|t|)
# (Intercept)  0.06406    0.35123   0.182    0.856
# fitted      -0.01178    0.05675  -0.208    0.836
# 
# Residual standard error: 0.2349 on 53 degrees of freedom
# Multiple R-squared:  0.0008118,  Adjusted R-squared:  -0.01804 
# F-statistic: 0.04306 on 1 and 53 DF,  p-value: 0.8364

在此处输入图像描述

我在这里看不到任何异方差性的证据。从右上角(qq-plot)来看,正态性假设似乎也没有任何问题。

另一方面,红色 lowess 拟合中的“S”曲线(左上图)和 acf 和 pacf 图(底部)似乎有问题。在最左边,大部分残差都在灰色的 0 线以上。当您向右移动时,大部分残差会下降到 0 以下,然后是上面,然后又是下面。这样做的结果是,如果我告诉你我正在查看一个特定的残差并且它有一个负值(但我没有告诉你我正在查看哪个残差),你可以准确地猜测附近的残差也被负面评价。换句话说,残差不是独立的——知道一个人的一些事情会给你关于其他人的信息。

除了地块,这可以被测试。一个简单的方法是使用运行测试

library(randtests)
runs.test(residuals)
#  Runs Test
# 
# data:  residuals
# statistic = -3.2972, runs = 16, n1 = 27, n2 = 27, n = 54, p-value = 0.0009764
# alternative hypothesis: nonrandomness

这意味着您的模型指定错误。因为关系中有两个“弯曲”,所以您需要添加X2X3您的模型的条款来解释这一点。

要回答您的明确问题:您的绘图显示残差的序列自相关/非独立性。这意味着您的模型不适合其当前形式。