【问题标题】:P value for Normality test very small despite normal histogram尽管直方图正常,但正态性检验的 P 值非常小
【发布时间】:2017-02-03 23:57:22
【问题描述】:

我查看了 scipy stats 中 scipy.stats.mstats.normaltestscipy.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


【解决方案1】:

如果垂直轴上的数字是相应类别的观察数,则样本量约为 1500。对于如此大的样本量,拟合优度测试很少有用。但是你的数据真的有必要完全正态分布吗?如果您想用统计方法分析数据,这种方法在与正态分布假设的(“小”)偏差下是否可能稳健? 在实践中,对于我的统计分析,问题通常是“正态分布假设是否可以接受”。完美的正态分布非常少见。 关于直方图的附加评论:必须小心解释直方图中的数据,因为数据是否“看起来正常”可能取决于直方图类的宽度。直方图只是应谨慎对待的提示。

【讨论】:

    【解决方案2】:

    如果你运行 n 次并取 p 值的平均值,你会得到你所期望的。以蒙特卡洛方式循环运行。

    【讨论】:

      猜你喜欢
      • 2017-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-19
      相关资源
      最近更新 更多