Главная страница
qrcode

Белорусский государственный университет факультет прикладной математики и информатики


НазваниеБелорусский государственный университет факультет прикладной математики и информатики
Дата26.08.2019
Размер0.53 Mb.
Формат файлаdocx
Имя файлаkursovaya_rabota_Fokin.docx
ТипКурсовая
#64409
Каталог

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ФАКУЛЬТЕТ ПРИКЛАДНОЙ МАТЕМАТИКИ И ИНФОРМАТИКИ

Кафедра теории вероятностей и математической статистики

ИССЛЕДОВАНИЕ МОДЕЛЕЙ GARCH С УСТОЙЧИВЫМИ ВОЗМУЩЕНИЯМИ

Курсовая работа

Фокина Владимира Андреевича

студента 3 курса, специальность

«актуарная математика»

Научный руководитель:

Доктор физико-математических наук,

профессор Н.Н.Труш

Минск,2018

БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

Факультет прикладной математики и информатики

Кафедра теории вероятностей и математической статистики
Утверждаю

Заведующий кафедрой _______

«___»__________2018 г.
Задание на курсовую работу
Студент Фокину Владимиру Андреевичу д
1. Тема работы Исследование моделей GARCH с устойчивыми возмущениями

Утверждена приказом №____ по БГУ от “___”____________2018

2. Срок сдачи готовой работы 15 декабря 2017

3. Исходные данные для исследования:

а) Introduction to the rugarch package.-cran.r: https://cran.r-project.org/web/ packages/rugarch/vignettes/Introduction_to_the_rugarch_package.pdf

б) Kim, Y.S. Financial Market Models with Levy Processes and Time-Varying Volatility

4. Перечень вопросов подлежащих разработке

а) Изучить модели, использующиеся в анализе временных рядов

б) Исследовать необходимость и адекватность модели GARCH(1,1) на основе реальных данных

в) Исследовать возможность улучшения модели GARCH(1,1) при помощи использования устойчивых возмущений.

в) Реализовать соответствующее программное обеспечение


Руководитель ________________ Н.Н. Труш
Задание принял к исполнению « ___» ___________ 2018 г.
________________________

(подпись студента)

ОГЛАВЛЕНИЕ


























ВВЕДЕНИЕ

В статистике под временным рядом понимается последовательно измеренные через некоторые (зачастую равные) промежутки времени данные.

Анализ временных рядов объединяет методы изучения временных рядов. Часть методов пытаются понять природу имеющихся данных (откуда они взялись? что их породило?), другая часть - построить прогноз. 

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

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

Модель авторегрессии – скользящего среднего(
ARMA)
Волати́льность
Модель обобщенной авторегрессионной условной гетероскедастичности (GARCH) это применяемая в эконометрике модель для анализа временных рядов (в первую очередь финансовых), у которых условная дисперсия ряда зависит от прошлых значений ряда, прошлых значений этих дисперсий и иных факторов.

В этой работе будут рассмотрены каждая из этих моделей и проведено их сравнение на реальных данных. Наша задача исследовать степень их адекватности и убедиться в необходимости (или нет) учитывать изменение волатильности. Далее мы исследуем возможность получить более качественную модель, изменяя шум, используемый внутри GARCH моделей с нормально распределённого на другие (в том числе и устойчивые) возмущения. После этого мы изучим методы прогнозирования в ARMA-GARCH моделях и применим их на реальных данных.


Модель ARMA(p, q) - Модель авторегрессии – скользящего среднего описывается следующей формулой:


Где c – константа,
В частности, модель ARMA(1,1) описывается следующей формулой:


Основное преимущество ARMA-модели по сравнению c AR или MA, заключается в том, что, как правило, она требует меньше параметров для оценки временного ряда.

В дальнейшем, для сравнения моделей мы будем использовать информационный критерий Акаике:

Если мы используем функцию правдоподобия для оценки модели c k параметрами и значение L максимальное значение функции правдоподобия модели , то AIC рассчитывается как:


Лучшей считается модель, которая имеет минимальное значение AIC.Как видно из формулы, AIC увеличивается по мере роста количества параметров k и снижается по мере роста L, то есть точности оценки. Значения информационных критериев для разных временных рядов несравнимы между собой.

