【发布时间】:2017-02-03 23:57:22
【问题描述】:
我查看了 scipy stats 中 scipy.stats.mstats.normaltest 和 scipy.stats.shapiro 的正态性检验,看起来他们都假设零假设是他们给出的数据是正常的。
也就是说,小于 0.05 的 p 值表明它们不正常。
我在 SKLearn 中使用 LassoCV 进行回归,为了给自己更好的结果,我对答案进行了日志转换,得到的直方图如下所示:
对我来说看起来很正常。
但是,当我通过上述两个测试中的任何一个运行数据时,我得到的 p 值非常小,这表明数据不正常,而且很大。
这是我使用 scipy.stats.shapiro 时得到的结果
scipy.stats.shapiro(y)
Out[69]: (0.9919402003288269, 3.8889791653673456e-07)
当我运行 scipy.stats.mstats.normaltest 时,我得到了这个:
scipy.stats.mstats.normaltest(y)
NormaltestResult(statistic=25.755128535282189, pvalue=2.5547293546709236e-06)
在我看来,我的数据与直方图的正态性相去甚远,这似乎令人难以置信。
是有什么原因导致了这种差异,还是我没有正确解释结果?
【问题讨论】:
-
你有大量的数据点吗?即使分布“看起来很正常”,如果有很多观察结果,也会发现分布和正态分布之间的细微差异。尝试对直方图的 y 轴进行对数缩放,这可能是分布与接近峰值的正态分布很好地匹配,但在侧翼中却没有。
-
P-P plots 通常有助于可视化您的样本如何偏离某些理论分布。您可以使用
scipy.stats.probplot生成一个。 -
“对我来说看起来很正常。” 它看起来对我有积极的影响。 :) 用眼睛判断分布的正态性可能不是很可靠。 @AngusWilliams 的评论很重要:你有多少数据点?
-
在这种情况下,您可以使用偏度和弯曲度来代替正态性检验。例如,请参见“统计分析”部分中的此处:journal.frontiersin.org/article/10.3389/fpsyg.2015.00653/full
-
@AngusWilliams - 1460 个数据点。我实际上对数据进行了日志转换,以使其更“正常”用于回归。
标签: python numpy scipy statistics