1. Lý thuyết cơ bản

1.1.Giới thiệu mô hình TGARCH

Giới thiệu mô hình TGARCH

Mô hình TGARCH (Threshold GARCH) là một mở rộng của mô hình GARCH nhằm phản ánh tính không cân xứng trong biến động của chuỗi thời gian tài chính. Cụ thể, TGARCH cho phép tin xấu (cú sốc âm) và tin tốt (cú sốc dương) có ảnh hưởng khác nhau đến phương sai có điều kiện (volatility).

Công thức tổng quát của mô hình TGARCH(1,1) được viết là:

σt² = κ + β₁σt₋₁² + α₁εt₋₁² + γ₁εt₋₁²It₋₁

Trong đó: - It₋₁ = 1 khi εt₋₁ < 0
- It₋₁ = 0 khi εt₋₁ ≥ 0

Do vậy: - Nếu εt₋₁ < 0: σt² = κ + β₁σt₋₁² + (α₁ + γ₁)εt₋₁²
- Nếu εt₋₁ ≥ 0: σt² = κ + β₁σt₋₁² + α₁εt₋₁²

Mô hình TGARCH sẽ không cân xứng khi α₁ khác 0. Nếu γ₁ > 0, các cú sốc âm ảnh hưởng đến biến động nhiều hơn so với cú sốc dương.

Ưu điểm

  • Phản ánh được tính không cân xứng trong biến động: Mô hình TGARCH cho phép tin xấu và tin tốt tác động không giống nhau đến phương sai có điều kiện.
  • Giữ nguyên khung mô hình GARCH cơ bản, chỉ mở rộng bằng cách thêm biến tương tác với cú sốc âm để xét tác động.

Nhược điểm

  • TGARCH có thêm hệ số γ so với GARCH, làm mô hình phức tạp hơn.
  • Cần thực hiện nhiều bước và chạy các mô hình trước đó để xác định mô hình phù hợp.
  • Không phù hợp với chuỗi dữ liệu ít biến động, nên việc chọn biến đầu vào khá cầu kỳ.
  • Nếu sai số không tuân theo phân phối chuẩn, kết quả của mô hình TGARCH có thể bị sai lệch.

1.2.Giới thiệu mô hình EGARCH

Giới thiệu mô hình EGARCH

Mô hình EGARCH (Exponential GARCH) là một mở rộng khác của mô hình GARCH, được Nelson (1991) đề xuất nhằm khắc phục một số hạn chế của GARCH truyền thống. EGARCH cho phép mô tả tính không cân xứng trong biến động, tương tự TGARCH, nhưng được thể hiện thông qua logarit của phương sai có điều kiện, giúp đảm bảo giá trị phương sai luôn dương mà không cần đặt ràng buộc dương cho các tham số.

Công thức tổng quát của mô hình EGARCH(1,1):

ln(σt²) = κ + β ln(σt₋₁²) + α (εt₋₁ / σt₋₁) + θ |εt₋₁ / σt₋₁|

Trong đó: - εt là phần dư (sai số) tại thời điểm t, với εt ~ N(0, σt²) - εt₋₁ / σt₋₁ là cú sốc được chuẩn hóa tại thời điểm t–1 - κ, α, β, θ là các hệ số của mô hình

Từ công thức trên, mô hình có thể được viết lại như sau: - Nếu εt₋₁ > 0: ln(σt²) = κ + β ln(σt₋₁²) + (α + θ)(εt₋₁ / σt₋₁) - Nếu εt₋₁ < 0: ln(σt²) = κ + β ln(σt₋₁²) + (θ – α)(εt₋₁ / σt₋₁)

Một số đặc điểm và lưu ý của mô hình EGARCH

  • Mô hình EGARCH được xây dựng cho log(σt²), chứ không phải trực tiếp σt².
  • Vì sử dụng log(σt²), các hệ số κ, α, β có thể mang giá trị âm, điều này giúp mô hình linh hoạt hơn GARCH thông thường.
  • EGARCH phản ánh tính không cân xứng thông qua hai hệ số α và θ:
    • Nếu α > 0 → mô hình gần cân xứng.
    • Nếu α < 0 → cú sốc âm (tin xấu) làm tăng biến động mạnh hơn tin tốt.
  • Nhờ dạng logarit, EGARCH không cần ràng buộc các hệ số dương như trong GARCH và luôn đảm bảo phương sai có điều kiện dương.

Ưu điểm của mô hình EGARCH

  • Mô hình luôn đảm bảo σt² > 0 mà không cần giới hạn tham số.
  • Mô tả tốt hiệu ứng đòn bẩy (leverage effect), khi tin xấu tác động mạnh hơn tin tốt.
  • Linh hoạt hơn GARCH truyền thống nhờ cho phép các tham số nhận giá trị âm.