Также, для проверки корректности моделирования будем использовать критерий Ljung-Box. Тест Льюнг-Бокса используется для проверки следующих конкурирующих гипотез:

H
H


Построим процесс

где
set.seed(1)

x <- arima.sim(n=1000, model=list(ar=c(0.5), ma=c(0.1)))

plot(x)

Рисунок 1 ARMA(1,1) процесс


Говорят, что набор элементов (к примеру, части временного ряда) является гетероскедастичным, если определенные подгруппы этих элементов имеют разную дисперсию. Если гетероскедастичность имеет автокорреляцию, то есть условна в зависимости от периода роста волатильности, тогда наблюдаетсяусловная гетероскедастичность.

Известно, что модели ARMA не позволяют моделировать CH-эффект. Однако почему не попробовать моделировать “условную дисперсию” серии с помощью модели ARMA? Это и есть базовый принцип GARCH. В качестве метода выявления CH-эффекта используется тест Льюнга-Бокса, о котором уже упоминалось выше.

Модель GARCH(p, q)  Обобщенная авторегрессионная модель условной неоднородности  описывается формулами:


Где
В частности, модель GARCH(1,1) описывается формулами


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

GARCH(p, q) позволяет моделировать кластеры волатильности, однако стоит учитывать, что её необходимо использовать, когда уже подобрана адекватная модель для среднего доходностей. Именно этот принцип лежит в основе совместного использования ARMA и GARCH в модели ARMA(p,q)-GARCH(1,1).


Построим процесс

где
set.seed(1)

w <- 0.1

a1 <- 0.2

b1 <- 0.3

z <- rnorm(1000)

eps <- rep(0, 1000)

sigsq <- rep(0, 1000)

for (i in 2:1000) {

sigsq[i] <- w + a1 * (eps[i-1]^2) + b1 * sigsq[i-1]

eps[i] <- z[i]*sqrt(sigsq[i])

}

plot(eps, type = 'l')

Рисунок 2 GARCH(1,1) процесс


В качестве статистических данных взята ежемесячная цена на нефть в RUB с февраля 1986 г. по сентябрь 2017 г.


Рисунок 3 Стоимость нефти в RUB
Рисунок 4 Логарифмическая доходность нефти

Попробуем смоделировать данное изменение цен с помощью модели ARMA(p, q), p и q изменяются от 1 до 5. Предпочтение отдадим модели с наименьшим AIC. В результате имеем:

Series: data

ARIMA(4,0,2) with non-zero mean

Coefficients:

ar1 ar2 ar3 ar4 ma1 ma2 mean

-0.1524 0.8141 0.7225 -0.4301 1.5627 1.000 43.2878

s.e. 0.0464 0.0293 0.0290 0.0465 0.0114 0.013 13.9357
sigma^2 estimated as 15.18: log likelihood=-1057.06

AIC=2130.13 AICc=2130.51 BIC=2161.65

Рисунок 6 Смоделированная логарифмическая доходность с помощью ARMA(4,2)

Проверим квадраты остатков модели с помощью критерия Ljung-Box на
соответствие белому шуму:
Box-Ljung test

data: bestmodel$residuals^2

X-squared = 153.64, df = 4, p-value < 2.2e-16

Откуда делаем вывод, что квадраты остатков не являются независимы- ми. Возникает подозрение временного ряда на гетероскедастичность, что
подтверждается рисунком 6.

Теперь применим к ряду модель ARMA(4,2)-GARCH(1,1):

*---------------------------------*

* GARCH Model Fit *

*---------------------------------*
Conditional Variance Dynamics

-----------------------------------

GARCH Model : sGARCH(1,1)

Mean Model : ARFIMA(4,0,2)

Distribution : norm
LogLikelihood : -923.532
Information Criteria

------------------------------------

Akaike 4.9133

Bayes 5.0170

Shibata 4.9120

Hannan-Quinn 4.9545
Weighted Ljung-Box Test on Standardized Residuals

------------------------------------

statistic p-value

Lag[1] 0.2732 6.012e-01

Lag[2*(p+q)+(p+q)-1][17] 13.3780 5.572e-11

