我有一些从雷达卫星图像中取样的数据,我想对其进行一些统计测试。在此之前,我想进行一个正态性测试,以确保我的数据是正态分布的。我的数据看起来是正态分布的,但是当我执行测试时,我得到了0的pValue,这表明我的数据不是正态分布的。
我已经附加了我的代码以及输出和分布的柱状图(我对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。
我画了一张我所附数据的图表。我认为当我处理负面价值观的时候,可能会导致一个问题,所以我将价值观标准化了,但问题依然存在。
最佳答案
解释为什么你得到这么小的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,这使得它可以与像正态分布一样的密度相比较)。关于python - python中分布的正态性检验,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22179119/