幂律拟合和测试

机器算法验证 最大似然 引导程序 拟合优度 离散数据 幂律
2022-03-28 14:04:50

我想测试最适合从系统源代码中提取的特定指标(我称之为 SD)的分布。我猜他们遵循幂律行为。

  • 我的样本:20 个系统
  • 对于这 20 个系统中的每一个,我想测试每个 SD 值出现的内部分布是否遵循幂律(或者,至少有一个很好的拟合)。
  • 从这些系统中提取的指标不是随机样本,而是单个系统内的所有事件。
  • 该指标的取值范围未确定。
  • 这些值是离散的。

我将测试在所有系统中,这个度量标准 SD 是否遵循 PowerLaw(或不遵循)。

我正在使用 Aaron Clauset 的方法论

http://tuvalu.santafe.edu/~aaronc/powerlaws/

还有 Colin S. Gillespie 创建的 R 包

https://cran.r-project.org/web/packages/powerlaw/vignettes/b_powerlaw_examples.pdf

总之,我对每个发行版(每个系统)的步骤是:

1.使用 MLE 估计幂律模型的参数 xmin 和 α(在图中它们是k)。

    m_pl = displ$new(data)
    est = estimate_xmin(m_pl)
    m_pl$setXmin(est)
    plot(m_pl)

2.计算数据与幂律之间的拟合优度。如果得到的 p 值大于 0.1,则幂律是数据的合理假设。

    bs = bootstrap_p(fittedPowerLaw, no_of_sims=numberOfBootstrapSims, threads=8)
    bs$p

一般问题1:方法正确吗?我看到很多例子,人们用样本数据测试分布。在这种情况下,我有来自每个正在测试的系统的所有事件,我可以使用相同的步骤吗?

结果

A- 好结果: 在此处输入图像描述 看图片似乎遵循 PowerLaw 模型。p 值:0.2368,因此幂律是一个合理的假设。

B - 不好的结果:

在此处输入图像描述 看图片,它似乎遵循 PowerLaw 模型。但是 p 值为 0.0292,排除了幂律。

问题 2:这些结果(A 和 B)是否正确?

C - 奇数结果: 在此处输入图像描述 Claset 说小样本会使结果产生偏差(例如,n<100 的样本)。我有一个示例,其中数据集很大(n > 3.000),但大多数数据具有相同的值(在本例中为 1)。该图看起来像我们有小数据,因为小的变化只出现在右侧。p 值:0.5976,因此幂律是一个合理的假设。

问题 3:在这种情况下,结果是否有效?

1个回答

作为您正在使用的方法的作者之一,我可以肯定地说,您的问题 1 的答案(您能否将拟合和假设检验方法应用于包含系统中所有记录事件的数据集)是“是的”。事实上,在我们在 Clauset、Shalizi 和 Newman 中分析的 24 个数据集中,“经验数据中的幂律分布”。SIAM Review 51 (4), 661-703 (2009),其中一些是来自其系统的完整数据痕迹,而不是随机样本。

对于您的问题 2(结果是否正确),我想说,如果您正确应用了这些方法(请注意,您使用的是其他人对我们方法的实现,因此我无法评论它们的正确性),那么结果似乎相当合理。盯着数百个类似的图,考虑到数据的视觉结构和拟合,你引用的 p 值似乎也是合理的。所以,随着p>0.1在结果 A 中,可以继续进行,就好像数据与从幂律分布中提取的数据一致。随着p<0.1在结果 B 中,这是不行的。这些数据未通过测试的原因可能是因为数据不是从单个幂律分布中提取的(违反 iid 的“id”假设),或者它们是但不是独立提取(违反“i”假设同住同居)。

一般来说,拟合幂律区域中的观测数越少,我们表示ntail, 结果中的统计功效越小p-价值。因此,结果 C 可能是虚假的。当上尾区域的数据很少时,大多数分布都适合(因为那里的数据不多)。该方法仍然为您提供“正确”的答案,但这并不是一个特别有用的答案。