#Hasil Pemodelan

d <- read_excel(data_file)
d$Date <- as.Date(round(d$Date), origin = "1899-12-30")
d <- d[order(d$Date), ]
ret   <- diff(log(d$Close)) * 100          # log-return harian (%)
dates <- d$Date[-1]; n <- length(ret)
n_nol <- sum(ret == 0)
cat("Observasi harga:", nrow(d), "| return:", n, "| periode:", format(min(d$Date)), "s.d.", format(max(d$Date)),
    "| missing:", sum(is.na(d$Close)), "| tanggal ganda:", sum(duplicated(d$Date)), "\n")
## Observasi harga: 1131 | return: 1130 | periode: 2022-01-03 s.d. 2026-09-28 | missing: 0 | tanggal ganda: 0
kurt <- function(x) mean((x - mean(x))^4) / mean((x - mean(x))^2)^2
skw  <- function(x) mean((x - mean(x))^3) / mean((x - mean(x))^2)^1.5
jb   <- jarque.bera.test(ret)
desk <- data.frame(N = rb(n), Mean = fmt(mean(ret), 3), Median = fmt(median(ret), 3), SD = fmt(sd(ret), 3),
                   Min = fmt(min(ret), 3), Max = fmt(max(ret), 3), Skewness = fmt(skw(ret), 3), Kurtosis = fmt(kurt(ret), 3))
knitr::kable(desk, align = "c", caption = "Tabel 1. Statistik deskriptif log-return harian TOBA (%)")
Tabel 1. Statistik deskriptif log-return harian TOBA (%)
N Mean Median SD Min Max Skewness Kurtosis
1.130 -0,082 -0,563 4,248 -16,252 22,314 1,033 7,224
par(mfrow = c(2, 1), mar = c(3, 4, 2, 1))
plot(d$Date, d$Close, type = "l", col = "navy", xlab = "", ylab = "Rupiah", main = "Harga Penutupan Saham TOBA")
plot(dates, ret, type = "l", col = "firebrick", xlab = "", ylab = "Return (%)",
     main = "Log-Return Harian TOBA (volatility clustering)")
abline(h = 0, col = "grey40")
Gambar 1. Harga penutupan dan log-return harian saham TOBA

Gambar 1. Harga penutupan dan log-return harian saham TOBA

Uji stasioneritas

adf_p  <- adf.test(log(d$Close)); adf_r <- suppressWarnings(adf.test(ret)); kp <- suppressWarnings(kpss.test(ret))
st <- data.frame(Uji = c("ADF log-harga", "ADF return", "KPSS return"),
                 Statistik = fmt(c(adf_p$statistic, adf_r$statistic, kp$statistic), 3),
                 p_value = c(fmt(adf_p$p.value, 3), "< 0,01", "> 0,10"),
                 Keputusan = c("Tidak stasioner", "Stasioner", "Stasioner"))
knitr::kable(st, align = "lccl", caption = "Tabel 2. Hasil uji stasioneritas")
Tabel 2. Hasil uji stasioneritas
Uji Statistik p_value Keputusan
ADF log-harga -1,922 0,611 Tidak stasioner
ADF return -9,661 < 0,01 Stasioner
KPSS return 0,194 > 0,10 Stasioner

Persamaan rata-rata

par(mfrow = c(2, 2), mar = c(4, 4, 3, 1))
acf(ret, 30, main = "ACF Return");  pacf(ret, 30, main = "PACF Return")
acf(ret^2, 30, main = "ACF Return Kuadrat"); pacf(ret^2, 30, main = "PACF Return Kuadrat")
Gambar 2. ACF/PACF return (atas) dan return kuadrat (bawah)

Gambar 2. ACF/PACF return (atas) dan return kuadrat (bawah)

