#2.Визуальный анализ временного ряда 
plot(Sample1$Ряд3, type="l")

# 3.Стационарность=============================================================================================
# 1)Сначала строим график частичной автокорреляции, он нужен для определения порядка тестирования гипотез о стационарности
pacf(Sample1$Ряд3)

# 2)Видим по графику, что значим 1 лаг => в следующей функции будет lags=1
# 3)Тест Дики-Фуллера(type=drift, это значит, что изменения во времени происходят без явного тренда)
df <- ur.df(Sample1$Ряд3, type='drift', lags=1)
summary(df)
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression drift 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -10.5669  -1.8001   0.0114   1.7502  11.7886 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  1.101875   0.098393  11.199   <2e-16 ***
## z.lag.1     -1.411078   0.054486 -25.898   <2e-16 ***
## z.diff.lag   0.000563   0.032408   0.017    0.986    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.738 on 951 degrees of freedom
## Multiple R-squared:  0.705,  Adjusted R-squared:  0.7044 
## F-statistic:  1137 on 2 and 951 DF,  p-value: < 2.2e-16
## 
## 
## Value of test-statistic is: -25.898 335.3533 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau2 -3.43 -2.86 -2.57
## phi1  6.43  4.59  3.78
# 4) В выводе смотрим на две вещи: Value of test-statistic и Critical values for test statistics.Если расчетное больше критического (по модулю), то гипотезу Null о нестационарности отвергаем
# В данном случае -25.898=test и -3.43=critical ->
#Null о нестационарности отвергаем -> ряд стационарный, к первым разностям не переходим


#Дики-Фуллера вполне достаточно,но можно еще проделать КПСС-тест и ПП-тест,они также покажут наличие стационарности
kpss.test(Sample1$Ряд3, null='Level') #противоречит остальным и говорит, что ряд не стационарный, ну и фиг с ним, можно забить
## Warning in kpss.test(Sample1$Ряд3, null = "Level"): p-value greater than
## printed p-value
## 
##  KPSS Test for Level Stationarity
## 
## data:  Sample1$Ряд3
## KPSS Level = 0.14616, Truncation lag parameter = 7, p-value = 0.1
pp.test(Sample1$Ряд3) #p-value=0.01 что меньше(или равно) 0.01 => Null отвергаем, ряд стационарный
## Warning in pp.test(Sample1$Ряд3): p-value smaller than printed p-value
## 
##  Phillips-Perron Unit Root Test
## 
## data:  Sample1$Ряд3
## Dickey-Fuller Z(alpha) = -1344.8, Truncation lag parameter = 7, p-value
## = 0.01
## alternative hypothesis: stationary
#Если ряд оказался нестационарным, то мы берем first difference, если и он окажется нестационарным, то берем second difference
#Делается это так: diff1_data<-diff(data, differences=1) и diff2_data<-diff(data, differences=2) соответственно
c <- Sample1$Ряд3
#Либо проверяем так:
aTSA::adf.test(c)
## Augmented Dickey-Fuller Test 
## alternative: stationary 
##  
## Type 1: no drift no trend 
##      lag    ADF p.value
## [1,]   0 -43.12    0.01
## [2,]   1 -21.96    0.01
## [3,]   2 -15.51    0.01
## [4,]   3 -12.69    0.01
## [5,]   4 -10.74    0.01
## [6,]   5  -9.30    0.01
## [7,]   6  -8.35    0.01
## Type 2: with drift no trend 
##      lag   ADF p.value
## [1,]   0 -47.8    0.01
## [2,]   1 -25.9    0.01
## [3,]   2 -19.3    0.01
## [4,]   3 -16.6    0.01
## [5,]   4 -14.7    0.01
## [6,]   5 -13.3    0.01
## [7,]   6 -12.3    0.01
## Type 3: with drift and trend 
##      lag   ADF p.value
## [1,]   0 -47.8    0.01
## [2,]   1 -25.9    0.01
## [3,]   2 -19.3    0.01
## [4,]   3 -16.6    0.01
## [5,]   4 -14.7    0.01
## [6,]   5 -13.3    0.01
## [7,]   6 -12.4    0.01
## ---- 
## Note: in fact, p.value = 0.01 means p.value <= 0.01
aTSA::kpss.test(c)
## KPSS Unit Root Test 
## alternative: nonstationary 
##  
## Type 1: no drift no trend 
##  lag stat p.value
##    7 24.4    0.01
## ----- 
##  Type 2: with drift no trend 
##  lag  stat p.value
##    7 0.177     0.1
## ----- 
##  Type 1: with drift and trend 
##  lag   stat p.value
##    7 0.0266     0.1
## ----------- 
## Note: p.value = 0.01 means p.value <= 0.01 
##     : p.value = 0.10 means p.value >= 0.10
aTSA::pp.test(c)
## Phillips-Perron Unit Root Test 
## alternative: stationary 
##  
## Type 1: no drift no trend 
##  lag Z_rho p.value
##    7 -1590    0.01
## ----- 
##  Type 2: with drift no trend 
##  lag Z_rho p.value
##    7 -1347    0.01
## ----- 
##  Type 3: with drift and trend 
##  lag Z_rho p.value
##    7 -1345    0.01
## --------------- 
## Note: p-value = 0.01 means p.value <= 0.01
#По результатам тестов, ряд стационарный
#3.Структурные разрывы=========================================================================================
#Используем Sup-F тест в пакете strucchange
#Построим переменную с лагом 1
data1 <-c(0,Sample1$Ряд3[1:length(Sample1$Ряд3)-1])
#Считаем F-статистику
stat <- Fstats(Sample1$Ряд3~data1,from=0.1)
#Аlpha-уровень значимости для Чоу-теста
plot(stat,alpha=0.01)

