рекомендации

среда, 23 февраля 2022 г.

Авторегрессионные модели скользящего среднего ARMA (p, q) для анализа временных рядов - часть 2

В части 1 мы рассмотрели модель авторегрессии порядка p, также известную как модель AR(p). Мы ввели ее как расширение модели случайного блуждания в попытке объяснить дополнительную серийную корреляцию в финансовых временных рядах.

В конце концов мы поняли, что она не была достаточно гибкой, чтобы полностью учесть автокорреляцию цен закрытия Amazon Inc. (AMZN) и индекса акций США S&P500. Основная причина этого заключается в том, что оба этих актива условно гетероскедастичны, что означает, что они нестационарны и имеют периоды «переменной дисперсии» или кластеризации волатильности, что не учитывается моделью AR(p).

В будущих статьях мы, в конечном итоге, построим модели авторегрессионного интегрированного скользящего среднего (ARIMA), а также условно гетероскедастические модели семейств ARCH и GARCH. Эти модели предоставят нам первые реалистичные попытки прогнозирования цен на активы.

Однако в этой статье мы собираемся представить модель скользящего среднего порядка q, известную как MA(q). Это компонент более общей модели ARMA, и поэтому нам нужно понять ее, прежде чем двигаться дальше.

Модели скользящего среднего (MA) порядка q

Обоснование

Модель скользящего среднего аналогична модели авторегрессии, за исключением того, что она представляет собой не линейную комбинацию прошлых значений временных рядов, а линейную комбинацию прошлых членов белого шума.

Интуитивно это означает, что модель MA видит такие случайные «шоки» белого шума непосредственно при каждом текущем значении модели. Это контрастирует с моделью AR(p), где «шоки» белого шума видны только косвенно, через регрессию на предыдущие члены ряда.

Ключевое отличие состоит в том, что модель MA будет видеть только последние q шоков для любой конкретной модели MA(q), тогда как модель AR (p) будет учитывать все предыдущие шоки, хотя и в меньшей степени.

Определение

Математически MA (q) представляет собой модель линейной регрессии и имеет структуру, аналогичную AR (p):

Модель скользящего среднего порядка q

Модель временного ряда, {xt}, является моделью скользящего среднего порядка q, MA (q), если:


Где {wₜ} - белый шум с E(wₜ) = 0 и дисперсией σ².

Если мы рассмотрим оператор обратного сдвига B (см. предыдущую статью), то мы можем переписать приведенное выше как функцию ϕ от B:


В следующих статьях мы будем использовать функцию ϕ.

Свойства второго порядка

Как и в случае с AR(p), среднее значение процесса MA(q) равно нулю. Это легко увидеть, поскольку среднее - это просто сумма средних значений членов белого шума, которые сами по себе равны нулю.


где β₀ = 1.

Теперь мы собираемся сгенерировать некоторые смоделированные данные и использовать их для создания коррелограмм. Это сделает приведенную выше формулу для ρk несколько более конкретной.

Моделирование и коррелограммы

MA(1)

Начнем с процесса MA (1). Если мы положим β1 = 0,6, получим следующую модель:


Как и в случае с моделями AR(p) из предыдущей статьи, мы можем использовать R для моделирования такого ряда, а затем построить коррелограмму. Поскольку в предыдущей серии статей по анализу временных рядов у нас было много практики построения графиков, я напишу код R полностью, а не разбиваю его на части:

> set.seed(1)
> x <- w <- rnorm(100)
> for (t in 2:100) x[t] <- w[t] + 0.6*w[t-1]
> layout(1:2)
> plot(x, type="l")
> acf(x)
Результат выглядит следующим образом:


Реализация модели MA (1) с β1 = 0,6 и соответствующей коррелограммой.

Как мы видели выше в формуле для ρk, при k> q все автокорреляции должны быть нулевыми. Поскольку q = 1, мы должны увидеть значительный пик при k = 1, а затем незначительные пики после него. Однако из-за систематической ошибки выборки мы должны ожидать увидеть 5% (незначительно) значимых пиков на графике автокорреляции выборки.

Именно это и показывает нам коррелограмма в данном случае. У нас есть значительный пик при k = 1, а затем незначительные пики при k> 1, за исключением k = 4, где имеется незначительный пик.

Фактически, это полезный способ увидеть, подходит ли модель MA(q). Взглянув на коррелограмму определенного ряда, мы можем увидеть, сколько имеется последовательных ненулевых лагов. Если существует q таких лагов, мы можем законно попытаться подогнать модель MA(q) к определенному ряду.

Поскольку у нас есть свидетельства из наших смоделированных данных процесса MA (1), теперь мы собираемся попытаться подогнать модель MA (1) к нашим смоделированным данным. К сожалению, в R нет команды ma, эквивалентной команде авторегрессионной модели ar.

