Lý thuyết mô hình Garch

Cơ sở lý thuyết mô hình Garch

Mô hình GARCH (Generalized Autoregressive Conditional Heteroskedasticity) là một mô hình thống kê được phát triển bởi Robert F. Engle vào những năm 1980 để mô hình hóa sự biến đổi không đều của dữ liệu tài chính. Mô hình này được sử dụng rộng rãi trong lĩnh vực tài chính để phân tích và dự đoán rủi ro.

Mô hình GARCH kết hợp các thành phần autoregressive (AR) và moving average (MA) để mô hình hóa sự phụ thuộc của phương sai có điều kiện vào các giá trị đã qua xử lý cũng như các giá trị độ biến động trước đó. Một mô hình GARCH(p, q) có thể được biểu diễn như sau:

σ²(t) = ω + α₁ε²(t-1) + … + αₚε²(t-p) + β₁σ²(t-1) + … + β_qσ²(t-q)

Trong đó:

σ²(t) là phương sai có điều kiện của biến ngẫu nhiên tại thời điểm t. ε(t) là biến ngẫu nhiên có kỳ vọng bằng 0 và phương sai đẳng nhất. ω, α₁, …, αₚ, β₁, …, β_q là các tham số của mô hình. p là số lags cho thành phần autoregressive (AR) và q là số lags cho thành phần moving average (MA). Thường thì các tham số α và β trong mô hình GARCH có giá trị từ 0 đến 1 để đảm bảo tính chất dương và tích cực của phương sai. Trong trường hợp p = 0 và q = 0, mô hình GARCH trở thành mô hình ARCH.

Mô hình GARCH được ước lượng thông qua các phương pháp tối đa hóa hàm hợp lý hoặc phương pháp bình phương tối thiểu. Các giá trị ước lượng của các tham số được xác định để tối thiểu hóa sai số giữa dữ liệu quan sát và dữ liệu được dự đoán từ mô hình GARCH.

Mô hình GARCH được sử dụng rộng rãi trong các ứng dụng tài chính như dự báo giá trị tài sản, quản lý rủi ro tài chính, và đánh giá tác động của biến động thị trường lên các quyết định đầu tư và giao dịch.

Chuẩn bị dữ liệu

library(readxl)
library(rugarch)
## Loading required package: parallel
## 
## Attaching package: 'rugarch'
## The following object is masked from 'package:stats':
## 
##     sigma
library(nortest)
library(kSamples)
## Loading required package: SuppDists
## 
## Attaching package: 'kSamples'
## The following object is masked from 'package:nortest':
## 
##     ad.test
vni.data <- read_excel("d:/vni.xlsx")
# Chuyển đổi dữ liệu sang định dạng dữ liệu chuỗi thời gian
vni.ts <- ts(vni.data[, 2])

2. Kiểm tra các mô hình GARCH(1,1)

2.1 Mô hình GARCH(1,1) với phân phối chuẩn

# Mô hình GARCH(1,1) với phân phối chuẩn 
vni.garch11n.spec <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1)),
                                mean.model = list(armaOrder = c(0, 0)),
                                distribution.model = "norm")

vni.garch11n.fit <- ugarchfit(spec = vni.garch11n.spec, data = vni.ts)

# Xem kết quả ước lượng
show(vni.garch11n.fit)
## 
## *---------------------------------*
## *          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     570.858790    0.921179 619.704419  0.00000
## omega   29.374346    5.141920   5.712720  0.00000
## alpha1   0.992720    0.057428  17.286461  0.00000
## beta1    0.000017    0.049928   0.000344  0.99973
## 
## Robust Standard Errors:
##          Estimate  Std. Error    t value Pr(>|t|)
## mu     570.858790    3.830972 149.011474 0.000000
## omega   29.374346    6.251627   4.698672 0.000003
## alpha1   0.992720    0.031442  31.572808 0.000000
## beta1    0.000017    0.031413   0.000546 0.999564
## 
## LogLikelihood : -14904.6 
## 
## Information Criteria
## ------------------------------------
##                    
## Akaike       11.960
## Bayes        11.970
## Shibata      11.960
## Hannan-Quinn 11.964
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                       2289       0
## Lag[2*(p+q)+(p+q)-1][2]      3396       0
## Lag[4*(p+q)+(p+q)-1][5]      6583       0
## d.o.f=0
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic   p-value
## Lag[1]                       5.11 0.0237815
## Lag[2*(p+q)+(p+q)-1][5]     13.06 0.0014672
## Lag[4*(p+q)+(p+q)-1][9]     20.75 0.0001284
## d.o.f=2
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale P-Value
## ARCH Lag[3]     0.569 0.500 2.000 0.45065
## ARCH Lag[5]     1.908 1.440 1.667 0.49204
## ARCH Lag[7]     7.806 2.315 1.543 0.05793
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  7.5254
## Individual Statistics:              
## mu     6.75554
## omega  0.03277
## alpha1 0.36129
## beta1  0.08549
## 
## 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           1.7062 0.0881   *
## Negative Sign Bias  0.5444 0.5862    
## Positive Sign Bias  1.4052 0.1601    
## Joint Effect        3.6796 0.2982    
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20     10289            0
## 2    30     15629            0
## 3    40     18081            0
## 4    50     16350            0
## 
## 
## Elapsed time : 0.447077

