我尝试使用Aaron Clauset,Cosma Rohilla Shalizi和M.E.J.概述的方法将powerlaw分布拟合到数据集。纽曼在他们的论文“经济数据中的幂律分布”。
我找到了与我自己的代码进行比较的代码,但有点神秘,其中一些来自,到目前为止的故事是,
为powerlaw拟合确定合适的xmin,我们采用每个可能的xmin拟合该数据的幂律,然后计算相应的exponet(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)))
我想我只是遗漏了一些非常基本的东西,但请纠正我!
答案 0 :(得分: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
大于
顶级方法的优势在于它非常高效且快速计算。缺点是如果您的数据不是真正连续的,即z=c(1,1,2)
,则cx1
是错误的。但是,如果是这种情况,那么您不应该将数据拟合到CTN分发中。