iqoption

Добавление и оценка влияния внешнего регрессора BRN6 в модель ARIMA для RIM6 на R

По мотивам поста Применение ARIMA для предсказания цены на RIM6 на R

Итак, я добавил в ARIMA для RIM6 внешний регрессор — цену на нефть BRN6. И проверил — действительно ли это улучшает модель. Теоретически, должно, так как цена на нефть должна опережать РТС. Сначала меняется мировой спрос на нефть — затем уже меняется спрос на рос. активы.

И действительно — это улучшило модель. Критерий AIC, характеризующий качество модели, уменьшился, несмотря на то, что 1 параметром в модели стало больше. Кроме этого, ошибки модели стали меньше. В усовершенствованной версии диапазон (-100, 100), а в простой — (-200, 200).  

Гистограммы остатков моделей

Добавление и оценка влияния внешнего регрессора BRN6 в модель ARIMA для RIM6 на R

Здесь на верхнем графике ошибки (остатки) модели с дополнительным регрессором fit.arima.reg, а на нижнем — обычной ARIMA fit.arima.

По всем параметрам модель с регрессором fit.arima.reg лучше.

В предсказаниях отклонение цены для модели с регрессором 79.6, а для обычной модели 109.6. 

Характеристики моделей

> fit.arima
Series: cl.RIM6 
ARIMA(0,1,0)                    

sigma^2 estimated as 12012:  log likelihood=-984.25
AIC=1970.51   AICc=1970.53   BIC=1973.59
> fit.arima.reg
Series: cl.RIM6 
ARIMA(0,1,0)                    

Coefficients:
      BRN6.Close
       1321.0798
s.e.    109.7654

sigma^2 estimated as 6337:  log likelihood=-932.6
AIC=1869.19   AICc=1869.27   BIC=1875.36

Код на R

#install.packages("forecast")
#install.packages("tseries")
#install.packages("quantmod")
#install.packages("rusquant", repos="http://R-Forge.R-project.org")
# Установка пакетов. Она не требуется, если уже все установлено.

library(tseries)
library(quantmod)
library(rusquant)
library(forecast)
library(arfima)
# Подключение библиотек. ARFIMA и quantmod пока не используются. 

tickers = c("RIM6", "BRN6")

getSymbols(tickers, src = "Finam", from = Sys.Date()-1, period = "5min")
# Получение данных

cl.RIM6 <- Cl(RIM6)
cl.BRN6 <- Cl(BRN6)
# Цены закрытия

print("Best ARIMA Model")
fit.arima <- auto.arima(cl.RIM6)
print(fit.arima)
# Лучшая простая модель

print("Best ARIMA Model with Externeous regressor")
fit.arima.reg <- auto.arima(cl.RIM6, xreg=cl.BRN6)
print(fit.arima.reg)
# Лучшая модель с дополнительным регрессором

residuals.arima <- residuals(fit.arima)
residuals.arima.reg <- residuals(fit.arima.reg)
# Ошибки (остатки) моделей

par(mfrow=c(2,1))
# Создаем график с 2 строками и 1 столбцом

hist(residuals.arima.reg, breaks=100, col = "green", border = "black")
hist(residuals.arima, breaks=100, col = "green", border = "black")
# Гистограммы

print(predict(fit.arima, n.ahead = 1))
# Предсказание простой модели

lastPredictorValue = cl.BRN6[length(cl.BRN6)]
print(predict(fit.arima.reg, newxreg=c(lastPredictorValue)))
print("last predictor value =")
print(lastPredictorValue)
# Предсказание модели с регрессором для след. момента времени при цене на нефть 51.82


Использованные источники
1. Exogeneous regressors in auto.arima and using them in forecast function in R
2. ARIMA and external regressors in SAS and R
3. ARIMA models with regressors
4. Arima {forecast}