使用poweRlaw软件包进行截尾分布的幂律拟合

3

我目前正在尝试找到一种使用MLE计算截断分布的幂律拟合的方法,该分布如下所示:

Image1

如您所见,我已经成功地分别拟合了整个分布(幂律拟合)和下限(指数拟合)。但是,我无法弄清楚如何拟合分布的上限(例如8 < x < 100)。

是否有任何方法可以使用 poweRlaw 包或任何其他R包来完成这项工作?我希望得到类似于以下内容的东西(注意:这只是一个随机分布):

Image2

代码(如果需要):

#Power-Law
library("poweRlaw")
xmin1 <- 8
xmin2 <- 100
plf0 <- displ$new(deg)
plf0$setXmin(xmin1)
plf0_pars <- estimate_pars(plf0)
plf0$setPars(plf0_pars)

#Exponential
exp1 <- disexp$new(deg)
exp1$setXmin(xmin2)
exp1_pars <- estimate_pars(exp1)
exp1$setPars(exp1_pars)
plot(plf0)
lines(plf0, col="green")
lines(exp1, col="red")

有没有一种方法可以获取幂律拟合方程的参数? - user_dhrn
3个回答

0

你不能使用poweRlaw包(我是包的作者)来适配这种类型的模型。

在不久的将来,它不太可能被添加到该包中。


谢谢您的快速回答。您有没有其他想法来解决这个问题? - Max
抱歉,没有(我知道这并不是很有帮助)。 - csgillespie

0
你尝试过在Aaron Clauset的页面上使用R源代码吗?我的意思是Cosma Shalizi的那个,在计算似然比检验结果部分。它可以处理带指数截断的幂律分布,详见文档

0
以下解决方案提供了可以使用rpy2在Python中运行的R代码。
它基于powerlaw库的源代码提供了指令,如Kelvin的答案所建议的那样,主要来自于:https://github.com/jeffalstott/powerlaw/blob/master/testing/pli-R-v0.0.3-2007-07-25/powerexp.R文件。
  1. 安装Gnu Scientific Library (GSL)

    在Debian中: apt-get install libgl2

  2. 从github下载powerlaw python库代码。
  3. 解压并构建位于先前下载的库的testing/pli-R-v0.0.3-2007-07-25/文件夹中的exponential-integral.tgz文件。

    tar xzf exponential-integral.tgz
    cd exponential-integral
    make
    
  4. exp_int文件移动到可执行路径,命名为yourexecutablepath

    mv exp_int yourexecutablepath

  5. 使用完整路径修改powerexp.R文件中的exp_int_function_filename变量,即yourexecutablepath/exp_int

  6. 评估exp.Rpareto.Rpowerexp.R R源代码以包含所有所需函数。

  7. 使用以下R调用将数据拟合为具有指数截止的幂律分布:

    data <- list(5, 3, ...)
    powerexp.fit(unlist(data))
    

上一个命令的输出提供了几个输出值,其中exponent给出了幂律alpha值,而rate则给出了指数截断参数。


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