1

我尝试使用 Aaron Clauset、Cosma Rohilla Shalizi 和 MEJ Newman 在他们的论文“经验数据中的幂律分布”中概述的方法将幂律分布拟合到数据集。

我找到了可以与我自己的代码进行比较的代码,但我有点困惑其中一些来自哪里,到目前为止的故事是,

为了确定适合幂律拟合的 xmin,我们将每个可能的 xmin 拟合到该数据的幂律,然后计算相应的指数 (a),然后计算拟合的 KS 统计量 (D) 和观察到的数据,然后找到 xmin对应于 D 的最小值。如果计算如下,则 KS 统计量,

cx   <- c(0:(n-1))/n # n is the sample size for the data >= xmin
cf   <- 1-(xmin/z)^a # the cdf for a powerlaw z = x[x>=xmin]
D <- max(abs(cf-cx))

我不明白 cx 的来源,当然我们应该比较经验分布和计算分布之间的距离。类似于:

cx = ecdf(sort(z))
cf   <- 1-(xmin/z)^a
D <- max(abs(cf-cx(z)))

我想我只是错过了一些非常基本的东西,但请纠正我!

4

1 回答 1

1

答案是它们(几乎)是相同的。查看这一点的最简单方法是生成一些数据:

z = sort(runif(5,xmin, 10*xmin))
n = length(x)

然后检查两个 CDF 的值

R> (cx1 = c(0:(n-1))/n)
[1] 0.0 0.2 0.4 0.6 0.8
R> (cx2 = ecdf(sort(z)))
[1] 0.2 0.4 0.6 0.8 1.0

请注意,它们几乎相同 - 本质上cx1给出大于或等于的 CDF而cx2大于。

top 方法的优点是计算非常高效且快速。缺点是,如果您的数据不是真正连续的,即z=c(1,1,2)cx1错误的。但是,如果是这种情况,您不应该将您的数据拟合到 CTN 分布中。

于 2013-11-25T16:45:09.887 回答