a5 <- acf(ret, 5, plot = FALSE)$acf[-1]; batas <- 1.96 / sqrt(n)
ordr <- list(c(0,0), c(1,0), c(0,1), c(1,1), c(2,2))
arma <- do.call(rbind, lapply(ordr, function(o) {
  m <- Arima(ret, order = c(o[1], 0, o[2]), include.mean = TRUE)
  data.frame(Model = sprintf("ARMA(%d,%d)", o[1], o[2]), AIC = fmt(m$aic), BIC = fmt(m$bic)) }))
knitr::kable(arma, align = "lcc", caption = "Tabel 3. Perbandingan model ARMA untuk return")
Tabel 3. Perbandingan model ARMA untuk return
Model AIC BIC
ARMA(0,0) 6478,57 6488,63
ARMA(1,0) 6479,99 6495,08
ARMA(0,1) 6480,09 6495,18
ARMA(1,1) 6478,94 6499,06
ARMA(2,2) 6473,51 6503,69
auto.arima(ret, d = 0, ic = "bic", stepwise = FALSE, approximation = FALSE)
## Series: ret 
## ARIMA(0,0,0) with zero mean 
## 
## sigma^2 = 18.03:  log likelihood = -3237.5
## AIC=6477   AICc=6477   BIC=6482.03

BIC terendah dimiliki model tanpa komponen AR/MA, dan auto.arima juga memilih ARIMA(0,0,0). Pilihan ini diuji ulang di dalam GARCH(1,1) skew-GED:

me <- do.call(rbind, lapply(list(0, 1, 2, 3), function(p) {
  form <- if (p == 0) ~garch(1, 1) else as.formula(sprintf("~arma(%d,0)+garch(1,1)", p))
  m <- garchFit(form, ret, cond.dist = "sged", trace = FALSE)
  data.frame(Persamaan = if (p == 0) "Konstanta" else sprintf("AR(%d)", p),
             AIC = m@fit$ics["AIC"], BIC = m@fit$ics["BIC"]) }))
knitr::kable(transform(me, AIC = fmt(AIC, 4), BIC = fmt(BIC, 4)), row.names = FALSE, align = "lcc",
             caption = "Tabel 4. Persamaan rata-rata di dalam GARCH(1,1) skew-GED")
Tabel 4. Persamaan rata-rata di dalam GARCH(1,1) skew-GED
Persamaan AIC BIC
Konstanta 5,4559 5,4827
AR(1) 5,4547 5,4859
AR(2) 5,4552 5,4908
AR(3) 5,4570 5,4971

##Uji efek ARCH

# ARCH-LM (Engle) manual: regresi e^2 pada lag-nya, statistik LM = n * R^2
archlm <- function(x, m) {
  e2 <- (x - mean(x))^2; y <- embed(e2, m + 1)
  R2 <- summary(lm(y[, 1] ~ y[, -1]))$r.squared; s <- nrow(y) * R2
  c(Lag = m, LM = s, p = pchisq(s, m, lower.tail = FALSE)) }
alm <- as.data.frame(t(sapply(c(1, 5, 10, 20), function(m) archlm(ret, m))))
knitr::kable(data.frame(Lag = alm$Lag, LM = fmt(alm$LM), p_value = pv(alm$p), Keputusan = "Tolak H0"),
             align = "cccc", caption = "Tabel 5. Uji ARCH-LM pada return")
Tabel 5. Uji ARCH-LM pada return
Lag LM p_value Keputusan
1 8,37 0,0038 Tolak H0
5 51,33 < 0,001 Tolak H0
10 67,07 < 0,001 Tolak H0
20 78,10 < 0,001 Tolak H0
lb2 <- sapply(c(5, 10, 20), function(k) Box.test(ret^2, k, "Ljung-Box")$p.value); lb2
## [1] 6.110557e-12 1.631806e-12 2.057821e-11

##Seleksi dan estimasi model varians