Nhược điểm của mô hình EGARCH

  • Cấu trúc mô hình phức tạp hơn, việc ước lượng có thể gặp khó khăn khi dữ liệu không phù hợp.
  • Đôi khi mô hình có thể gặp vấn đề hội tụ (convergence problem) trong quá trình tối ưu.
  • Việc diễn giải tham số khó hơn do sử dụng logarit của phương sai.

2. Ứng dụng các mô hình

2.1. Đọc file dữ liệu và lấy chuỗi biến giá đóng cửa

Dữ liệu phân tích trong bài là chuỗi giá đóng cửa của Ngân hàng công thương (CTG) gồm 498 quan sát lấy từ ngày 4/1/2022 đến 29/12//2023. Dữ liệu được lấy trên sàn investing.com và được ứng dụng vào các mô hình ARMA, GARCH, TGARCH, EGARCH.

data <- read_excel("C:/Users/Admin/Downloads/Book2.xlsx")

names(data)
## [1] "date"  "close"
# Lấy biến close cần phân tích 

y <- ts(data$close)  

plot(y, main = "Biểu đồ chuỗi thời gian", col = "blue")

Nhận xét biểu đồ giá đóng cửa của CTG

Biểu đồ trên thể hiện diễn biến giá đóng cửa của cổ phiếu CTG TỪ 2022 - 2023. Có thể nhận thấy chuỗi giá có biến động mạnh, không ổn định và thể hiện rõ xu hướng giảm sau giai đoạn tăng ban đầu. Giá đạt đỉnh khoảng 35.000, sau đó giảm xuống gần 20.000 trước khi phục hồi dao động quanh vùng 25.000–30.000.

2.2. Kiểm định tính dừng

2.2.1. Kiểm định tính dừng tại chuỗi gốc

adf_test <- adf.test(y)
kpss_test <- kpss.test(y)

adf_test
## 
##  Augmented Dickey-Fuller Test
## 
## data:  y
## Dickey-Fuller = -2.3934, Lag order = 7, p-value = 0.4118
## alternative hypothesis: stationary
kpss_test
## 
##  KPSS Test for Level Stationarity
## 
## data:  y
## KPSS Level = 1.2974, Truncation lag parameter = 5, p-value = 0.01

Kiểm định ADF:

  • Giả thuyết H₀: Chuỗi không dừng.
  • Kết quả: p-value = 0.4118 > 0.05 ⇒ Không bác bỏ H₀. → Chuỗi không dừng.

Kiểm định KPSS:

  • Giả thuyết H₀: Chuỗi dừng.
  • Kết quả: p-value = 0.01 < 0.05 ⇒ Bác bỏ H₀. → Chuỗi không dừng.

Kết luận: Cả hai kiểm định đều cho thấy chuỗi giá CTG không dừng. Cần tiếp tục thực hiện sai phân bậc 1.

2.2.2. Kiểm định tính dừng sai phân bậc 1

# Sai phân bậc 1
dy <- diff(y)

# Kiểm tra lại tính dừng
adf.test(na.omit(dy))
## 
##  Augmented Dickey-Fuller Test
## 
## data:  na.omit(dy)
## Dickey-Fuller = -7.4557, Lag order = 7, p-value = 0.01
## alternative hypothesis: stationary
kpss.test(na.omit(dy))
## 
##  KPSS Test for Level Stationarity
## 
## data:  na.omit(dy)
## KPSS Level = 0.24811, Truncation lag parameter = 5, p-value = 0.1
plot(dy, main = "Chuỗi sau khi sai phân bậc 1", col = "darkgreen")

Kiểm định ADF:

  • Giả thuyết H₀: Chuỗi không dừng.
  • Kết quả: p-value = 0.01 < 0.05 ⇒ Bác bỏ H₀.
    → Chuỗi dừng.

Kiểm định KPSS:

  • Giả thuyết H₀: Chuỗi dừng.
  • Kết quả: p-value = 0.1 > 0.05 ⇒ Không bác bỏ H₀.
    → Chuỗi dừng.

Kết luận:
Cả hai kiểm định đều cho thấy chuỗi sai phân bậc 1 (dy) đã đạt được tính dừng, có thể sử dụng cho các mô hình ARIMA, ARCH, GARCH, TGARCH hoặc EGARCH.

2.3. Mô hình arima ước lượng

