library(openxlsx)
library(FSA)
library(knitr)

library(tidyverse)
library(ggridges)

library(forecast)
library(FinTS)
library(rugarch)

Dalam Pemodelan Ekononometrika Deret Waktu keuangan sering kali menunjukkan perilaku yang dikenal sebagai Volatility Clustering (pengelompokan volatilitas), yaitu volatilitas berubah dari waktu ke waktu dan menunjukkan kecenderungan untuk tendensi, yaitu, ada periode volatilitas rendah dan periode di mana volatilitas tinggi. Dalam ekonometrika menyebut hal ini sebagai Autoregressive Conditional Heteroskedasticity (ARCH). pemodelan ARCH ini adalah hal yang menarik karena dapat dimanfaatkan untuk meramalkan ragam periode mendatang.

Misalkan \(Y_t\) adalah deret yang bersifa stasioner terhadap rata-rata dan memiliki model nilai tengah sebagai berikut:

\[ Y_t = \phi + u_t \tag{1} \] \[ u_t \sim N(0,h_t) \tag{2} \] dimana model nilai tengah \(Y_t\) dapat berupa model regresi dinamis atau model autoregresif, dan \(u_t\) adalah galat model. Robert Engle (1982) mengusulkan untuk sebuah model yang melibatkan \(h_t = \textrm{Var}(u_t|u_{t-1}, u_{t-2}, \dots)\), ragam bersayat dari galat model, sebagai model autoregresif berorde \(p\), dan secara matematis dapat ditulis sebagai mana pada persamaan (3)

\[ h_t = \alpha_0 + \alpha_1u^2_{t-1} + \alpha_2u^2_{t-2} + \dots + \alpha_pu^2_{t-q} \tag{3} \]

model ini kemudian disebut dengan model Autoregressive Conditional Heteroskedasticity berorde \(q\), atau ARCH(\(q\)). Diasumsikan \(\alpha_0 > 0\) dan \(\alpha_i \geq 0\) untuk memastikan bahwa \(h_t\) selalu bernilai positif. Pengujian adanya efek ARCH dilakukan dengan menggunakan Auxilliary Regression pada kuadrat galat model nilai tengah, \(u_t^2\).

\[ u_t^2 = \alpha_0 + \alpha_1u^2_{t-1} + \alpha_2u^2_{t-2} + \dots + \alpha_pu^2_{t-q} \tag{4} \]

\[ \begin{aligned} \textrm{H}_0 &: \forall\ \alpha_1,\alpha_2,\dots,\alpha_q=0\\ \textrm{H}_1 &: \exists\ \alpha_1,\alpha_2,\dots,\alpha_q\neq0 \end{aligned} \] Hipotesis nol meunjukkan bahwa tidak adanya efek ARCH pada deret. Statistik uji yang digunakan adalah:

\[ (T-q)R^2 \sim \chi^2_{(1-\alpha,q)} \tag{5} \]

dimana \(T\) adalah banyak amatan, \(q\) adalah banyak lag pada model ARCH yang ingin diuji, serta \(R^2\) adalah koefisien determinasi dari model Auxilliary Regression pada persamaan (4).

Model GARCH atau Generalized Autoregressive Conditional Heteroskedasticity, yang diperkenalkan oleh Tim Bollerslev (1986), adalah pengembangan model ARCH dimana \(h_t\) juga dipengaruhi oleh lag-\(h_t\). Secara umum, GARCH(\(p,q\)) ditulis sebagai mana pada persamaan (6):

\[ \begin{aligned} h_t &= \alpha_0 + \alpha_1u^2_{t-1} + \alpha_2u^2_{t-2} + \dots + \alpha_pu^2_{t-q} + \beta_1h_{t-1} + \beta_2h_{t-2} + \dots + \beta_ph_{t-q} \\ h_t &= \alpha + \sum^{q}_{j=1} \alpha_iu^2_{t-j} + \sum^{p}_{i=1} \beta_ih_{t-i} \end{aligned} \tag{6} \]


