Python皮Scipy帕累托贴合度统计数据:它是如何工作的

d7v8vwbk  于 2022-11-10  发布在  Python
关注(0)|答案(3)|浏览(141)

...帮助和在线文档中说,函数scipy.stats.pareto.fit将待拟合的数据集作为变量,还可以选择b(指数)、loc、scale。结果为三元组(指数、loc、scale)
从相同分布生成数据应导致拟合找到用于生成数据的参数,例如(使用Python 3 Colsole)

$  python
Python 3.3.0 (default, Dec 12 2012, 07:43:02) 
[GCC 4.7.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

(in下面的代码行省略了python控制台提示符“〉〉〉”)

dataset=scipy.stats.pareto.rvs(1.5,size=10000)  #generating data
scipy.stats.pareto.fit(dataset)

然而这导致

(1.0, nan, 0.0)

(指数1,应为1.5)和

dataset=scipy.stats.pareto.rvs(1.1,size=10000)  #generating data
scipy.stats.pareto.fit(dataset)

导致

(1.0, nan, 0.0)

(指数1,应为1.1)和

dataset=scipy.stats.pareto.rvs(4,loc=2.0,scale=0.4,size=10000)    #generating data
scipy.stats.pareto.fit(dataset)

(指数应为4,位置应为2,比例应为0.4)in

(1.0, nan, 0.0)

在调用fit函数时给出另一个指数

scipy.stats.pareto.fit(dataset,1.4)

始终精确返回此指数

(1.3999999999999999, nan, 0.0)

显而易见的问题是:我是否完全误解了fit函数的用途,它的用法是否有所不同,或者它只是被破坏了?
注意:在有人提到像Aaron Clauset的网页(http://tuvalu.santafe.edu/~aaronc/powerlaws/)上给出的那些专用函数比scipy.stats方法更可靠,应该使用它们之前:这可能是真的,但它们也非常非常非常非常耗时,并且在普通PC上处理10000个点的数据集需要很多很多小时(可能是几天、几周、几年)。
edit:oh:拟合函数的参数不是分布的指数,而是指数减1(但这并不改变上述问题)

fykwrbwg

fykwrbwg1#

看起来您必须为locscale提供一个猜测:

In [78]: import scipy.stats as stats

In [79]: b, loc, scale = 1.5, 0, 1

In [80]: data = stats.pareto.rvs(b, size=10000)

In [81]: stats.pareto.fit(data, 1, loc=0, scale=1)
Out[81]: (1.5237427002368424, -2.8457847787917788e-05, 1.0000329980475393)

而猜测必须相当准确才能成功:

In [82]: stats.pareto.fit(data, 1, loc=0, scale=1.01)
Out[82]: (1.5254113096223709, -0.0015898489208676779, 1.0015943893384001)

In [83]: stats.pareto.fit(data, 1, loc=0, scale=1.05)
Out[83]: (1.5234726749064218, 0.00025804526532994751, 0.99974649559141171)

In [84]: stats.pareto.fit(data, 1, loc=0.05, scale=1.05)
Out[84]: (1.0, 0.050000000000000003, 1.05)

希望问题的上下文能告诉你locscale的正确猜测应该是什么,最有可能的是loc=0scale=1

6ie5vjzr

6ie5vjzr2#

拟合方法是一种非常通用且简单的方法,它可以优化分布的非负似然函数(self.nnlf)上的.fmin。在像pareto这样的分布中,其参数可能会创建未定义的区域,通用方法不起作用。
特别是,当随机变量的值不符合分布的有效性域时,一般的nnlf方法返回“inf”。“fmin”优化器不能很好地处理这个目标函数,除非你已经猜到了非常接近最终拟合的起始值。
一般来说,.fit方法需要使用约束优化器来处理在pdf的适用域上存在限制的分布。

piv4azn7

piv4azn73#

问题还在于帕累托分布的方差没有定义为c〈2。

相关问题