2.2 Mô hình GARCH(1,1) với phân phối Student’s t

# Mô hình GARCH(1,1) với phân phối Student's t
vni.garch11t.spec <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1)),
                                mean.model = list(armaOrder = c(0, 0)),
                                distribution.model = "std")

vni.garch11t.fit <- ugarchfit(spec = vni.garch11t.spec, data = vni.data$Price)
# Xem kết quả ước lượng
show(vni.garch11t.fit)
## 
## *---------------------------------*
## *          GARCH Model Fit        *
## *---------------------------------*
## 
## Conditional Variance Dynamics    
## -----------------------------------
## GARCH Model  : sGARCH(1,1)
## Mean Model   : ARFIMA(0,0,0)
## Distribution : std 
## 
## Optimal Parameters
## ------------------------------------
##          Estimate  Std. Error  t value Pr(>|t|)
## mu     502.470607    0.652104 770.5380 0.000000
## omega   13.965701    3.207202   4.3545 0.000013
## alpha1   0.899151    0.057332  15.6832 0.000000
## beta1    0.099849    0.051515   1.9382 0.052594
## shape   99.999919   20.524612   4.8722 0.000001
## 
## Robust Standard Errors:
##          Estimate  Std. Error  t value Pr(>|t|)
## mu     502.470607    2.794155 179.8292 0.000000
## omega   13.965701    3.530532   3.9557 0.000076
## alpha1   0.899151    0.056956  15.7869 0.000000
## beta1    0.099849    0.057613   1.7331 0.083080
## shape   99.999919    1.117587  89.4784 0.000000
## 
## LogLikelihood : -14823.62 
## 
## Information Criteria
## ------------------------------------
##                    
## Akaike       11.896
## Bayes        11.908
## Shibata      11.896
## Hannan-Quinn 11.900
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                       2247       0
## Lag[2*(p+q)+(p+q)-1][2]      3320       0
## Lag[4*(p+q)+(p+q)-1][5]      6440       0
## d.o.f=0
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic   p-value
## Lag[1]                      22.90 1.710e-06
## Lag[2*(p+q)+(p+q)-1][5]     29.34 4.864e-08
## Lag[4*(p+q)+(p+q)-1][9]     41.40 2.906e-10
## d.o.f=2
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale   P-Value
## ARCH Lag[3]     1.549 0.500 2.000 0.2132579
## ARCH Lag[5]     6.800 1.440 1.667 0.0388511
## ARCH Lag[7]    17.904 2.315 1.543 0.0002173
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  713.6176
## Individual Statistics:               
## mu       3.7015
## omega    0.4520
## alpha1   3.8637
## beta1    0.2289
## shape  614.3636
## 
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic:          1.28 1.47 1.88
## Individual Statistic:     0.35 0.47 0.75
## 
## Sign Bias Test
## ------------------------------------
##                    t-value    prob sig
## Sign Bias           2.0645 0.03907  **
## Negative Sign Bias  1.9632 0.04973  **
## Positive Sign Bias  0.1701 0.86493    
## Joint Effect        5.5578 0.13522    
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20     12645            0
## 2    30     18245            0
## 3    40     21816            0
## 4    50     19762            0
## 
## 
## Elapsed time : 0.4970551

