跳到内容

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

用法

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

参数

x

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

xmin

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

start

数值标量。对于 ‘R.mle’ 实现,最小化函数的指数的初始值。通常,保持原样是安全的。

force.continuous

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

implementation

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

p.value

[Experimental]

设置为 TRUE 以使用 implementation = "plfit" 计算 p 值。

p.precision

[Experimental]

p 值计算的所需精度。精度最终取决于重采样尝试的次数。重采样试验的次数由 0.25 除以所需精度的平方确定。例如,所需的 0.01 精度意味着将抽取 2500 个样本。

...

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

取决于 implementation 参数。如果它是 ‘R.mle’,则是一个带有类 ‘mle’ 的对象。它可用于计算置信区间和对数似然。请参阅 stats4::mle-class() 了解详细信息。

如果 implementation 是 ‘plfit’,则结果是一个带有条目的命名列表

continuous

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

alpha

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

xmin

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

logLik

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

KS.stat

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

KS.p

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

详细信息

此函数将幂律分布拟合到包含来自分布的样本的向量(假定遵循幂律)。在幂律分布中,通常假设 \(P(X=x)\) 与 \(x^{-\alpha}\) 成正比,其中 \(x\) 是一个正数,\(\alpha\) 大于 1。在许多现实世界案例中,幂律行为仅在阈值 \(x_\text{min}\) 之上才开始发挥作用。此函数的目标是确定 \(\alpha\)(如果给定 \(x_\text{min}\)),或确定 \(x_\text{min}\) 和 \(\alpha\) 的相应值。

fit_power_law() 提供了两种最大似然实现。如果 implementation 参数为 ‘R.mle’,则应用 BFGS 优化(请参阅 stats4::mle())算法。附加参数传递给 mle 函数,因此可以更改优化方法和/或其参数。此实现无法拟合 \ (x_\text{min}\) 参数,因此如果要这样做,请使用 ‘plfit’ 实现。

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

[Experimental]

传递 p.value = TRUE 以在输出中包含 p 值。默认情况下不返回此值,因为计算可能很慢。

参考文献

幂律、帕累托分布和 Zipf 定律,M. E. J. Newman,当代物理学,46, 323-351, 2005。

Aaron Clauset、Cosma R .Shalizi 和 Mark E.J. Newman:实证数据中的幂律分布。 SIAM Review 51(4):661-703, 2009。

参见

作者

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

示例


# This should approximately yield the correct exponent 3
g <- sample_pa(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
#> [1] 2.527759
stats4::coef(fit2)
#>    alpha 
#> 2.527372 
fit1$logLik
#> [1] -55.7596
stats4::logLik(fit2)
#> 'log Lik.' -55.75921 (df=1)