auto_model <- auto.arima(dy)
summary(auto_model)
## Series: dy 
## ARIMA(0,0,0) with zero mean 
## 
## sigma^2 = 317714:  log likelihood = -3853.44
## AIC=7708.87   AICc=7708.88   BIC=7713.08
## 
## Training set error measures:
##                     ME     RMSE      MAE MPE MAPE      MASE        ACF1
## Training set -15.39235 563.6612 398.7171 100  100 0.6733843 -0.02321698
checkresiduals(auto_model)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(0,0,0) with zero mean
## Q* = 9.257, df = 10, p-value = 0.5079
## 
## Model df: 0.   Total lags used: 10

Nhận xét

Kết quả cho thấy mô hình ARIMA(0,0,0) có giá trị AIC = 7708.87 và BIC = 7713.08.
Kiểm định Ljung–Box cho phần dư có p-value = 0.5079 (> 0.05), nên không bác bỏ giả thuyết H₀, tức là phần dư không có hiện tượng tự tương quan → phần dư là nhiễu trắng.

Điều này nghĩa là mô hình ARIMA(0,0,0) phù hợp về mặt thống kê, nhưng về bản chất đây là mô hình rất đơn giản, không giải thích được cấu trúc biến động của chuỗi (chỉ là chuỗi ngẫu nhiên quanh trung bình bằng 0).

Vì chuỗi tài chính thường có hiện tượng phương sai thay đổi theo thời gian, nên bước tiếp theo cần kiểm tra hiệu ứng ARCH và xây dựng các mô hình như GARCH, TGARCH hoặc EGARCH để mô tả tốt hơn biến động của chuỗi giá đóng cửa của CTG

#2.4. Kiểm định hiệu ứng arch

library(FinTS)
ArchTest(residuals(auto_model), lags = 12)
## 
##  ARCH LM-test; Null hypothesis: no ARCH effects
## 
## data:  residuals(auto_model)
## Chi-squared = 24.435, df = 12, p-value = 0.01774

Nhận xét

  • Giả thuyết H₀: Không có hiệu ứng ARCH (phương sai không thay đổi theo thời gian).

  • Giả thuyết H₁: Có hiệu ứng ARCH (phương sai thay đổi theo thời gian).

Kết quả kiểm định: - Giá trị Chi-squared = 24.889
- bậc tự do (df) = 12
- p-value = 0.01536 (< 0.05)

→ Vì p-value < 0.05 nên bác bỏ giả thuyết H₀.
⟹ Kết luận: Có tồn tại hiệu ứng ARCH trong phần dư của mô hình.

2.5. Ước lượng mô hình GARCH(1,1)

install.packages("rugarch")
library(rugarch)
# GARCH(1,1)
spec_garch <- ugarchspec(
  variance.model = list(model = "sGARCH", garchOrder = c(1,1)),
  mean.model = list(armaOrder = c(1,1))
)

fit_garch <- ugarchfit(spec = spec_garch, data = dy)
show(fit_garch)
## 
## *---------------------------------*
## *          GARCH Model Fit        *
## *---------------------------------*
## 
## Conditional Variance Dynamics    
## -----------------------------------
## GARCH Model  : sGARCH(1,1)
## Mean Model   : ARFIMA(1,0,1)
## Distribution : norm 
## 
## Optimal Parameters
## ------------------------------------
##          Estimate  Std. Error   t value Pr(>|t|)
## mu       0.010591   21.133798  0.000501 0.999600
## ar1      0.121307    0.447313  0.271189 0.786245
## ma1     -0.192025    0.441082 -0.435349 0.663309
## omega  333.758320  782.990479  0.426261 0.669918
## alpha1   0.067785    0.016694  4.060341 0.000049
## beta1    0.931215    0.014714 63.289754 0.000000
## 
## Robust Standard Errors:
##          Estimate  Std. Error   t value Pr(>|t|)
## mu       0.010591  2.3773e+01  0.000446 0.999645
## ar1      0.121307  2.7826e-01  0.435949 0.662874
## ma1     -0.192025  2.6032e-01 -0.737643 0.460732
## omega  333.758320  1.2022e+03  0.277628 0.781298
## alpha1   0.067785  2.1837e-02  3.104147 0.001908
## beta1    0.931215  2.2490e-02 41.406477 0.000000
## 
## LogLikelihood : -3819.256 
## 
## Information Criteria
## ------------------------------------
##                    
## Akaike       15.393
## Bayes        15.444
## Shibata      15.393
## Hannan-Quinn 15.413
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                     0.6469  0.4212
## Lag[2*(p+q)+(p+q)-1][5]    1.3809  0.9993
## Lag[4*(p+q)+(p+q)-1][9]    3.8111  0.7345
## d.o.f=2
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                   0.000244  0.9875
## Lag[2*(p+q)+(p+q)-1][5]  1.679915  0.6957
## Lag[4*(p+q)+(p+q)-1][9]  2.652015  0.8147
## d.o.f=2
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale P-Value
## ARCH Lag[3]     2.045 0.500 2.000  0.1527
## ARCH Lag[5]     2.086 1.440 1.667  0.4525
## ARCH Lag[7]     2.170 2.315 1.543  0.6813
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  1.2669
## Individual Statistics:              
## mu     0.08433
## ar1    0.32180
## ma1    0.30541
## omega  0.49098
## alpha1 0.35782
## beta1  0.34619
## 
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic:          1.49 1.68 2.12
## Individual Statistic:     0.35 0.47 0.75
## 
## Sign Bias Test
## ------------------------------------
##                    t-value   prob sig
## Sign Bias           0.2178 0.8277    
## Negative Sign Bias  0.2467 0.8052    
## Positive Sign Bias  1.0513 0.2936    
## Joint Effect        1.2759 0.7349    
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20     27.95      0.08440
## 2    30     51.39      0.00637
## 3    40     51.81      0.08219
## 4    50     67.49      0.04100
## 
## 
## Elapsed time : 0.12889