2.3 Mô hình GARCH(1,1) với phân phối Skewed Student’s t

# Mô hình GARCH(1,1) với phân phối Skewed Student's t
vni.garch11st.spec <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1)),
                                 mean.model = list(armaOrder = c(0, 0)),
                                 distribution.model = "sstd")

vni.garch11st.fit <- ugarchfit(spec = vni.garch11st.spec, data = vni.data$Price)
# Xem kết quả ước lượng
show(vni.garch11st.fit)
## 
## *---------------------------------*
## *          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     468.08289    2.183897 214.333754  0.00000
## omega  465.95295   42.925300  10.854972  0.00000
## alpha1   0.99900    0.040002  24.973485  0.00000
## beta1    0.00000    0.051105   0.000006  0.99999
## skew     0.20476    0.008921  22.953094  0.00000
## shape    4.84499    0.377066  12.849213  0.00000
## 
## Robust Standard Errors:
##         Estimate  Std. Error   t value Pr(>|t|)
## mu     468.08289   13.585115 34.455572  0.0e+00
## omega  465.95295  119.283684  3.906259  9.4e-05
## alpha1   0.99900    0.039414 25.346264  0.0e+00
## beta1    0.00000    0.079433  0.000004  1.0e+00
## skew     0.20476    0.015388 13.306188  0.0e+00
## shape    4.84499    0.675674  7.170610  0.0e+00
## 
## LogLikelihood : -13811.96 
## 
## Information Criteria
## ------------------------------------
##                    
## Akaike       11.085
## Bayes        11.099
## Shibata      11.085
## Hannan-Quinn 11.090
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                       2416       0
## Lag[2*(p+q)+(p+q)-1][2]      3606       0
## Lag[4*(p+q)+(p+q)-1][5]      7115       0
## d.o.f=0
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                       1388       0
## Lag[2*(p+q)+(p+q)-1][5]      3753       0
## Lag[4*(p+q)+(p+q)-1][9]      5750       0
## d.o.f=2
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale P-Value
## ARCH Lag[3]      1171 0.500 2.000       0
## ARCH Lag[5]      2655 1.440 1.667       0
## ARCH Lag[7]      3786 2.315 1.543       0
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  404.6829
## Individual Statistics:              
## mu     12.0887
## omega   0.2175
## alpha1  2.3314
## beta1   1.4853
## skew    3.0288
## shape   3.6751
## 
## 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            22.31 1.129e-100 ***
## Negative Sign Bias   24.62 5.990e-120 ***
## Positive Sign Bias   21.68  1.244e-95 ***
## Joint Effect       1385.42 4.295e-300 ***
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20      9402            0
## 2    30     10617            0
## 3    40     12893            0
## 4    50     11791            0
## 
## 
## Elapsed time : 1.050385

2.4 Mô hình GARCH(1,1) với phân phối Generalized Error Distribution (GED)

# Mô hình GARCH(1,1) với phân phối Generalized Error Distribution (GED)
vni.garch11g.spec <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1)),
                                mean.model = list(armaOrder = c(0, 0)),
                                distribution.model = "ged")