Model ARCH (dan GARCH) dapat dimanfaatkan dalam beberapa bidang, salah satunya dalam praktik jual-beli stock.
Salah satu hal yang diperhatikan dalam kegiatan ini adalah return stock, yaitu selisih harga jual stock dengan harga beli stock. Return stock bisa bernilai postif maupun negatif. Jika bernilai postif berarti mendapatkan keuntungan atau mendapatan Capital Gain, sedangkan jika bernilai negatif, berati rugi dan mendapatkan Capital Lost
Secara umum investor stock akan menantikan kondisi Capital Gain untuk menjual asetnya sehingga akan mendapatkan keuntungan besar. Serta, investor dapat berhati-hati untuk tidak menjual stock ketika kondisi Capital Lost guna meminimalisir kerugian. Model ARCH dan GARCH diharapkan dapat meramalkan pergerakan nilai stock sehingga dapat menentukan kapan kondisi Capital Gain dan Capital Lost terjadi di periode mendatang.
Berikut pada Table 1. adalah data harian Return Stock pada tahun 1990 sampai tahun 1999

df     <- read.xlsx("arch_1.xlsx")
df$obs <- seq(as.Date("1990-01-01"), as.Date("1999-12-31"), "1 day")

headtail(df[,c(1,3)], n = 5) %>%
  kable(align = "c",
        col.names = c("Periode", "R_STOCK1"),
        caption = "Dataset Return Stock Tahun 1990-1999")
Dataset Return Stock Tahun 1990-1999
Periode R_STOCK1
1 1990-01-01 -0.0062368
2 1990-01-02 -0.0379122
3 1990-01-03 0.0625204
4 1990-01-04 0.0059773
5 1990-01-05 0.0119556
3648 1999-12-27 0.0000000
3649 1999-12-28 0.0000000
3650 1999-12-29 0.0045106
3651 1999-12-30 -0.0036133
3652 1999-12-31 0.0000000
ggplot(df, aes(x = obs, y = R_STOCK1)) +
  geom_line(size = 0.1, alpha = 0.7) +
  xlab("Periode") +
  ylab("R Stock") + 
  theme_classic()
Return Stock Tahun 1990-1999

Return Stock Tahun 1990-1999

Pada Figure 1. terlihat bahwa pergerakan nilai return stock berfluktuasi pada nilai 0, hal ini menujukkan bahwa data sudah dalah keadaan stasioner terhadap rata-rata.

df %>% select(obs, R_STOCK1) %>%
  top_n(5, R_STOCK1) %>%
  bind_cols(top_n(df[,c(1,3)] ,-5, R_STOCK1)) %>%
  kable(align = "c",
      col.names = c("Periode", "R_STOCK1", "Periode", "R_STOCK1"),
      caption = "Nilai Return stock pada Kondisi Capital Gain dan Capital Lost")
Nilai Return stock pada Kondisi Capital Gain dan Capital Lost
Periode R_STOCK1 Periode R_STOCK1
1990-01-18 0.0822381 1990-11-21 -0.0766954
1992-01-01 0.0741007 1991-12-30 -0.1218773
1992-08-30 0.0833217 1991-12-31 -0.0741007
1995-03-13 0.0788382 1992-01-04 -0.0788548
1999-11-14 0.0989479 1996-08-03 -0.0755291

Dalam beberapa periode, nilai return ini mengalami shock atau perubahan drastis. Seperti pada tanggal 18 Januari 1990, 30 Agustus 1992 dan 14 November 1999, perubahan nilai return-nya sangat besar, kondisi ini adalah kondisi Capital Gain dimana pada tanggal ini adalah waktu yang tepat untuk menjual stock bagi investor. Di lain sisi, pada 30 Desember 1991 nilai return stock sangat rendah.
Berdasarkan hal tersebut akan dilakukan pemodelan ARCH/GARCH, pada data tersebut. Sebelum memodelkan ARCH/GARCH, terlebih dahulu dilakukan pemodelan nilai tengah. Model yang digunakan adalah model Autoregressive Moving Average (ARMA). Penentuan orde ARMA ditinjau berdasarkan banyak lag yang signifikan pada plot ACF dan PACF-nya.

