本文連結:https://blog.csdn.net/domotokoi/article/details/111600351
超前滯後相關是什麼想看兩個時間序列是否相關,最簡單的方法就是求二者的相關係數,但是在大氣、海洋等科學問題的研究中,往往一個過程的響應並不是實時的,可能當a過程發生以後一段時間b過程才會發生,這樣的關係往往不是同時期的相關係數可以表現的。超前滯後相關就是為了看兩個過程的發生演變是否在時間的先後上有一定的相關性。
舉個例子:有a、b兩個時間序列,長度都是十二個月,直接求相關係數就是簡單的同期相關。如果a的1-11月對b的2-12月做相關係數,就是a對b超前1個月的相關;拿a的2-12月對b的1-11月做相關則稱之為a對b的滯後1月相關,以此類推,就能求出n個月的超前滯後相關,畫圖出來就是沿0月(同期)正負各n月。
摘自黃嘉佑的書《氣相統計分析與預報方法》,第三版,17頁
python中的實現需要輸入兩個時間序列,結果為data1對data2的超前滯後相關係數的序列
from scipy.stats import pearsonrimport numpy as np#超前滯後相關def leadlagcor(data1,data2,n): #data1和data2為兩個時間序列,n設定做多少個時間步長的超前滯後 a=-n b=-a c=b*2+1 x=np.arange(-n,n+1,1) r=np.zeros((c,1)) p=np.zeros((c,1)) for i in range(c): if i<(b): r[n-i],p[n-i]=pearsonr(data1[:(len(data1)-i)], data2[i:]) else: r[i],p[i]=pearsonr(data1[x[i]:], data2[:len(data1)-x[i]]) return r
附贈一個視覺化程式
def leadlagcor_plot(data1,data2,n): #data1和data2為兩個時間序列,n設定做多少個時間步長的超前滯後 r=leadlagcor(data1,data2,n)#呼叫上面寫的函式做超前滯後相關 x=range(-n,n+1,1) fig = plt.figure() ax = fig.add_subplot(111) ax.plot(x,r,'k--',linewidth=0.8) ax.axhline(0, color='k') b=ax.bar(x,np.squeeze(r),color='red') for bar,height in zip(b,r): if height<0: bar.set(color='blue') print('cor_max:',np.max(r),'\n','cor_min:',np.min(r)) plt.savefig('%s.jpg') plt.show()
畫出來的結果就是這樣啦,有更好的寫法和例圖也歡迎分享~祝大家科研順利,身心健康!
最新評論