该图是否支持同方差性假设?

机器算法验证 回归 残差 异方差
2022-03-16 05:48:37

在此处输入图像描述

我不太明白图表何时显示同方差性。有人可以在我提供的情节的帮助下向我解释吗?

4个回答

我认为图表不一定能“显示”同方差性,但它可以表明与它的偏差。您的图显示了残差与预测的非常明显的趋势。每当您在这些图中看到某种结构时,都会引起关注。理想情况下,您应该看到一团不规则的点云,没有任何上升或下降趋势的迹象。你的明显是向下倾斜的。这样不好。

在此处输入图像描述我必须承认,我从未见过标准化拟合值的图 - 通常,我们标准化残差而不是拟合值。

您应该做的第一件事是在该图中画一条通过零的假想水平线。这条线将锚定情节并真正帮助您了解正在发生的事情。

如果图中的观察值随机散布在水平零线上,当您沿着该线从左向右移动时,散布水平与该线大致相同,这表明线性和同方差假设不违反数据。如果除此之外,大多数标准化残差都在 +/- 3 范围内,那么这可能支持正态假设(尽管,为了检查正态假设,您最好通过直方图直接查看残差分布或密度图以及残差的正态概率图)。

在您的情节中,数据似乎违反了所有 3 个假设。

正如@Aksakal 所指出的,由于点云显示出系统性的下降趋势,因此违反了线性假设。

同方差假设被违反,因为残差的分布与您沿着穿过零的水平线移动(大致)不同。

正态性假设被违反,因为残差不会形成随机且大致均匀分布在 -3 和 3 之间的点云。

该图确实表明该模型存在问题,但问题是它是否显示出与同方差假设的偏差,并且从图中不太清楚。我认为它确实显示出一些偏差:sigma 在预测变量的低值下似乎更小,但很难说。

该图确实显示残差的平均值从右到左下降(尽管,正如 whuber 所指出的,由于左下角的点数量较多,这存在一定程度的视错觉)。因此,残差的分布(特别是分布的均值)在预测值的高值和低值可能不同(可以将 a*x+b 形式的模型拟合到残差并在同样的情节)。我不会将此称为违反线性(非线性回归模型中的残差也应在整个应用程序域中具有相同的平均值),但它似乎违反了所有残差都来自同一分布的假设。

测试残差均值是否有趋势的最简单方法是查看回归模型的 ANOVA 表(这与对残差进行 ANOVA 分析虽然相关,但有点不同)。在 Mathematica 中,属性 "ANOVATable" 可用于使用 LinearModelFit 和 NonlinearModelFit 获得的回归模型。公平地说,使用标准 ANOVA 并不完全合理,因为残差的分布看起来并不正常。有可以使用的非参数方差分析方法(Kruskal-Wallis)。老实说,我认为几乎没有必要进行测试,从图表中我似乎很清楚趋势。我在上面建议的情节将为您提供斜率的值。

回到同方差性,您需要检查标准偏差(简称 sigma),而不是平均值,在预测变量的不同值下是否相同。一种简单的方法是将数据分箱到几个箱中,并在每个箱中计算 sigma。当然,对于如何对数据进行分箱有一定的自由度(所以这种简单的方法依赖于判断)。您可以只对每个 bin 中的残差组进行测试,而不是计算每个 bin 的 sigmas。例如,Bartlett 检验将几个样本作为其输入,并确定样本是否来自具有相同 sigma 的分布(而不是它们是否来自相同的分布)。在您的情况下,看起来与正态性存在严重偏差,因此 Bartlett 检验可能不是最好的,Levene 更稳健。在数学中,函数 VarianceEquivalentTest 接受几个样本(这只是您在不同箱中的残差)并返回几个测试的结果(Bartlett、Levene、Conover 等),以确定样本是否具有相同的 sigma。我认为它将避免报告似乎不适用于数据的测试。

从您的图表中,我倾向于说,在预测变量的低值下,您的 sigma 看起来更小(具有更多数据点的相同分布水平通常意味着更低的 sigma)。但我并不像平均值的趋势那样清楚,例如(同样,即使对于平均值的趋势,也有人认为该图可能由于人口密度的变化而具有欺骗性)。明显违反同方差性的图表是某些部分的分布非常窄,而其他部分的分布非常宽,而您的图并没有很清楚地显示出来。但是也没有清楚地表明相反的情况。