ggplot.corr <- function(data, lag.max = 24, ci = 0.95, large.sample.size = TRUE, horizontal = TRUE,...) {
  
  require(ggplot2)
  require(dplyr)
  require(cowplot)
  
  if(horizontal == TRUE) {numofrow <- 1} else {numofrow <- 2}
  
  list.acf <- acf(data, lag.max = lag.max, type = "correlation", plot = FALSE)
  N <- as.numeric(list.acf$n.used)
  df1 <- data.frame(lag = list.acf$lag, acf = list.acf$acf)
  df1$lag.acf <- dplyr::lag(df1$acf, default = 0)
  df1$lag.acf[2] <- 0
  df1$lag.acf.cumsum <- cumsum((df1$lag.acf)^2)
  df1$acfstd <- sqrt(1/N * (1 + 2 * df1$lag.acf.cumsum))
  df1$acfstd[1] <- 0
  df1 <- select(df1, lag, acf, acfstd)
  
  list.pacf <- acf(data, lag.max = lag.max, type = "partial", plot = FALSE)
  df2 <- data.frame(lag = list.pacf$lag,pacf = list.pacf$acf)
  df2$pacfstd <- sqrt(1/N)
  
  if(large.sample.size == TRUE) {
    plot.acf <- ggplot(data = df1, aes( x = lag, y = acf)) +
    geom_area(aes(x = lag, y = qnorm((1+ci)/2)*acfstd), fill = "#B9CFE7") +
    geom_area(aes(x = lag, y = -qnorm((1+ci)/2)*acfstd), fill = "#B9CFE7") +
    geom_col(fill = "#4373B6", width = 0.7) +
    scale_x_continuous(breaks = seq(0,max(df1$lag),6)) +
    scale_y_continuous(name = element_blank(), 
                       limits = c(min(df1$acf,df2$pacf),1)) +
    ggtitle("ACF") +
    theme_bw()
    
    plot.pacf <- ggplot(data = df2, aes(x = lag, y = pacf)) +
    geom_area(aes(x = lag, y = qnorm((1+ci)/2)*pacfstd), fill = "#B9CFE7") +
    geom_area(aes(x = lag, y = -qnorm((1+ci)/2)*pacfstd), fill = "#B9CFE7") +
    geom_col(fill = "#4373B6", width = 0.7) +
    scale_x_continuous(breaks = seq(0,max(df2$lag, na.rm = TRUE),6)) +
    scale_y_continuous(name = element_blank(),
                       limits = c(min(df1$acf,df2$pacf),1)) +
    ggtitle("PACF") +
    theme_bw()
  }
  else {
    plot.acf <- ggplot(data = df1, aes( x = lag, y = acf)) +
    geom_col(fill = "#4373B6", width = 0.7) +
    geom_hline(yintercept = qnorm((1+ci)/2)/sqrt(N), 
               colour = "sandybrown",
               linetype = "dashed") + 
    geom_hline(yintercept = - qnorm((1+ci)/2)/sqrt(N), 
               colour = "sandybrown",
               linetype = "dashed") + 
    scale_x_continuous(breaks = seq(0,max(df1$lag),6)) +
    scale_y_continuous(name = element_blank(), 
                       limits = c(min(df1$acf,df2$pacf),1)) +
    ggtitle("ACF") +
    theme_bw()
    
    plot.pacf <- ggplot(data = df2, aes(x = lag, y = pacf)) +
    geom_col(fill = "#4373B6", width = 0.7) +
    geom_hline(yintercept = qnorm((1+ci)/2)/sqrt(N), 
               colour = "sandybrown",
               linetype = "dashed") + 
    geom_hline(yintercept = - qnorm((1+ci)/2)/sqrt(N), 
               colour = "sandybrown",
               linetype = "dashed") + 
    scale_x_continuous(breaks = seq(0,max(df2$lag, na.rm = TRUE),6)) +
    scale_y_continuous(name = element_blank(),
                       limits = c(min(df1$acf,df2$pacf),1)) +
    ggtitle("PACF") +
    theme_bw()
  }
  cowplot::plot_grid(plot.acf, plot.pacf, nrow = numofrow)
}