Lag[4*(p+q)+(p+q)-1][29] 22.5637 9.729e-03

d.o.f=6

H0 : No serial correlation
Weighted Ljung-Box Test on Standardized Squared Residuals

------------------------------------

statistic p-value

Lag[1] 0.3493 0.5545

Lag[2*(p+q)+(p+q)-1][5] 1.6587 0.7009

Lag[4*(p+q)+(p+q)-1][9] 3.5116 0.6724

d.o.f=2


Рисунок 7 Смоделированная стоимость нефть с помощью ARMA(4,2)-GARCH(1,1)


Рисунок 8 Смоделированная лог. доходность с помощью ARMA(4,2)-GARCH(1,1)
На основании Рисунка 8 и двух тестов Ljung-Box, применённых к
остаткам и квадратам остатков соответственно, мы делаем заключение о том,
что остатки являются белым шумом. Следовательно, модель ARMA(4,2)-
GARCH(1,1) справилась с моделированием на порядок лучше, чем ARMA(4,2).


Проведем аналогичное исследование для курса BYN/USD за 2016 год:

Входные данные:


Рисунок 9 Курс BYN/USD

Рисунок 10 Логарифмическая доходность

ARMA:

Series: data

ARIMA(4,0,3) with non-zero mean

Coefficients:

ar1 ar2 ar3 ar4 ma1 ma2 ma3 mean

2.0333 -1.8742 1.6023 -0.7666 -1.1182 0.7894 -0.5745 19757.2204

s.e. 0.1111 0.2253 0.2009 0.0929 0.1449 0.1752 0.1129 167.6177
sigma^2 estimated as 18979: log likelihood=-1647.85

AIC=3313.71 AICc=3314.43 BIC=3345.75




Рисунок 11 Смоделированный курс BYN/USD с помощью ARMA(4,3)


Рисунок 12 Смоделированная лог. доходность с помощью ARMA(4,3)


Box-Ljung test

data: bestmodel$residuals^2

X-squared = 57.863, df = 3, p-value = 1.681e-12

ARMA(4,3)-GARCH(1,1):

*---------------------------------*

* GARCH Model Fit *

*---------------------------------*
Conditional Variance Dynamics

-----------------------------------

GARCH Model : sGARCH(1,1)

Mean Model : ARFIMA(4,0,3)

Distribution : norm
LogLikelihood : -1595.93
Information Criteria

------------------------------------

Akaike 12.361

Bayes 12.512

Shibata 12.358

Hannan-Quinn 12.422
Weighted Ljung-Box Test on Standardized Residuals

------------------------------------

statistic p-value

Lag[1] 0.3867 0.5340

Lag[2*(p+q)+(p+q)-1][20] 8.0155 1.0000

Lag[4*(p+q)+(p+q)-1][34] 12.6856 0.9513

d.o.f=7

H0 : No serial correlation
Weighted Ljung-Box Test on Standardized Squared Residuals

------------------------------------

statistic p-value

Lag[1] 0.02996 0.86258

Lag[2*(p+q)+(p+q)-1][5] 5.40086 0.12402

Lag[4*(p+q)+(p+q)-1][9] 9.00841 0.08097

d.o.f=2
Рисунок 13 Смоделированный курс BYN/USD с помощью ARMA(4,3)-GARCH(1,1)


Рисунок 14 Смоделированная лог. доходность с помощью ARMA(4,3)-GARHC(1,1)
Результат оказался аналогичен предыдущему. Правда ли это? Попробуем сравнить распределение остатков с нормальным распределением в обоих случаях:

Цена на нефть:


Рисунок 15 Сравнение квантилей нормального распределения и распределения остатков
модели для нефти в случае использования нормального шума в GARCH(1,1)

Курс BYN/USD:


Рисунок 16 Сравнение квантилей нормального распределения и распределения остатков
модели для курса в случае использования нормального шума в GARCH(1,1)
Как видно не во всех случаях GARCH(1,1) с нормальным шумом получает нормально распределённые остатки. В случае с курсом мы получили распределение с «тяжелыми хвостами». Это наталкивает на идею использования устойчивых распределений в качестве шума для GARCH модели.


Для того чтобы случайная величина