#Определим точку разрыва
breakpoints(stat)
## 
##   Optimal 2-segment partition: 
## 
## Call:
## breakpoints.Fstats(obj = stat)
## 
## Breakpoints at observation number:
## 100 
## 
## Corresponding to breakdates:
## 0.1035565
sctest(stat,type="supF")
## 
##  supF test
## 
## data:  stat
## sup.F = 9.8282, p-value = 0.1242
#Построим функцию Байесовского информационного критерия-БИК
stata <- breakpoints(Sample1$Ряд3~data1)
summary(stata)
## 
##   Optimal (m+1)-segment partition: 
## 
## Call:
## breakpoints.formula(formula = Sample1$Ряд3 ~ data1)
## 
## Breakpoints at observation number:
##                            
## m = 1       365            
## m = 2       365     638    
## m = 3       365     638 809
## m = 4   218 365     638 809
## m = 5   174 347 504 647 809
## 
## Corresponding to breakdates:
##                                                                                
## m = 1                     0.381799163179916                                    
## m = 2                     0.381799163179916                   0.667364016736402
## m = 3                     0.381799163179916                   0.667364016736402
## m = 4   0.228033472803347 0.381799163179916                   0.667364016736402
## m = 5   0.182008368200837 0.362970711297071 0.527196652719665 0.676778242677824
##                          
## m = 1                    
## m = 2                    
## m = 3   0.846234309623431
## m = 4   0.846234309623431
## m = 5   0.846234309623431
## 
## Fit:
##                                  
## m   0    1    2    3    4    5   
## RSS 7159 7109 7071 7046 7025 7025
## BIC 4658 4672 4688 4705 4723 4743
plot(stata)

## compute breakdates corresponding to the
## breakpoints of minimum BIC segmentation
breakdates(stata) #Вывел NA - точек разрыва нет
## [1] NA
#4.Разбиваем ряд и добиваемся стационарности при необходимости
#Стационарным ряд у нас был изначально => к первым разностям мы не переходим
#Точек разрыва не имеет => ряд не разбиваем
#5.Строим ARMA-модель с учетом структурных разрывов(если они есть)
eacf(Sample1$Ряд3)
## AR/MA
##   0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x x o o o o o o o o o  o  o  o 
## 1 o o o o o o o o o o o  o  o  o 
## 2 o o o o o o o o o o o  o  o  o 
## 3 x x o o o o o o o o o  o  o  o 
## 4 x o x o o o o o o o o  o  o  o 
## 5 x o o x o o o o o o o  o  o  o 
## 6 x x x x o o o o o o o  o  o  o 
## 7 x x x x x x o o o o o  o  o  o
#Из матрицы EACF делаем вывод о том, что оптимальна модель arma(1,0)
# Оцениваем параметры оптимальной “короткой” модели (на основе логарифма индекса)
m=Arima(c, order=c(1,0,0))
coeftest(m)
## 
## z test of coefficients:
## 
##            Estimate Std. Error z value  Pr(>|z|)    
## ar1       -0.411905   0.029538 -13.945 < 2.2e-16 ***
## intercept  0.779931   0.062674  12.444 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#6.Тестируем остатки модели на автокорреляцию. Корректируем модель, чтобы добиться отсутствия автокорреляции.
#Проверяем остатки на автокоррелированность (ACF,Ljung-Box test)
plot(residuals(m))

Acf(residuals(m))

#По графику видно, что автокорреляции остатков нет 
Box.test(residuals(m), lag=6, fitdf=1, type = "Ljung-Box") 
## 
##  Box-Ljung test
## 
## data:  residuals(m)
## X-squared = 1.1306, df = 5, p-value = 0.9514
#Null об отсутсвии в тесте Льюинга-Бокса автокорреляции не отвергаем, поскольку p-value = 0.96
#7.Тестируем наличие ARCH-эффекта в остатках.Строим ARMA + GARCH, если ARCH-эффект есть
Acf(residuals(m)^2)