df %>% select(R_STOCK1) %>% ggplot.corr(lag.max = 15)
Plot ACF dan PACF Return stock

Plot ACF dan PACF Return stock

Berdasarkan plot ACF dan PACF pada Figure 2., banyak lag yang signifikan secara berturut-turut adalah 3 dan 2. banyak lag ini akan digunakan sebagai dasar penentuan orde model tentatif ARMA. Selanjutnya akan dilakukan pemilihan model terbaik dari model tentatif, yaitu ARMA(\(3,2\)) dan dipilih berdasarkan nilai Akaike Information Criterion (AIC) yang terkecil, dengan perhitungan sebagai berikut:

\[ \textrm{AIC} = e^{\frac{2k}{n}}\frac{\textrm{SSE}}{n} \tag{7} \]

df %>% select(R_STOCK1) %>% 
  auto.arima(max.p = 3, max.q = 2, trace = T) %>%
  AIC

 Fitting models using approximations to speed things up...

 ARIMA(2,0,2) with non-zero mean : -20323.41
 ARIMA(0,0,0) with non-zero mean : -20289.99
 ARIMA(1,0,0) with non-zero mean : -20294.39
 ARIMA(0,0,1) with non-zero mean : -20295.74
 ARIMA(0,0,0) with zero mean     : -20290.12
 ARIMA(1,0,2) with non-zero mean : -20297.5
 ARIMA(2,0,1) with non-zero mean : -20305.75
 ARIMA(3,0,2) with non-zero mean : -20317.82
 ARIMA(1,0,1) with non-zero mean : -20293.54
 ARIMA(3,0,1) with non-zero mean : -20319.6
 ARIMA(2,0,2) with zero mean     : -20323.45
 ARIMA(1,0,2) with zero mean     : -20297.51
 ARIMA(2,0,1) with zero mean     : -20305.9
 ARIMA(3,0,2) with zero mean     : -20317.91
 ARIMA(1,0,1) with zero mean     : -20293.81
 ARIMA(3,0,1) with zero mean     : -20319.71

 Now re-fitting the best model(s) without approximations...

 ARIMA(2,0,2) with zero mean     : -20303.06

 Best model: ARIMA(2,0,2) with zero mean     
[1] -20303.07

Berdasarkan output, dipilih model terbaik adalah ARMA(\(2,2\)) tanpa konstanta dengan \(\textrm{AIC}=-20303.06\). Sisaan pada model ARMA(\(2,2\)) dapat dilihat pada Figure 3. sebagai beikut:

model.arima <- Arima(df$R_STOCK1, order = c(2,0,2), include.mean = F)
df_res      <- data.frame(Periode = seq(as.Date("1990-01-01"),
                                        as.Date("1999-12-31"), "1 day"),
                          sisaan = as.vector(model.arima$residuals))

ggplot(df_res, aes(x = Periode, y = sisaan)) +
  geom_line(size = 0.5, alpha = 1, col = "#D8AE5A") +
  xlab("Periode") +
  ylab("Sisaan") + 
  theme_classic()
Sisaan Model ARMA(2,2)

Sisaan Model ARMA(2,2)