Nhận xét mô hình GARCH(1,1)

Kết quả cho thấy các hệ số của mô hình GARCH(1,1) đều dương, trong đó α₁ = 0.35782 và β₁ = 0.34619.

Tổng α₁ + β₁ = 0.7039 < 1, nên mô hình ổn định và hội tụ, nghĩa là biến động trong chuỗi sẽ dần giảm theo thời gian chứ không tăng mãi.

Các kiểm định Sign Bias đều có p-value > 0.05 nên không có hiệu ứng bất cân xứng – tức là tin xấu và tin tốt ảnh hưởng gần như như nhau đến mức độ biến động của chuỗi.

Kiểm định Pearson cho thấy hầu hết các nhóm đều có p-value > 0.05, chỉ có một vài nhóm nhỏ chưa thật sự tốt, nhưng nhìn chung mô hình vẫn phù hợp để mô tả phương sai thay đổi theo thời gian.

2.5. Mô hình TGARCH

spec_tgarch <- ugarchspec(
  variance.model = list(model = "fGARCH", submodel = "TGARCH", garchOrder = c(1,1)),
  mean.model = list(armaOrder = c(1,1))
)

fit_tgarch <- ugarchfit(spec_tgarch, data = dy)
show(fit_tgarch)
## 
## *---------------------------------*
## *          GARCH Model Fit        *
## *---------------------------------*
## 
## Conditional Variance Dynamics    
## -----------------------------------
## GARCH Model  : fGARCH(1,1)
## fGARCH Sub-Model : TGARCH
## Mean Model   : ARFIMA(1,0,1)
## Distribution : norm 
## 
## Optimal Parameters
## ------------------------------------
##         Estimate  Std. Error  t value Pr(>|t|)
## mu     -16.81450   20.049017 -0.83867 0.401655
## ar1      0.13790    0.236121  0.58403 0.559202
## ma1     -0.18359    0.235834 -0.77846 0.436295
## omega   20.75639    8.018594  2.58853 0.009639
## alpha1   0.11866    0.024774  4.78945 0.000002
## beta1    0.87488    0.025100 34.85500 0.000000
## eta11    0.34283    0.162235  2.11319 0.034584
## 
## Robust Standard Errors:
##         Estimate  Std. Error  t value Pr(>|t|)
## mu     -16.81450   20.016390 -0.84004 0.400888
## ar1      0.13790    0.074179  1.85902 0.063024
## ma1     -0.18359    0.060144 -3.05249 0.002270
## omega   20.75639   13.909665  1.49223 0.135639
## alpha1   0.11866    0.034980  3.39216 0.000693
## beta1    0.87488    0.040167 21.78094 0.000000
## eta11    0.34283    0.257424  1.33178 0.182932
## 
## LogLikelihood : -3814.159 
## 
## Information Criteria
## ------------------------------------
##                    
## Akaike       15.377
## Bayes        15.436
## Shibata      15.377
## Hannan-Quinn 15.400
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                    0.09978  0.7521
## Lag[2*(p+q)+(p+q)-1][5]   0.38312  1.0000
## Lag[4*(p+q)+(p+q)-1][9]   2.03242  0.9831
## d.o.f=2
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                    0.04202  0.8376
## Lag[2*(p+q)+(p+q)-1][5]   1.45421  0.7512
## Lag[4*(p+q)+(p+q)-1][9]   2.65258  0.8146
## d.o.f=2
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale P-Value
## ARCH Lag[3]    0.6134 0.500 2.000  0.4335
## ARCH Lag[5]    0.7721 1.440 1.667  0.8015
## ARCH Lag[7]    1.0387 2.315 1.543  0.9072
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  1.1581
## Individual Statistics:              
## mu     0.03646
## ar1    0.30960
## ma1    0.29331
## omega  0.24537
## alpha1 0.25787
## beta1  0.23876
## eta11  0.15389
## 
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic:          1.69 1.9 2.35
## Individual Statistic:     0.35 0.47 0.75
## 
## Sign Bias Test
## ------------------------------------
##                    t-value   prob sig
## Sign Bias           0.4564 0.6483    
## Negative Sign Bias  0.2804 0.7793    
## Positive Sign Bias  1.0806 0.2804    
## Joint Effect        1.2468 0.7418    
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20     34.47      0.01617
## 2    30     39.32      0.09572
## 3    40     52.13      0.07772
## 4    50     56.42      0.21729
## 
## 
## Elapsed time : 0.745676

