Plot Data

#Plot Daily Closing Price
plot(df, main = "Data Harga Closing Harian Doge Coin Desember 2023-Desember 2024",
     xlab = "Date",
     ylab = expression(p[t]))

#Plot Daily Return
r.df <-diff(log(df)) #penghitungan return
plot(r.df, main = "Return Harian Saham Doge Coin Desember 2023-Desember 2024",
     ylab = expression(r[t]),
     xlab = "t",
     type = "l")
lines(r.df, col = "blue", lty = 4)

ARCH Effect Test

Pemodelan ARIMA

ADF Test

adf.test(r.df)
## Warning in adf.test(r.df): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  r.df
## Dickey-Fuller = -6.4445, Lag order = 7, p-value = 0.01
## alternative hypothesis: stationary

Hasil pengujian stasioneritas menggunakan metode Augmented Dicky-Fuller test, karena p-value yang dihasilkan kurang dari 0.05 sebagai tingkat signifikansi, sehingga dapat disimpulkan bahwa data return dari stock Netflix memiliki sifat data yang stasioner.

Pengecekkan Model yang Sesuai

#ACF dan PACF
par(mfrow = c(1,2))
acf(r.df, main = "ACF Data")
pacf(r.df, main = "PACF Data")

Berdasarkan grafik ACF (cuts off pada lag 2) dan PACF (cuts off pada lag 1), maka beberapa model yang cocok diajukan adalah:

  • MA(1)

  • MA(2)

  • AR(1)

  • AR(2)

  • ARMA(1,1)

  • ARMA(2,1)

Pemodelan ARIMA

#Pemodelan ARIMA
mod1 <- arima(r.df, order = c(0,0,1))
mod2 <- arima(r.df, order = c(0,0,2))
mod3 <- arima(r.df, order = c(1,0,0))
mod4 <- arima(r.df, order = c(2,0,0))
mod5 <- arima(r.df, order = c(1,0,1))
mod6 <- arima(r.df, order = c(2,0,1))

#Residual ARIMA
res1 <- mod1$residuals
res2 <- mod2$residuals
res3 <- mod3$residuals
res4 <- mod4$residuals
res5 <- mod5$residuals
res6 <- mod6$residuals

#Information Criteria
AIC(mod1)
## [1] -1129.985
AIC(mod2)
## [1] -1128.797
AIC(mod3)
## [1] -1130.302
AIC(mod4)
## [1] -1129.092
AIC(mod5)
## [1] -1129.734
AIC(mod6)
## [1] -1127.741
Model AIC
MA(1) -1129.985
MA(2) -1128.797
AR(1) -1130.302
AR(2) -1129.734
ARMA(1,1) -1129.734
ARMA(2,1) -1127.741

Berdasarkan output tersebut, dapat diajukan bahwa model terbaik adalah menggunakan model ARMA (2,1).

Diagnostic Checking (White Noise)

acf(res6)

Box.test(res6, type = "Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  res6
## X-squared = 2.0683e-06, df = 1, p-value = 0.9989

Berdasarkan pengujian menggunakan metode Ljung Box, dikarenakan p-value yang dihasilkan lebih besar dari pada tingkat signifikansi (0.05), maka keputusan yang diambil adalah gagal tolak H0 yang bermakna bahwa error yang dihasilkan white noise.

Pengecekkan ARCH Effect

Arch-LM test

#Pengujian
arch.test(res6, lag = 1)
## 
##  Box-Ljung test
## 
## data:  y^2
## X-squared = 36.158, df = 1, p-value = 1.82e-09
## alternative hypothesis: y is heteroscedastic

Model ARMA(2,1) memiliki error yang heteroskedastis dikarenakan pengujian ARCH-LM memiliki hasil tolak H0 (p-value = 0.00039 < alpha = 0.05). Sehingga, dapat dilakukan pemodelan ARCH-GARCH.

Pemodelan ARCH-GARCH

Penentuan Kandidat Model

Corellogram \(residual^2\)

#Correlogram
sqres3 <- res3*res3
acf(sqres3, lag.max = 100, main = "ACF Squared Residual")

pacf(sqres3, lag.max = 100, main = "PACF Squared Residual")

Berdasarkan grafik ACF-PACF dari squared residual, terlihat bahwa grafik ACF mengalami cuts off (pada lag 3) dan grafik PACF mengalami cuts off (pada lag 2). Berikut ini adalah model yang mungkin:

  • GARCH(0,1)

  • GARCH(0,2)

  • GARCH(1,0)

  • GARCH(2,0)

  • GARCH(1,1)

Estimasi Model

#Spesifikasi Model
spec1 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(0, 1)),
                   mean.model = list(armaOrder = c(2, 1), include.mean =F),
                   distribution.model = "norm")

spec2 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(0, 2)),
                   mean.model = list(armaOrder = c(2, 1), include.mean = F))

spec3 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 0)),
                   mean.model = list(armaOrder = c(2, 1), include.mean = F))

spec4 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(2, 0)),
                   mean.model = list(armaOrder = c(2, 1), include.mean = F))

spec5 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1)),
                   mean.model = list(armaOrder = c(2, 1), include.mean = F))

#Fitting Model ARCH-GARCH
g1 <- ugarchfit(spec1, r.df)
g2 <- ugarchfit(spec2, r.df)
g3 <- ugarchfit(spec3, r.df)
g4 <- ugarchfit(spec4, r.df)
g5 <- ugarchfit(spec5, r.df)