Pada Figure 3. terlihat meskipun sisaan (\(u_t\)) berfluktuasi pada nilai nol, ragam dari sisaan tidak tidak konstan pada setiap waktu serta seolah membentuk suatu cluster tersendiri. Terdapat sisaan pada selang waktu tertentu yang ragamnya kecil (ditunjukkan pada jarak antara data dan sumbu absis relatif kecil), namun ada juga sisaan pada selang waktu tertentu yang ragamnya besar

df_res %>% filter(Periode >= as.Date('1996-07-08') & Periode <= as.Date('1996-11-12')) %>%
  ggplot(aes(x = Periode, y = sisaan)) +
    geom_line(size = 1, alpha = 1, col = "#D8AE5A") +
    xlab("Periode") +
    ylab("Sisaan") + 
    theme_classic()
Sisaan Model ARMA(2,2) - 1996

Sisaan Model ARMA(2,2) - 1996

Seperti yang terjadi pada 3 Agustus 1996, pada periode tersebut terjadi shock, namun pada periode selanjutnya nilai sisaan-nya segera kembali stabil.

df_res %>% filter(Periode >= as.Date('1993-12-14') & Periode <= as.Date('1994-12-17')) %>%
  ggplot(aes(x = Periode, y = sisaan)) +
    geom_line(size = 1, alpha = 1, col = "#D8AE5A") +
    xlab("Periode") +
    ylab("Sisaan") + 
    theme_classic()
Sisaan Model ARMA(2,2) - 1994

Sisaan Model ARMA(2,2) - 1994

Hal yang kontras terjadi saat shock pada periode 16 Januari 1994, nilai sisaan setelah periode tersebut memiliki ragam yang cukup besar selama beberapa periode, hingga saat 24 Oktober 1994, nilainya kembali stabil.


Berdasarkan analisis sebelumnya, sisaan yang diperoleh dari model ARMA (\(2,2\)) memiliki volatility clusterin sehingga diperkirakan terdapat efek ARCH pada deret ini. Untuk mengujinya, digunakan Lagrange-Multiplier Test, dengan hipotesis:

\[ \begin{aligned} \textrm{H}_0 &: \forall\ \alpha_1,\alpha_2,\dots,\alpha_q=0\\ \textrm{H}_1 &: \exists\ \alpha_1,\alpha_2,\dots,\alpha_q\neq0 \end{aligned} \]

ArchTest(df$R_STOCK1, demean = TRUE, lags = 1)

    ARCH LM-test; Null hypothesis: no ARCH effects

data:  df$R_STOCK1
Chi-squared = 220.79, df = 1, p-value < 2.2e-16
ArchTest(df$R_STOCK1, demean = TRUE, lags = 2)

    ARCH LM-test; Null hypothesis: no ARCH effects

data:  df$R_STOCK1
Chi-squared = 264.53, df = 2, p-value < 2.2e-16
ArchTest(df$R_STOCK1, demean = TRUE, lags = 3)

    ARCH LM-test; Null hypothesis: no ARCH effects

data:  df$R_STOCK1
Chi-squared = 287.82, df = 3, p-value < 2.2e-16
ArchTest(df$R_STOCK1, demean = TRUE, lags = 4)

    ARCH LM-test; Null hypothesis: no ARCH effects

data:  df$R_STOCK1
Chi-squared = 297, df = 4, p-value < 2.2e-16
Hasil Pengujian Efek ARCH pada data Return stock
Statistik Uji Lags \(p\)-value
220.79 1 \(\sim0\)
264.53 2 \(\sim0\)
287.82 3 \(\sim0\)
297 4 \(\sim0\)

Berdasarkan uji LM pada Table 3., hasil menujukkan bahwa \(p\)-value yang diperoleh sangat kecil (mendekati nilai nol) pada lags 1 sampai 4. Hal ini dapat disimpulkan bahwa terdapat efek ARCH pada data Return stock.


Pemodelan ARCH/GARCH dilakukan dengan mencoba model-model ARCH(\(1\)), ARCH(\(3\)), ARCH(\(4\)), GARCH(\(1,1\)), dan GARCH(\(1,2\))