Вместо этого мы должны использовать более общую команду arima и установить для авторегрессии и интегрированных компонентов ноль. Мы делаем это, создавая 3-вектор и устанавливая первые два компонента (автогрессивный и интегрированный параметры соответственно) равными нулю:

> x.ma <- arima(x, order=c(0, 0, 1))
> x.ma
Call:
arima(x = x, order = c(0, 0, 1))

Coefficients:
         ma1  intercept
      0.6023     0.1681
s.e.  0.0827     0.1424

sigma^2 estimated as 0.7958:  log likelihood = -130.7,  aic = 267.39
Мы получаем полезный вывод от команды arima. Во-первых, мы видим, что параметр был оценен как β1 ^ = 0,602, что очень близко к истинному значению β1 = 0,6. Во-вторых, стандартные ошибки уже рассчитаны для нас, что упрощает расчет доверительных интервалов. В-третьих, мы получаем оценочную дисперсию, логарифмическую вероятность и информационный критерий Акаике (необходимый для сравнения моделей).

Основное различие между arima и ar заключается в том, что arima оценивает член intercept, потому что она не вычитает среднее значение ряда. Следовательно, нам нужно быть осторожными при выполнении прогнозов с помощью команды arima. Мы вернемся к этому вопросу позже.

В качестве быстрой проверки мы собираемся вычислить доверительные интервалы для β1:

> 0.6023 + c(-1.96, 1.96)*0.0827
0.440208 0.764392
Мы видим, что 95% доверительный интервал содержит истинное значение параметра β1 = 0,6, и поэтому мы можем судить, что модель подогнана хорошо. Очевидно, этого следовало ожидать, поскольку мы в первую очередь моделировали данные!

Что изменится, если мы изменим знак β1 на -0,6? Проделаем тот же анализ:

> set.seed(1)
> x <- w <- rnorm(100)
> for (t in 2:100) x[t] <- w[t] - 0.6*w[t-1]
> layout(1:2)
> plot(x, type="l")
> acf(x)
Результат выглядит следующим образом:


Реализация модели MA (1) с β1 = −0,6 и соответствующей коррелограммой.

Мы можем видеть, что при k = 1 у нас есть значительный пик на коррелограмме, за исключением того, что он показывает отрицательную корреляцию, как и следовало ожидать от модели MA(1) с отрицательным первым коэффициентом. И снова все пики за k = 1 несущественны. Подгоним модель MA(1) и оценим параметр:

> x.ma <- arima(x, order=c(0, 0, 1))
> x.ma
Call:
arima(x = x, order = c(0, 0, 1))

Coefficients:
          ma1  intercept
      -0.7298     0.0486
s.e.   0.1008     0.0246

sigma^2 estimated as 0.7841:  log likelihood = -130.11,  aic = 266.23
β1 ^ = - 0,730, что немного занижено для β1 = −0,6. Наконец, рассчитаем доверительный интервал:

> -0.730 + c(-1.96, 1.96)*0.1008
-0.927568 -0.532432
Мы видим, что истинное значение параметра β1 = −0,6 находится в пределах 95% доверительного интервала, что дает нам свидетельство хорошего соответствия модели.

MA(3)

Давайте проделаем ту же процедуру для процесса MA(3). На этот раз следует ожидать значительных пиков при k {1,2,3} и незначительных пиков при k> 3.

Мы собираемся использовать следующие коэффициенты: β1 = 0,6, β2 = 0,4 и β3 = 0,2. Давайте смоделируем процесс MA(3) из этой модели. Я увеличил количество случайных выборок до 1000 в этом моделировании, что упрощает просмотр истинной структуры автокорреляции за счет усложнения интерпретации исходных рядов:

> set.seed(3)
> x <- w <- rnorm(1000)
> for (t in 4:1000) x[t] <- w[t] + 0.6*w[t-1] + 0.4*w[t-2] + 0.3*w[t-3]
> layout(1:2)
> plot(x, type="l")
> acf(x)
Результат выглядит следующим образом:


Реализация модели MA(3) и связанная с ней коррелограмма.

Как и ожидалось, первые три пика значительны. Впрочем, четвертый - тоже. Но мы можем обоснованно предположить, что это может быть связано с систематической ошибкой выборки, поскольку мы ожидаем увидеть 5% пиков, значимых за пределами k = q.

Теперь давайте подгоним модель MA(3) к данным, чтобы попытаться оценить параметры:

> x.ma <- arima(x, order=c(0, 0, 3))
> x.ma
Call:
arima(x = x, order = c(0, 0, 3))

Coefficients:
         ma1     ma2     ma3  intercept
      0.5439  0.3450  0.2975    -0.0948