где
Параметр
Параметр
При
Параметр σ играет роль масштабного множителя. Это связано с тем, что любая устойчивая случайная величина
Но мы будем использовать более удобную (c численной точки зрения) параметризацию Нолана, основанную на параметризации Золатарёва(M):


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


Влияние параметров распределения на вид плотности распределения было описано выше. В данном подразделе мы просто проиллюстрируем его с помощью следующих графиков:
Рисунок 17 Альфа – параметр, для моделирования хвостов
Рисунок 18 Бета – параметр, для управления асимметрией

Рисунок 19 Гамма (сигма) – параметр, для контроля масштаба
Рисунок 20 Дельта (мю) – параметр сдвига, ни больше, ни меньше

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


Построим процесс

где
set.seed(1)

w <- 0.1

a1 <- 0.2

b1 <- 0.3

z <- rstable(1000, 1.7, 0.5, 1, 0)

eps <- rep(0, 1000)

sigsq <- rep(0, 1000)

for (i in 2:1000) {

sigsq[i] <- w + a1 * (eps[i-1]^2) + b1 * sigsq[i-1]

eps[i] <- z[i]*sqrt(sigsq[i])

}

plot(eps, type = 'l')

Рисунок 21 GARCH(1,1) процесс с шумом


В этом подразделе мы напомним основные результаты, полученные в третьей главе:

ARMA(4,3)-GARCH(1,1)-N(0,1):
Логарифмическая функция правдоподобия: -1595.93
Информационный критерий Акаике: 12.361


Рисунок 22 Сравнение квантилей нормального распределения и распределения остатков
модели для курса в случае использования нормального шума в GARCH(1,1)


ARMA(4,3)-GARCH(1,1)-


















Логарифмическая функция правдоподобия: -1585.307
Информационный критерий Акаике: 12.30236


Рисунок 23 Сравнение квантилей модели для курса в случае использования устойчивого шума в GARCH(1,1)

Рисунок 24 Модель курса BYN/USD: ARMA(4,3)-GARCH(1,1)-

Рисунок 25 Модель лог. доходности: ARMA(4,3)-GARHC(1,1)-


ARMA(4,3)-GARCH(1,1)-




















Логарифмическая функция правдоподобия: -1575.591
Информационный критерий Акаике: 12.212


Рисунок 26 Сравнение квантилей t-распределения и распределения остатков
модели для курса в случае использования шума с распределением Стьюдента в GARCH(1,1)


