Python
用python計算均值回歸序列的半衰期
我目前正在嘗試使用 python 程式語言和 Ornstein-Uhlenbeck 過程的理論來計算均值回歸序列的半衰期。
我有一個系列,繪製時看起來像:
這顯然看起來相當意味著恢復。我正在使用python程式碼執行以下操作來查找半衰期(僅供參考,上面顯示的系列保存在變數(z_array)中:
import numpy as np import statsmodels.api as sm #set up lagged series of z_array and return series of z_array z_lag = np.roll(z_array,1) z_lag[0] = 0 z_ret = z - z_lag z_ret[0] = 0 #run OLS regression to find regression coefficient to use as "theta" model = sm.OLS(z_ret,z_lag) res = model.fit() #calculate halflife halflife = -log(2) / res.params[0] print 'Halflife = ',halflife
程式碼執行良好,但是對於這個系列,我的半衰期為 680.5 天 - 從圖表中我可以看出這看起來非常錯誤。完全逆轉發生在該時間框架的一小部分內。
有人可以告訴我我哪裡出了問題嗎?
非常感謝任何幫助!
我發現我做錯了什麼 - OLS 函式正在回歸,沒有截距值 - 所以我不得不使用“add_constant”方法向 X 系列 (z_lag) 添加截距項,如下所示:
z_lag = np.roll(z_array,1) z_lag[0] = 0 z_ret = z_array - z_lag z_ret[0] = 0 #adds intercept terms to X variable for regression z_lag2 = sm.add_constant(z_lag) model = sm.OLS(z_ret,z_lag2) res = model.fit() halflife = -log(2) / res.params[1]
我現在得到了更合理的 15 天半衰期!