vni.garch11g.fit <- ugarchfit(spec = vni.garch11g.spec, data = vni.data$Price)
# Xem kết quả ước lượng
show(vni.garch11g.fit)
## 
## *---------------------------------*
## *          GARCH Model Fit        *
## *---------------------------------*
## 
## Conditional Variance Dynamics    
## -----------------------------------
## GARCH Model  : sGARCH(1,1)
## Mean Model   : ARFIMA(0,0,0)
## Distribution : ged 
## 
## Optimal Parameters
## ------------------------------------
##          Estimate  Std. Error  t value Pr(>|t|)
## mu     551.029986    3.492795 157.7619  0.00000
## omega  230.805219   32.028269   7.2063  0.00000
## alpha1   0.382777    0.020489  18.6824  0.00000
## beta1    0.082023    0.050551   1.6226  0.10468
## shape   34.691628    3.774353   9.1914  0.00000
## 
## Robust Standard Errors:
##          Estimate  Std. Error  t value Pr(>|t|)
## mu     551.029986    29.08905 18.94286  0.00000
## omega  230.805219   226.76336  1.01782  0.30876
## alpha1   0.382777     0.03470 11.03093  0.00000
## beta1    0.082023     0.14843  0.55261  0.58053
## shape   34.691628    25.12128  1.38097  0.16729
## 
## LogLikelihood : -13847.09 
## 
## Information Criteria
## ------------------------------------
##                    
## Akaike       11.113
## Bayes        11.124
## Shibata      11.113
## Hannan-Quinn 11.117
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                       2455       0
## Lag[2*(p+q)+(p+q)-1][2]      3673       0
## Lag[4*(p+q)+(p+q)-1][5]      7287       0
## d.o.f=0
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                       1653       0
## Lag[2*(p+q)+(p+q)-1][5]      4410       0
## Lag[4*(p+q)+(p+q)-1][9]      6867       0
## d.o.f=2
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale P-Value
## ARCH Lag[3]      1384 0.500 2.000       0
## ARCH Lag[5]      3140 1.440 1.667       0
## ARCH Lag[7]      4544 2.315 1.543       0
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  64.7055
## Individual Statistics:              
## mu     48.9598
## omega   0.1206
## alpha1  0.4410
## beta1   0.3559
## shape   0.2170
## 
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic:          1.28 1.47 1.88
## Individual Statistic:     0.35 0.47 0.75
## 
## Sign Bias Test
## ------------------------------------
##                     t-value       prob sig
## Sign Bias             2.175  2.970e-02  **
## Negative Sign Bias   21.719  6.323e-96 ***
## Positive Sign Bias   30.491 9.088e-174 ***
## Joint Effect       1405.365 2.018e-304 ***
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20      6354            0
## 2    30      8788            0
## 3    40      9416            0
## 4    50      9479            0
## 
## 
## Elapsed time : 0.6475861

2.5 Mô hình GARCH(1,1) với phân phối Skewed Generalized Error Distribution (SGED)

# Mô hình GARCH(1,1) với phân phối Skewed Generalized Error Distribution (SGED)
vni.garch11sg.spec <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1)),
                                 mean.model = list(armaOrder = c(0, 0)),
                                 distribution.model = "sged")

vni.garch11sg.fit <- ugarchfit(spec = vni.garch11sg.spec, data = vni.data$Price)
# Xem kết quả ước lượng
show(vni.garch11sg.fit)
## 
## *---------------------------------*
## *          GARCH Model Fit        *
## *---------------------------------*
## 
## Conditional Variance Dynamics    
## -----------------------------------
## GARCH Model  : sGARCH(1,1)
## Mean Model   : ARFIMA(0,0,0)
## Distribution : sged 
## 
## Optimal Parameters
## ------------------------------------
##          Estimate  Std. Error  t value Pr(>|t|)
## mu     551.074451    3.579282 153.9623  0.00000
## omega  230.966276   34.842768   6.6288  0.00000
## alpha1   0.382748    0.021533  17.7746  0.00000
## beta1    0.081956    0.055060   1.4885  0.13662
## skew     0.998349    0.055377  18.0283  0.00000
## shape   34.681040    3.794146   9.1407  0.00000
## 
## Robust Standard Errors:
##          Estimate  Std. Error  t value Pr(>|t|)
## mu     551.074451   30.489593 18.07418  0.00000
## omega  230.966276  249.850661  0.92442  0.35527
## alpha1   0.382748    0.036808 10.39849  0.00000
## beta1    0.081956    0.177570  0.46154  0.64441
## skew     0.998349    0.123060  8.11267  0.00000
## shape   34.681040   25.801468  1.34415  0.17890
## 
## LogLikelihood : -13847.09 
## 
## Information Criteria
## ------------------------------------
##                    
## Akaike       11.114
## Bayes        11.128
## Shibata      11.114
## Hannan-Quinn 11.119
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                       2455       0
## Lag[2*(p+q)+(p+q)-1][2]      3673       0
## Lag[4*(p+q)+(p+q)-1][5]      7287       0
## d.o.f=0
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                       1654       0
## Lag[2*(p+q)+(p+q)-1][5]      4414       0
## Lag[4*(p+q)+(p+q)-1][9]      6874       0
## d.o.f=2
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale P-Value
## ARCH Lag[3]      1386 0.500 2.000       0
## ARCH Lag[5]      3143 1.440 1.667       0
## ARCH Lag[7]      4549 2.315 1.543       0
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  65.8758
## Individual Statistics:              
## mu     48.8388
## omega   0.1188
## alpha1  0.4401
## beta1   0.3545
## skew    0.2632
## shape   0.2150
## 
## 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             2.121  3.404e-02  **
## Negative Sign Bias   21.691  1.073e-95 ***
## Positive Sign Bias   30.535 3.401e-174 ***
## Joint Effect       1406.995 8.940e-305 ***
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20      6325            0
## 2    30      8804            0
## 3    40      9371            0
## 4    50      9499            0
## 
## 
## Elapsed time : 1.720258

