Python中的Scipy Stats Pareto拟合:它是如何工作的?

5
帮助和在线文档显示函数scipy.stats.pareto.fit的变量为需要拟合的数据集,可选的有b(指数)、loc、scale。结果以三元组(指数、loc、scale)的形式给出。
从同一分布生成数据应导致拟合找到用于生成数据的参数,例如(使用Python 3控制台)。
$  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.
>>>

(在下面的代码行中,省略Python控制台提示符“ >>>”)

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

然而这导致
(1.0, nan, 0.0)
< p >(指数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的情况下。
(1.0, nan, 0.0)

等等,当调用fit函数时给出另一个指数

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

返回始终完全相同的指数

(1.3999999999999999, nan, 0.0)

显而易见的问题是:我是否完全误解了这个适合函数的目的,它是否以某种不同的方式使用,还是它只是有缺陷?备注:在有人提到像Aaron Clauset网页上给出的专用函数(http://tuvalu.santafe.edu/~aaronc/powerlaws/)比scipy.stats方法更可靠,并且应该使用它们之前,需要指出的是:对于10000个数据点的数据集,它们也非常非常非常耗时,在普通PC上可能需要许多小时(也许是天、周、年)。编辑:哦:适合函数的参数不是分布的指数,而是指数减1(但这并不改变上述问题)。
3个回答

6

看起来您必须为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


5
拟合方法是一种非常通用和简单的方法,它在分布的非负似然函数(self.nnlf)上执行optimize.fmin。对于像帕累托这样具有可以创建未定义区域的参数的分布,通用方法无法工作。
特别地,当随机变量的值不适合分布的有效范围时,通用nnlf方法返回“inf”。除非您已经非常接近最终拟合的起始值,否则“fmin”优化器无法很好地处理此目标函数。
通常,.fit方法需要为pdf的适用域限制存在的分布使用约束优化器。

0
问题还在于当 c < 2 时,帕累托分布的方差是未定义的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接