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

使用Shapiro-Wilk正态性检验遇p值不准确警告,求解决方案

Shapiro-Wilk检验大样本量警告的解决方案

当样本量达到1048575时,Shapiro-Wilk检验会因为统计量近似计算的精度问题抛出警告,以下是几个可行的解决思路:

1. 随机抽样后再做Shapiro-Wilk检验

直接从大样本中抽取不超过5000个代表性样本进行检验,只要抽样是随机的,结果足够反映整体数据的正态性:

# 随机抽取5000个样本
sampled_data = householdPowerConsumption_analysis.Global_active_power.sample(n=5000, random_state=42)
# 对抽样数据做Shapiro-Wilk检验
stat, p = st.shapiro(sampled_data)

2. 改用适合大样本的正态性检验方法

Shapiro-Wilk并非大样本场景的最优选择,推荐使用以下两种方法:

  • Kolmogorov-Smirnov检验(KS检验):适用于大样本,直接对比数据分布与正态分布的差异:
    from scipy.stats import norm, kstest
    # 先拟合正态分布的均值和标准差
    mu, std = norm.fit(householdPowerConsumption_analysis.Global_active_power)
    stat, p = kstest(householdPowerConsumption_analysis.Global_active_power, 'norm', args=(mu, std))
    
  • Anderson-Darling检验:专门用于检验数据是否符合特定分布,对大样本的支持更好,还能给出不同显著性水平下的临界值:
    from scipy.stats import anderson
    result = anderson(householdPowerConsumption_analysis.Global_active_power, dist='norm')
    # 输出统计量和各显著性水平的临界值
    print('统计量:', result.statistic)
    print('临界值:', result.critical_values)
    print('显著性水平:', result.significance_level)
    

3. 结合可视化判断正态性

大样本下,统计检验的p值会极度敏感——哪怕数据只是轻微偏离正态,也会得到显著的p值。此时可视化方法更具实际意义:

  • 绘制直方图+核密度估计(KDE):
    import seaborn as sns
    sns.histplot(householdPowerConsumption_analysis.Global_active_power, kde=True)
    
  • 绘制QQ图:
    import statsmodels.api as sm
    sm.qqplot(householdPowerConsumption_analysis.Global_active_power, line='s')
    

通过观察直方图的形状是否接近钟形,QQ图中的点是否贴合参考线,就能直观判断数据的正态性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:24:53