spek <- list("ARCH(1)" = ~garch(1,0), "ARCH(2)" = ~garch(2,0), "ARCH(3)" = ~garch(3,0), "ARCH(5)" = ~garch(5,0),
             "GARCH(1,1)" = ~garch(1,1), "GARCH(1,2)" = ~garch(1,2), "GARCH(2,1)" = ~garch(2,1), "GARCH(2,2)" = ~garch(2,2))
dists <- c("norm", "std", "sstd", "ged", "sged")
nama_dist <- c(norm = "Normal", std = "Student-t", sstd = "Skew-Student-t", ged = "GED", sged = "Skew-GED")
tab <- NULL
for (dist in dists) for (nm in names(spek)) {
  f <- tryCatch(garchFit(spek[[nm]], ret, cond.dist = dist, trace = FALSE), error = function(e) NULL)
  if (!is.null(f)) tab <- rbind(tab, data.frame(Model = nm, Distribusi = dist, LogLik = -f@fit$value,
                                                AIC = f@fit$ics["AIC"], BIC = f@fit$ics["BIC"]))
}
rownames(tab) <- NULL; tab <- tab[order(tab$BIC), ]
n_coba <- length(spek) * length(dists); n_model <- nrow(tab)

# uji Kolmogorov-Smirnov residual baku terhadap distribusi yang diasumsikan (perkiraan)
ks_dist <- function(dist) {
  m <- garchFit(~garch(1,1), ret, cond.dist = dist, trace = FALSE)
  zz <- as.numeric(residuals(m, standardize = TRUE)); p <- m@fit$par
  pf <- switch(dist, norm = function(q) pnorm(q), std = function(q) pstd(q, 0, 1, p["shape"]),
               sstd = function(q) psstd(q, 0, 1, p["shape"], p["skew"]),
               ged = function(q) pged(q, 0, 1, p["shape"]), sged = function(q) psged(q, 0, 1, p["shape"], p["skew"]))
  suppressWarnings(ks.test(zz, pf)$p.value)
}
g11 <- tab[tab$Model == "GARCH(1,1)", ]; g11$KS_p <- sapply(as.character(g11$Distribusi), ks_dist)
knitr::kable(data.frame(Distribusi = nama_dist[as.character(g11$Distribusi)], LogLik = fmt(g11$LogLik),
                        AIC = fmt(g11$AIC, 4), BIC = fmt(g11$BIC, 4), KS_p = pv(g11$KS_p)),
             row.names = FALSE, align = "lcccc",
             col.names = c("Distribusi galat", "Log-Lik", "AIC", "BIC", "p-value K-S residual baku"),
             caption = "Tabel 6. GARCH(1,1) dengan lima asumsi distribusi galat (urut BIC)")
Tabel 6. GARCH(1,1) dengan lima asumsi distribusi galat (urut BIC)
Distribusi galat Log-Lik AIC BIC p-value K-S residual baku
Skew-GED -3076,61 5,4559 5,4827 0,0194
Skew-Student-t -3081,26 5,4642 5,4909 0,0662
Student-t -3088,51 5,4752 5,4975 0,1847
GED -3090,57 5,4789 5,5011 0,0324
Normal -3176,93 5,6300 5,6478 < 0,001
top10 <- head(tab, 10)
knitr::kable(data.frame(Model = top10$Model, Distribusi = nama_dist[as.character(top10$Distribusi)],
                        LogLik = fmt(top10$LogLik), AIC = fmt(top10$AIC, 4), BIC = fmt(top10$BIC, 4)),
             row.names = FALSE, align = "llccc",
             caption = paste0("Tabel 7. Sepuluh model terbaik dari ", n_model, " model (urut BIC terkecil)"))