Nhận xét mô hình TGARCH(1,1)

Kết quả cho thấy các hệ số của mô hình TGARCH(1,1) đều có ý nghĩa thống kê.
Trong đó: - α₁ = 0.11866 và β₁ = 0.87488 → tổng α₁ + β₁ = 0.99354 < 1
⟹ Mô hình ổn định và hội tụ, thể hiện biến động giảm dần về mức cân bằng theo thời gian.

Đặc biệt, hệ số η₁₁ (eta₁₁) = 0.34283 > 0 và có p-value = 0.0346 < 0.05
⟹ Có hiệu ứng đòn bẩy (leverage effect) — tức là các cú sốc âm (tin xấu) làm độ biến động của chuỗi tăng mạnh hơn so với cú sốc dương (tin tốt).

Kiểm định Sign Bias: - Các giá trị p-value của Sign Bias, Negative Sign Bias, Positive Sign Bias và Joint Effect đều > 0.05.
→ Không bác bỏ giả thuyết H₀ ⇒ mô hình đã xử lý tốt hiệu ứng bất cân xứng, phần dư không còn sai lệch dấu.

Kiểm định Ljung–Box và ARCH: - Tất cả p-value đều > 0.05 ⇒ Không có tự tương quan phần dư và không còn hiệu ứng ARCH.
→ Mô hình TGARCH(1,1) phù hợp về mặt thống kê.

Kiểm định ổn định (Nyblom test): - Joint Statistic = 1.1581 < 1.69 (ngưỡng 10%)
→ Các tham số của mô hình ổn định theo thời gian.

Kiểm định Pearson Goodness-of-Fit: - Hầu hết các nhóm có p-value > 0.05, chỉ nhóm 20 hơi thấp (0.01617)
→ Nhìn chung, mô hình phù hợp với dữ liệu.

Kết luận: Mô hình TGARCH(1,1) ổn định, phù hợp, và thể hiện rõ hiệu ứng đòn bẩy (η₁₁ > 0) — tức là tin xấu làm biến động giá mạnh hơn tin tốt.
Mô hình này mô tả tốt sự thay đổi phương sai theo thời gian của chuỗi lợi suất CTG.

2.6. Mô hình EGARCH(1,1)

spec_egarch <- ugarchspec(
  variance.model = list(model = "eGARCH", garchOrder = c(1,1)),
  mean.model = list(armaOrder = c(1,1)),
  distribution.model = "std"
)

