2013-08-11 10 views
7

Ich experimentiere mit der Anpassung eines Potenzgesetzes an empirische Daten mit dem powerlaw Modul. Ich habe folgende Daten erstellt, die einem Potenzgesetz Verteilung der Exponent 2 folgt:Fit ein Potenzgesetz zu empirischen Daten in Python

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

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

Ich erwarte die angepasste Potenzgesetz haben einen Exponenten von 2 jedoch der resultierende Exponent weicht von dem theoretischen Wert:

fitted_pl = powerlaw.Fit(y) 

    fitted_pl.alpha 
    Out[115]: 1.4017584065981563 

Könnten Sie bitte beraten, warum dies geschieht, oder darauf hinweisen, was ich hier falsch gemacht habe?

Vielen Dank für Ihre freundliche Antwort!

+1

Wenn Sie schreiben 'y.append (x ** (- 2))', ich denke du meinst mit y. append (i ** (- 2)) ' – Brionius

+0

@Brionius Danke, dass Sie das herausgebracht haben, korrigiert. –

+1

Verstehen Sie vielleicht die Regression der Linie 'y (x) = kx^(- a)' mit der Anpassung eines Exponenten an Werte aus der * Wahrscheinlichkeitsverteilung * 'p (x) ~ (a-1) x^(- a)? [Das k-> eine Änderung ist beabsichtigt.] Das 'powerlaw' Modul adressiert die zweite Frage. – DSM

Antwort

8

Wie @DSM gezeigt hat, befasst sich das Powerlaw-Modul mit der Anpassung eines Exponenten an Werte, die aus einer Potenzgesetzverteilung gezogen bzw. erzeugt werden, anstatt eine Regression zu berücksichtigen. Für den Menschen zu helfen, die ähnliche Verwirrungen haben könnte, ist unten, wie sollte man den Exponenten überprüfen Armatur:

## 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