如何测试分配是否遵循幂定律?


13

我有关于多少用户发布多少问题的数据。例如,

[UserCount, QuestionCount] 
[2, 100] 
[9, 10] 
[3, 80] 
... ...

这意味着2个用户每个发布了100个问题,9个用户每个发布了10个问题,依此类推。那么,如何确定UserCount, QuestionCount分布是否遵循幂律?

我找到了poweRlaw软件包。但是,我只能传递一组数字来进行评估。(此软件包中提供的示例是单词频率。)那么,如何使用此软件包?还是我有什么问题?我也有每个用户的问题计数的数据,即[100, 100, 10, 10, 10 ... ]。如果我将此数据传递给程序包,我将得到什么?


1
本文提供了数学描述如何测试幂律分布以及R代码。Clauset等。“经验数据中的幂律分布。”
Sycorax说恢复莫妮卡2014年

谢谢。但是,我无法赶上论文中的所有内容。我想要一些方法来进行验证。您是否对“将一组数据传递给程序包的含义”有任何想法?在示例中,数据集是单词频率。再次感谢。
tThirday 2014年

抱歉,我对该程序包不熟悉。
Sycorax说恢复Monica 2014年

Answers:


8

根据Clauset等人的方法,这就是使用poweRlaw包测试幂律尾巴的方法:

  1. 构造幂律分布对象。在这种情况下,您的数据是离散的,因此请使用该类的离散版本
data <- c(100, 100, 10, 10, 10 ...)
data_pl <- displ$new(data)
  1. 估计幂定律的和指数,并将它们分配给幂定律对象 αxminα
est <- estimate_xmin(data_pl)
data_pl$xmin <- est$xmin
data_pl$pars <- est$pars

最后两行可以改写为一行

data_pl$xmin <- est

另外,此时,您可以看到KS统计信息:

est$KS
  1. KS统计信息告诉您幂律分布如何适合您的数据,但并没有告诉您数据从幂律中提取的可能性。因此,您还需要一个值。这是您的操作方式:p
bs <- bootstrap_p(data_pl)
bs$p

这可能要花一些时间,所以去喝杯茶吧。

  1. 假设您得到一个值并且它大于0.05或您的显着水平,那么您仍然需要排除没有其他替代分布比幂定律更适合数据的可能性。该软件包实现了3个其他可替代的替代品。以对数正态为例:ppoweRlaw
data_alt <- dislnorm$new(data)
data_alt$xmin <- est$xmin
data_alt$pars <- estimate_pars(data_alt)
comp <- compare_distributions(data_pl, data_alt)

请注意,对数正态分布的设置为幂律,因为函数要求对于两个分布都相同。该对象有两个有趣的字段:指示哪个更合适,以正数表示更好,否则为负。意味着差异有多大。 x m nxmincompare_distributionsxmincompcomp$test_statisticdata_plcomp$p_two_side

用类重复此步骤disexpdispois以将幂定律与这些替代方法进行比较。


请@Clivele,您能提供一些独立的数据示例吗?我在测试数据时遇到问题,因此我希望得到一个运行中的示例...谢谢,我发现您的帖子很有启发性!
maycca

1
您可以键入命令data("moby")并使用moby而不是data在我的示例中使用,例如在介绍中
Zebra Propulsion Lab
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.