Tabel 7. Sepuluh model terbaik dari 32 model (urut BIC terkecil)
Model Distribusi LogLik AIC BIC
GARCH(1,1) Skew-GED -3076,61 5,4559 5,4827
GARCH(1,2) Skew-GED -3076,10 5,4568 5,4880
GARCH(2,1) Skew-GED -3076,54 5,4576 5,4887
GARCH(1,1) Skew-Student-t -3081,26 5,4642 5,4909
GARCH(2,2) Skew-GED -3076,32 5,4590 5,4946
GARCH(1,2) Skew-Student-t -3080,75 5,4650 5,4962
GARCH(2,1) Skew-Student-t -3081,28 5,4660 5,4971
GARCH(1,1) Student-t -3088,51 5,4752 5,4975
GARCH(1,1) GED -3090,57 5,4789 5,5011
GARCH(2,2) Skew-Student-t -3080,75 5,4668 5,5024
fit <- garchFit(~garch(1,1), ret, cond.dist = "sged", trace = FALSE)
cf <- as.data.frame(fit@fit$matcoef); names(cf) <- c("Estimate", "Std.Error", "t.value", "p.value")
cf$Parameter <- rownames(cf); rownames(cf) <- NULL
g <- function(p, k = "Estimate") cf[cf$Parameter == p, k]
mu <- g("mu"); om <- g("omega"); al <- g("alpha1"); be <- g("beta1"); nu <- g("shape"); xi <- g("skew")
lab <- c(mu = "μ (mean)", omega = "ω", alpha1 = "α (ARCH)", beta1 = "β (GARCH)", skew = "ξ (skew)", shape = "ν (shape)")
knitr::kable(data.frame(Parameter = lab[cf$Parameter], Estimasi = fmt(cf$Estimate, 4), Std_Error = fmt(cf$Std.Error, 4),
                        t = fmt(cf$t.value, 3), p_value = pv(cf$p.value),
                        Signifikan = ifelse(cf$p.value < 0.05, "Ya", "Tidak")),
             row.names = FALSE, align = "lccccc",
             col.names = c("Parameter", "Estimasi", "Std. Error", "t-hitung", "p-value", "Signifikan (5%)"),
             caption = "Tabel 8. Hasil estimasi GARCH(1,1) dengan galat skew-GED")
Tabel 8. Hasil estimasi GARCH(1,1) dengan galat skew-GED
Parameter Estimasi Std. Error t-hitung p-value Signifikan (5%)
μ (mean) -0,1424 0,1050 -1,356 0,1752 Tidak
ω 0,5381 0,2538 2,121 0,0339 Ya
α (ARCH) 0,0791 0,0256 3,091 0,0020 Ya
β (GARCH) 0,8918 0,0338 26,363 < 0,001 Ya
ξ (skew) 1,1677 0,0276 42,380 < 0,001 Ya
ν (shape) 1,0297 0,0536 19,215 < 0,001 Ya
pers <- al + be; hl <- log(0.5) / log(pers); sd_lr <- sqrt(om / (1 - pers)); sig <- fit@sigma.t; sig_last <- tail(sig, 1)
# uji Wald H0: alpha + beta = 1 (metode delta)
V <- fit@fit$cvar; nmv <- colnames(V); if (is.null(nmv)) nmv <- names(fit@fit$par)
ia <- which(nmv == "alpha1"); ib <- which(nmv == "beta1")
se_pers <- sqrt(V[ia, ia] + V[ib, ib] + 2 * V[ia, ib]); z_w <- (pers - 1) / se_pers; p_w <- 2 * pnorm(-abs(z_w))
kar <- data.frame(Ukuran = c("Persistensi (α + β)", "Uji Wald H0: α + β = 1", "Half-life kejutan volatilitas (hari)",
                             "Simpangan baku jangka panjang (% per hari)", "Simpangan baku sampel (% per hari)",
                             "Simpangan baku bersyarat hari terakhir (% per hari)"),
                  Nilai = c(fmt(pers, 4), paste0("z = ", fmt(z_w), "; p = ", fmt(p_w, 3)), fmt(hl, 1),
                            fmt(sd_lr), fmt(sd(ret)), fmt(sig_last)))