save_garch <- function(X, p, q, type = "norm"){
  spc <- ugarchspec(variance.model = list(model = "sGARCH",
                                          garchOrder = c(p, q)),
                    mean.model = list(armaOrder = c(2, 2),
                                      include.mean = FALSE),
                    distribution.model = type)
  mod <- ugarchfit(spec = spc, data = X)
  return(mod)
}

g01 <- save_garch(X = df$R_STOCK1, p = 0, q = 1)
g03 <- save_garch(X = df$R_STOCK1, p = 0, q = 3)
g04 <- save_garch(X = df$R_STOCK1, p = 0, q = 4)
g11 <- save_garch(X = df$R_STOCK1, p = 1, q = 1)
g12 <- save_garch(X = df$R_STOCK1, p = 1, q = 2)

data.frame(Periode = seq(as.Date("1990-01-01"),
                         as.Date("1999-12-31"),
                         "1 day"),
           ARCH_1    = g01@fit$sigma, 
           ARCH_3    = g03@fit$sigma,
           ARCH_4    = g04@fit$sigma,
           GARCH_1_1 = g11@fit$sigma,
           GARCH_1_2 = g12@fit$sigma) %>%
    pivot_longer(cols = 2:6,
                 names_to = "Variabel", values_to = "Nilai") %>%
    ggplot(aes(x = Periode, y = Nilai,
               group = Variabel, color = Variabel)) +
    geom_line(size = 0.7, alpha = 1) +
    ggtitle("") +
    ylab("") +
    theme_classic() +
    facet_wrap(~Variabel, ncol = 1, scales = "free")
Plot Perbandingan Standar Deviasi

Plot Perbandingan Standar Deviasi

Berdasarkan perbandingan Standar Deviasi pada Figure 6., model GARCH mampu menangkap voaltilitas secara lebih detil dibandingkan model ARCH. Untuk memilih model terbaik untuk memprediksi keragaman pada pemodelan galat, dipilih model dengan nilai AIC terkecil.

Perbandinga nilai AIC pada Model ARCH dan GARCH
Model AIC
ARCH(\(1\)) -5.556754
ARCH(\(3\)) -5.555504
ARCH(\(4\)) -5.559625
GARCH(\(1,1\)) -5.657361
GARCH(\(1,2\)) -5.658077
g12

*---------------------------------*
*          GARCH Model Fit        *
*---------------------------------*

Conditional Variance Dynamics   
-----------------------------------
GARCH Model : sGARCH(1,2)
Mean Model  : ARFIMA(2,0,2)
Distribution    : norm 

Optimal Parameters
------------------------------------
        Estimate  Std. Error    t value Pr(>|t|)
ar1    -0.914623    0.003840  -238.1981 0.000000
ar2    -0.956925    0.004731  -202.2700 0.000000
ma1     0.931695    0.002051   454.1535 0.000000
ma2     0.976248    0.000084 11640.2128 0.000000
omega   0.000021    0.000004     5.0066 0.000001
alpha1  0.105596    0.015467     6.8272 0.000000
beta1   0.521320    0.144602     3.6052 0.000312
beta2   0.275112    0.130739     2.1043 0.035354

Robust Standard Errors:
        Estimate  Std. Error    t value Pr(>|t|)
ar1    -0.914623    0.004130  -221.4496 0.000000
ar2    -0.956925    0.005115  -187.0678 0.000000
ma1     0.931695    0.002382   391.1250 0.000000
ma2     0.976248    0.000089 10970.4238 0.000000
omega   0.000021    0.000007     2.9438 0.003242
alpha1  0.105596    0.023643     4.4662 0.000008
beta1   0.521320    0.163001     3.1983 0.001383
beta2   0.275112    0.146847     1.8735 0.061005

LogLikelihood : 10339.65 

Information Criteria
------------------------------------
                    