2.6 Lựa chọn mô hình biên phù hợp nhất cho chuỗi VNI

vni.model.list <- list(
  garch11n = vni.garch11n.fit,
  garch11t = vni.garch11t.fit,
  garch11st = vni.garch11st.fit,
  garch11g = vni.garch11g.fit,
  garch11sg = vni.garch11sg.fit
)

vni.info.mat <- sapply(vni.model.list, infocriteria)
rownames(vni.info.mat) <- rownames(infocriteria(vni.garch11n.fit))
vni.info.mat
##              garch11n garch11t garch11st garch11g garch11sg
## Akaike       11.96037 11.89621  11.08541 11.11279  11.11359
## Bayes        11.96971 11.90788  11.09942 11.12447  11.12760
## Shibata      11.96036 11.89620  11.08540 11.11278  11.11358
## Hannan-Quinn 11.96376 11.90045  11.09050 11.11703  11.11868

Dựa trên giá trị thông tin tiêu chuẩn, mô hình garch11sg có giá trị Akaike thấp nhất (11.08541) và giá trị Hannan-Quinn thấp nhất (11.09050). Điều này cho thấy mô hình GARCH(1,1) với phân phối Skewed Student’s t này có khả năng phù hợp tốt với chuỗi dữ liệu VNI.

2.7 Kiểm định sự phù hợp của mô hình biên

library(rugarch)

# Định nghĩa mô hình GARCH(1,1)
spec <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1)),
                   mean.model = list(armaOrder = c(0, 0)))

# Ước lượng mô hình GARCH(1,1)
fit <- ugarchfit(spec, data = vni.ts)

# Trích xuất chuỗi phần dư từ mô hình GARCH(1,1)
vni_resid <- residuals(vni.garch11st.fit)

# Chuẩn hóa chuỗi phần dư bằng cách chia cho độ lệch chuẩn
chuanhoavni <- vni_resid / sigma(vni.garch11st.fit)

2.7.1 Kiểm định Cramer-von Mises

library(goftest)
## 
## Attaching package: 'goftest'
## The following object is masked from 'package:kSamples':
## 
##     ad.test
## The following objects are masked from 'package:nortest':
## 
##     ad.test, cvm.test
# Kiểm định Cramer-von Mises cho dữ liệu vni_resid_normalized với phân phối đều
cvm_test <- cvm.test(chuanhoavni, punif)

# Hiển thị kết quả
print(cvm_test)
## 
##  Cramer-von Mises test of goodness-of-fit
##  Null hypothesis: uniform distribution
##  Parameters assumed to be fixed
## 
## data:  chuanhoavni
## omega2 = 249.47, p-value < 2.2e-16

2.7.2 Kiểm định Anderson-Darling

library(nortest)
# Kiểm định Anderson-Darling cho dữ liệu vni_resid_normalized với phân phối đều
ad_test <- ad.test(chuanhoavni, "punif")

# Hiển thị kết quả
print(ad_test)
## 
##  Anderson-Darling test of goodness-of-fit
##  Null hypothesis: uniform distribution
##  Parameters assumed to be fixed
## 
## data:  chuanhoavni
## An = Inf, p-value = 2.407e-07

2.7.3 Kiểm định Kolmogorov-Smirnov (KS-test)

# Kiểm định KS-test cho dữ liệu vni_resid_normalized với phân phối đều
ks_test_v <- ks.test(chuanhoavni, "punif")

# Hiển thị kết quả
print(ks_test_v)
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  chuanhoavni
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided

Bài tập: 4 kiểm định