knitr::kable(kar, align = "lc", caption = "Tabel 9. Karakteristik volatilitas dari model")
Tabel 9. Karakteristik volatilitas dari model
Ukuran Nilai
Persistensi (α + β) 0,9709
Uji Wald H0: α + β = 1 z = -1,92; p = 0,055
Half-life kejutan volatilitas (hari) 23,5
Simpangan baku jangka panjang (% per hari) 4,30
Simpangan baku sampel (% per hari) 4,25
Simpangan baku bersyarat hari terakhir (% per hari) 3,55
par(mfrow = c(2, 1), mar = c(3, 4, 2, 1))
plot(dates, ret, type = "l", col = "grey60", xlab = "", ylab = "%", ylim = range(c(ret, mu + 2*sig, mu - 2*sig)),
     main = "Return dan Pita ±2 Simpangan Baku Bersyarat")
lines(dates, mu + 2*sig, col = "red"); lines(dates, mu - 2*sig, col = "red")
plot(dates, sig, type = "l", col = "darkred", xlab = "", ylab = "%", main = "Simpangan Baku Bersyarat GARCH(1,1)-skew-GED")
abline(h = sd_lr, lty = 2, col = "blue")
Gambar 3. Return dengan pita ±2σ bersyarat (atas) dan simpangan baku bersyarat GARCH(1,1) skew-GED (bawah)

Gambar 3. Return dengan pita ±2σ bersyarat (atas) dan simpangan baku bersyarat GARCH(1,1) skew-GED (bawah)

top <- data.frame(Tanggal = dates, Return = ret, Sigma = sig); top <- top[order(-top$Sigma), ]
bulan <- c("Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember")
tgl <- function(x) paste(as.integer(format(x, "%d")), bulan[as.integer(format(x, "%m"))], format(x, "%Y"))

Diagnostik model

z <- as.numeric(residuals(fit, standardize = TRUE))
ks_p <- suppressWarnings(ks.test(z, function(q) psged(q, mean = 0, sd = 1, nu = nu, xi = xi))$p.value)
S <- as.numeric(z[-n] < 0); zl <- z[-n]; y2 <- z[-1]^2                 # sign bias Engle-Ng
sbf <- lm(y2 ~ S + I(S * zl) + I((1 - S) * zl)); fj <- summary(sbf)$fstatistic
sb_p <- pf(fj[1], fj[2], fj[3], lower.tail = FALSE)
dg <- data.frame(
  Uji = c("Ljung-Box residual baku, Q(10)", "Ljung-Box residual baku, Q(20)", "Ljung-Box residual baku kuadrat, Q(10)",
          "Ljung-Box residual baku kuadrat, Q(20)", "ARCH-LM residual baku, lag 5", "ARCH-LM residual baku, lag 10",
          "Kolmogorov-Smirnov terhadap skew-GED (perkiraan)", "Sign bias Engle-Ng (uji gabungan)"),
  p_value = fmt(c(Box.test(z, 10, "Ljung-Box")$p.value, Box.test(z, 20, "Ljung-Box")$p.value,
                  Box.test(z^2, 10, "Ljung-Box")$p.value, Box.test(z^2, 20, "Ljung-Box")$p.value,
                  archlm(z, 5)["p"], archlm(z, 10)["p"], ks_p, sb_p), 4))
