【问题标题】:normality test of a distribution in pythonpython中分布的正态性检验
【发布时间】:2014-04-06 09:51:55
【问题描述】:

我有一些从雷达卫星图像中采样的数据,并想对其进行一些统计测试。在此之前,我想进行正态性检验,以便确定我的数据是正态分布的。我的数据似乎是正态分布的,但是当我执行测试时,我得到的 Pvalue 为 0,这表明我的数据不是正态分布的。

我已经附上了我的代码以及输出和分布的直方图(我对 python 比较陌生,所以如果我的代码在任何方面都很笨拙,我深表歉意)。如果我做错了什么,谁能告诉我 - 从我的直方图中我很难相信我的数据不是正态分布的?

values = 'inputfile.h5'
f = h5py.File(values,'r')
dset = f['/DATA/DATA']
array = dset[...,0]
print('normality =', scipy.stats.normaltest(array))
max = np.amax(array)
min = np.amin(array)

histo = np.histogram(array, bins=100, range=(min, max))
freqs = histo[0]
rangebins = (max - min)
numberbins = (len(histo[1])-1)
interval = (rangebins/numberbins)
newbins = np.arange((min), (max), interval)
histogram = bar(newbins, freqs, width=0.2, color='gray')
plt.show()

这会打印:(41099.095955202931, 0.0)。第一个元素是卡方值,第二个元素是 pvalue。

我已经制作了我所附数据的图表。我认为可能是因为我处理负值导致了问题,所以我将值标准化,但问题仍然存在。

【问题讨论】:

  • This question 解释了为什么您会得到如此小的 p 值。从本质上讲,正态性检验几乎总是拒绝非常大样本量的空值(例如,在您的样本中,您可以看到左侧只有一点点偏斜,在您巨大的样本量下,这已经绰绰有余了)
  • @unutbu:这不是真的:为了证明,normaltest(np.random.normal(loc=100, scale=10, size=1000)) 仍然返回统一的 p 值,即使平均值为 100,标准差为 10。
  • @DavidRobinson:哦!谢谢指正。
  • 这有点晚了,但对于未来的读者:minmax 是 python 中的关键字,所以我建议不要将它们用作变量。

标签: python statistics scipy normal-distribution


【解决方案1】:

This question 解释了为什么您会得到如此小的 p 值。本质上,正态性检验几乎总是拒绝非常大样本量的空值(例如,在您的样本中,您可以看到左侧有一些偏斜,在您巨大的样本量下,这已经绰绰有余了)。

在您的情况下更实用的是绘制一条适合您的数据的正态曲线。然后你可以看到法线曲线实际上是如何不同的(例如,你可以看到左侧的尾巴是否确实走得太长)。例如:

from matplotlib import pyplot as plt
import matplotlib.mlab as mlab

n, bins, patches = plt.hist(array, 50, normed=1)
mu = np.mean(array)
sigma = np.std(array)
plt.plot(bins, mlab.normpdf(bins, mu, sigma))

(注意normed=1 参数:这可确保将直方图归一化为总面积为 1,这使其与正态分布等密度相当)。

【讨论】:

    【解决方案2】:

    一般而言,当样本数少于 50 时,您应该小心使用正态性检验。由于这些测试需要足够的证据来拒绝零假设,即“数据的分布是正态的”,而当样本数量较少时,他们无法找到这些证据。

    请记住,当您未能拒绝原假设时,并不意味着备择假设是正确的。

    还有另一种可能性: 正态性统计检验的一些实现会将数据的分布与标准正态分布进行比较。为了避免这种情况,我建议您将数据标准化,然后应用正态性检验。

    【讨论】:

      猜你喜欢
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-19
      • 2020-11-08
      • 2018-12-08
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多