← 返回《数据科学的统计基础》
📑 查看全课大纲(第 25 / 41 节)

正态概率纸检验

约 20 分钟

📺 正在播放小象官方高清录播(支持倍速与清晰度调节)

正态概率纸检验法

小象实战讲义 · 数据科学的统计基础

在之前的学习中,无论是参数估计还是假设检验,我们通常都默认总体的分布形式是已知的(例如正态分布)。然而,在实际数据分析中,我们往往需要先确认数据是否真的来自某个假定的分布。本节将介绍一种直观的图形化检验方法——正态概率纸检验法,它通过将数据点绘制在特制的坐标纸上,帮助我们判断数据是否服从正态分布。学完本节,你将掌握这种经典检验方法的核心思想,并能理解其与现代QQ图检验的内在联系。

💡 核心导读

  • 问题引入:为什么需要检验分布?回顾参数估计与假设检验的前提假设,引出“分布的检验”这一非参数统计问题。
  • 核心思想:如何“拉直”正态分布的累积分布函数曲线?通过坐标变换,将非线性的CDF曲线变为直线,从而构造出“正态概率纸”。
  • 实践应用:如何利用样本数据在正态概率纸上绘图?使用次序统计量及其期望值来近似未知的累积分布函数值。
  • 现代演变:从手工绘制的概率纸到计算机生成的QQ图。介绍QQ图检验的原理,并展示其与正态概率纸检验在思想上的传承与操作上的便捷性。

分布的检验:从参数到非参数

在前四章中,无论是参数估计还是假设检验,我们都基于一个重要的前提:总体的分布形式是已知的。例如,我们常说测量误差服从正态分布,并在此基础上进行区间估计或假设检验。

然而,我们很少去追问:这个样本真的服从我们假定的分布吗? 例如,测量误差是否真的服从正态分布?这个问题本身就可以表述为一个假设检验问题:

  • 原假设 H0H_0:总体分布 F(x)F(x) 等于某个特定的分布 F0(x)F_0(x),即 F(x)=F0(x)F(x) = F_0(x)
  • 备择假设 H1H_1:总体分布 F(x)F(x) 不等于 F0(x)F_0(x),即 F(x)F0(x)F(x) \neq F_0(x)

这类检验问题被称为分布的检验,它是非参数检验的一种典型方法。本章我们将学习多种分布的检验方法,而本节首先介绍一种在计算机普及前广泛使用的图形化方法——正态概率纸检验法。

正态概率纸的构造思想

正态概率纸检验法的核心在于,通过一种巧妙的坐标变换,将正态分布的累积分布函数(CDF)曲线“拉直”成一条直线,从而便于我们通过图形进行直观判断。

累积分布函数的图形特点

设随机变量 XN(μ,σ2)X \sim N(\mu, \sigma^2),其累积分布函数为: F(x)=Φ(xμσ)F(x) = \Phi\left(\frac{x-\mu}{\sigma}\right) 其中 Φ()\Phi(\cdot) 是标准正态分布的CDF。我们知道,任何随机变量的CDF F(x)F(x) 都是一条在 [0,1][0, 1] 区间内单调递增的曲线。当 xx \to -\infty 时,F(x)0F(x) \to 0;当 xx \to \infty 时,F(x)1F(x) \to 1

不同分布的CDF曲线形状各异,但仅凭肉眼在普通直角坐标系中很难区分它们是否为正态分布。因此,我们需要一种方法,能将正态分布的CDF曲线变换成一条直线

“拉直”曲线的坐标变换

考虑标准正态分布 UN(0,1)U \sim N(0, 1),其CDF为 Y=Φ(U)Y = \Phi(U)。在普通的 (U,Y)(U, Y) 坐标系中,这是一条S形曲线。

现在,我们引入一个与原始观测值 XX 线性相关的变量 UUU=XμσU = \frac{X - \mu}{\sigma} 显然,UU 关于 XX 是线性的。而 Y=Φ(U)Y = \Phi(U)UU 是一一对应的(因为 Φ\Phi 是严格单调函数)。

