python – 如何从numpy数组中确定什么是概率分布函数?

栏目: Python · 发布时间: 5年前

内容简介:http://stackoverflow.com/questions/23251759/how-to-determine-what-is-the-probability-distribution-function-from-a-numpy-arra

我已经搜索了,令我惊讶的是,这个问题似乎还没有得到回答.

我有一个包含10000个值的Numpy数组.我已经绘制了Matplotlib的直方图,通过目视检查,这些值似乎是正态分布的:

但是,我想验证这一点.我已经发现在 scipy.stats.mstats.normaltest 下实施了一个正常测试,但结果另有说明.我得到这个输出:

(masked_array(data = [1472.8855375088663],
         mask = [False],
   fill_value = 1e+20)
, masked_array(data = [ 0.],
         mask = False,
   fill_value = 1e+20)

)

这意味着数据集正常分布的机会为0.我已经重新运行实验并再次测试获得相同的结果,而在“最佳”情况下,p值为3.0e-290.

我已经使用以下代码测试了这个函数,它似乎做了我想要的:

import numpy
import scipy.stats as stats

mu, sigma = 0, 0.1
s = numpy.random.normal(mu, sigma, 10000)

print stats.normaltest(s)

(1.0491016699730547, 0.59182113002186942)

如果我已经理解并正确使用该功能,则意味着这些值不是正态分布的. (老实说,我不知道为什么产出有差异,即较少的细节.)

我很确定这是一个正常的分配(虽然我的统计知识是基础的),我不知道可以选择什么.如何查看有问题的概率分布函数是什么?

编辑:

我的包含10000个值的Numpy数组是这样生成的(我知道这不是填充Numpy数组的最佳方法),之后运行正常值:

values = numpy.empty(shape=10000, 1))
for i in range(0, 10000):
    values[i] = measurement(...) # The function returns a float

print normaltest(values)

编辑2:

我刚刚意识到输出之间的差异是因为我无意中使用了两个不同的功能(scipy.stats.normaltest()和scipy.stats.mstats.normaltest()),但是没有什么区别,因为相关部分的输出是相同的,不管使用的功能.

编辑3:

使用askewchan的建议对直方图进行拟合:

plt.plot(bin_edges, scipy.stats.norm.pdf(bin_edges, loc=values.mean(), scale=values.std()))

结果如下:

编辑4:

使用用户user333700的建议对直方图进行拟合:

scipy.stats.t.fit(data)

结果如下:

假设您已经正确使用了测试,我的猜测是,您与正态分布有很小的偏差,并且由于您的样本数量如此之大,即使小的偏差也将导致拒绝正态分布的零假设.

一种可能性是通过绘制具有大量分区的规范直方图和使用loc = data.mean()和scale = data.std()的pdf来直观检查数据.

有测试正常性的替代测试,当估计分布参数时,统计模型有Anderson-Darling和Lillifors(Kolmogorov-Smirnov)进行测试.

但是,由于样本量较大,我预计结果不会有很大差异.

主要问题是您是否要测试您的样本是否从正态分布“完全”,或者您是否对您的样本是否来自非常接近正态分布的分布感兴趣,关于实际使用情况.

详细说明最后一点:

随着样本量增加,假设检验获得更多的权力,这意味着即使对于越来越小的差异,该测试也能够拒绝平等的零假设.如果我们把我们的意义水平固定下来,那么最终我们会拒绝我们不太在意的微小差异.

一种替代类型的假设检验是我们想要显示我们的样本接近给定点假设的地方,例如两个样本具有几乎相同的平均值.问题是我们必须定义我们的等价区域是什么.

在适合度测试的情况下,我们需要选择距离度量并定义样本与假设分布之间的距离测量的阈值.我没有发现任何直觉有助于选择这个距离门槛的解释.

stats.normaltest是基于偏差和峰度偏差与正态分布的偏差.

安德森 – 达令是基于cdf之间的加权平方差的积分.

Kolmogorov-Smirnov是基于cdf之间的最大绝对差异.

合并数据的chisquare将基于平方箱概率的加权和.

等等.

我只曾尝试过等价测试,采用binned或离散数据,其中我使用了一些仍然相当任意的参考案例的阈值.

在医疗等效性测试中,有一些预定义的标准规定了两种治疗方案可以被认为是相同的,或者类似于单侧版本的劣质或更高级别.

http://stackoverflow.com/questions/23251759/how-to-determine-what-is-the-probability-distribution-function-from-a-numpy-arra


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Effective JavaScript

Effective JavaScript

David Herman / Addison-Wesley Professional / 2012-12-6 / USD 39.99

"It's uncommon to have a programming language wonk who can speak in such comfortable and friendly language as David does. His walk through the syntax and semantics of JavaScript is both charming and h......一起来看看 《Effective JavaScript》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

随机密码生成器
随机密码生成器

多种字符组合密码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试