# Hiển thị bộ dữ liệu dùng để kiểm định 
library(readxl)
dulieu <- read_excel("d:/IndexData.xlsx")
dulieu
## # A tibble: 500 × 2
##    Date                Price
##    <dttm>              <dbl>
##  1 2023-07-07 00:00:00 1138.
##  2 2023-07-06 00:00:00 1126.
##  3 2023-07-05 00:00:00 1135.
##  4 2023-07-04 00:00:00 1132 
##  5 2023-07-03 00:00:00 1126.
##  6 2023-06-30 00:00:00 1120.
##  7 2023-06-29 00:00:00 1125.
##  8 2023-06-28 00:00:00 1138.
##  9 2023-06-27 00:00:00 1134.
## 10 2023-06-26 00:00:00 1132.
## # ℹ 490 more rows

1. Kiểm định phân phối chuẩn Jarque-Bera

1.1 Định nghĩa

Kiểm định phân phối chuẩn Jarque-Bera (Jarque-Bera Normality Test) là một phương pháp thống kê được sử dụng để kiểm tra xem một tập dữ liệu có tuân theo phân phối chuẩn hay không. Phương pháp này dựa trên hai thống kê mô tả, đó là hệ số bất đối xứng (skewness) và hệ số nhọn (kurtosis), để đánh giá tính chuẩn của phân phối dữ liệu.

Kiểm định phân phối chuẩn Jarque-Bera kiểm tra xem giá trị hệ số bất đối xứng và hệ số nhọn của dữ liệu có phù hợp với phân phối chuẩn hay không. Nếu giá trị p-value của kiểm định nhỏ hơn một ngưỡng ý nghĩa (thường là 0.05), chúng ta có căn cứ để bác bỏ giả thuyết rằng dữ liệu không tuân theo phân phối chuẩn.

1.2 Chạy kiểm định

library(moments)
library(readxl)
vnindex <- read_excel("d:/IndexData.xlsx")

# Kiểm định phân phối chuẩn Jarque-Bera
vnindex <- jarque.test(vnindex$Price)

# Hiển thị kết quả kiểm định
vnindex
## 
##  Jarque-Bera Normality Test
## 
## data:  vnindex$Price
## JB = 40.075, p-value = 1.986e-09
## alternative hypothesis: greater

1.3 Kết quả

Từ kết quả chạy được ta thấy :

  • JB (Jarque-Bera statistic) = 40.075: Đây là giá trị của thống kê Jarque-Bera, một giá trị thống kê dùng để kiểm tra sự phân phối của dữ liệu. Giá trị Jarque-Bera được tính dựa trên sự khác biệt giữa các độ lệch chuẩn và độ nhọn chuẩn của phân phối dữ liệu so với phân phối chuẩn.

  • p-value = 1.986e-09: Đây là giá trị p-value, cho biết mức độ ý nghĩa thống kê của kết quả kiểm định. Trong trường hợp này, giá trị p-value rất nhỏ (gần bằng 0), vì vậy chúng ta có căn cứ để bác bỏ giả thuyết không phải phân phối chuẩn (giả thuyết không có sự khác biệt về phân phối giữa dữ liệu và phân phối chuẩn).

  • alternative hypothesis: greater: Đây là giả thuyết thay thế (alternative hypothesis) của kiểm định. Trong trường hợp này, giả thuyết thay thế là “greater” (lớn hơn), cho biết rằng chúng ta quan tâm đến việc xác định xem dữ liệu có phân phối lệch phải (phân phối có đuôi dài về bên phải) hay không.

Với kết quả này, ta có căn cứ để bác bỏ giả thuyết rằng dữ liệu vnindex$Price tuân theo phân phối chuẩn. Thay vào đó, dữ liệu có sự lệch phải hoặc không tuân theo phân phối chuẩn.

2. Kiểm định tính dừng Augmented dickey-fuller

2.1 Định nghĩa

Kiểm định tính dừng Augmented Dickey-Fuller là một phương pháp thống kê được sử dụng để kiểm tra xem một chuỗi dữ liệu có tính dừng hay không. Tính dừng là tính chất mà một chuỗi dữ liệu không thay đổi theo thời gian và có thể được mô hình hóa bằng một quá trình ngẫu nhiên ổn định.

