将幂律拟合到Python中的经验数据
我正在尝试用这个模块来拟合经验数据的幂律。我创建了以下数据,该数据遵循指数2的幂律分布:将幂律拟合到Python中的经验数据,python,power-law,Python,Power Law,我正在尝试用这个模块来拟合经验数据的幂律。我创建了以下数据,该数据遵循指数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 你能告诉我为什么会这样,或者指出我做错了什么吗 谢
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
你能告诉我为什么会这样,或者指出我做错了什么吗
谢谢你友好的回答 正如@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
当你写
y.append(x**(-2))
的时候,我想你的意思是y.append(I**(-2))
@Brionius谢谢你指出了这一点,更正了。你是不是把直线y(x)=kx^(-a)
的回归与将指数拟合到概率分布p(x)~(a-1)x^(-a)
得出的值混淆了?[k->a更改是有意的。powerlaw
模块解决了第二个问题。@DSM,你完全正确!我混淆了这两个截然不同的任务。非常感谢您指出这一点!