如何解决从 R 中的幂律分布中绘制随机数
我使用 R 包“poweRlaw”来估计并随后从离散幂律分布中提取,但是从拟合中提取的分布似乎与数据不匹配。为了说明这一点,请考虑此包指南中的此示例:https://cran.r-project.org/web/packages/poweRlaw/vignettes/b_powerlaw_examples.pdf。这里我们首先从包中下载一个示例数据集,然后拟合离散幂律。
distill
拟合看起来不错,因为我们不能放弃这些数据来自幂分布(p 值 > 0.05)的假设:
library("poweRlaw")
data("moby",package = "poweRlaw")
m_pl = displ$new(moby)
est = estimate_xmin(m_pl)
m_pl$setXmin(est)
然而,当我们使用内置函数 dist_rand() 从这个分布中绘制时,结果分布被移动到原始分布的右侧:
bs = bootstrap_p(m_pl,threads = 8)
bs$p
我可能误解了从幂分布中抽取是什么意思,但这是否是因为我们只拟合了实验分布的尾部(所以我们在参数 Xmin 之后绘制)?如果发生这样的事情,有什么办法可以弥补这一事实,使拟合分布类似于实验分布?
解决方法
这里发生了一些事情。
-
正如您在问题中所暗示的,如果您想比较分布,则需要截断 moby,因此
moby = moby[moby >= m_pl$getXmin()]
-
使用
density()
有点令人担忧。这是一个核密度平滑器,它在离散点上绘制正态分布。由于幂律有很长的尾巴,这是可疑的 -
比较两个幂律分布的尾部很棘手(模拟一些数据并查看)。
无论如何,如果你跑了
set.seed(1)
x = dist_rand(m_pl,n = length(moby))
# Cut off the tail for visualisation
moby = moby[moby >= m_pl$getXmin() & moby < 100]
plot(density(moby),log = "xy")
x = x[ x < 100]
lines(density(x),col = 2)
给出一些非常相似的东西。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。