Рисунок 27 Модель курса BYN/USD: ARMA(4,3)-GARCH(1,1)-
Рисунок 28 Модель лог. доходности: ARMA(4,3)-GARCH(1,1)-
Сравнив значения критерия Акаике и графики квантилей, делаем следующие выводы:
Модель с нормальными возмущениями показала самый низкий результат.
  • Согласно графикам квантилей модели с устойчивым распределением и t-распределением являются приемлемыми.
  • Применение моделей с устойчивыми возмущениями требует огромных затрат времени. Это ограничивает их использование на больших выборках.


    Одна из важнейших целей эконометрических моделей временных рядов есть построение прогнозов. Рассмотрим ARMA-GARCH модель. Пусть после применения ARMA модели имеем остатки (ошибки

    Заметим, что доверительный интервал прогноза строится на основе имеющегося ряда Т

    Здесь
    Ошибка предсказания в момент времени Т на  шагов вперед:


    Имеет место равенство:

    В равенстве (14) первое слагаемое может быть рекуррентно вычислено по формуле ([1], c.101)


    Второе слагаемое есть прогноз волатильности на  шагов вперед. Оно может быть вычислено по формуле ([2], c.354)


    Так может быть вычислена дисперсия ошибки прогноза для ­
    Часто прогнозные интервалы строят в виде плюс/минус двух среднеквадратических ошибок прогноза без выяснения того, какой именно доверительной вероятности это соответствует, т.е.
    На практике следует внести изменения в формулы из приведённых выше источников, которые выведены в предположении, что истинные параметры процесса известны. Если параметры неизвестны, они заменяются соответствую-щими оценками. В данной работе мы лишь воспользуемся средствами пакета rugarch языка R для прогнозирования.



    Рисунок 29 Точечный прогноз курса BYN/USD на 20 дней вперёд
    с помощью модели ARMA(4,3)-GARCH(1,1)-N(0,1)


    Рисунок 30 Интервальный прогноз курса BYN/USD на 20 дней вперёд
    с помощью модели ARMA(4,3)-GARCH(1,1)-N(0,1)


    Рисунок 31 Прогноз волатильности BYN/USD на 20 дней вперёд
    с помощью модели ARMA(4,3)-GARCH(1,1)-N(0,1)








    Series Sigma



















    Был проведён сравнительный анализ моделей ARMA(p,q) и ARMA(p,q)-GARCH(1,1).
  • Получен результат неоспоримого преимущества модели ARMA(p,q)-GARCH(1,1) в случае наличия условной гетероскедастичности.
  • Проведен сравнительный анализ моделей ARMA(p,q)-GARCH(1,1) с разными распределениями возмущений.
  • Построен прогноз курса BYN/USD.
  • Реализовано соответствующее программное обеспечение.

    Практикум на ЭВМ по анализу временных рядов: Учеб. пособие / Г.А.Медведев, В.А.Морозов. — Мн.: Университетское, 2001. — 192 с.
  • Суслов В. И., Ибрагимов Н. М., Талышева Л. П., Цыплаков А. А. Эконометрия. Издательство: «Новосибирский государственный университет», 2005 — 742 c
  • https://cran.r-project.org/web/packages/rugarch/vignettes/Introduction_to_the_rugarch_package.pdf
  • http://elib.bsu.by/bitstream/123456789/36491/1/%D0%A2%D1%80%D1%83%D1%88%20%D0%9D%D0%9D.pdf
  • http://kurs-dollar-euro.ru/kurs-valut.html
  • https://quantviews.github.io/Financial_Markets4/lectures/lecture-5.html#(1)
  • https://quantviews.github.io/Financial_Markets4/lectures/lecture-6.html#(1)
  • https://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%B2%D1%82%D0%BE%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8_%E2%80%94_%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%B7%D1%8F%D1%89%D0%B5%D0%B3%D0%BE_%D1%81%D1%80%D0%B5%D0%B4%D0%BD%D0%B5%D0%B3%D0%BE
  • https://ru.wikipedia.org/wiki/%D0%90%D0%B2%D1%82%D0%BE%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%83%D1%81%D0%BB%D0%BE%D0%B2%D0%BD%D0%B0%D1%8F_%D0%B3%D0%B5%D1%82%D0%B5%D1%80%D0%BE%D1%81%D0%BA%D0%B5%D0%B4%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C
  • https://worldtable.info/yekonomika/cena-na-neft-marki-brent-tablica-s-1986-po-20.html


    Листинг программы

    library("forecast")

    library("rugarch")

    library("moments")

    library("xts")

    library("stabledist")

    library("GEVStableGarch")

    library("fGarch")

    #arma&garch examples

    set.seed(1)

    x <- arima.sim(n=1000, model=list(ar=c(0.5), ma=c(0.1)))

    plot(x)

    set.seed(1)

    w <- 0.1

    a1 <- 0.2

    b1 <- 0.3

    z <- rnorm(1000)

    eps <- rep(0, 1000)

    sigsq <- rep(0, 1000)

    for (i in 2:1000) {

    sigsq[i] <- w + a1 * (eps[i-1]^2) + b1 * sigsq[i-1]

    eps[i] <- z[i]*sqrt(sigsq[i])

    }

    plot(eps, type = 'l')
    #общие настройки

    stepsfo = 20
    #данные 1 -

    data2016b = read.table("data2016b.txt",header=T)

    data2016b = data2016b[c("DATE","RU","USD","EUR")]

    i = 1

    a = numeric(1)

    a[1] = 1

    for(i in 2:182)

    {

    if(i%%7!=2 && i%%7!=3)

    a = c(a,i)

    }

    data2016b = data2016b[a,]

    data2016a = read.table("data2016a.txt",header=T)

    data2016a = data2016a[c("DATE","RU","USD","EUR")]

    data2016a = data2016a[a,]

    rub = as.array(data2016b$USD)

    rua = as.array(data2016a$USD)

    rua = as.numeric(as.character(rua))*10000

    tmpdata = c(rub,rua)

    data = tmpdata

    fdata = tmpdata[1:(length(tmpdata)-stepsfo)]

    plot(data,type = "l")
    #данные 2

    tmp3 = read.table("нефть.txt",header=T)

    data = as.array(tmp3$X3)

    data = as.numeric(as.character(data))

    plot(data,type="l")
    #данные в доходность

    index = numeric(length(data)-1)

    for(i in 1:length(index))

    index[i]=log((data[i+1])/data[i])

    plot(index,type="l")
    # проверка наличия гетероскедасичности

    bestmodel = Arima(data, order = c(1, 0, 1))

    bestAIC = bestmodel$aic

    bestp = 1

    bestq = 1
    p=1

    q=1

    for(p in 1:5)

    for(q in 1:5)

    {

    err <- try(Arima(data, order = c(p, 0, q)))

    if(!is(err, "try-error"))

    {

    arima = Arima(data, order = c(p, 0, q))

    if(arima$aic < bestAIC)

    {

    bestmodel = arima

    bestAIC = bestmodel$aic

    bestp = p

    bestq = q

    }

    }

    }

    summary(bestmodel)

    Box.test(bestmodel$residuals^2, lag = 10, type = "Ljung-Box", fitdf = bestp + bestq)

    plot(data,type="l")

    lines(bestmodel$fitted[2:length(bestmodel$fitted)],col="green")

    plot(index,type = "l")

    indexarma = numeric(length(data)-1)

    for(i in 1:length(indexarma))

    indexarma[i]=log((bestmodel$fitted[i+1])/bestmodel$fitted[i])

    lines(indexarma[2:length(index)],type="l",col = "green")
    #применение garch с нормальным шумом

    model<-ugarchspec(variance.model = list(garchOrder = c(1, 1)),

    mean.model = list(armaOrder = c(4, 3), include.mean = T, archm = F))

    modelfit<-ugarchfit(spec=model,data=fdata)

    modelfit

    plot(data,type="l")

    lines(((modelfit@fit$fitted.values)[2:length(modelfit@fit$fitted.values)]),col="red")

    indexgarch = numeric(length(data)-1)

    for(i in 1:length(indexgarch))

    indexgarch[i]=log((modelfit@fit$fitted.values[i+1])/modelfit@fit$fitted.values[i])

    plot(index,type = "l")

    lines(indexgarch[2:length(index)],type="l",col = "red")

    plot(modelfit,which=9)
    #исследование устойчивых распределений

    x<- (-1000:1000)/200

    y<-dstable(x, alpha=0.5, beta=0, gamma=1, delta=0)

    plot(x, y, type="l", ylim=c(0, 0.8), ylab="Density", col="red")

    y<-dstable(x, alpha=1, beta=0, gamma=1, delta=0)

    lines(x,y, type="l", col="green")

    y<-dstable(x,alpha=1.5, beta=0, gamma=1, delta=0)

    lines(x,y, type="l", col="blue")

    legend("topright",cex=0.7, title="Parameters",

    c("alpha=0.5,beta=0, gamma=1, delta=0","alpha=1,beta=0, gamma=1, delta=0",

    "alpha=1.5, beta=0, gamma=1, delta=0"), lwd = 1,col=c("red","green","blue"))
    x<- (-1000:1000)/200

    y<-dstable(x, alpha=1, beta=-0.8, gamma=1, delta=0)

    plot(x, y, type="l", ylim=c(0, 0.6), ylab="Density", col="red")

    y<-dstable(x, alpha=1, beta=0, gamma=1, delta=0)

    lines(x,y, type="l", col="green")

    y<-dstable(x,alpha=1, beta=0.8, gamma=1, delta=0)

    lines(x,y, type="l", col="blue")

    legend("topright",cex=0.7, title="Parameters",

    c("alpha=1,beta=-0.8, gamma=1, delta=0","alpha=1,beta=0, gamma=1, delta=0",

    "alpha=1, beta=0.8, gamma=1, delta=0"), lwd = 1,col=c("red","green","blue"))
    x<- (-1000:1000)/200

    y<-dstable(x, alpha=1.1, beta=0, gamma=1, delta=0)

    plot(x, y, type="l", ylim=c(0, 0.6), ylab="Density", col="red")

    y<-dstable(x, alpha=1.1, beta=0, gamma=2, delta=0)

    lines(x,y, type="l", col="green")

    y<-dstable(x,alpha=1.1, beta=0, gamma=3, delta=0)

    lines(x,y, type="l", col="blue")

    legend("topright",cex=0.7, title="Parameters",

    c("alpha=1.1,beta=0, gamma=1, delta=0","alpha=1.1,beta=0, gamma=2, delta=0",

    "alpha=1.1, beta=0, gamma=3, delta=0"), lwd = 1,col=c("red","green","blue"))
    x<- (-1000:1000)/200

    y<-dstable(x, alpha=1.1, beta=0, gamma=1, delta=-1)

    plot(x, y, type="l", ylim=c(0, 0.6), ylab="Density", col="red")

    y<-dstable(x, alpha=1.1, beta=0, gamma=1, delta=0)

    lines(x,y, type="l", col="green")

    y<-dstable(x,alpha=1.1, beta=0, gamma=1, delta=1)

    lines(x,y, type="l", col="blue")

    legend("topright",cex=0.7, title="Parameters",

    c("alpha=1.1,beta=0, gamma=1, delta=-1","alpha=1.1,beta=0, gamma=1, delta=0",

    "alpha=1.1, beta=0, gamma=1, delta=1"), lwd = 1,col=c("red","green","blue"))
    w <- 0.1

    a1 <- 0.2

    b1 <- 0.3

    z <- rstable(1000, alpha = 1.7, beta = 0.5, gamma = 1, delta = 0)

    eps <- rep(0, 1000)

    sigsq <- rep(0, 1000)

    for (i in 2:1000) {

    sigsq[i] <- w + a1 * (eps[i-1]^2) + b1 * sigsq[i-1]

    eps[i] <- z[i]*sqrt(sigsq[i])

    }

    plot(eps, type = 'l')
    #применение garch с устойчивым шумом

    models0 = gsFit(data = tmpdata , formula = arma(4,3)+garch(1,1), cond.dist = "stableS0",algorithm = "nlminb+nm")

    plot(tmpdata,type="l")

    lines((tmpdata-models0@residuals)[2:length(models0@residuals)],col="red")

    plot(index,type = "l")

    indexgarchs0 = numeric(length(tmpdata)-1)

    for(i in 1:length(indexgarchs0))

    indexgarchs0[i]=log(((tmpdata-models0@residuals)[i+1])/(tmpdata-models0@residuals)[i])

    lines(indexgarchs0[2:length(index)],type="l",col = "red")

    y<-rstable(260,alpha= 1.457969, beta= 0.148199 , gamma=1, delta=0)

    qqplot(y,(models0@residuals - mean(models0@residuals))/sd(models0@residuals),xlim=c(-10,10),col="blue")

    qqline((models0@residuals - mean(models0@residuals))/sd(models0@residuals))

    #применение garch с шумом стьюдента

    model<-ugarchspec(variance.model = list(garchOrder = c(1, 1)),

    mean.model = list(armaOrder = c(4, 3), include.mean = T, archm = F),distribution.model = "std")

    modelfit<-ugarchfit(spec=model,data=data)

    modelfit

    plot(data,type="l")

    lines(((modelfit@fit$fitted.values)[2:length(modelfit@fit$fitted.values)]),col="red")

    indexgarch = numeric(length(data)-1)

    for(i in 1:length(indexgarch))

    indexgarch[i]=log((modelfit@fit$fitted.values[i+1])/modelfit@fit$fitted.values[i])

    plot(index,type = "l")

    lines(indexgarch[2:length(index)],type="l",col = "red")

    plot(modelfit,which=9)
    #прогнозирование

    forec = ugarchforecast(modelfit,n.ahead = 20)

    forec

    data[256:260]

    plot(forec,which=1)

    plot(forec,which=3)

    plot(c(fdata[200:240],forec@forecast$seriesFor[1:20]),type="l",col="red")

    lines(data[200:260])


  • перейти в каталог файлов


    связь с админом