Экономический кризис в Венесуэле был частью главных новостей в мире. Одной из самых больших проблем является нестабильность обменного курса, который с каждым разом увеличивается из-за потребности людей спастись от непрекращающейся инфляции.

Я решил использовать программное обеспечение RStudio, чтобы создать модель ARIMA для изучения поведения обменного курса, учитывая, что это единственная экономическая переменная, которая обязательно публикуется.

Первым шагом является вызов библиотек, необходимых для выполнения этой работы. Нам понадобятся tidyverse, прогноз, tseries и readxl. Затем мы создадим набор данных с помощью функции tibble(). Итак, мы запускаем эту команду для выполнения этого шага:

#Call libraries

library(tidyverse)
library(forecast)
library(tseries)
library(readxl)

#Create database

data_d <- tibble(read_excel("ER_Diary.xlsx"))

data_d$DATE <- as.Date(data_d$DATE) #Convert Date chr into date type

Теперь нам нужно увидеть, является ли временной ряд обменного курса стационарным или нет. Для простоты я выберу график временного ряда, чтобы увидеть, нет ли стационарности. Следовательно, мы построим график с помощью функции ggplot() следующим образом:

ggplot(data_d, aes(x = DATE, y = RATE)) + 
  geom_line(col = '#325F8C', size = 1) + theme_light() + 
  labs(title = 'Exchange Rate', subtitle = '2019-2022', 
       caption = 'Source: BCV', x = 'Year', y = '') + 
  theme(plot.title = element_text(size = 15, face = 'bold', hjust = 0.5), 
        plot.subtitle = element_text(hjust = 0.5))

Как видим, этот временной ряд не является стационарным. Его можно наблюдать, потому что среднее значение и дисперсия не являются постоянными во времени. Поэтому мы должны применять различия. Учитывая, что временной ряд лучше строится, когда данные представлены в процентах или в первой разности логарифмов, я выберу использование этого последнего типа обработки данных. Затем мы применяем тест Дикки-Фуллера для определения стационарности данных и построим коррелограмму:

data <- diff(log(data_d$RATE)) #First logarithm differences

adf.test(data) #Dickey Fuller test

pacf(data) #Correlogram

Как мы видим, преобразованные данные являются стационарными, поскольку p-значение теста Дики-Фуллера меньше 0,05. Следующим шагом является построение модели ARIMA. В традиционных программах необходимо применить итеративный процесс для поиска лучшей модели ARIMA, но в R есть функция, которая находит лучшую ARIMA для набора данных. Эта функция называется auto.arima() и находится в библиотеке прогнозов. Итак, мы применяем эту функцию, и мы увидим сводку:

model <- auto.arima(data)
summary(model)

Как мы видим, лучшей моделью ARIMA является ARIMA(2, 1, 2). Эта модель не предназначена для реального и научного прогнозирования, но она может служить для демонстрации всех преимуществ использования R для эконометрики временных рядов. Теперь мы построим график этой модели и небольшой прогноз на следующие 16 дней. Сначала мы создадим новую переменную, содержащую все предсказанные значения для модели. Затем мы можем построить график новых данных следующим образом:

fore <- forecast(model, h = 15)

plot(fore, 
     main = 'Forecast from ARIMA(2,1,2) for Venezuelan Exchange Rate', 
     xaxt = 'n', xlim = c(600, 750)) 
axis(1, at = c(600, 650, 700, 800), labels = seq(2020, 2023))
title(sub = expression(Y[t] == 0.1506*Y[t-1]-0.0524*Y[t-2]-0.677*epsilon[t-1]-0.1286*epsilon[t-2]))

Последний шаг — узнать, каковы будут реальные значения прогнозируемых данных с точки зрения UMN/USD. Помните, что прогнозируемые значения модели выражены в виде разностей первых логарифмов. Есть два способа сделать это: один, делается вручную. Это нецелесообразно, когда у вас есть язык программирования R, поэтому мы можем применить второй вариант: использовать цикл for. Мы должны заказать R, который вычисляет эти значения с использованием сложных процентов, потому что каждый прогнозируемый элемент данных представляет собой изменение по сравнению с прошлым значением. Итак, мы применяем цикл for для вычисления сложных процентов следующим образом:

nfore <- as.tibble(fore) #First, we must to convert the data into a tibble

for (i in 1:nrow(nfore)) {
  if (i == 1) {
    one <- data_d$RATE[746] * (1 + nfore$'Point Forecast'[i])
  }
  else 
    one <- one * (1 + nfore$'Point Forecast'[i])
  print(one)
}

Как мы видим, на 28 февраля 2023 года обменный курс может достичь значения 27,58 Bs/USD. Могут ли эти значения быть реальными? Это невозможно узнать, особенно когда речь идет о венесуэльской экономике. Но цель всех этих расчетов — продемонстрировать использование языка программирования R для эконометрики временных рядов на реальном примере.