Мне интересно, есть ли лучший способ проверить, объединены ли две переменные, чем следующий метод:
import numpy as np
import statsmodels.api as sm
import statsmodels.tsa.stattools as ts
y = np.random.normal(0,1, 250)
x = np.random.normal(0,1, 250)
def cointegration_test(y, x):
# Step 1: regress on variable on the other
ols_result = sm.OLS(y, x).fit()
# Step 2: obtain the residual (ols_resuld.resid)
# Step 3: apply Augmented Dickey-Fuller test to see whether
# the residual is unit root
return ts.adfuller(ols_result.resid)
Вышеуказанный метод работает; однако он не очень эффективен. Когда я запускаю sm.OLS
, вычисляется много вещей, а не только остатков, это, конечно, увеличивает время выполнения. Я мог бы, конечно, написать свой собственный код, который вычисляет только остатки, но я не думаю, что это будет очень эффективно.
Я ищу либо сборку теста, которая непосредственно тестирует для коинтеграции. Я думал Pandas
, но, похоже, не мог ничего найти. Или, может быть, есть умный тест для коинтеграции без выполнения регрессии или какого-либо эффективного метода.
Мне нужно запустить множество тестов коинтеграции, и было бы неплохо улучшить мой текущий метод.