8

我正在尝试使用powerlaw模块将幂律拟合到经验数据。我创建了以下遵循指数 2 的幂律分布的数据:

x = range(1,1000)
y = []

for i in x:
    y.append(i**(-2))

我期望拟合的幂律的指数为 2。但是所得的指数与理论值有很大的偏差:

    fitted_pl = powerlaw.Fit(y)

    fitted_pl.alpha
    Out[115]: 1.4017584065981563

您能否告知为什么会发生这种情况,或者指出我在这里做错了什么?

谢谢你的好意回答!

4

1 回答 1

11

正如@DSM 指出的那样,幂律模块处理将指数拟合到从幂律分布绘制/生成的值,而不是拟合回归。为了帮助可能有类似困惑的人,以下是如何验证指数拟合:

## use a proper power law random number generator (or code your own) 
from networkx.utils import powerlaw_sequence
pl_sequence = powerlaw_sequence(1000,exponent=2.5)

fitted_pl = powerlaw.Fit(pl_sequence)

fitted_pl.alpha
Out[73]: 2.4709012785346314  ##close enough
于 2013-08-12T06:43:41.860 回答