s.e.  0.0309  0.0349  0.0311     0.0704

sigma^2 estimated as 1.039:  log likelihood = -1438.47,  aic = 2886.95
Оценки β1 ^ = 0,544, β2 ^ = 0,345 и β3 ^ = 0,298 близки к истинным значениям β1 = 0,6, β2 = 0,4 и β3 = 0,3 соответственно. Мы также можем рассчитать доверительные интервалы, используя соответствующие стандартные ошибки:

> 0.544 + c(-1.96, 1.96)*0.0309
0.483436 0.604564
> 0.345 + c(-1.96, 1.96)*0.0349
0.276596 0.413404
> 0.298 + c(-1.96, 1.96)*0.0311
0.237044 0.358956
В каждом случае 95% доверительные интервалы действительно содержат истинное значение параметра, и мы можем сделать вывод, что мы получили хорошее соответствие нашей модели MA(3), как и следовало ожидать.

Финансовые данные

В первой части мы рассмотрели Amazon Inc. (AMZN) и индекс S&P500. Мы подогнали модель AR(p) к ним обоим и обнаружили, что модель не может эффективно уловить сложность последовательной корреляции, особенно в модели S&P500, где, похоже, присутствуют эффекты длинной памяти.

Я не буду снова строить графики для цен и автокорреляции, вместо этого я отсылаю вас к предыдущему посту.

Amazon Inc. (AMZN)

Начнем с попытки подогнать набор моделей MA(q) к AMZN, а именно с q {1,2,3}. Как и в первой части, мы будем использовать Quantmod для загрузки дневных цен AMZN, а затем конвертируем их в поток логарифмических доходностей цен закрытия:

> require(quantmod)
> getSymbols("AMZN")
> amznrt = diff(log(Cl(AMZN)))
Теперь, когда у нас есть логарифмические доходности, мы можем использовать команду arima для подгонки моделей MA(1), MA(2) и MA(3), а затем оценить параметры каждой из них. Для МА(1) имеем:

> amznrt.ma <- arima(amznrt, order=c(0, 0, 1))
> amznrt.ma
Call:
arima(x = amznrt, order = c(0, 0, 1))

Coefficients:
         ma1  intercept
      -0.030     0.0012
s.e.   0.023     0.0006

sigma^2 estimated as 0.0007044:  log likelihood = 4796.01,  aic = -9586.02
Мы можем построить остатки дневных логарифмических доходностей и подогнанную модель:

> acf(amznrt.ma$res[-1])

Остатки модели MA(1), подогнанной к дневным логарифмическим доходностям AMZN

Обратите внимание, что у нас есть несколько значительных пиков при лагах k = 2, k = 11, k = 16 и k = 18, что указывает на то, что модель MA(1) вряд ли будет хорошо соответствовать поведению логарифмических доходностей AMZN, поскольку это не похоже на реализацию белого шума.

Давайте попробуем модель MA(2):

> amznrt.ma <- arima(amznrt, order=c(0, 0, 2))
> amznrt.ma
Call:
arima(x = amznrt, order = c(0, 0, 2))

Coefficients:
          ma1      ma2  intercept
      -0.0254  -0.0689     0.0012
s.e.   0.0215   0.0217     0.0005

sigma^2 estimated as 0.0007011:  log likelihood = 4801.02,  aic = -9594.05
Обе оценки коэффициентов β отрицательны. Давайте еще раз нарисуем остатки:

> acf(amznrt.ma$res[-1])

Остатки модели MA(2), подогнанной к дневным логарифмическим доходностям AMZN

Мы видим, что в первые несколько лагов автокорреляция почти нулевая. Однако у нас есть пять незначительных пиков при лагах k = 12, k = 16, k = 19, k = 25 и k = 27. Это наводит на мысль, что модель MA(2) улавливает большую часть автокорреляции, но не все эффекты длинной памяти. Как насчет модели MA(3)?

> amznrt.ma <- arima(amznrt, order=c(0, 0, 3))
> amznrt.ma
Call:
arima(x = amznrt, order = c(0, 0, 3))

Coefficients:
          ma1      ma2     ma3  intercept
      -0.0262  -0.0690  0.0177     0.0012
s.e.   0.0214   0.0217  0.0212     0.0005

sigma^2 estimated as 0.0007009:  log likelihood = 4801.37,  aic = -9592.75
Еще раз, мы можем построить невязки:

> acf(amznrt.ma$res[-1])

Остатки модели MA (3), подогнанной к дневным логарифмическим доходностям AMZN.

График остатков MA(3) выглядит почти идентично графику модели MA(2). Это неудивительно, поскольку мы добавляем новый параметр в модель, которая, казалось бы, объяснила большую часть корреляций при более коротких лагах, но это не окажет большого влияния на более долгосрочные лаги.

