aron clauset幂律分布fitter的python实现
plfit的Python项目详细描述
这是幂律分布装配器的python实现。守则 这里最初托管在agpy上,但是 移动并重新打包以使setup.py更干净。
另请参见http://code.google.com/p/powerlaw,同一算法的另一个实现,并附加了bells&whills。
安装
我试图使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等人解决将幂律拟合到分布的问题 在this website和他们的论文中 Power-law distributions in empirical data。我有 创建了他们代码的python实现,因为我没有matlab或r 想做些幂律拟合。
幂律在天文学中非常常用,通常用于 描述初始质量函数(imf)、核心质量函数(cmf)和 通常是光度分布。天文学中的大多数分布趋向于 因为源计数太少或太窄 区分幂律与对数正态分布和其他分布。但是,为了这个 最后,我已经包含了测试机制来测试与power的一致性 如上述文件所述的法律。
python内部文档已经完成。为了方便起见,此处简要介绍了相关功能:
plfit作为类实现。这意味着您导入plfit,并声明plfit类的一个实例:
import plfit X = rand(1000) myplfit = plfit.plfit(X)
拟合结果将打印到屏幕上(如果需要),并作为对象的一部分存储。
alpha_和kstest_是内部使用的函数,用于确定ks统计值和alpha值,作为xmin的函数。
- 有3个预定义的绘图功能:
- plotcdf绘制累积分布函数和 最佳拟合幂律
- plotpdf使用最佳拟合幂律绘制pdf的直方图。它 默认为日志绑定(即线性幂律拟合),但可以执行dn/ds和 线性组合。
{Tt5} $图y轴上的KS与KS统计值 X轴具有“最佳拟合”α值,用误差条绘制。这些 绘图是确定xmin的其他值是否相似的有用方法 很合身。 - 其他有用功能:
- test_pl使用拟合幂律作为蒙特卡罗的起点 测试幂律是否可接受。它返回一个“p值” 如果要考虑幂律拟合,则应为0.1(尽管p值较高 不能确保分配函数是幂律!).
- plexp_inv创建具有指数的截止幂律分布 甩掉尾巴。它对测试很有用。
- pl_inv创建纯截止幂律分布
- test_fitter使用前两个函数来测试装配工的能力 为大量迭代返回正确的xmin和alpha值
powerlaw fitter在返回正确的alpha值时非常有效 但不善于返回正确的xmin值。
代码内部有3个实现。fplfit.f是fortran语言 函数,cplfit.pyx是cython函数,plfit.py是包装器和 包括一个只需要numpy的python实现。Fortran是最快的, 紧随其后的是赛顿。Python大约慢3倍。
截至2011年11月21日,有一个纯python(即,没有numpy)实现 在<;https://github.com/keflavich/plfit/blob/master/plfit/plfit_py.py>;-您可以 将此文件放入本地工作目录并导入,因为它包含 除了纯python之外没有其他需求。它比较慢,步履蹒跚,但它能工作,也许 会跑得很快H pypy。
- 有关用法examples,请参见
一个非常简单的例子:
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的翻译已经在下面的作品中被引用(也许还有其他的作品?):
v1.0.1-仅对pypi进行错误修复;只需将内容添加到manifest.in v1.0-首次发布