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
-
设置为
TRUE
以使用implementation = "plfit"
计算 p 值。 - p.precision
-
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 的方法来计算拟合分布的参数。有关详细信息,请参阅下面的参考资料。
传递 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)