Phương pháp ADF mở rộng kiểm định Dickey-Fuller thông thường bằng cách bổ sung thêm các tham số tự phương sai và sai số cho mô hình autoregressive. Kiểm định Augmented Dickey-Fuller kiểm tra xem có một hệ số tự hồi quy (autoregressive coefficient) trong mô hình autoregressive có giá trị bằng 1 hay không. Nếu giá trị hệ số tự hồi quy bằng 1, đồng nghĩa với việc chuỗi dữ liệu không có tính dừng.

Kết quả của kiểm định Augmented Dickey-Fuller bao gồm giá trị tới hạn (test statistic), giá trị p-value và giả thuyết thay thế (alternative hypothesis).

2.2 Chạy kiểm định

# Gọi thư viện cần thiết
library(tseries)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(readxl)
# Đọc dữ liệu từ tệp Excel
data <- read_excel("d:/IndexData.xlsx")
# Kiểm định tính dừng ADF
adf <- adf.test(data$Price)
# Hiển thị kết quả kiểm định
adf
## 
##  Augmented Dickey-Fuller Test
## 
## data:  data$Price
## Dickey-Fuller = -1.9856, Lag order = 7, p-value = 0.5844
## alternative hypothesis: stationary

2.3 Kết quả

Từ kết quả ta thấy :

  • Dickey-Fuller = -1.9856: Đây là giá trị thống kê Dickey-Fuller, giá trị này cung cấp thông tin về mức độ dừng của dữ liệu. Trong trường hợp này, giá trị Dickey-Fuller là -1.9856.
  • Lag order = 7: Đây là số lượng thời gian trễ (lag) được sử dụng trong mô hình kiểm định Augmented Dickey-Fuller. Trong trường hợp này, có 7 thời gian trễ được sử dụng trong kiểm định Augmented Dickey-Fuller.
  • p-value = 0.5844: Đây là giá trị p-value, cho biết mức độ ý nghĩa thống kê của kết quả kiểm định. Trong trường hợp này, giá trị p-value là 0.5844, tức là lớn hơn mức ý nghĩa thông thường (thường là 0.05). Vì vậy,ta không có đủ bằng chứng để bác bỏ giả thuyết không có tính dừng.
  • Alternative hypothesis: stationary: Đây là giả thuyết thay thế (alternative hypothesis) của kiểm định. Trong trường hợp này, giả thuyết thay thế là “stationary” (tính dừng), cho biết việc xác định xem dữ liệu có tính dừng hay không.

Với kết quả này, vì giá trị p-value lớn hơn mức ý nghĩa thông thường, chúng ta không có đủ bằng chứng để bác bỏ giả thuyết không có tính dừng. Tuy nhiên, không có đủ bằng chứng để xác nhận rằng dữ liệu có tính dừng.

3. Kiểm định tương quan chuỗi : Ljung-box

3.1 Định nghĩa

Kiểm định tương quan chuỗi Ljung-Box (Ljung-Box test) là một phương pháp thống kê được sử dụng để kiểm tra tính độc lập tương quan trong chuỗi dữ liệu. Phương pháp này dựa trên việc kiểm tra giả thuyết rằng không có tương quan giữa các giá trị trong chuỗi dữ liệu.

Kiểm định Ljung-Box thực hiện kiểm tra xem các giá trị trong chuỗi dữ liệu có liên quan tới nhau hay không, dựa trên giả thuyết không có tương quan. Kỹ thuật này sử dụng một số lượng thời gian trễ (lag) để xác định mức độ tương quan.

3.2 Chạy kiểm định

# Đọc dữ liệu từ tệp Excel
data <- read_excel("d:/IndexData.xlsx")

# Kiểm định tương quan chuỗi bằng phương pháp Ljung-Box với độ trễ ( lag ) = 10.
lb <- Box.test(data$Price, lag = 10, type = "Ljung-Box")

# Hiển thị kết quả kiểm định
lb
## 
##  Box-Ljung test
## 
## data:  data$Price
## X-squared = 4804.8, df = 10, p-value < 2.2e-16

3.3 Kết quả