直接在残差上测试同方差性的另一种方法(不分箱数据)是对残差运行 Breusch-Pagan 检验或 White 检验(您将需要残差和预测值,因为这些检验检查 sigma 是否似乎是预测值的函数)。

残差确实显示出明显偏离正态性,甚至看起来很明显它们是双峰的。例如,在预测变量的值较大时,残差明显集中在两个值附近,一高一低。您可以对残差进行正态性检验(似乎几乎没有必要),例如 Anderson-Darling、Smirnov 等,但由于残差似乎来自不同的分布,因此这些检验意义不大。在所有来自同一分布的样本中,正态性检验是有意义的。从这个意义上说,在您确定所有残差都来自同一分布之后,通常应该最后进行正态性检验。有些人只做正态性检验,假设如果残差来自不同的分布,正态性检验很可能会失败。这是有道理的,但这是非常不稳定的统计数据。就像说,如果体温正常,那么病人就是健康的。

通常,您希望看到所有残差都来自同一分布的证据。首先要检查的是平均值和西格玛。在您的情况下,平均值对我来说似乎不是恒定的,但是您应该检查一下,对于 sigma 来说,从您的图表中很难说(所以对您的原始问题的简短回答,这当然不是,是很难从你的图表中看出)。当然,分布不仅仅是它的平均值和 sigma,但如果这两者看起来不错(意思是,如果它们在整个应用程序域中保持不变),那么就有理由庆祝。如果残差都来自相同的分布,那么人们还希望该分布以零为中心,是单峰的,最好是对称的,理想情况下是正态的。但常态就像最后的美好,

最后,请记住,一个好的模型的残差散点图可能看起来有点混乱。这在很大程度上取决于模型域的不同区域的均匀填充程度。如果一个地区的数据量很大,而其他地区的数据量很少,那么就存在与利用不同数据点相关的问题。这就是为什么要查看标准化残差和学生化残差的部分原因。在我看来,一个看起来过于理想的残差图(一个完全水平的、均匀填充的矩形)表明一个捏造的模型,而不是一个好的模型。

注意:我使用大写字母表示整个向量,使用小写字母表示对向量的特定观察。希望这不会令人困惑。

我认为答案应该是否定的。我提供了一个直观的解释,以及一些支持我的断言的快速和肮脏(强调脏)的 R 代码。

的方差Y值随着x,因为即使范围Y在域上似乎有些恒定X点到它们的平均值的平均距离(作为函数x) 实际上在增加。你可以看到这是因为密度Y其范围之间的区域实际上随着增加而减少x,因此与平均值的平均平方偏差(方差)正在增加。换句话说,几乎所有y值与平均值的分离(以x) 对于大的来说“真的很大”x,而在较小的x,它们从零到“非常大”。

无论如何,如果人们发现这种解释真的令人困惑,我不会感到惊讶。如果是这样,只需在 R 中运行以下命令,然后观察结果图。

set.seed(999)
n.lines <- 10
n.points.per.line <- 100
min.intercept <- -3
max.intercept <- 3
x <- vector('numeric')
y <- x
intercept <- seq(from=min.intercept, to=max.intercept, length.out=n.lines)

for (i in 1:n.lines) {
  min <- -1.5
  max <- intercept[i]^2
  x.new <- runif(n=n.points.per.line, min=min, max=max)
  x <- c(x, x.new)
  y <- c(y, -0.1*x.new+intercept[i])
}

ylim <- c(min(y)*1.1, var(y)*3)
xlim <- c(min(x)*1.1, max(x)*1.1)
xlab <- 'x'
ylab <- 'y'
plot(x, y, type='p', ylim=ylim, xlim=xlim, ylab=ylab, xlab=xlab)

buckets <- ceiling(seq(from=min(x), to=max(x)))
var.y <- sapply(buckets, function(i) {
  y <- y[which(x <= i & x >= (i-1))]
  var(y)
})
par(new=T)
plot(x=buckets, y=var.y, col='blue', type='l', ylim=ylim, xlim=xlim, ylab=ylab, xlab=xlab)

在此处输入图像描述

这远非准确,但数据看起来很像你的。我桶了Y分成大约十个不同的间隔(基于整数值X) 并计算它们的方差;蓝线在图中显示了这一点。如您所见,它随着x,因此数据不是同方差的。