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

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

内容简介: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


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

查看所有标签

猜你喜欢:

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

数据结构与算法:Python语言描述

数据结构与算法:Python语言描述

裘宗燕 / 机械工业出版社 / 2016-1 / CNY 45.00

本书基于Python语言介绍了数据结构与算法的基本知识,主要内容包括抽象数据类型和Python面向对象程序设计、线性表、字符串、栈和队列、二叉树和树、集合、排序以及算法的基本知识。本书延续问题求解的思路,从解决问题的目标来组织教学内容,注重理论与实践的并用。一起来看看 《数据结构与算法:Python语言描述》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

SHA 加密
SHA 加密

SHA 加密工具