fit_egarch <- ugarchfit(spec = spec_egarch, data = dy, solver = "hybrid")
fit_egarch
## 
## *---------------------------------*
## *          GARCH Model Fit        *
## *---------------------------------*
## 
## Conditional Variance Dynamics    
## -----------------------------------
## GARCH Model  : eGARCH(1,1)
## Mean Model   : ARFIMA(1,0,1)
## Distribution : std 
## 
## Optimal Parameters
## ------------------------------------
##         Estimate  Std. Error     t value Pr(>|t|)
## mu      3.206614   14.228126     0.22537 0.821690
## ar1     0.624787    0.034415    18.15468 0.000000
## ma1    -0.690657    0.032808   -21.05120 0.000000
## omega   0.238216    0.007957    29.93889 0.000000
## alpha1 -0.055019    0.031308    -1.75733 0.078862
## beta1   0.980420    0.000057 17307.15272 0.000000
## gamma1  0.186169    0.017059    10.91356 0.000000
## shape   4.563417    0.891339     5.11973 0.000000
## 
## Robust Standard Errors:
##         Estimate  Std. Error    t value Pr(>|t|)
## mu      3.206614   12.888501     0.2488 0.803518
## ar1     0.624787    0.013109    47.6622 0.000000
## ma1    -0.690657    0.013778   -50.1290 0.000000
## omega   0.238216    0.008047    29.6018 0.000000
## alpha1 -0.055019    0.031757    -1.7325 0.083187
## beta1   0.980420    0.000047 21022.9684 0.000000
## gamma1  0.186169    0.014653    12.7050 0.000000
## shape   4.563417    0.976261     4.6744 0.000003
## 
## LogLikelihood : -3782.135 
## 
## Information Criteria
## ------------------------------------
##                    
## Akaike       15.252
## Bayes        15.320
## Shibata      15.252
## Hannan-Quinn 15.279
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                     0.2649  0.6068
## Lag[2*(p+q)+(p+q)-1][5]    1.0106  1.0000
## Lag[4*(p+q)+(p+q)-1][9]    3.2026  0.8576
## d.o.f=2
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                    0.01786  0.8937
## Lag[2*(p+q)+(p+q)-1][5]   1.81257  0.6633
## Lag[4*(p+q)+(p+q)-1][9]   3.40222  0.6911
## d.o.f=2
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale P-Value
## ARCH Lag[3]     1.593 0.500 2.000  0.2070
## ARCH Lag[5]     1.697 1.440 1.667  0.5421
## ARCH Lag[7]     1.892 2.315 1.543  0.7402
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  1.066
## Individual Statistics:              
## mu     0.10314
## ar1    0.13913
## ma1    0.13598
## omega  0.21962
## alpha1 0.21417
## beta1  0.21931
## gamma1 0.03008
## shape  0.25493
## 
## 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.4448 0.6567    
## Negative Sign Bias  0.2849 0.7758    
## Positive Sign Bias  1.0933 0.2748    
## Joint Effect        1.2765 0.7347    
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20     7.748       0.9890
## 2    30    14.087       0.9909
## 3    40    28.473       0.8930
## 4    50    29.056       0.9895
## 
## 
## Elapsed time : 1.544807

Nhận xét mô hình EGARCH(1,1)

Kết quả ước lượng cho thấy: - Hệ số α₁ = -0.0550 và β₁ = 0.9804, tổng (α₁ + β₁) ≈ 0.925 < 1
→ Mô hình ổn định và hội tụ, thể hiện rằng biến động trong chuỗi sẽ giảm dần theo thời gian.
- Hệ số γ₁ (gamma₁) = 0.1862 > 0 và có p-value = 0.0000 < 0.05
→ Có hiệu ứng đòn bẩy (leverage effect), nghĩa là các cú sốc âm (tin xấu) làm tăng biến động nhiều hơn các cú sốc dương (tin tốt).
Điều này phản ánh đúng đặc trưng của chuỗi tài chính: thị trường thường phản ứng mạnh hơn với tin xấu.

Kiểm định Sign Bias:

  • Các p-value của Sign Bias, Negative Sign Bias, Positive Sign Bias và Joint Effect đều > 0.05
    → Không bác bỏ giả thuyết H₀ ⇒ mô hình đã xử lý tốt hiệu ứng bất cân xứng, phần dư không còn sai lệch dấu.

Kiểm định Ljung–Box và ARCH:

  • Các p-value đều > 0.05 ⇒ phần dư không có tự tương quankhông còn hiệu ứng ARCH.
    → Mô hình EGARCH(1,1) phù hợp về mặt thống kê.

Kiểm định ổn định (Nyblom test): - Joint Statistic = 1.0646 < 1.89 ⇒ các tham số ổn định theo thời gian, mô hình không bị thay đổi cấu trúc.

Kiểm định Pearson Goodness-of-Fit: - Các nhóm có p-value rất cao (> 0.89), chứng tỏ mô hình phù hợp với dữ liệu, sai số nhỏ và phân phối tốt.

Kết luận: Mô hình EGARCH(1,1) phù hợp và ổn định, thể hiện rõ hiệu ứng đòn bẩy (γ₁ > 0).
Điều này có nghĩa là tin xấu làm tăng biến động mạnh hơn tin tốt, đúng với đặc điểm của chuỗi lợi suất chứng khoán.
Phần dư đạt chuẩn, không còn tự tương quan hay hiệu ứng ARCH, nên mô hình EGARCH(1,1) mô tả rất tốt sự thay đổi phương sai theo thời gian.

