R igraph 手册页

如果您从 R 中使用 igraph,请使用此选项

fit_power_law {igraph}R 文档

将幂律分布函数拟合到离散数据

描述

fit_power_law 将幂律分布拟合到数据集。

用法

fit_power_law(
  x,
  xmin = NULL,
  start = 2,
  force.continuous = FALSE,
  implementation = c("plfit", "R.mle"),
  ...
)

参数

x

要拟合的数据,一个数值向量。对于 ‘R.mle’ 实现,数据必须是整数值。对于 ‘plfit’ 实现,可能存在非整数值,然后拟合连续幂律分布。

xmin

数值标量,或 NULL。拟合幂律的下界。如果为 NULL,则 ‘R.mle’ 实现将使用 x 中的最小值,并且 ‘plfit’ 实现将自动确定其值。此参数可以仅拟合分布的尾部。

开始

数值标量。用于最小化函数的指数的初始值,用于 ‘R.mle’ 实现。通常可以保持不变。

force.continuous

逻辑标量。是否强制 ‘plfit’ 实现使用连续分布,即使样本向量仅包含整数值(偶然)。如果此参数为 false,igraph 将假定至少一个样本为非整数时使用连续分布,否则假定为离散分布。

implementation

字符标量。要使用的实现。请参阅下面的详细信息。

...

附加参数,传递给最大似然优化函数,mle,如果选择 ‘R.mle’ 实现。 ‘plfit’ 实现会忽略它。

详细信息

此函数将幂律分布拟合到包含分布样本的向量(当然,假定遵循幂律)。在幂律分布中,通常假设 P(X=x)x^{-alpha} 成正比,其中 x 是一个正数,\alpha 大于 1。在许多实际情况下,幂律行为仅在阈值 x_{min} 以上才开始生效。此函数的目标是确定 \alpha(如果给定 x_{min}),或者确定 x_{min}\alpha 的对应值。

fit_power_law 提供两种最大似然实现。如果 implementation 参数为 ‘R.mle’,则应用 BFGS 优化(请参阅 mle)算法。附加参数将传递给 mle 函数,因此可以更改优化方法和/或其参数。此实现不能拟合 x_{min} 参数,因此如果要执行此操作,请使用 ‘plfit’ 实现。

plfit’ 实现还使用最大似然原理来确定给定 x_{min}\alpha;当没有预先给出 x_{min} 时,该算法将尝试找到其最佳值,使得拟合分布和原始样本之间的 Kolmogorov-Smirnov 检验的 p 值最大。该函数使用 Clauset、Shalizi 和 Newman 的方法来计算拟合分布的参数。有关详细信息,请参阅下面的参考文献。

取决于 implementation 参数。如果它是 ‘R.mle’,则使用类 ‘mle’ 的对象。它可用于计算置信区间和对数似然。 有关详细信息,请参阅 mle-class

如果 implementation 为 ‘plfit’,则结果是具有以下条目的命名列表

continuous

逻辑标量,指示拟合的幂律分布是连续的还是离散的。

alpha

数值标量,拟合幂律分布的指数。

xmin

数值标量,幂律分布的拟合最小值。换句话说,仅使用输入向量中大于 xmin 的值。

logLik

数值标量,拟合参数的对数似然。

KS.stat

数值标量,Kolmogorov-Smirnov 检验的检验统计量,该检验将拟合分布与输入向量进行比较。分数越小表示拟合越好。

KS.p

数值标量,Kolmogorov-Smirnov 检验的 p 值。小 p 值(小于 0.05)表示该检验拒绝了原始数据可能来自拟合幂律分布的假设。

作者

Tamas Nepusz ntamas@gmail.com 和 Gabor Csardi csardi.gabor@gmail.com

参考

幂律、帕累托分布和齐普夫定律,M. E. J. Newman,Contemporary Physics, 46, 323-351, 2005。

Aaron Clauset, Cosma R .Shalizi and Mark E.J. Newman: Power-law distributions in empirical data. SIAM Review 51(4):661-703, 2009.

参见

mle

示例


# This should approximately yield the correct exponent 3
g <- barabasi.game(1000) # increase this number to have a better estimate
d <- degree(g, mode="in")
fit1 <- fit_power_law(d+1, 10)
fit2 <- fit_power_law(d+1, 10, implementation="R.mle")

fit1$alpha
stats4::coef(fit2)
fit1$logLik
stats4::logLik(fit2)


[包 igraph 版本 1.3.5 索引]