knitr::kable(dg, align = "lc", caption = "Tabel 10. Uji diagnostik residual baku (p-value)")
Tabel 10. Uji diagnostik residual baku (p-value)
Uji p_value
Ljung-Box residual baku, Q(10) 0,2387
Ljung-Box residual baku, Q(20) 0,3371
Ljung-Box residual baku kuadrat, Q(10) 0,6113
Ljung-Box residual baku kuadrat, Q(20) 0,7847
ARCH-LM residual baku, lag 5 0,7915
ARCH-LM residual baku, lag 10 0,6312
Kolmogorov-Smirnov terhadap skew-GED (perkiraan) 0,0194
Sign bias Engle-Ng (uji gabungan) 0,6907
par(mfrow = c(2, 2), mar = c(4, 4, 3, 1))
acf(z, 30, main = "ACF Residual Baku"); acf(z^2, 30, main = "ACF Residual Baku Kuadrat")
qqplot(qsged(ppoints(n), mean = 0, sd = 1, nu = nu, xi = xi), z, main = "QQ-Plot Residual Baku vs Skew-GED",
       xlab = "Kuantil teoretis skew-GED", ylab = "Kuantil sampel", pch = 16, cex = .5); abline(0, 1, col = "red")
hist(z, 50, freq = FALSE, col = "grey85", main = "Histogram Residual Baku", xlab = "z"); lines(density(z), col = "blue", lwd = 2)
xx <- seq(min(z), max(z), length.out = 400); lines(xx, dsged(xx, mean = 0, sd = 1, nu = nu, xi = xi), col = "red", lwd = 2)
legend("topright", c("Kernel", "Skew-GED"), col = c("blue", "red"), lwd = 2, bty = "n")
Gambar 4. Diagnostik residual baku: ACF, ACF kuadrat, QQ-plot terhadap skew-GED, histogram

Gambar 4. Diagnostik residual baku: ACF, ACF kuadrat, QQ-plot terhadap skew-GED, histogram

##Uji efek asimetris (leverage)

gj <- garchFit(~aparch(1,1), ret, cond.dist = "sged", trace = FALSE, delta = 2, include.delta = FALSE)
gc <- as.data.frame(gj@fit$matcoef); names(gc) <- c("Estimate", "Std.Error", "t.value", "p.value"); gc$Parameter <- rownames(gc)
gam <- gc$Estimate[gc$Parameter == "gamma1"]; gam_p <- gc$p.value[gc$Parameter == "gamma1"]; ga <- gc$Estimate[gc$Parameter == "alpha1"]
LLf <- -fit@fit$value; LLg <- -gj@fit$value; LR <- 2 * (LLg - LLf); LR_p <- pchisq(LR, 1, lower.tail = FALSE)
knitr::kable(data.frame(Model = c("GARCH(1,1) skew-GED", "GJR/apARCH(1,1) skew-GED"),
                        LogLik = fmt(c(LLf, LLg)), AIC = fmt(c(fit@fit$ics["AIC"], gj@fit$ics["AIC"]), 4),
                        BIC = fmt(c(fit@fit$ics["BIC"], gj@fit$ics["BIC"]), 4)),
             align = "lccc", caption = "Tabel 11. Perbandingan GARCH(1,1) simetris dan GJR/apARCH(1,1) asimetris")
Tabel 11. Perbandingan GARCH(1,1) simetris dan GJR/apARCH(1,1) asimetris
Model LogLik AIC BIC
GARCH(1,1) skew-GED -3076,61 5,4559 5,4827
GJR/apARCH(1,1) skew-GED -3075,52 5,4558 5,4869
rasio <- ((1 + gam) / (1 - gam))^2
e <- seq(-10, 10, length.out = 201)
plot(e, al * e^2, type = "l", lwd = 2, col = "navy", xlab = "Kejutan return kemarin (%)",
     ylab = "Kontribusi ke varians hari ini", main = "News Impact Curve (ilustrasi)")
lines(e, ga * (abs(e) - gam * e)^2, lwd = 2, col = "firebrick")
legend("top", c("GARCH(1,1) simetris", "GJR/apARCH (asimetris, γ tidak signifikan)"), col = c("navy", "firebrick"), lwd = 2, bty = "n")
Gambar 5. News impact curve (ilustrasi): GARCH(1,1) simetris vs GJR/apARCH

Gambar 5. News impact curve (ilustrasi): GARCH(1,1) simetris vs GJR/apARCH

