如何在 r 中创建和解释 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 图只是一种直观检查数据集是否遵循理论分布的方法。要正式测试数据集是否遵循特定分布,可以执行以下测试(假设您将数据集与正态分布进行比较):