簡體   English   中英

Python中的冪律分布擬合

[英]Power law distribution fitting in Python

我正在使用不同的 python 來擬合數據集上的密度函數。 該數據集由從 1 秒開始的正時間值組成。

我測試了不同密度函數scipy.statisticspowerlaw庫使用,以及我自己的功能scipy.optimize的功能curve_fit()

到目前為止,我在擬合以下“修改后的”冪律函數時獲得了最佳結果:

def funct(x, alpha, x0):
    return((x+x0)**(-alpha))

我的代碼如下:

bins = range(1,int(s_distrib.max())+2,1)
y_data, x_data = np.histogram(s_distrib, bins=bins, density=True)
x_data = x_data[:-1]

param_bounds=([0,-np.inf],[np.inf,np.inf])
fit = opt.curve_fit(funct,
                    x_data,
                    y_data,
                    bounds=param_bounds) # you can pass guess for the parameters/errors
alpha,x0 = fit[0]
print(fit[0])

C = 1/integrate.quad(lambda t: funct(t,alpha,x0),1,np.inf)[0]

# Calculate fitted PDF and error with fit in distribution
pdf = [C*funct(x,alpha,x0) for x in x_data]
sse = np.sum(np.power(y_data - pdf, 2.0))
print(sse)

fig, ax = plt.subplots(figsize=(6,4))
ax.loglog(x_data, y_data, basex=10, basey=10,linestyle='None',  marker='.')
ax.loglog(x_data, pdf, basex=10, basey=10,linestyle='None',  marker='.')

擬合為 x0 返回 8.48 的值,為 alpha 返回 1.40 的值。 在 loglog 圖中,數據和擬合圖如下所示:

陰謀

  • 我的第一個問題是技術問題 為什么我得到以下警告和錯誤opt.curve_fit在不斷變化的(X + X0)到(X-X0)時, funct的功能? 由於我對 x0 的界限是 (-inf, +inf),我期待擬合返回 -8.48。

/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:3: 運行時警告:在倒數中遇到除以零 這與 ipykernel 包分開,因此我們可以避免進行導入,直到 ValueError: Residuals are not in the initial觀點。

  • 我的其他問題是理論上的 (x+x0)^(-alpha) 是標准分布嗎? x0值代表什么,物理上怎么解釋這個8.48s的值? 據我了解,這意味着我的分布對應於冪律分布? 我可以認為 x0 對應於將數據擬合到冪律時通常需要的 xmin 值嗎?
  • 關於這個 xmin 值,我理解在擬合過程中只考慮大於這個閾值的數據來表征分布的尾部是有意義的。 但是,我想知道用 xmin 之后的冪律和 xmin 之前的其他分布來表征完整數據的標准方法是什么。

這是很多問題,因為我對這個主題非常陌生,任何評論和回答,即使是部分的,都將不勝感激!

(x+x0)^(-alpha) 是標准分布嗎?

要回答您的第二個問題,是的,它是標准發行版,稱為Zipf 發行版 它是在Python / NumPy的實施,以及

x0 值代表什么

這是移位參數。 標准參數之上的任何分布(如 Zipf 中的功率參數)都可能具有位移和比例參數,這基本上表示您的 X 值是用不同的單位以不同的原點測量的。

關於這個 xmin 值,我理解在擬合過程中只考慮大於這個閾值的數據來表征分布的尾部是有意義的。

這就是 Zipf 定律的定義方式,從 0 到無窮大。 改變它意味着你的起源會有所不同

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM