Mô hình GARCH (Generalized Autoregressive Conditional Heteroskedasticity) là một mô hình dùng để phân tích biến động của giá cổ phiếu và dự đoán biến động của giá trong tương lai.
Trong thị trường chứng khoán, biến động giá là điều không thể tránh khỏi và luôn là một rủi ro cho nhà đầu tư.
Mô hình GARCH có thể giúp định lượng rủi ro này bằng cách ước tính các tham số để mô hình hóa sự biến động trong giá cổ phiếu. Sau đó, dựa trên các tham số này, nhà đầu tư có thể tính toán được giá trị VaR (Value at Risk), tức là mức độ rủi ro tối đa mà nhà đầu tư có thể chấp nhận trong giao dịch cổ phiếu.
Ngoài ra, mô hình GARCH cũng có thể được sử dụng để đưa ra các dự đoán về biến động của giá cổ phiếu trong tương lai. Những dự đoán này có thể giúp nhà đầu tư có thể xác định được thời điểm nào nên mua hoặc bán cổ phiếu.
Trong bản demo dưới đây, chúng ta sẽ sử dụng giá cổ phiếu DVN của Tổng Công ty Dược Việt Nam từ năm 2017 đến năm 2022 và đưa ra dự đoán về giá của mã cổ phiếu này. Dữ liệu được tổng hợp trong file CSV sau: DVN_Stock
Tài liệu tham khảo: Tạo mô hình GARCH trong R
Chúng ta sẽ sử dụng các thư viện quantmod, xts, PerformanceAnalytics và rugarch để thực hiện bản demo này. Dữ liệu giá cổ phiếu hàng ngày của mã DVN được tải lên và biến đổi thành dạng time-series.
#Sử dụng các thư viện sau đây
library(quantmod)
library(xts)
library(PerformanceAnalytics)
library(rugarch)
#Truy cập và tải dữ liệu lên R
stock <- read.csv("DVN_Stock.csv")
#Chuyển đổi dữ liệu thành dạng time-series
stock_ts <- xts(stock[, -1], order.by = as.Date(stock$Date, format = "%d/%m/%Y"))
chartSeries(stock_ts)
Như ta có thể nhìn thấy trên biểu đồ, giá cổ phiếu của DVN những biến đổi rất mạnh mẽ qua thời gian, thay vì sử dụng dữ liệu trên, chúng ta sẽ sử dụng Tỉ suất lợi nhuận hàng ngày (Daily return) để có cái nhìn rõ hơn về sự biến đổi của giá cổ phiếu theo thời gian, vì 2 lý do sau:
Tỷ suất lợi nhuận hàng ngày bắt được biến động ngắn hạn: Giá cổ phiếu có thể biến động mạnh (như trường hợp trên), sử dụng tỷ suất lợi nhuận hàng ngày giúp bắt được biến động này. Tỷ suất lợi nhuận hàng ngày được tính toán là tỷ suất phần trăm (Giá đóng cửa ngày sau - Giá đóng cửa ngày trước)/Giá đóng cửa ngày trước, điều này cho phép phân tích chính xác hơn các biến động hàng ngày trong giá cổ phiếu.
Tỷ suất lợi nhuận hàng ngày là chuỗi thời gian có tính dừng: Tính dừng (stationary) là một giả định quan trọng trong nhiều mô hình chuỗi thời gian, bao gồm mô hình GARCH. Tỷ suất lợi nhuận hàng ngày đã được phát hiện là một chuỗi thời gian có tính dừng, có nghĩa là nó có một trung bình và phương sai không đổi theo thời gian. Điều này cho phép sử dụng các mô hình chuỗi thời gian như GARCH để phân tích và dự báo giá cổ phiếu trong tương lai.
#Tỉ suất lợi nhuận hàng ngày (Daily Return)
return <- CalculateReturns(stock_ts$DVN_Close)
return <- return[-1] #Xóa dòng kết quả đầu tiên vì không hiển thị kết quả
hist(return)
Biểu đồ tần xuất cho thấy, đa số Tỉ suất lợi nhuận hàng ngày rơi vào khoảng với tỉ suất tương đối nhỏ (-0.05 đến 0.05). Có một số quan sát ngoại suất rơi vào các khoảng lớn hơn.
chartSeries(return, theme = 'white')
Nhìn vào biểu đồ trên ta có thể thấy rằng, các dữ liệu của Tỉ suất lợi nhuận hàng ngày thể hiện tính dừng, không xuất hiện trend hay tính mùa vụ trong dữ liệu. Tuy nhiên, ta cũng có thể thấy thị trường có biết động mạnh trong khoảng thời gian đầu năm 2021, khi đang xảy ra đại dịch Covid-19, đặc biệt với DVN - là một trong những cổ phiếu ngành Dược, có tỉ suất lợi nhuận biến động mạnh.
Để giá trị độ biến động có ý nghĩa, chúng ta cần tính giá trị độ biến động trong khoảng thời gian dài hơn (1 năm). Với dữ liệu có độ phân phối chuẩn, Giá trị của độ biến động hàng năm = Độ lệch chuẩn của Lợi suất hàng ngày * Căn bậc hai của khoảng thời gian được chọn.
Trong 1 năm, chúng ta giả định có tổng cộng 252 ngày giao dịch chứng khoán. Độ biến động hàng năm được tính như sau:
#Annualized volatility
sd(return)
## [1] 0.0327813
sqrt(252) * sd(return["2017"]) #Trung binh coi nhu 1 nam co 252 ngay de trade (tru cuoi tuan, le tet)
## [1] 1.133683
chart.RollingPerformance(R = return["2017::2022"],
width = 252,
FUN = "sd.annualized",
scale = 252,
main = "Độ biến động hàng năm của mã DVN")
Chúng ta có thể thấy độ biến động hàng năm tương đối lớn.
Mô hình GARCH có rất nhiều phiên bản khác nhau, tuy nhiên chúng ta cần phải thử các mô hình khác nhau để chọn mô hình phù hợp nhất với bài toán. Một số tiêu chí để chọn mô hình phù hợp như: 1. Chỉ số Akaiye (trong Akaike Information Criterion (AIC)) càng nhỏ thì mô hình càng tốt: Chỉ số AIC được tính bằng cách đo lường độ phù hợp của mô hình với dữ liệu và đánh giá độ phức tạp của mô hình. Điểm số của AIC càng nhỏ, tức là mô hình càng phù hợp với dữ liệu và độ phức tạp của mô hình càng thấp. 2. Các chí số khác được thêm vào cần có chỉ số p <0.05 để có ý nghĩa thống kê: Với một số mô hình như AR(1) GJR-GARCH (mô hình 4) và GJR-GARCH in mean (mô hình số 5 - có hiệu chỉnh cho giá trị trung bình), các chỉ số như ar1 và archm tương ứng cần có chỉ số p bé hơn 0.05 để có ý nghĩa về thống kê, nếu không chúng ta sẽ không lựa chọn mô hình này.
Đây là mô hình cơ bản nhất của GARCH. Chúng ta giả định rằng giá trị trung bình của chuỗi dữ liệu được giả định là một hằng số, tức là không thay đổi theo thời gian. Các giá trị trung bình này có thể được ước lượng bằng cách tính trung bình cộng của chuỗi dữ liệu trong một khoảng thời gian.
Mô hình GARCH with constant mean được xây dựng dựa trên giả định rằng các biến động của chuỗi dữ liệu là không đổi theo thời gian, tức là có tính đối xứng. Tuy nhiên, thực tế cho thấy rằng các biến động trong dữ liệu tài chính thường có tính bất đối xứng (asymmetry), có nghĩa là sự tăng giá có thể dẫn đến biến động lớn hơn so với sự giảm giá tương đương.
Giá trị AIC: -4.2754.
# 1. sGARCH model with contant mean
s <- ugarchspec(mean.model = list(armaOrder = c(0,0)),
variance.model = list(model = "sGARCH"),
distribution.model = 'norm')
m <- ugarchfit(data = return, spec = s)
m
##
## *---------------------------------*
## * GARCH Model Fit *
## *---------------------------------*
##
## Conditional Variance Dynamics
## -----------------------------------
## GARCH Model : sGARCH(1,1)
## Mean Model : ARFIMA(0,0,0)
## Distribution : norm
##
## Optimal Parameters
## ------------------------------------
## Estimate Std. Error t value Pr(>|t|)
## mu 0.000569 0.000725 0.78541 0.432211
## omega 0.000279 0.000068 4.09919 0.000041
## alpha1 0.336884 0.057221 5.88742 0.000000
## beta1 0.394086 0.107127 3.67870 0.000234
##
## Robust Standard Errors:
## Estimate Std. Error t value Pr(>|t|)
## mu 0.000569 0.000699 0.8150 0.415075
## omega 0.000279 0.000152 1.8300 0.067250
## alpha1 0.336884 0.104290 3.2302 0.001237
## beta1 0.394086 0.225904 1.7445 0.081075
##
## LogLikelihood : 2637.673
##
## Information Criteria
## ------------------------------------
##
## Akaike -4.2754
## Bayes -4.2588
## Shibata -4.2755
## Hannan-Quinn -4.2692
##
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.1655 0.6842
## Lag[2*(p+q)+(p+q)-1][2] 0.4324 0.7262
## Lag[4*(p+q)+(p+q)-1][5] 1.3418 0.7787
## d.o.f=0
## H0 : No serial correlation
##
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.3599 0.5485
## Lag[2*(p+q)+(p+q)-1][5] 1.7026 0.6901
## Lag[4*(p+q)+(p+q)-1][9] 2.2234 0.8767
## d.o.f=2
##
## Weighted ARCH LM Tests
## ------------------------------------
## Statistic Shape Scale P-Value
## ARCH Lag[3] 0.8886 0.500 2.000 0.3458
## ARCH Lag[5] 1.0839 1.440 1.667 0.7082
## ARCH Lag[7] 1.3310 2.315 1.543 0.8545
##
## Nyblom stability test
## ------------------------------------
## Joint Statistic: 0.626
## Individual Statistics:
## mu 0.1297
## omega 0.2142
## alpha1 0.1232
## beta1 0.1673
##
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic: 1.07 1.24 1.6
## Individual Statistic: 0.35 0.47 0.75
##
## Sign Bias Test
## ------------------------------------
## t-value prob sig
## Sign Bias 0.6230 0.5334
## Negative Sign Bias 0.9891 0.3228
## Positive Sign Bias 1.0324 0.3021
## Joint Effect 2.1900 0.5339
##
##
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
## group statistic p-value(g-1)
## 1 20 289.5 2.788e-50
## 2 30 325.1 8.363e-52
## 3 40 358.3 3.020e-53
## 4 50 391.2 7.101e-55
##
##
## Elapsed time : 0.1836061
Đây là một dạng mở rộng của mô hình GARCH, trong đó phần dư chuẩn hóa được sử dụng để tăng độ chính xác của mô hình.
Phần dư chuẩn hóa là phần dư của chuỗi dữ liệu đã được chuẩn hóa bằng cách chia cho giá trị của độ lệch chuẩn của chuỗi dữ liệu. Khi sử dụng phần dư chuẩn hóa trong mô hình GARCH, ta có thể giả định rằng phần dư của chuỗi dữ liệu có cùng phân phối chuẩn với độ lệch chuẩn bằng 1.
Việc sử dụng phần dư chuẩn hóa trong mô hình GARCH có thể giúp loại bỏ sự ảnh hưởng của những biến động phi thường trên biến động trong chuỗi dữ liệu. Điều này có thể giúp mô hình trở nên ổn định hơn và dự báo được chính xác hơn.
**Giá trị AIC: -4.5566 - mô hình tốt hơn mô hình 1*
# 2. GARCH with sstd
s <- ugarchspec(mean.model = list(armaOrder = c(0,0)),
variance.model = list(model = "sGARCH"),
distribution.model = 'sstd')
m <- ugarchfit(data = return, spec = s)
m
##
## *---------------------------------*
## * GARCH Model Fit *
## *---------------------------------*
##
## Conditional Variance Dynamics
## -----------------------------------
## GARCH Model : sGARCH(1,1)
## Mean Model : ARFIMA(0,0,0)
## Distribution : sstd
##
## Optimal Parameters
## ------------------------------------
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000096 0.000613 -0.15573 0.876250
## omega 0.000134 0.000061 2.18086 0.029194
## alpha1 0.412948 0.081073 5.09353 0.000000
## beta1 0.586052 0.102914 5.69459 0.000000
## skew 1.174819 0.039199 29.97063 0.000000
## shape 2.843378 0.193289 14.71050 0.000000
##
## Robust Standard Errors:
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000096 0.000635 -0.15043 0.880425
## omega 0.000134 0.000182 0.73758 0.460770
## alpha1 0.412948 0.139611 2.95786 0.003098
## beta1 0.586052 0.305688 1.91716 0.055218
## skew 1.174819 0.038466 30.54208 0.000000
## shape 2.843378 0.229159 12.40790 0.000000
##
## LogLikelihood : 2812.838
##
## Information Criteria
## ------------------------------------
##
## Akaike -4.5566
## Bayes -4.5316
## Shibata -4.5566
## Hannan-Quinn -4.5472
##
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.2889 0.5909
## Lag[2*(p+q)+(p+q)-1][2] 0.3458 0.7707
## Lag[4*(p+q)+(p+q)-1][5] 1.0602 0.8459
## d.o.f=0
## H0 : No serial correlation
##
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.004736 0.9451
## Lag[2*(p+q)+(p+q)-1][5] 2.018296 0.6141
## Lag[4*(p+q)+(p+q)-1][9] 3.181728 0.7286
## d.o.f=2
##
## Weighted ARCH LM Tests
## ------------------------------------
## Statistic Shape Scale P-Value
## ARCH Lag[3] 0.00451 0.500 2.000 0.9465
## ARCH Lag[5] 0.23027 1.440 1.667 0.9582
## ARCH Lag[7] 1.14150 2.315 1.543 0.8895
##
## Nyblom stability test
## ------------------------------------
## Joint Statistic: 6.436
## Individual Statistics:
## mu 0.2117
## omega 0.4359
## alpha1 0.2555
## beta1 0.4233
## skew 0.4188
## shape 0.6372
##
## 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.8687 0.38520
## Negative Sign Bias 1.7217 0.08537 *
## Positive Sign Bias 0.2422 0.80869
## Joint Effect 3.0294 0.38712
##
##
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
## group statistic p-value(g-1)
## 1 20 84.62 2.931e-10
## 2 30 106.17 9.858e-11
## 3 40 141.18 1.702e-13
## 4 50 163.37 3.189e-14
##
##
## Elapsed time : 0.3041749
Mô hình GJR-GARCH là một dạng mở rộng của mô hình GARCH, với khả năng mô tả tính bất đối xứng của biến động dữ liệu tài chính. Được đặt tên theo tên các tác giả: Glosten, Jagannathan và Runkle, mô hình GJR-GARCH cho phép đặt giả định về sự bất đối xứng của biến động trong dữ liệu tài chính.
Trong mô hình GJR-GARCH, các biến động dương và âm sẽ được xử lý khác nhau, tức là biến động tăng giá và giảm giá sẽ có hiệu ứng khác nhau đối với biến động tổng thể. Điều này được thể hiện thông qua thêm một yếu tố mới gọi là yếu tố GJR (Glosten-Jagannathan-Runkle) vào mô hình GARCH.
Giá trị AIC: -4.5592 - tốt hơn mô hình 2
# 3. GJR-GARCH
s <- ugarchspec(mean.model = list(armaOrder = c(0,0)),
variance.model = list(model = "gjrGARCH"),
distribution.model = 'sstd')
m <- ugarchfit(data = return, spec = s)
m
##
## *---------------------------------*
## * GARCH Model Fit *
## *---------------------------------*
##
## Conditional Variance Dynamics
## -----------------------------------
## GARCH Model : gjrGARCH(1,1)
## Mean Model : ARFIMA(0,0,0)
## Distribution : sstd
##
## Optimal Parameters
## ------------------------------------
## Estimate Std. Error t value Pr(>|t|)
## mu 0.000319 0.000644 0.49546 0.620277
## omega 0.000141 0.000068 2.06835 0.038607
## alpha1 0.540296 0.129526 4.17134 0.000030
## beta1 0.605749 0.107022 5.66006 0.000000
## gamma1 -0.264980 0.128955 -2.05483 0.039896
## skew 1.192037 0.039927 29.85569 0.000000
## shape 2.749485 0.184694 14.88667 0.000000
##
## Robust Standard Errors:
## Estimate Std. Error t value Pr(>|t|)
## mu 0.000319 0.000718 0.44439 0.656761
## omega 0.000141 0.000223 0.63228 0.527202
## alpha1 0.540296 0.276254 1.95579 0.050490
## beta1 0.605749 0.352845 1.71676 0.086024
## gamma1 -0.264980 0.228614 -1.15907 0.246427
## skew 1.192037 0.040332 29.55552 0.000000
## shape 2.749485 0.233833 11.75834 0.000000
##
## LogLikelihood : 2815.466
##
## Information Criteria
## ------------------------------------
##
## Akaike -4.5592
## Bayes -4.5301
## Shibata -4.5593
## Hannan-Quinn -4.5483
##
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.3122 0.5763
## Lag[2*(p+q)+(p+q)-1][2] 0.3175 0.7861
## Lag[4*(p+q)+(p+q)-1][5] 0.9533 0.8702
## d.o.f=0
## H0 : No serial correlation
##
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.004579 0.9461
## Lag[2*(p+q)+(p+q)-1][5] 1.759203 0.6763
## Lag[4*(p+q)+(p+q)-1][9] 2.939748 0.7689
## d.o.f=2
##
## Weighted ARCH LM Tests
## ------------------------------------
## Statistic Shape Scale P-Value
## ARCH Lag[3] 0.008556 0.500 2.000 0.9263
## ARCH Lag[5] 0.214687 1.440 1.667 0.9620
## ARCH Lag[7] 1.134493 2.315 1.543 0.8907
##
## Nyblom stability test
## ------------------------------------
## Joint Statistic: 5.8046
## Individual Statistics:
## mu 0.1905
## omega 0.4347
## alpha1 0.2509
## beta1 0.4458
## gamma1 0.3157
## skew 0.3688
## shape 0.6029
##
## 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.91786 0.3589
## Negative Sign Bias 1.19586 0.2320
## Positive Sign Bias 0.09679 0.9229
## Joint Effect 1.79155 0.6168
##
##
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
## group statistic p-value(g-1)
## 1 20 79.36 2.393e-09
## 2 30 124.09 9.928e-14
## 3 40 148.71 1.013e-14
## 4 50 172.22 1.295e-15
##
##
## Elapsed time : 1.353064
Đây là một mô hình dự báo biến động giá cổ phiếu trong tài chính, nó là sự kết hợp giữa mô hình AR(1), mô hình GJR-GARCH và phương pháp điều chỉnh tăng trưởng logarit (log-return).
Mô hình AR(1) GJR-GARCH được sử dụng để mô tả giá trị cổ phiếu trong thị trường tài chính, trong đó giá trị cổ phiếu được xem như là một quá trình ngẫu nhiên. Mô hình này sử dụng một mô hình autoregressive (AR) để mô tả giá trị cổ phiếu và một mô hình GJR-GARCH để mô tả biến động của giá trị cổ phiếu.
Mô hình AR(1) GJR-GARCH có thể được sử dụng để dự báo biến động giá trong tương lai, dựa trên các thông tin lịch sử về giá cổ phiếu.
Giá trị ar1 = 0.024804 < 0.05, có ý nghĩa về mặt thống kê, tốt hơn mô hình 3.
#4. AR(1) GJR-GARCH
s <- ugarchspec(mean.model = list(armaOrder = c(1,0)),
variance.model = list(model = "gjrGARCH"),
distribution.model = 'sstd')
m <- ugarchfit(data = return, spec = s)
m
##
## *---------------------------------*
## * GARCH Model Fit *
## *---------------------------------*
##
## Conditional Variance Dynamics
## -----------------------------------
## GARCH Model : gjrGARCH(1,1)
## Mean Model : ARFIMA(1,0,0)
## Distribution : sstd
##
## Optimal Parameters
## ------------------------------------
## Estimate Std. Error t value Pr(>|t|)
## mu 0.000213 0.000602 0.35309 0.724020
## ar1 -0.065610 0.029232 -2.24445 0.024804
## omega 0.000122 0.000063 1.93346 0.053179
## alpha1 0.479973 0.117208 4.09504 0.000042
## beta1 0.636451 0.105481 6.03378 0.000000
## gamma1 -0.211295 0.114837 -1.83996 0.065774
## skew 1.196665 0.039989 29.92453 0.000000
## shape 2.762234 0.186617 14.80158 0.000000
##
## Robust Standard Errors:
## Estimate Std. Error t value Pr(>|t|)
## mu 0.000213 0.000688 0.30924 0.757139
## ar1 -0.065610 0.033578 -1.95396 0.050706
## omega 0.000122 0.000216 0.56565 0.571634
## alpha1 0.479973 0.263178 1.82376 0.068188
## beta1 0.636451 0.362183 1.75726 0.078873
## gamma1 -0.211295 0.185579 -1.13857 0.254882
## skew 1.196665 0.039185 30.53911 0.000000
## shape 2.762234 0.249520 11.07017 0.000000
##
## LogLikelihood : 2817.968
##
## Information Criteria
## ------------------------------------
##
## Akaike -4.5616
## Bayes -4.5284
## Shibata -4.5617
## Hannan-Quinn -4.5491
##
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.7534 0.3854
## Lag[2*(p+q)+(p+q)-1][2] 0.7560 0.8728
## Lag[4*(p+q)+(p+q)-1][5] 1.3895 0.8727
## d.o.f=1
## H0 : No serial correlation
##
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.022 0.8821
## Lag[2*(p+q)+(p+q)-1][5] 1.883 0.6464
## Lag[4*(p+q)+(p+q)-1][9] 3.227 0.7210
## d.o.f=2
##
## Weighted ARCH LM Tests
## ------------------------------------
## Statistic Shape Scale P-Value
## ARCH Lag[3] 0.009953 0.500 2.000 0.9205
## ARCH Lag[5] 0.230926 1.440 1.667 0.9580
## ARCH Lag[7] 1.309661 2.315 1.543 0.8586
##
## Nyblom stability test
## ------------------------------------
## Joint Statistic: 6.2932
## Individual Statistics:
## mu 0.2039
## ar1 0.2087
## omega 0.4111
## alpha1 0.2472
## beta1 0.4342
## gamma1 0.3076
## skew 0.4510
## shape 0.6213
##
## 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 1.0845 0.2784
## Negative Sign Bias 1.2586 0.2084
## Positive Sign Bias 0.1615 0.8718
## Joint Effect 1.9430 0.5843
##
##
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
## group statistic p-value(g-1)
## 1 20 52.25 6.063e-05
## 2 30 68.28 5.200e-05
## 3 40 81.05 8.925e-05
## 4 50 91.70 2.106e-04
##
##
## Elapsed time : 1.609806
Trong mô hình này, giá trị trung bình của chuỗi dữ liệu được mô hình hóa bởi một phương trình tuyến tính, với hệ số ảnh hưởng của biến động được tính bởi các tham số trong mô hình GJR-GARCH.
Giá trị archm = 0.727729 > 0.05, không có giá trị về mặt thống kê - không sử dụng mô hình này.
#5. GJR-GARCH in mean
s <- ugarchspec(mean.model = list(armaOrder = c(0,0),
archm =T,
archpow = 2),
variance.model = list(model = "gjrGARCH"),
distribution.model = 'sstd')
m <- ugarchfit(data = return, spec = s)
m
##
## *---------------------------------*
## * GARCH Model Fit *
## *---------------------------------*
##
## Conditional Variance Dynamics
## -----------------------------------
## GARCH Model : gjrGARCH(1,1)
## Mean Model : ARFIMA(0,0,0)
## Distribution : sstd
##
## Optimal Parameters
## ------------------------------------
## Estimate Std. Error t value Pr(>|t|)
## mu 0.000628 0.000809 0.77705 0.437128
## archm -0.453272 0.690646 -0.65630 0.511630
## omega 0.000150 0.000079 1.90609 0.056638
## alpha1 0.550204 0.135433 4.06254 0.000049
## beta1 0.599643 0.115667 5.18422 0.000000
## gamma1 -0.272072 0.133955 -2.03107 0.042248
## skew 1.187392 0.040381 29.40500 0.000000
## shape 2.719047 0.182109 14.93086 0.000000
##
## Robust Standard Errors:
## Estimate Std. Error t value Pr(>|t|)
## mu 0.000628 0.001355 0.46392 0.642705
## archm -0.453272 1.301950 -0.34815 0.727729
## omega 0.000150 0.000285 0.52549 0.599243
## alpha1 0.550204 0.304911 1.80447 0.071157
## beta1 0.599643 0.420673 1.42544 0.154030
## gamma1 -0.272072 0.268108 -1.01479 0.310208
## skew 1.187392 0.039443 30.10384 0.000000
## shape 2.719047 0.231723 11.73405 0.000000
##
## LogLikelihood : 2815.731
##
## Information Criteria
## ------------------------------------
##
## Akaike -4.5580
## Bayes -4.5248
## Shibata -4.5581
## Hannan-Quinn -4.5455
##
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.1988 0.6557
## Lag[2*(p+q)+(p+q)-1][2] 0.1988 0.8549
## Lag[4*(p+q)+(p+q)-1][5] 0.8432 0.8940
## d.o.f=0
## H0 : No serial correlation
##
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.002332 0.9615
## Lag[2*(p+q)+(p+q)-1][5] 1.689110 0.6934
## Lag[4*(p+q)+(p+q)-1][9] 2.832392 0.7863
## d.o.f=2
##
## Weighted ARCH LM Tests
## ------------------------------------
## Statistic Shape Scale P-Value
## ARCH Lag[3] 0.001729 0.500 2.000 0.9668
## ARCH Lag[5] 0.206703 1.440 1.667 0.9639
## ARCH Lag[7] 1.090416 2.315 1.543 0.8984
##
## Nyblom stability test
## ------------------------------------
## Joint Statistic: 5.7151
## Individual Statistics:
## mu 0.18570
## archm 0.03947
## omega 0.43590
## alpha1 0.22787
## beta1 0.44289
## gamma1 0.31370
## skew 0.35446
## shape 0.60495
##
## 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.99395 0.3204
## Negative Sign Bias 1.12794 0.2596
## Positive Sign Bias 0.08133 0.9352
## Joint Effect 1.77308 0.6208
##
##
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
## group statistic p-value(g-1)
## 1 20 60.82 2.864e-06
## 2 30 117.37 1.369e-12
## 3 40 106.96 3.026e-08
## 4 50 118.97 9.436e-08
##
##
## Elapsed time : 1.966205
Sau khi lựa chọn các mô hình, chúng ta sẽ sử dụng mô hình phù hợp nhất là mô hình số 4, AR(1) GJR-GARCH.
#Lựa chọn mô hình 4 làm mô hình chính
s <- ugarchspec(mean.model = list(armaOrder = c(1,0)),
variance.model = list(model = "gjrGARCH"),
distribution.model = 'sstd')
m <- ugarchfit(data = return, spec = s)
sfinal <- s
setfixed(sfinal) <- as.list(coef(m))
#Dự đoán tỉ lệ lợi suất thu về trong 1 năm tới
f2022 <- ugarchforecast(data = return["/2022-12"],
fitORspec = sfinal,
n.ahead = 252)
#Biểu đồ cho Tỉ lệ lợi suất của mã DVN trong năm tới
par(mfrow = c(1,1))
plot(sigma(f2022))
#Tạo 3 tình huống giá khác nhau cho giá cổ phiếu DVN dự đoán trong 1 năm tới
sim <- ugarchpath(spec = sfinal,
m.sim = 3,
n.sim = 1*252,
rseed = 123)
#Dự đoán giá của cố phiếu DVN trong năm năm tới, lựa chọn giá đóng cửa ngày 30/12/2022 làm điểm khởi đầu (18,000 VND)
p <- 18000*apply(fitted(sim), 2, 'cumsum') + 18000
matplot(p, type = "l", lwd = 3)
Ta có thể thấy rằng, tỉ suất lợi nhuận trong một năm tới của cố phiếu DVN có xu hướng tăng trong dài hạn, đạt tiệm cận tới gần 0.18%. Tuy nhiên, giá cổ phiếu DVN vẫn có xu hướng tăng trưởng không ổn định trong thời gian 1 năm tới.