Здравствуйте, дорогие читатели стека, и, надеюсь, комментаторы,
Я пытаюсь создать модель ARMAX-ARCH в python. Однако я обнаружил, что библиотеки в Pyton отсутствуют. Делая много поисков, я нашел рабочее решение для модели ARCH с нулевым средним здесь на стеке потока, однако, когда я попытался настроить его на ARMAX, я столкнулся с некоторыми трудностями. Я полный начинающий R (и python), поэтому я действительно застрял.
В приведенном ниже коде я создаю временный фрейм данных, основанный на ценах акций, данных моему объекту модели арки (self.endogenous в этот случай). Затем я преобразовываю цены на сырье в журналы. Однако на этапе 'mean_model = robjects.r (' list (armaOrder = c (0, 0), external.regressors = self.exogenous) ') возникают проблемы. Если я запускаю этот код, я получаю следующее сообщение об ошибке:
rpy2.rinterface.RRuntimeError: Ошибка в (function (expr, envir = parent.frame (), enclos = if (is.list ( envir) ||: объект 'self.exogenous' не найден
Так что может показаться, что либо я неправильно конвертирую свою экзогенную переменную, либо не использую правильную запись. часть external.regressor, мой код работает отлично. По сути, мой вопрос сводится к тому, как мне реализовать экзогенную часть моего mean_process в rugarch.
Заранее спасибо!
def fit_arch_model(self):
df = DataFrame(columns=['daily_returns', 'monthly_std', 'annual_vol'])
df['daily_returns'] = np.log(self.endogenous['Close']).diff() # Daily log returns
df['monthly_std'] = df['daily_returns'].rolling(21).std() # Standard deviation across trading month
df['annual_vol'] = df['monthly_std'] * np.sqrt(252) # Convert monthly standard devation to annualized volatility
df = df.dropna().reset_index(drop=True)
forecast_horizon= 30
# Initialize R GARCH model
rugarch = importr('rugarch', lib_loc="C:/Users/Ruben/Documents/R/win-library/3.6")
garch_spec = rugarch.ugarchspec(
mean_model=robjects.r('list(armaOrder = c(0, 0), external.regressors = self.exogenous)'),
variance_model=robjects.r('list(garchOrder=c(1,1))'),
distribution_model='std')
# Used to convert training set to R list for model input
numpy2ri.activate()
# Train R GARCH model on returns as %
garch_fitted = rugarch.ugarchfit(
spec=garch_spec,
data=df['daily_returns'].values * 100,
out_sample=forecast_horizon
)