如何在 r 中创建和解释 qq 图


QQ 图是“分位数-分位数”的缩写,是一种图,我们可以用它来确定数据集是否可能来自理论分布。

许多统计测试都假设数据集服从正态分布,并且 QQ 图通常用于评估是否满足此假设。

尽管 QQ 图不是正式的统计测试,但它提供了一种简单的方法来直观地检查数据集是否遵循正态分布,如果不遵循正态分布,则如何违反此假设以及哪些数据点可能是此违规的根源。

我们可以通过绘制两组分位数来创建 QQ 图。如果两组分位数来自相同的分布,则图上的点应大致形成一条直线对角线。

QQ 情节示例

分位数表示数据集中的点,数据的某一部分位于该点之下。例如,分位数 0.9 表示 90% 的数据低于该点。 0.5 分位数表示 50% 的数据低于该点,依此类推。

QQ 图可识别数据样本的分位数,并将其与理论分布的分位数进行比较。大多数情况下使用正态分布,但实际上可以为任何理论分布创建 QQ 图。

如果数据点位于 QQ 图中的直线对角线上,则数据集可能服从正态分布。

如何在 R 中创建 QQ 图

我们可以使用内置的qqnorm()函数轻松创建 QQ 图来检查数据集是否服从正态分布。

例如,以下代码生成一个由 100 个随机值组成的服从正态分布的向量,并为该数据集创建 QQ 图以验证它确实服从正态分布:

 #make this example reproducible
set.seed(11)

#generate vector of 100 values that follows a normal distribution
data <- rnorm(100)

#create QQ plot to compare this dataset to a theoretical normal distribution
qqnorm(data)

为了更容易地查看数据是否遵循直线,我们可以使用qqline()函数:

 #create QQ plot
qqnorm(data)

#add straight diagonal line to plot
qqline(data)

我们可以看到尾部附近的数据点并不完全遵循直线,但在大多数情况下,这些样本数据似乎呈正态分布(因为我们要求 R 从正态分布生成数据,所以它们应该是正态分布的) )。 )。

相反,请考虑以下代码,该代码生成一个由 100 个随机值组成的向量,该向量遵循伽玛分布,并为此数据创建 QQ 图以检查它是否遵循正态分布:

 #make this example reproducible
set.seed(11)

#generate vector of 100 values that follows a gamma distribution
data <- rgamma(100, 1)

#create QQ plot to compare this dataset to a theoretical normal distribution
qqnorm(data)
qqline(data)

我们可以在这个 QQ 图中看到与直线的明显偏差,表明该数据集可能不服从正态分布。

考虑另一段代码,它生成一个由 100 个随机值组成的向量,该向量遵循 5 个自由度的卡方分布,并为此数据创建 QQ 图以检查它是否遵循正态分布:

 #make this example reproducible
set.seed(11)

#generate vector of 100 values that follows a Chi-Square distribution
data <- rchisq(100, 5)

#create QQ plot to compare this dataset to a theoretical normal distribution
qqnorm(data)
qqline(data)

我们再次看到这个数据集似乎不遵循正态分布,尤其是在尾部附近。

改变 R 中 QQ 图的美观

我们可以更改 R 中 QQ 图的一些美观效果,包括标题、轴标签、数据点颜色、线条颜色和线条宽度。

以下代码更改绘图点的标题、轴标签和颜色:

 #make this example reproducible
set.seed(11)

#generate vector of 100 values that follows a normal distribution
data <- rnorm(100)

#create QQ plot
qqnorm(data, main = 'QQ Plot for Normality', xlab = 'Theoretical Dist',
       ylab = 'Sample dist', col = 'steelblue')

然后,以下代码向绘图添加一条红色的直线对角线,线宽为 2(lwd = 2,默认为 1),以及一条虚线(lty = 2,默认为 1):

 qqline(data, col = 'red', lwd = 2, lty = 2)

技术说明

请记住,QQ 图只是一种直观检查数据集是否遵循理论分布的方法。要正式测试数据集是否遵循特定分布,可以执行以下测试(假设您将数据集与正态分布进行比较):

安德森-达林测试
夏皮罗-威尔克检验
柯尔莫哥洛夫-斯米尔诺夫检验

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注