Все эти свидетельства наводят на мысль о том, что модель MA(q) вряд ли будет полезна для объяснения всей последовательной корреляции изолированно, по крайней мере, для AMZN.

S&P500

Если вы помните, в первой части мы видели, что структура разностей первого порядка логарифмической доходности для S&P500 имеет много значительных пиков с различными лагами, как короткими, так и длинными. Это предоставило доказательства как условной гетероскедастичности (т. е. кластеризации волатильности), так и эффектов долгой памяти. Это привело нас к выводу, что модели AR(p) было недостаточно для отражения всей присутствующей автокорреляции.

Как мы видели выше, модели MA(q) было недостаточно, чтобы уловить дополнительную серийную корреляцию в остатках подобранной модели с разностями первого порядка логарифмической доходности. Теперь мы попытаемся подогнать модель MA(q) к S&P500.

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

Давайте начнем с получения данных и их преобразования в разность первого порядка логарифмически преобразованных дневных цен закрытия, как в предыдущей статье:

> getSymbols("^GSPC")
> gspcrt = diff(log(Cl(GSPC)))
Теперь мы собираемся подогнать модели MA(1), MA(2) и MA(3) к ряду, как мы сделали выше для AMZN. Начнем с МА(1):

> gspcrt.ma <- arima(gspcrt, order=c(0, 0, 1))
> gspcrt.ma
Call:
arima(x = gspcrt, order = c(0, 0, 1))

Coefficients:
          ma1  intercept
      -0.1284      2e-04
s.e.   0.0223      3e-04

sigma^2 estimated as 0.0001844:  log likelihood = 6250.23,  aic = -12494.46
Построим график остатков этой подогнанной модели:

> acf(gspcrt.ma$res[-1])
Остатки модели MA(1), адаптированной к логарифмическим дневным ценам S&P500

Первый значимый пик возникает при k = 2, но их гораздо больше при k {5,10,14,15,16,18,20,21}. Очевидно, что это не реализация белого шума, поэтому мы должны отклонить модель MA(1) как потенциально подходящую для S&P500.

Улучшается ли ситуация с MA (2)?

> gspcrt.ma <- arima(gspcrt, order=c(0, 0, 2))
> gspcrt.ma
Call:
arima(x = gspcrt, order = c(0, 0, 2))

Coefficients:
          ma1      ma2  intercept
      -0.1189  -0.0524      2e-04
s.e.   0.0216   0.0223      2e-04

sigma^2 estimated as 0.0001839:  log likelihood = 6252.96,  aic = -12497.92
Еще раз, давайте построим график остатков этой модели MA(2):

> acf(gspcrt.ma$res[-1])

Остатки модели MA (2), адаптированной к логарифмическим дневным ценам S&P500

Хотя пик при k = 2 исчез (как и следовало ожидать), мы все еще остались со значительными пиками на многих более длительных лагах в остатках. И снова мы видит, что модель MA(2) не подходит.

Мы должны ожидать, что для модели MA (3) будет наблюдаться меньшая последовательная корреляция при k = 3, чем для MA(2), но, опять же, мы также не должны ожидать уменьшения дальнейших лагов.

> gspcrt.ma <- arima(gspcrt, order=c(0, 0, 3))
> gspcrt.ma
Call:
arima(x = gspcrt, order = c(0, 0, 3))

Coefficients:
          ma1      ma2     ma3  intercept
      -0.1189  -0.0529  0.0289      2e-04
s.e.   0.0214   0.0222  0.0211      3e-04

sigma^2 estimated as 0.0001838:  log likelihood = 6253.9,  aic = -12497.81
Наконец, давайте построим график остатков этой модели MA(3):

> acf(gspcrt.ma$res[-1])

Остатки модели MA (3), адаптированной к логарифмическим дневным ценам S&P500

Именно это мы и видим на коррелограмме остатков. Следовательно, MA(3), как и другие модели выше, не подходит для S&P500.

Дальнейшие шаги

Мы подробно рассмотрели две основные модели временных рядов, а именно автогрессионную модель порядка p, AR(p) и затем скользящую среднюю порядка q, MA(q). Мы видели, что они обе способны объяснить некоторую автокорреляцию в остатках разностей первого порядка от логарифмических цен на акции и индексы, но кластеризация волатильности и эффекты долгой памяти сохраняются.

Наконец, пора обратить наше внимание на комбинацию этих двух моделей, а именно на авторегрессионную скользящую среднюю порядка p, q, ARMA (p, q), чтобы посмотреть, улучшит ли она ситуацию.

Однако для полноценного обсуждения нам придется подождать до следующей статьи!

Комментариев нет:

Отправить комментарий