2.7. So sánh 3 mô hình GARCH

# So sánh AIC, BIC và looklikehood giữa 3 mô hình

comparison <- data.frame(
  Model = c("GARCH(1,1)", "TGARCH(1,1)", "EGARCH(1,1)"),
  AIC = c(infocriteria(fit_garch)[1],
          infocriteria(fit_tgarch)[1],
          infocriteria(fit_egarch)[1]),
  BIC = c(infocriteria(fit_garch)[2],
          infocriteria(fit_tgarch)[2],
          infocriteria(fit_egarch)[2]),
  LogLik = c(fit_garch@fit$LLH,
             fit_tgarch@fit$LLH,
             fit_egarch@fit$LLH)
)

print(comparison)
##         Model      AIC      BIC    LogLik
## 1  GARCH(1,1) 15.39338 15.44419 -3819.256
## 2 TGARCH(1,1) 15.37690 15.43617 -3814.159
## 3 EGARCH(1,1) 15.25205 15.31979 -3782.135

Nhận xét

Dựa vào bảng so sánh các tiêu chí AIC, BIC và Log-likelihood, ta có:

  • Mô hình GARCH(1,1) có AIC, BIC cao nhất

  • Mô hình TGARCH(1,1) có AIC và BIC thấp hơn GARCH(1,1), chứng tỏ việc thêm yếu tố bất cân xứng giúp mô hình mô tả biến động tốt hơn.

  • Mô hình EGARCH(1,1) có giá trị AIC = 15.25205BIC = 15.31979thấp nhất, đồng thời Log-likelihood = -3782.135cao nhất (ít âm nhất).
    → Điều này cho thấy EGARCH(1,1) phù hợp nhất với dữ liệu.

➡ Kết luận: Trong ba mô hình, EGARCH(1,1) là mô hình tốt nhất để mô tả và dự báo biến động giá cổ phiếu CTG.

2.8. Dự báo

2.8.1. Dự báo mô hình GARCH(1,1)

# Dự báo GARCH(1,1)
forecast_garch <- ugarchforecast(fit_garch, n.ahead = 10)
forecast_garch
## 
## *------------------------------------*
## *       GARCH Model Forecast         *
## *------------------------------------*
## Model: sGARCH
## Horizon: 10
## Roll Steps: 0
## Out of Sample: 0
## 
## 0-roll forecast [T0=498-01-01]:
##         Series Sigma
## T+1  -3.505200 262.6
## T+2  -0.415898 263.1
## T+3  -0.041145 263.6
## T+4   0.004315 264.1
## T+5   0.009830 264.6
## T+6   0.010499 265.1
## T+7   0.010580 265.6
## T+8   0.010590 266.1
## T+9   0.010591 266.6
## T+10  0.010591 267.1
# Vẽ biểu đồ volatility 
plot(forecast_garch, which = 1)   # dự báo giá trị trung bình

### 2.8.2. Dự báo mô hình TGARCH(1,1)

# Dự báo TGARCH(1,1)
forecast_tgarch <- ugarchforecast(fit_tgarch, n.ahead = 10)
forecast_tgarch
## 
## *------------------------------------*
## *       GARCH Model Forecast         *
## *------------------------------------*
## Model: fGARCH
## fGARCH Sub-Model: TGARCH
## 
## Horizon: 10
## Roll Steps: 0
## Out of Sample: 0
## 
## 0-roll forecast [T0=498-01-01]:
##      Series Sigma
## T+1  -19.92 299.2
## T+2  -17.24 310.8
## T+3  -16.87 322.1
## T+4  -16.82 333.1
## T+5  -16.82 343.7
## T+6  -16.81 354.0
## T+7  -16.81 363.9
## T+8  -16.81 373.6
## T+9  -16.81 383.0
## T+10 -16.81 392.1
plot(forecast_tgarch, which = 1)

### 2.8.3. Dự báo mô hình EGARCH(1,1)

# Dự báo  mô hình EGARCH(1,1)
forecast_egarch <- ugarchforecast(fit_egarch, n.ahead = 10)
forecast_egarch
## 
## *------------------------------------*
## *       GARCH Model Forecast         *
## *------------------------------------*
## Model: eGARCH
## Horizon: 10
## Roll Steps: 0
## Out of Sample: 0
## 
## 0-roll forecast [T0=498-01-01]:
##        Series Sigma
## T+1  -12.7033 266.9
## T+2   -6.7337 269.5
## T+3   -3.0040 272.1
## T+4   -0.6737 274.6
## T+5    0.7823 277.2
## T+6    1.6919 279.7
## T+7    2.2602 282.1
## T+8    2.6153 284.6
## T+9    2.8372 287.0
## T+10   2.9758 289.4
plot(forecast_egarch, which = 1)