Box.test(residuals(m)^2, lag=6, fitdf=1, type = "Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  residuals(m)^2
## X-squared = 121.9, df = 5, p-value < 2.2e-16
#По графику видно, что автокорреляция квадратов остатков имеется, маленький p-value также отвергает гипотезу об отсутсвии автокорреляции в тесте Льюинга-Бокса
Pacf(residuals(m)^2)

eacf(residuals(m)^2)
## AR/MA
##   0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x x x o o o o x o o x  o  o  o 
## 1 x x x x o o o o o o x  o  o  o 
## 2 x x x o o o o o o o x  o  o  o 
## 3 x x x o o o o o o o x  o  o  x 
## 4 x x x o x o o o o o x  o  x  o 
## 5 x x x x o o o o o o x  o  x  o 
## 6 x x x x x o o o o o x  o  x  o 
## 7 x x x x x o o o o o x  o  x  o
#Строим стандартную гарч-модель (1,1)
spec = ugarchspec(variance.model = list(model = 'sGARCH',garchOrder = c(1, 1)),
                  mean.model = list(armaOrder = c(1,0), include.mean = TRUE), distribution.model = "norm")
m = ugarchfit(spec, c)
m
## 
## *---------------------------------*
## *          GARCH Model Fit        *
## *---------------------------------*
## 
## Conditional Variance Dynamics    
## -----------------------------------
## GARCH Model  : sGARCH(1,1)
## Mean Model   : ARFIMA(1,0,0)
## Distribution : norm 
## 
## Optimal Parameters
## ------------------------------------
##         Estimate  Std. Error  t value Pr(>|t|)
## mu       0.75063    0.056691  13.2408 0.000000
## ar1     -0.37880    0.032410 -11.6878 0.000000
## omega    0.88131    0.311291   2.8312 0.004638
## alpha1   0.19843    0.037637   5.2722 0.000000
## beta1    0.68903    0.063983  10.7689 0.000000
## 
## Robust Standard Errors:
##         Estimate  Std. Error  t value Pr(>|t|)
## mu       0.75063    0.061467  12.2119 0.000000
## ar1     -0.37880    0.037365 -10.1380 0.000000
## omega    0.88131    0.348238   2.5308 0.011381
## alpha1   0.19843    0.043283   4.5844 0.000005
## beta1    0.68903    0.072073   9.5602 0.000000
## 
## LogLikelihood : -2272.493 
## 
## Information Criteria
## ------------------------------------
##                    
## Akaike       4.7646
## Bayes        4.7901
## Shibata      4.7646
## Hannan-Quinn 4.7743
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                   0.005716  0.9397
## Lag[2*(p+q)+(p+q)-1][2]  0.264348  0.9965
## Lag[4*(p+q)+(p+q)-1][5]  1.115716  0.9281
## d.o.f=1
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                      1.245 0.26453
## Lag[2*(p+q)+(p+q)-1][5]     4.474 0.20055
## Lag[4*(p+q)+(p+q)-1][9]     8.596 0.09819
## d.o.f=2
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale P-Value
## ARCH Lag[3]     2.164 0.500 2.000 0.14130
## ARCH Lag[5]     6.728 1.440 1.667 0.04042
## ARCH Lag[7]     8.521 2.315 1.543 0.04013
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  0.4717
## Individual Statistics:              
## mu     0.14063
## ar1    0.08844
## omega  0.08091
## alpha1 0.10691
## beta1  0.06747
## 
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic:          1.28 1.47 1.88
## Individual Statistic:     0.35 0.47 0.75
## 
## Sign Bias Test
## ------------------------------------
##                    t-value   prob sig
## Sign Bias           0.3864 0.6993    
## Negative Sign Bias  1.0143 0.3107    
## Positive Sign Bias  0.1122 0.9107    
## Joint Effect        1.0791 0.7821    
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20     28.69      0.07108
## 2    30     31.24      0.35427
## 3    40     48.35      0.14490
## 4    50     55.92      0.23096
## 
## 
## Elapsed time : 0.09973311
Acf (residuals(m, standardize="TRUE"))

Box.test(residuals(m,standardize="TRUE"), lag=6, fitdf=1, type = "Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  residuals(m, standardize = "TRUE")
## X-squared = 2.1256, df = 5, p-value = 0.8315
Acf (residuals(m, standardize="TRUE")^2)

Box.test(residuals(m,standardize="TRUE"), lag=6, fitdf=1, type = "Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  residuals(m, standardize = "TRUE")
## X-squared = 2.1256, df = 5, p-value = 0.8315
plot(residuals(m,standardize="TRUE"))

#8.Запишем формулу итоговой модели
#Выписать estimate из выводов функций coeftest(m) и optimal parameters функции m = ugarchfit(spec, c) m
#-----------------------------------
#GARCH Model    : sGARCH(1,1)
#Mean Model : ARFIMA(1,0,0)
#Distribution   : norm


#z test of coefficients:
#------------------------------------

#           Estimate Std. Error z value  Pr(>|z|)    
#ar1       -0.411905   0.029538 -13.945 < 2.2e-16 ***
#intercept  0.779931   0.062674  12.444 < 2.2e-16 ***


#Optimal Parameters
#------------------------------------
#       Estimate  Std. Error  t value Pr(>|t|)
#mu       0.75063    0.056691  13.2408 0.000000
#ar1     -0.37880    0.032410 -11.6878 0.000000
#omega    0.88131    0.311291   2.8312 0.004638
#alpha1   0.19843    0.037637   5.2722 0.000000
#beta1    0.68903    0.063983  10.7689 0.000000