跳转到主要内容

Aaron Clauset的幂律分布拟合器的Python实现

项目描述

这是一个幂律分布拟合器的Python实现。这里的代码最初托管在agpy上,但已移动并重新打包,以便使setup.py更干净。

API文档

另请参阅https://github.com/jeffalstott/powerlaw,这是同一算法的另一种实现,具有额外的功能。

安装

我已经尝试让setup.py文件正常工作,但它包括一些技巧,所以如果您遇到问题,请在github上报告

git clone git@github.com:keflavich/plfit.git
cd plfit
python setup.py install

如果 python setup.py install 无法工作,您可以尝试以下操作

要安装cython函数,请运行:python setup.py build_ext --inplace

要安装fortran函数

cd plfit/plfit/
f2py -c fplfit.f -m fplfit --fcompiler=gfortran

描述

Aaron Clauset等人在这网站以及他们的论文Power-law distributions in empirical data中讨论了将幂律拟合到分布的问题。由于我没有MATLAB或R,并想进行一些幂律拟合,因此我创建了他们代码的Python实现。

幂律在天文学中非常常见,通常用于描述初始质量函数(IMF)、核心质量函数(CMF)和通常的亮度分布。大多数天文学分布倾向于是明显的幂律,因为源计数太少或太窄,无法区分幂律、对数正态和其他分布。但是,为此,我已经包括了测试机制,以测试与上述论文中描述的幂律的一致性。

Python内部文档完整。此处包括相关函数的简要描述,以方便使用。

plfit作为类实现。这意味着您导入plfit,并声明plfit类的实例

import plfit
X = rand(1000)
myplfit = plfit.plfit(X)

拟合结果将打印到屏幕上(如果需要),并作为对象的一部分存储。

alpha_ 和 kstest_ 是内部使用的函数,用于确定ks统计量和alpha值作为xmin的函数。

有3个预定义的绘图函数
  • alphavsks 绘制alpha值在y轴上与ks统计量值在x轴上的关系图,并用带有误差线的“最佳拟合”alpha值进行绘制。这些图是一种有用的方式,可以确定其他xmin值是否同样适合。

  • plotcdf 绘制累积分布函数以及最佳拟合幂律

  • plotpdf 绘制PDF直方图,并用最佳拟合幂律进行绘制。默认使用对数分箱(即线性幂律拟合),但也可以进行dN/dS和线性分箱。

其他有用的函数
  • test_pl 使用拟合的幂律作为蒙特卡洛测试的起点,以确定幂律是否是一个可接受的拟合。它返回一个“p值”,如果幂律拟合要被考虑,这个p值应该 >0.1(尽管高p值并不能保证分布函数是幂律!)。

  • plexp_inv 创建一个具有指数衰减的截止幂律分布,这在测试中很有用。

  • pl_inv 创建一个纯截止幂律分布

  • test_fitter 使用前两个函数来测试拟合器在多次迭代后返回正确的xmin和alpha值的能力

幂律拟合器在返回正确的alpha值方面非常有效,但在返回正确的xmin值方面并不那么好。

代码内部有3种实现。fplfit.f是fortran函数,cplfit.pyx是cython函数,plfit.py是包装器,包括仅使用numpy的纯python实现。FORTRAN是最快的,其次是cython。Python大约慢3倍。

截至2011年11月21日,有一个纯python(即,无numpy)实现可在 <https://github.com/keflavich/plfit/blob/master/plfit/plfit_py.py> - 您只需将此文件放入您的本地工作目录中并导入,因为它不包含纯python之外的要求。它较慢且功能受限,但可以工作,也许可以使用 pypy 运行得更快。

有关使用 示例,请参阅

一个非常简单的例子

import plfit
from numpy.random import rand,seed

# generate a power law using the "inverse" power-law generator code
X=plfit.plexp_inv(rand(1000),1,2.5)

# use the numpy version to fit (usefortran=False is only needed if you installed the fortran version)
myplfit=plfit.plfit(X,usefortran=False)
# output should look something like this:
# PYTHON plfit executed in 0.201362 seconds
# xmin: 0.621393 n(>xmin): 263 alpha: 2.39465 +/- 0.0859979   Log-Likelihood: -238.959   ks: 0.0278864 p(ks): 0.986695

# generate some plots
from pylab import *
figure(1)
myplfit.plotpdf()

figure(2)
myplfit.plotcdf()

如果您使用此代码,请引用 Clauset 等人 2009

欢迎直接引用来源!以下工作(以及可能的其他工作)中引用了python翻译:

Bitdeli badge

v1.0.3 - 只是向pypi推送,可能是2.7->3.x v1.0.2 - 修复“nosmall”情况下的错误,并更新文档 v1.0.1 - 仅修复pypi的错误;仅在MANIFEST.in中添加内容 v1.0 - 第一个版本

项目详情


下载文件

下载适合您平台的项目文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。

源分布

plfit-1.0.3.tar.gz (194.0 kB 查看散列)

上传于 源代码

由...