3

我目前正在尝试找到一种方法来计算适合 MLE 的截止分布的幂律。分布如下所示:

图片1

如您所见,我能够分别拟合整个分布(幂律拟合)和下限(exp-fit)。我没有弄清楚的是如何拟合分布的上限(fe 8 < x < 100)。

有没有办法用powerlaw包或任何其他 R 包做到这一点?我希望是这样的(注意:这只是一个随机分布):

图片2

代码(如有必要):

#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")
4

3 回答 3

0

您是否尝试使用Aaron Clauset 页面上的 R 源代码?我的意思是 Cosma Shalizi 在计算似然比测试结果部分中的那个。根据文档,它处理具有指数截止的幂律。

于 2021-09-04T12:52:33.820 回答
0

以下解决方案提供了可以使用 Python 运行的 R 代码rpy2

它提供了基于powerlaw库的源代码的指令,正如Kelvin 的回答所建议的那样,主要来自:https ://github.com/jeffalstott/powerlaw/blob/master/testing/pli-R-v0.0.3-2007 -07-25/powerexp.R文件。

  1. 安装 Gnu 科学库 (GSL)

    在 Debian 中:apt-get install libgl2

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

    tar xzf exponential-integral.tgz
    cd exponential-integral
    make
    
  4. 将文件移动到从此处exp_int命名的可执行路径。yourexecutablepath

    mv exp_int yourexecutablepath

  5. 使用 exp_int 可执行文件的完整路径修改exp_int_function_filenamepowerexp.R 文件中的变量,即yourexecutablepath/exp_int.

  6. evalexp.R和R 源代码以包含所有需要的功能pareto.Rpowerexp.R

  7. 将您的数据拟合为具有指数截止值的幂律,评估以下 R 调用:

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

最后一个命令的输出提供了几个输出值,exponent其中给出了幂律alpha值和rate给出了指数截止参数。

于 2017-08-21T14:51:01.133 回答
0

您不能将这种类型的模型与poweRlaw包匹配(我是包作者)。

它不太可能被添加到near package中的包中。

于 2017-07-17T06:50:19.990 回答