Từ kết quả trên ta có :

  • X-squared = 4804.8: Đây là giá trị thống kê X-squared của kiểm định. Giá trị này cho biết mức độ tương quan trong chuỗi dữ liệu. Trong trường hợp này, giá trị X-squared là 4804.8.

  • df = 10: Đây là số bậc tự do (degrees of freedom) của kiểm định. Nó cho biết số lượng thời gian trễ đã sử dụng trong kiểm định. Trong trường hợp này, có 10 bậc tự do được sử dụng.

  • p-value < 2.2e-16: Đây là giá trị p-value, cho biết mức độ ý nghĩa thống kê của kết quả kiểm định. Trong trường hợp này, giá trị p-value là rất nhỏ, gần bằng 0, được biểu diễn dưới dạng 2.2e-16. Điều này cho thấy rằng chúng ta có căn cứ đủ để bác bỏ giả thuyết không có sự tương quan (giả thuyết không có sự khác biệt về tương quan giữa các giá trị trong chuỗi dữ liệu).

Với kết quả này, vì giá trị p-value rất nhỏ, ta có căn cứ để bác bỏ giả thuyết không có sự tương quan. Điều này cho thấy rằng có sự tương quan đáng kể giữa các giá trị trong chuỗi dữ liệu.

4. Kiểm định hiệu ứng ARCH: ARCH-LM

4.1 Định nghĩa

Kiểm định hiệu ứng ARCH-LM (Autoregressive Conditional Heteroscedasticity Lagrange Multiplier test) là một phương pháp thống kê được sử dụng để kiểm tra sự tồn tại của hiệu ứng ARCH trong mô hình dữ liệu chuỗi thời gian.

Hiệu ứng ARCH xuất hiện khi phương sai của một chuỗi dữ liệu chuỗi thay đổi theo thời gian và phụ thuộc vào các giá trị trước đó của chuỗi. Điều này có nghĩa là sự biến đổi trong dữ liệu không đồng nhất qua thời gian và có tính chất “heteroscedasticity”.

Kiểm định hiệu ứng ARCH-LM thực hiện kiểm tra xem các giá trị trong chuỗi dữ liệu có biến đổi không đồng nhất qua thời gian hay không. Phương pháp này sử dụng một mô hình autoregressive để ước lượng và tách ra thành phần không đồng nhất, sau đó kiểm tra tính chất ngẫu nhiên của phần dư (residuals) để xác định sự tồn tại của hiệu ứng ARCH.

4.1 Chạy kiểm định

#Đọc dữ liệu từ file Excel
library(readxl)
data <- read_excel("d:/IndexData.xlsx", sheet = "VN Index Historical Data")
# Tạo mô hình ARCH
library(rugarch)
arch_spec <- ugarchspec(variance.model = list(model = "sGARCH"))
arch_model <- ugarchfit(spec = arch_spec, data = data$Price)

residuals <- residuals(arch_model)

# Tạo biến giả đầu vào
library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
n <- length(residuals)
x <- 1:n
# Tạo mô hình tuyến tính
arch_lm_model <- lm(residuals^2 ~ x)
# Kiểm định hiệu ứng ARCH-LM
arch <- bptest(arch_lm_model)
# Hiển thị kết quả
arch
## 
##  studentized Breusch-Pagan test
## 
## data:  arch_lm_model
## BP = 2.3292, df = 1, p-value = 0.127

4.3 Kết quả

Từ kết quả trên ta có :

  • Dòng “data: arch_lm_model” chỉ ra rằng kiểm định được thực hiện trên mô hình có tên là “arch_lm_model”.
  • Giá trị “BP” là giá trị thống kê được tính từ kiểm định, trong trường hợp này là 2.3292.
  • “df” là số độ tự do của kiểm định, trong trường hợp này là 1.
  • Giá trị “p-value” là giá trị xác suất liên quan đến giả thuyết không có hiệu ứng ARCH. Trong trường hợp này, giá trị p-value là 0.127.

Ý nghĩa của kết quả:

Khi thực hiện kiểm định hiệu ứng ARCH: ARCH-LM,ta quan tâm đến giá trị p-value. Giá trị p-value là một số xác suất thể hiện khả năng xảy ra kết quả kiểm định như vậy hoặc càng “tệ” hơn, nếu giả thuyết không có hiệu ứng ARCH là chính xác.

Trong trường hợp này, giá trị p-value là 0.127. Nếu mức ý nghĩa được lựa chọn là 0.05 (thường được sử dụng), thì giá trị p-value là lớn hơn mức ý nghĩa này. Do đó, không có đủ bằng chứng để bác bỏ giả thuyết không có hiệu ứng ARCH.