Peramalan volatilitas

pr <- predict(fit, n.ahead = 30); fc <- pr$standardDeviation
knitr::kable(data.frame(Horizon = c(1, 5, 10, 20, 30), Simpangan_baku = fmt(fc[c(1, 5, 10, 20, 30)])),
             align = "cc", col.names = c("Horizon (hari)", "Simpangan baku (%)"), caption = "Tabel 12. Ramalan simpangan baku harian")
Tabel 12. Ramalan simpangan baku harian
Horizon (hari) Simpangan baku (%)
1 3,52
5 3,62
10 3,72
20 3,87
30 3,99
plot(1:30, fc, type = "b", pch = 16, col = "darkgreen", xlab = "Hari ke depan", ylab = "Simpangan baku (%)",
     main = "Ramalan Volatilitas 30 Hari (mean-reverting)")
abline(h = sd_lr, lty = 2, col = "blue")
Gambar 6. Ramalan simpangan baku 30 hari ke depan

Gambar 6. Ramalan simpangan baku 30 hari ke depan

Uji sensitivitas terhadap distribusi galat

ft <- garchFit(~garch(1,1), ret, cond.dist = "sstd", trace = FALSE)
gt <- garchFit(~aparch(1,1), ret, cond.dist = "sstd", trace = FALSE, delta = 2, include.delta = FALSE)
pt <- ft@fit$par; ptg <- gt@fit$matcoef
pers_t <- pt["alpha1"] + pt["beta1"]; sd_t <- sqrt(pt["omega"] / (1 - pers_t))
fc_t <- predict(ft, n.ahead = 30)$standardDeviation
gam_t <- ptg["gamma1", 1]; gam_t_p <- ptg["gamma1", 4]
sens <- data.frame(
  Ukuran = c("AIC / BIC", "α / β", "Persistensi (α + β)", "Half-life (hari)", "Simpangan baku jangka panjang (%)",
             "Ramalan simpangan baku hari ke-30 (%)", "γ asimetri (p-value)", "p-value K-S residual baku"),
  Skew_GED = c(paste0(fmt(g11$AIC[1], 4), " / ", fmt(g11$BIC[1], 4)), paste0(fmt(al, 3), " / ", fmt(be, 3)), fmt(pers, 4),
               fmt(hl, 1), fmt(sd_lr), fmt(fc[30]), paste0(fmt(gam, 3), " (", fmt(gam_p, 3), ")"), pv(g11$KS_p[1])),
  Skew_t = c(paste0(fmt(g11$AIC[2], 4), " / ", fmt(g11$BIC[2], 4)), paste0(fmt(pt["alpha1"], 3), " / ", fmt(pt["beta1"], 3)),
             fmt(pers_t, 4), fmt(log(0.5) / log(pers_t), 1), fmt(sd_t), fmt(fc_t[30]),
             paste0(fmt(gam_t, 3), " (", fmt(gam_t_p, 3), ")"), pv(g11$KS_p[2])))
knitr::kable(sens, align = "lcc", col.names = c("Ukuran", "Skew-GED (terpilih)", "Skew-Student-t"),
             caption = "Tabel 13. GARCH(1,1) skew-GED dibandingkan dengan skew-Student-t")
Tabel 13. GARCH(1,1) skew-GED dibandingkan dengan skew-Student-t
Ukuran Skew-GED (terpilih) Skew-Student-t
AIC / BIC 5,4559 / 5,4827 5,4642 / 5,4909
α / β 0,079 / 0,892 0,130 / 0,844
Persistensi (α + β) 0,9709 0,9734
Half-life (hari) 23,5 25,7
Simpangan baku jangka panjang (%) 4,30 6,02
Ramalan simpangan baku hari ke-30 (%) 3,99 5,11
γ asimetri (p-value) 0,130 (0,103) 0,223 (0,004)
p-value K-S residual baku 0,0194 0,0662