Python

用python計算均值回歸序列的半衰期

  • March 28, 2016

我目前正在嘗試使用 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 天半衰期!

引用自:https://quant.stackexchange.com/questions/25086