我们的目标是得到 XX 与某个量之间的直线关系。既然 UUXX 是线性关系,而 YYUU 一一对应,那么我们可以尝试构建一个坐标系:横坐标仍然是 XX,但纵坐标的刻度不再是均匀的 YY 值,而是与 YY 对应的 UU

具体做法是:

  1. 保持横坐标 XX 为均匀刻度。
  2. 在纵轴上,不标 Y=Φ(U)Y = \Phi(U) 的值,而是标出与之对应的 UU 值。例如,在纵轴上找到 Y=0.5Y=0.5 的位置,标上 U=Φ1(0.5)=0U = \Phi^{-1}(0.5) = 0;找到 Y=0.8413Y=0.8413 的位置,标上 U=Φ1(0.8413)=1U = \Phi^{-1}(0.8413) = 1,以此类推。

经过这样的变换后,对于正态分布 XN(μ,σ2)X \sim N(\mu, \sigma^2),点 (X,U)(X, U) 在坐标系中满足: U=XμσU = \frac{X - \mu}{\sigma} 这正是一条直线!这条直线的斜率是 1/σ1/\sigma,截距是 μ/σ-\mu/\sigma

这种纵坐标刻度不均匀(对应于 UU 值)、但能将正态CDF表现为直线的特殊坐标纸,就叫做正态概率纸。由于 Φ(U)\Phi(U)U±U \to \pm\infty 时趋近于0或1,实际使用的概率纸纵坐标刻度通常只显示从0.01到0.99(或0.001到0.999)对应的 UU 值范围。

正态概率纸的应用步骤

理论上,如果我们有一组来自分布 F(x)F(x) 的样本 X1,X2,,XnX_1, X_2, \dots, X_n,并且知道 F(x)F(x),那么我们将点 (Xi,F(Xi))(X_i, F(X_i)) 画在正态概率纸上。如果这些点近似在一条直线上,就说明 F(x)F(x) 是正态分布。

但问题在于,F(x)F(x) 是未知的。我们无法计算 F(Xi)F(X_i)。解决方法依赖于以下概率论结论和次序统计量的性质:

关键结论:若随机变量 XX 的CDF是连续的 F(x)F(x),则随机变量 Y=F(X)Y = F(X) 服从区间 [0,1][0, 1] 上的均匀分布,即 YU(0,1)Y \sim U(0, 1)

次序统计量的期望:将样本 X1,,XnX_1, \dots, X_n 按从小到大排序,得到次序统计量 X(1)X(2)X(n)X_{(1)} \le X_{(2)} \le \dots \le X_{(n)}。可以证明,随机变量 F(X(i))F(X_{(i)}) 的期望满足: E[F(X(i))]=in+1E[F(X_{(i)})] = \frac{i}{n+1} 这个期望值 in+1\frac{i}{n+1} 可以作为 F(X(i))F(X_{(i)}) 的一个估计值。