Akaike       -5.6581
Bayes        -5.6445
Shibata      -5.6581
Hannan-Quinn -5.6532

Weighted Ljung-Box Test on Standardized Residuals
------------------------------------
                         statistic   p-value
Lag[1]                       5.959 0.0146449
Lag[2*(p+q)+(p+q)-1][11]     8.151 0.0005871
Lag[4*(p+q)+(p+q)-1][19]    11.053 0.3063776
d.o.f=4
H0 : No serial correlation

Weighted Ljung-Box Test on Standardized Squared Residuals
------------------------------------
                         statistic p-value
Lag[1]                       1.008  0.3155
Lag[2*(p+q)+(p+q)-1][8]      3.417  0.6091
Lag[4*(p+q)+(p+q)-1][14]     5.657  0.6848
d.o.f=3

Weighted ARCH LM Tests
------------------------------------
            Statistic Shape Scale P-Value
ARCH Lag[4]    0.3536 0.500 2.000  0.5521
ARCH Lag[6]    0.9837 1.461 1.711  0.7524
ARCH Lag[8]    2.1262 2.368 1.583  0.7160

Nyblom stability test
------------------------------------
Joint Statistic:  1.6665
Individual Statistics:              
ar1    0.02489
ar2    0.08004
ma1    0.06168
ma2    0.12713
omega  0.43938
alpha1 0.54105
beta1  0.41868
beta2  0.40699

Asymptotic Critical Values (10% 5% 1%)
Joint Statistic:         1.89 2.11 2.59
Individual Statistic:    0.35 0.47 0.75

Sign Bias Test
------------------------------------
                   t-value   prob sig
Sign Bias          0.16661 0.8677    
Negative Sign Bias 0.07509 0.9402    
Positive Sign Bias 1.05757 0.2903    
Joint Effect       1.44499 0.6950    


Adjusted Pearson Goodness-of-Fit Test:
------------------------------------
  group statistic p-value(g-1)
1    20     155.7    1.724e-23
2    30     188.8    2.293e-25
3    40     214.5    4.146e-26
4    50     228.4    5.731e-25


Elapsed time : 1.466402 

Model GARCH(\(1,2\)) memiliki nilai AIC terkecil. Model yang terbentuk adalah sebagai berikut:

\[ \widehat{R.St_t} = - \underset{0.0038}{0.9146}R.St_{t-1} - \underset{0.0047}{0.9569}R.St_{t-2} + \underset{0.0021}{0.9312}u_{t-1} + \underset{0.00008}{0.9762}u_{t-2} + u_t; \ \widehat{u_t} \sim N(0, h_t) \tag{8} \] \[ \widehat{h_t} = \underset{0.000004}{0.000021} + \underset{0.0155}{0.1055}u^2_{t-1} + \underset{0.1446}{0.5213}h_{t-1} + \underset{0.1307}{0.2751}h_{t-2} + v_t \tag{9} \]

Pengujian Parameter Model
Parameter Nilai Std. Error SU \(p\)-value
ar1 -0.9146 0.003840 -238.1981 \(\sim 0\)
ar2 -0.9569 0.004731 -202.2700 \(\sim 0\)
ma1 0.9316 0.002051 454.1535 \(\sim 0\)
ma2 0.9762 0.000084 11640.2128 \(\sim 0\)
omega 0.000021 0.000004 5.0066 0.000001
alpha1 0.1055 0.015467 6.8272 \(\sim 0\)
beta1 0.5213 0.144602 3.6052 0.000312
beta2 0.2751 0.130739 2.1043 0.035354

Berdasarkan Table 5., \(p\)-value pada semua parameter bernilai sangat kecil, hal ini dapat disimpulkan bahwa semua paramter adalah signifikan. Semua parameter pada model GARCH(\(1,2\)) bernilai positif, hal ini sesuai pada asumsi. Sehingga ragam sisaan model ARMA(\(2,2\)) dapat dipastikan selalu postif.