You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Anderson Darling检验法检验Gamma、Weibull、指数分布的拟合优度

使用Anderson-Darling检验进行Gamma、Weibull和指数分布的拟合优度检验

Anderson-Darling(AD)检验是一种加权拟合优度检验,通过对比样本经验分布函数与理论分布函数的差异,评估样本是否来自指定分布。它对分布尾部的拟合差异更为敏感,适合Gamma、Weibull和指数这类偏态分布的检验。

通用检验流程

所有分布的AD检验都遵循以下核心步骤:

  1. 参数估计:从样本数据中拟合目标分布的未知参数(如Gamma的形状/尺度、Weibull的形状/尺度)。
  2. 计算AD统计量:基于估计后的理论分布,计算样本经验分布与理论分布的加权平方差。
  3. 假设检验:将统计量与临界值对比,或通过p值判断是否拒绝“样本来自该理论分布”的原假设(通常以0.05为显著性水平)。

针对各分布的具体实现(Python示例)

以下使用scipy.stats库完成检验,代码可直接复用。

1. Gamma分布检验

Gamma分布需估计形状(a)和尺度(scale)参数,通常固定位置参数为0。

import numpy as np
from scipy import stats

# 替换为你的真实样本数据
data = stats.gamma.rvs(a=2, scale=3, size=100, random_state=42)

# 步骤1:估计Gamma分布参数(固定位置参数loc=0)
shape, loc, scale = stats.gamma.fit(data, floc=0)

# 步骤2:执行AD检验
ad_result = stats.anderson(data, dist='gamma', args=(shape, loc, scale))

# 步骤3:解读结果
print(f"AD统计量: {ad_result.statistic:.4f}")
print("临界值(对应显著性水平):")
for sig, crit in zip(ad_result.significance_level, ad_result.critical_values):
    print(f"  {sig}%: {crit:.4f}")
# 部分scipy版本支持直接输出p值
if hasattr(ad_result, 'pvalue'):
    print(f"p值: {ad_result.pvalue:.4f}")
  • 判断逻辑:若AD统计量大于对应显著性水平的临界值(或p值<0.05),则拒绝原假设,认为样本不来自Gamma分布。

2. Weibull分布检验

Weibull分布需估计形状(c)和尺度(scale)参数,同样固定位置参数为0。

# 替换为你的真实样本数据
data = stats.weibull_min.rvs(c=1.5, scale=5, size=100, random_state=42)

# 步骤1:估计Weibull分布参数(固定位置参数loc=0)
shape, loc, scale = stats.weibull_min.fit(data, floc=0)

# 步骤2:执行AD检验
ad_result = stats.anderson(data, dist='weibull_min', args=(shape, loc, scale))

# 步骤3:解读结果
print(f"AD统计量: {ad_result.statistic:.4f}")
print("临界值(对应显著性水平):")
for sig, crit in zip(ad_result.significance_level, ad_result.critical_values):
    print(f"  {sig}%: {crit:.4f}")
if hasattr(ad_result, 'pvalue'):
    print(f"p值: {ad_result.pvalue:.4f}")
  • 注意:scipy中Weibull分布对应dist='weibull_min',参数顺序为(形状、位置、尺度)。

3. 指数分布检验

指数分布是Gamma(形状=1)和Weibull(形状=1)的特例,仅需估计尺度参数。

# 替换为你的真实样本数据
data = stats.expon.rvs(scale=4, size=100, random_state=42)

# 步骤1:估计指数分布参数(固定位置参数loc=0)
loc, scale = stats.expon.fit(data, floc=0)

# 步骤2:执行AD检验
ad_result = stats.anderson(data, dist='expon', args=(loc, scale))

# 步骤3:解读结果
print(f"AD统计量: {ad_result.statistic:.4f}")
print("临界值(对应显著性水平):")
for sig, crit in zip(ad_result.significance_level, ad_result.critical_values):
    print(f"  {sig}%: {crit:.4f}")
if hasattr(ad_result, 'pvalue'):
    print(f"p值: {ad_result.pvalue:.4f}")

关键注意事项

  • 参数估计必须基于样本数据,不能使用预设的理论参数,否则检验结果无意义。
  • 不同统计工具的参数顺序可能存在差异(如R语言的goftest::ad.test),需对应调整参数输入。
  • 拟合优度检验的结论是“不能拒绝原假设”而非“接受原假设”,即仅能说明数据与目标分布无显著差异,而非完全符合。

内容的提问来源于stack exchange,提问作者Daisha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 19:25:25