2013-08-11 27 views
7

Tôi đang thử nghiệm việc lắp đặt một luật năng lượng vào dữ liệu thực nghiệm bằng cách sử dụng mô-đun powerlaw. Tôi đã tạo ra các dữ liệu sau đó tuân theo phân phối định luật hàm mũ của số mũ 2:Phù hợp với pháp luật về quyền lực đối với dữ liệu thực nghiệm trong Python

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

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

tôi hy vọng các định luật hàm mũ được trang bị để có một số mũ của 2. Tuy nhiên số mũ kết quả lệch khỏi giá trị lý thuyết rất nhiều:

fitted_pl = powerlaw.Fit(y) 

    fitted_pl.alpha 
    Out[115]: 1.4017584065981563 

Bạn có thể vui lòng giải thích lý do điều này xảy ra hay chỉ ra những gì tôi đã làm sai ở đây?

Cảm ơn bạn đã trả lời tốt bụng!

+1

Khi bạn viết 'y.append (x ** (- 2))', tôi nghĩ bạn có nghĩa là 'y. nối thêm (i ** (- 2)) ' – Brionius

+0

@Brionius Cảm ơn bạn đã chỉ ra điều đó, sửa chữa. –

+1

Bạn có thể nhầm lẫn hồi quy của dòng 'y (x) = kx^(- a)' với một số mũ phù hợp với các giá trị được vẽ từ phân bố xác suất * * 'p (x) ~ (a-1) x^(- a) '? [K-> thay đổi là cố ý.] Mô-đun 'powerlaw' giải quyết câu hỏi thứ hai. – DSM

Trả lời

8

Như @ DSM đã chỉ ra, mô-đun powerlaw đề cập đến việc lắp một số mũ vào các giá trị được rút ra/được tạo ra từ phân phối pháp luật quyền lực, thay vì lắp hồi quy. Để giúp những người có thể có những nhầm lẫn tương tự, dưới đây là cách người ta nên xác minh số mũ phù hợp:

## 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 
Các vấn đề liên quan