因此,应用正态概率纸检验的具体步骤如下:

  1. 排序:将观测样本 x1,x2,,xnx_1, x_2, \dots, x_n 按从小到大排列,得到次序统计量 x(1),x(2),,x(n)x_{(1)}, x_{(2)}, \dots, x_{(n)}
  2. 绘图:在正态概率纸上描出 nn 个点,第 ii 个点的坐标为:
    • 横坐标:x(i)x_{(i)}
    • 纵坐标:in+1\frac{i}{n+1}(或将其转换为百分数 100×in+1%100 \times \frac{i}{n+1}%
  3. 判断:观察这 nn 个点的趋势。
    • 如果它们近似分布在一条直线附近,则接受数据来自正态总体的假设。
    • 如果它们明显偏离一条直线(如呈曲线形、S形或有明显的拐点),则拒绝正态性假设。

这种方法直观、操作简单,在计算机和统计软件不普及的时代是一种非常实用的工具。

从正态概率纸到QQ图

随着计算机的普及,手工绘制和判断正态概率纸的方法已较少使用,但其核心思想被继承并发展成了更强大的图形工具——分位数-分位数图,简称 QQ图

QQ图的思想是:比较样本经验分位数理论分布分位数。如果数据来自该理论分布,那么这两个分位数应该大致相等,在图中就表现为点沿着一条基准线(通常是 y=xy=x 直线)分布。

正态QQ图的构造

对于正态性检验,我们使用正态QQ图。其绘制步骤如下:

  1. 对样本数据排序,得到次序统计量 x(1),x(2),,x(n)x_{(1)}, x_{(2)}, \dots, x_{(n)}
  2. 计算每个次序统计量对应的理论分位数 qiq_i。理论分位数是标准正态分布 Φ1(pi)\Phi^{-1}(p_i) 的值,其中 pip_i 是一个与序号 ii 有关的概率值。常用的 pip_i 计算公式有多种,一种稳健的估计是: pi=i0.375n+0.25p_i = \frac{i - 0.375}{n + 0.25} 对应的理论分位数为 qi=Φ1(pi)q_i = \Phi^{-1}(p_i)
  3. 以理论分位数 qiq_i 为横坐标,以样本次序统计量 x(i)x_{(i)} 为纵坐标,绘制散点图。
  4. 在图中添加一条参考线,通常是通过第一和第三四分位数点的直线,或者 y=xy=x 线(如果数据是标准化的)。
  5. 判断:如果数据点大致沿着参考线分布,则表明数据服从正态分布;如果点系统地偏离参考线(如上翘、下弯、分散等),则表明数据不服从正态分布。

QQ图比正态概率纸更灵活,可以轻松检验任何分布(只需更换理论分位数的计算方式),并且由计算机自动完成,精度和效率都更高。

下面的Python示例演示了如何生成来自正态分布的数据并绘制其QQ图。

import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt

# 设置随机种子以确保结果可复现
np.random.seed(321)

# 1. 模拟生成100个来自标准正态分布 N(0,1) 的随机样本
sample_size = 100
normal_sample = np.random.randn(sample_size)

# 2. 使用scipy的probplot函数绘制正态QQ图
#    probplot函数会自动计算理论分位数和样本分位数,并绘图
fig, ax = plt.subplots(figsize=(8, 6))
# dist='norm' 指定检验的分布为正态分布, plot=ax 指定绘图轴
res = stats.probplot(normal_sample, dist='norm', plot=ax)

# 3. 为图形添加标题和网格,使其更美观
ax.set_title('正态QQ图检验示例 (n=100)', fontsize=14, pad=15)
ax.set_xlabel('理论分位数 (Standard Normal)', fontsize=12)
ax.set_ylabel('样本分位数', fontsize=12)
ax.grid(True, linestyle='--', alpha=0.6)

# 显示图形
plt.tight_layout()
plt.show()

# 4. (可选)进行简单的统计检验作为对比
#    使用Shapiro-Wilk检验(一种常用的正态性检验)
shapiro_stat, shapiro_p = stats.shapiro(normal_sample)
print(f"Shapiro-Wilk检验结果:")
print(f"  统计量 W = {shapiro_stat:.4f}")
print(f"  P值 = {shapiro_p:.4f}")
if shapiro_p > 0.05:
    print("  结论:在0.05显著性水平下,不能拒绝正态性原假设。")
else:
    print("  结论:在0.05显著性水平下,拒绝正态性原假设。")

📝 动手练一练

  1. 理解纵坐标:在正态概率纸检验中,为什么我们使用 i/(n+1)i/(n+1) 作为纵坐标值 F(X(i))F(X_{(i)}) 的估计,而不是直接使用 i/ni/n(i0.5)/n(i-0.5)/n?尝试从均匀分布次序统计量的角度解释。 参考答案:根据概率积分变换,若 XFX \sim FFF 连续,则 F(X)U(0,1)F(X) \sim U(0,1)。对于来自 U(0,1)U(0,1) 的样本 U1,,UnU_1, \dots, U_n,其第 ii 个次序统计量 U(i)U_{(i)} 服从 Beta 分布,即 U(i)Beta(i,ni+1)U_{(i)} \sim \text{Beta}(i, n-i+1)。该分布的期望为 E[U(i)]=i/(n+1)E[U_{(i)}] = i/(n+1)。因此,用 i/(n+1)i/(n+1) 估计 F(X(i))F(X_{(i)}) 是无偏的。而 i/ni/n 的期望是 (i)/(n+1)×(n+1)/n(i)/(n+1) \times (n+1)/n,存在偏差;(i0.5)/n(i-0.5)/n 则是一种近似,但并非无偏估计。

  2. 模拟与判断:使用Python生成两组数据:一组来自正态分布 N(0,1)N(0, 1),另一组来自自由度为5的 tt 分布。分别绘制它们的正态QQ图,观察并描述两者在图形上的主要区别。

    import numpy as np
    import scipy.stats as stats
    import matplotlib.pyplot as plt
    
    np.random.seed(123)
    n = 50
    
    # 生成数据
    data_normal = np.random.randn(n)
    data_t = np.random.standard_t(df=5, size=n)
    
    # 绘制QQ图
    fig, axes = plt.subplots(1, 2, figsize=(12, 5))
    
    stats.probplot(data_normal, dist='norm', plot=axes[0])
    axes[0].set_title('来自 N(0,1) 的数据QQ图')
    axes[0].grid(True, linestyle='--', alpha=0.6)
    
    stats.probplot(data_t, dist='norm', plot=axes[1])
    axes[1].set_title('来自 t(5) 的数据QQ图')
    axes[1].grid(True, linestyle='--', alpha=0.6)
    
    plt.tight_layout()
    plt.show()

    参考答案:正态分布数据的QQ图点基本围绕参考线随机分布,两端略有轻微波动属正常。而 tt 分布(重尾分布)数据的QQ图会呈现明显的“S”形或“两端翘起”的形状:样本分位数在两端(尤其是右端)的理论分位数更大,意味着实际数据的极端值比正态分布预测的更多、更“重”,这是重尾分布的典型特征。

本章小结

本节我们开启了非参数统计中“分布的检验”这一重要篇章,并重点学习了其历史上一项重要的图形化工具——正态概率纸检验法。

要点回顾

  1. 问题本质:分布的检验旨在判断样本数据是否来自某个预设的分布(如正态分布),这是一个典型的非参数假设检验问题。
  2. 核心创新:正态概率纸通过非均匀的纵坐标刻度变换,巧妙地将正态累积分布函数的S形曲线“拉直”为一条直线,极大方便了视觉判断。
  3. 实践方法:利用次序统计量及其期望 E[F(X(i))]=i/(n+1)E[F(X_{(i)})] = i/(n+1) 来估计未知的CDF值,从而在概率纸上描点判断。
  4. 现代发展:QQ图继承了概率纸“比较分位数”的核心思想,通过计算机自动计算和绘图,成为当今更常用、更强大的分布检验图形工具。

行动清单

  • 思想溯源:理解“将曲线拉直以方便比较”这一思想,它不仅用于正态性检验,也是许多数据变换和模型诊断的基础。
  • 工具迁移:在下次需要检查数据正态性时,不要只依赖数值型检验(如Shapiro-Wilk),尝试绘制一张QQ图,它能更直观地揭示偏离正态的具体模式(如偏态、重尾等)。
  • 动手验证:使用编程语言(如Python的statsmodels.graphics.gofplots.qqplotscipy.stats.probplot)对你手头或模拟的数据集进行QQ图分析,并尝试解释图形的含义。

— 小象教研组

配套学习资源与课件
  • 第5章课件:分布的检验(PDF · 3.8MB)
    下载
🎁 免费学习资源

领取《小象 11GB VIP 课件资料包与大厂真题手册》

包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。

  • 完整 Python / 数据分析 Jupyter 实战源码
  • 大厂真实业务数据集与练习题
  • 微信扫码添加课程顾问,免费获取网盘下载链接
微信二维码:扫码添加课程顾问微信扫码添加顾问