2.9. Tổng hợp kết quả phân tích

2.9.1. Phân tích kết quả

comparison_forecast <- data.frame(
  Step = 1:10,
  GARCH_Mean = as.numeric(fitted(forecast_garch)),
  TGARCH_Mean = as.numeric(fitted(forecast_tgarch)),
  EGARCH_Mean = as.numeric(fitted(forecast_egarch)),
  GARCH_Vol = as.numeric(sigma(forecast_garch)),
  TGARCH_Vol = as.numeric(sigma(forecast_tgarch)),
  EGARCH_Vol = as.numeric(sigma(forecast_egarch))
)

print(comparison_forecast)
##    Step   GARCH_Mean TGARCH_Mean EGARCH_Mean GARCH_Vol TGARCH_Vol EGARCH_Vol
## 1     1 -3.505200236   -19.92354 -12.7033206  262.5788   299.1676   266.8850
## 2     2 -0.415897613   -17.24324  -6.7337114  263.0826   310.8148   269.4913
## 3     3 -0.041144701   -16.87362  -3.0039753  263.5849   322.1073   272.0713
## 4     4  0.004315315   -16.82265  -0.6736834  264.0857   333.0559   274.6248
## 5     5  0.009829916   -16.81562   0.7822534  264.5851   343.6712   277.1515
## 6     6  0.010498874   -16.81465   1.6919043  265.0831   353.9632   279.6514
## 7     7  0.010580023   -16.81452   2.2602426  265.5796   363.9419   282.1241
## 8     8  0.010589867   -16.81450   2.6153332  266.0747   373.6168   284.5697
## 9     9  0.010591061   -16.81450   2.8371893  266.5684   382.9970   286.9880
## 10   10  0.010591206   -16.81450   2.9758021  267.0607   392.0917   289.3789

Nhận xét

Từ bảng kết quả dự báo, ta thấy:

  • Về giá trị trung bình (Mean Forecast):

    • Mô hình GARCH(1,1)EGARCH(1,1) cho dự báo giá trị trung bình dao động quanh 0 và dần chuyển sang dương, phản ánh xu hướng ổn định và có thể hồi phục nhẹ.

    • Trong khi đó, TGARCH(1,1) dự báo giá trị âm và hầu như không thay đổi, cho thấy mô hình này phản ứng mạnh hơn với các cú sốc âm (tin xấu).

  • Về độ biến động dự báo (Volatility Forecast):

    • TGARCH(1,1) có giá trị phương sai cao nhất và tăng nhanh theo thời gian ⇒ mô hình nhạy cảm với biến động tiêu cực.

    • GARCH(1,1) cho độ biến động ổn định nhất, tăng chậm ⇒ mô hình bảo thủ.

    • EGARCH(1,1) thể hiện biến động tăng nhẹ và ổn định ⇒ mô tả hợp lý hơn với dữ liệu tài chính có tính bất cân xứng.

➡ Kết luận: Trong ba mô hình, EGARCH(1,1) cho kết quả dự báo ổn định và hợp lý nhất, phản ánh đúng đặc điểm biến động bất cân xứng của chuỗi giá cổ phiếu CTG.

2.9.2. Trực quan hóa bằng biểu đồ

library(ggplot2)

df_vol <- data.frame(
  Step = 1:10,
  GARCH = as.numeric(sigma(forecast_garch)),
  TGARCH = as.numeric(sigma(forecast_tgarch)),
  EGARCH = as.numeric(sigma(forecast_egarch))
)

ggplot(df_vol, aes(x = Step)) +
  geom_line(aes(y = GARCH, color = "GARCH(1,1)"), size = 1) +
  geom_line(aes(y = TGARCH, color = "TGARCH(1,1)"), size = 1) +
  geom_line(aes(y = EGARCH, color = "EGARCH(1,1)"), size = 1.1) +
  labs(title = "So sánh độ biến động dự báo (Volatility Forecast)",
       y = "σ_t", x = "Bước dự báo") +
  scale_color_manual(values = c("blue", "green", "red")) +
  theme_minimal()

Nhận xét

Từ biểu đồ có thể thấy:

  • TGARCH(1,1) cho biến động tăng mạnh nhất theo thời gian.

  • GARCH(1,1) ổn định nhất, gần như không thay đổi.

  • EGARCH(1,1) ở mức trung bình và ổn định hơn.

=> EGARCH(1,1) mô tả hợp lý nhất đặc tính biến động của cổ phiếu CTG.”)