QQ 图中使用的 qqline 的正式定义

机器算法验证 r 分布 配件 重尾
2022-03-14 08:01:10

我正在做一些分布拟合工作,我正在研究 QQ 图以及如何在视觉上使用它们来解释拟合优度。

我的数据是重尾的,所以我最初关注的是 Weibull、对数正态、帕累托和对数逻辑分布。

对于 Weibull 分布,我了解 QQ 图上的点是如何构造的(使用观察数据的分位数与估计的 Weibull 分布的分位数)。我不清楚的是如何计算/构造QQ图中使用的线。

qqplot() 函数的R 文档提供了以下描述:

qqnorm 是一个通用函数,其默认方法生成 y 中值的正常 QQ 图。qqline 将一条线添加到“理论”,默认情况下是正常的分位数 - 分位数图,它通过概率分位数,默认情况下是第一和第三四分位数。

Cross Validated 上的另一篇文章似乎表明,这条线本质上是一条由理论(估计)分布的参数构成的线。这是一个真实的陈述和正确的解释吗?

如果可以提供正式定义的链接,我将非常感激。

2个回答

有点“两者” - 该线取决于观察到的分位数(定义 QQ 图的 y 轴)和预期/理论/参考分位数(定义 x 轴)。文档(您引用的)应始终作为规范参考:

'qqline' 将一条线添加到“理论”,默认情况下是正常的分位数 - 分位数图,它通过 'probs' 分位数,默认情况下是第一和第三四分位数。

如果有疑问,USTL(“使用源代码,卢克”),可以在这里找到:这里有一个略微删节和注释的版本

 ## quantiles (.25 and 0.75 by default) of data
 y <- quantile(y, probs, names=FALSE, type=qtype, na.rm = TRUE)
 ## quantiles of reference/theoretical distribution
 x <- distribution(probs)
 ## ...
 slope <- diff(y)/diff(x)  ## observed slope between quantiles
 int <- y[1L]-slope*x[1L]  ## intercept
 abline(int, slope, ...)   ## draw the line

对于它的价值,我相信使用这种方法(连接中心分位数的线)是因为它满足以下探索/诊断方法的标准:

  • 快速(例如无需进行线性回归,只需找到分位数并画一条直线)
  • 健壮(它只取决于分布中心部分的行为,不会被奇怪的尾巴甩掉)

我认为它只是在给定概率 (p1, p2) 的点 (x1, y1) 和 (x2, y2) 之间添加一条线段

(x1, x2) 是理论分布的分位数;(y1, y2) 用于数据比较。函数qline的底层代码很简单。这是一个简单的例子,例如 R

# sample data
set.seed(2)
y <- rt(100, df = 5)

# get the values
probs <- c(0.25, 0.75)
x1 <- qnorm(probs[1])
x2 <- qnorm(probs[2])
y1 <- quantile(y, probs[1])
y2 <- quantile(y, probs[2])

# plot
qqnorm(y)
segments(x1, y1, x2, y2, col = "red", lwd = 2)
qqline(y, lty = 2)
# theoretical match is straight line. If you add more samples, qqline should 
# converge to this
abline(0,1)