用户警告 scipy.stats.shapiro

问题描述 投票:0回答:1

我使用夏皮罗威尔克斯正态性检验得到此错误

UserWarning:scipy.stats.shapiro:对于 N > 5000,计算的 p 值可能不准确。当前 N 为 1048575。 stat, p = st.shapiro(householdPowerConspiration_analysis.Global_active_power

我正在寻找解决方案

python scipy
1个回答
0
投票

如果必须执行 Shapiro-Wilk 检验,则可以使用

shapiro
生成的统计量,但使用
monte_carlo_test
估计 p 值。

import numpy as np
from scipy import stats
rng = np.random.default_rng()
x = rng.normal(size=1000)

def statistic(x):
    return stats.shapiro(x).statistic

res = stats.monte_carlo_test(x, rng.normal, statistic, 
                             alternative='less', batch=10)
ref = stats.shapiro(x)
res.pvalue, ref.pvalue

这在

shapiro
的文档中进行了解释。像您这样大的样品需要一段时间。

您还可以选择 SciPy 中的任何其他正态性检验:

skewtest
kurtosistest
normaltest
jarque_bera
anderson
。除了
shapiro
之外,
anderson
对于许多替代方案也具有良好的能力。 (当然,还可以使用其他几种更通用的拟合优度检验,但您也可以使用针对正态性量身定制的检验,因为可用的检验方法太多了。)

© www.soinside.com 2019 - 2024. All rights reserved.