В части 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), чтобы посмотреть, улучшит ли она ситуацию.
Однако для полноценного обсуждения нам придется подождать до следующей статьи!
Комментариев нет:
Отправить комментарий