#Residual Model
gres1 <- residuals(g1)
gres2 <- residuals(g2, standardize = T)
gres3 <- residuals(g3)
gres4 <- residuals(g4)
gres5 <- residuals(g5)

#Information Criteria
infocriteria(g1)
##                       
## Akaike       -3.077761
## Bayes        -3.024446
## Shibata      -3.078127
## Hannan-Quinn -3.056575
infocriteria(g2)
##                       
## Akaike       -3.072300
## Bayes        -3.008322
## Shibata      -3.072826
## Hannan-Quinn -3.046877
infocriteria(g3)
##                       
## Akaike       -3.229662
## Bayes        -3.176347
## Shibata      -3.230029
## Hannan-Quinn -3.208476
infocriteria(g4)
##                       
## Akaike       -3.231833
## Bayes        -3.167856
## Shibata      -3.232359
## Hannan-Quinn -3.206410
infocriteria(g5)
##                       
## Akaike       -3.255446
## Bayes        -3.191468
## Shibata      -3.255972
## Hannan-Quinn -3.230023

Berdasarkan pemodelan tersebut, dapat dilihat bahwa model GARCH yang cocok untuk menjelaskan volatility pada data adalah model GARCH(0,2).

Koefisien Model

#Summary Model GARCH(0,2)
coef(g2)
##           ar1           ar2           ma1         omega         beta1 
##  1.029447e+00 -6.500152e-02 -9.369219e-01  6.722175e-06  3.125419e-07 
##         beta2 
##  9.976321e-01
Coefficient Estimate
omega 0.00315
alpha1 0.50314
beta1 0.49586

Uji Asumsi Model

Normalitas

#Normalitas
res.test <- as.numeric(gres2)
shapiro.test(res.test)
## 
##  Shapiro-Wilk normality test
## 
## data:  res.test
## W = 0.96709, p-value = 2.399e-07
  • Normalitas

    • Hipotesis
      H0: Error berdistribusi Normal
      H1: Error tidak berdistribusi normal

    • Tingkat Signifikansi (5%)

    • Hasil pengujian
      Berdasarkan hasil pengujian menggunakan shapiro Wilks, didapatkan keputusan tolak H0 karena p-value < alpha.

    • Kesimpulan
      Dengan tingkat signifikans 5% dari sampel yang ada, dapat disimpulkan bahwa error belum berdistribusi normal.

ARCH-LM Test

#Arch-lm effect (Homoskedasticity)
arch.test(gres2, lag = 1)
## 
##  Box-Ljung test
## 
## data:  y^2
## X-squared = 35.626, df = 1, p-value = 2.391e-09
## alternative hypothesis: y is heteroscedastic
  • ARCH-LM test

    • Hipotesis
      H0: Tidak terdapat efek ARCH (homoskedastis)
      H1: Terdapat efek ARCH (heteroskedastis)

    • Tingkat Signifikansi (5%)

    • Hasil pengujian
      Berdasarkan hasil pengujian menggunakan ARCH-LM Test, didapatkan keputusan tolak H0 karena p-value < alpha.

    • Kesimpulan
      Dengan tingkat signifikansi 5% dari sampel yang ada, dapat disimpulkan bahwa error masih heteroskedastis.

Uji Asimetris (Sign Bias)

signbias(g2)
##                       t-value         prob sig
## Sign Bias           0.9270036 3.545440e-01    
## Negative Sign Bias  2.5645103 1.073591e-02  **
## Positive Sign Bias  5.6999914 2.492338e-08 ***
## Joint Effect       40.1193776 1.005198e-08 ***
  • Uji Asimetris

    • Hipotesis
      H0: Tidak terdapat efek leverage (residual model simetris)
      H1: Terdapat efek leverage (residual model tidak simetris)

    • Tingkat Signifikansi (5%)

    • Hasil pengujian
      Berdasarkan hasil pengujian menggunakan Sign Bias Test. Hasil uji Sign Bias untuk model GARCH(0,2) adalah dengan p-value lebih kecil daripada tingkat signifikansi 5% sehingga keputusannya adalah tolak H0 atau tidak ada efek leverage sehingga residual model asimetris.

    • Kesimpulan
      Dengan tingkat signifikans 5% dari sampel yang ada, dapat disimpulkan bahwa terdapat efek leverage pada residual model sehingga bersifat asimetris.

Forecast Volatility

forecast <- ugarchforecast(g5, n.ahead = 10)  # Prediksi 10 hari ke depan
forecast
## 
## *------------------------------------*
## *       GARCH Model Forecast         *
## *------------------------------------*
## Model: sGARCH
## Horizon: 10
## Roll Steps: 0
## Out of Sample: 0
## 
## 0-roll forecast [T0=367-01-01]:
##          Series   Sigma
## T+1  -6.624e-04 0.03853
## T+2   4.402e-04 0.04154
## T+3   3.493e-04 0.04384
## T+4   2.002e-04 0.04563
## T+5   1.070e-04 0.04704
## T+6   5.614e-05 0.04817
## T+7   2.929e-05 0.04906
## T+8   1.526e-05 0.04979
## T+9   7.945e-06 0.05037
## T+10  4.136e-06 0.05084
plot(forecast, which = 1)

plot(forecast, which = 3)