Chương 1: TỔNG QUAN CÁC ĐỀ TÀI NGHIÊN CỨU

Lý do chọn đề tài

Thị trường chứng khoán (TTCK) ngày càng khẳng định vai trò quan trọng trong nền kinh tế, là kênh dẫn vốn quan trọng và là kênh đầu tư đầy tiềm năng của các nhà đầu tư, đồng thời là một bộ phận của nền kinh tế thị trường, đồng thời là một chỉ báo quan trọng để đánh giá và dự báo tình hình nền kinh tế, thị trường tại thời điểm giá chứng khoán thay đổi thông qua chỉ số giá chứng khoán. Chính vì bản chất phòng ngừa được rủi ro mà phần lớn các quốc gia có thị trường tài chính phát triển đều ưu tiên xây dựng và phát triển thị trường chứng khoán như một thành phần trong cấu trúc thị trường tổng thể. Có thể nói, TTCK phái sinh đã từng bước trở thành công cụ phòng ngừa rủi ro cho các nhà đầu tư. Khi giá chứng khoán tăng các nhà đầu tư kỳ vọng và đẩy mạnh vốn gia nhập TTCK, các doanh nghiệp dễ dàng huy động vốn, mở rộng sản xuất để từ đó nền kinh tế vĩ mô trở nên tích cực. Ngược lại, một khi TTCK bị rung lắc mạnh mẽ, giá chứng khoán có đà giảm mạnh, niềm tin của các nhà đầu tư bị lung lay và có xu hướng rút vốn ra khỏi thị trường để tìm đến các kênh đầu tư khác, lúc này các doanh nghiệp gặp khó khăn trong việc huy động vốn, nền kinh tế cũng bị ảnh hưởng không ít. Trải qua hơn 25 năm hoạt động, TTCK Việt Nam ngày càng đóng vai trò quan trọng trong sự phát triển ngành tài chính nước ta, đồng thời góp phần hoàn thiện cơ cấu thị trường tài chính, trở thành kênh huy động vốn quan trọng cho nền kinh tế trong và cả ngoài nước

Bên cạnh thị trường chứng khoán cơ sở, giá dầu thô luôn nhận được sự quan tâm mạnh mẽ, là một trong những nguyên liệu đầu vào quan trọng của hầu hết các ngành công nghiệp. Sự thay đổi của giá dầu tác động đến nền kinh tế và TTCK của một số quốc gia, trong đó có nền kinh tế Việt Nam. Mặc dù Việt Nam là quốc gia khai thác dầu mỏ và có hoạt động xuất khẩu dầu thô, song vẫn phải nhập một lượng dầu thô rất lớn đáp ứng nhu cầu lọc dầu phục vụ nhu cầu sử dụng trong nước. Chính vì điều này giá dầu thế giới cũng ảnh hưởng không ít đến xăng dầu tiêu thụ ở Việt Nam. Đặc biệt, giai đoạn đầu xung đột giữa Ukraina và Nga, nguồn cung dầu hạn chế khiến giá xăng, dầu trong nước tăng đột biến, điều này ảnh hưởng tiêu cực đến thị trường Việt Nam.

Mối quan hệ giữa giá dầu và thị trường chứng khoán đã và đang là vấn đề nghiên cứu quan trọng trong từng bối cảnh kinh tế và được nghiên cứu rộng rãi. Các tác giả K Sukcharoen, T Zohrabyan, D Leatham và X Wu (2014) cho thấy rằng giá dầu và chỉ số thị trường chứng khoán có sự phụ thuộc yếu của các quốc gia. Nghiên cứu của Cao Thị Hà Phương (2018) khẳng định tỷ suất sinh lợi chứng khoán Việt Nam chịu ảnh hưởng một phần dưới sự tác động của biến động giá dầu thế giới. Từ các nghiên cứu trên, giá dầu và chỉ số giá chứng khoán có mối liên hệ với nhau, từ đó VN30 - 30 cổ phiếu có chỉ số vốn hóa lớn (cổ phiếu bluechip) trên sàn HOSE cũng có thể có mối quan hệ tương tự. Chính vì vậy, bài tiểu luận này tiến hành thực hiện Nghiên cứu mối quan hệ giữa giá dầu thế giới và thị trường chứng khoán Việt Nam từ đó cung cấp mối quan hệ, hiểu rõ hơn về các biến động ảnh hưởng đến thị trường chứng khoán Việt Nam như thế nào để đưa ra các hoạch định sao cho phù hợp nhất.

Mục tiêu nghiên cứu

Tìm hiểu và đưa ra các lí thuyết về chỉ số giá chứng khoán VN30 và giá dầu có mối tương quan như thế nào theo thời gian. Từ đó, xác định mô hình phù hợp với đề tài nghiên cứu và chỉ ra mối liên hệ giữa chúng.

Dựa trên các số liệu đã thu nhập và hệ thống lí luận, mục tiêu bài viết là tiến hành phân tích, đánh giá mối quan hệ để từ đó hiểu rõ hơn sự thay đổi của giá dầu, giá chứng khoán, dự báo giá và cung cấp cho các nhà đầu tư các thông tin. Dựa trên kết quả chạy mô hình và đưa ra kết luận.

Đối tượng và mục tiêu nghiên cứu

Đối tượng nghiên cứu: là mối quan hệ giữa giá dầu và chứng khoán Việt Nam, cụ thể là giá dầu thô WTI và chỉ số VN30.

Phạm vi nghiên cứu:

  • Phạm vi nghiên cứu không gian: Nghiên cứu được phân tích tại thị trường Việt Nam và giá dầu thế giới.

  • Phạm vi nghiên cứu thời gian: Nghiên cứu được phân tích từ 01/2024 - 31/07/2024.

  • Dữ liệu nghiên cứu: Tác giả đã thu nhập số liệu giá dầu và giá VN30 từ các trang web uy tín về tài chính - đầu tư

Phương pháp nghiên cứu

Với dữ liệu chuỗi thời gian, nghiên cứu sử dụng các phương pháp phân tích thống kê mô tả, kết hợp phân tích sự biến động, mối quan hệ giữa 2 yếu tố thông qua mô hình ARCH - GARCH, mô hình COPULA. Từ đó đưa ra các giải pháp giúp các nhà đầu tư có thể có một cái nhìn tổng quát hơn về biến động giá dầu, sự thay đổi chỉ số giá VN30.

Kết cấu bài tiểu luận

Ngoài các phần mục lục, danh mục từ viết tắt, danh mục hình và bảng, phụ lục và tài liệu tham khảo, bài tiểu luận được bố cục theo các chương sau:

Chương 1: Tổng quan về các vấn đề nghiên cứu

Chương 2: Cơ sở lí thuyết nghiên cứu

Chương 3: Thiết kế nghiên cứu

Chương 4: Kết quả mô hình nghiên cứu

Chương 5: Kết luận và đưa ra khuyến nghị

Chương 2: TỔNG QUAN CƠ SỞ LÝ THUYẾT

Tổng quan về thị trường chứng khoán

Thị trường chứng khoán là nơi diễn ra hoạt động trao đổi mua bán các loại chứng khoán ( trái phiếu, cổ phiếu…) và các sản phẩm tài chính giữa các nhà đầu tư thông qua các sàn giao dịch, đóng vai trò quan trọng trong việc huy động vốn, tăng dòng tiền cũng như trong nền kinh tế vĩ mô. Ngày nay, chứng khoán là một kênh đầu tư hấp dẫn được nhiều người quan tâm, tính đến cuối tháng 5/2024 gần 8% dân số có tài khoản chứng khoán. Cơ cấu của một thị trường chứng khoán bao gồm thị trường sơ cấp và thị trường thứ cấp.

Thị trường sơ cấp là nơi các chứng khoán mới được phát hành và bán lần đầu từ các công ty, trên thị trường này tổ chức phát hành sẽ nhận được tiền huy động vốn hay vay nợ từ các nhà đầu tư. Thị trường thứ cấp là thị trường mua đi bán lại các loại chứng khoán đã phát hành lần đầu ở thị trường sơ cấp, là nơi mà các nhà đầu tư cá nhân có thể tham gia giao dịch chứng khoán.

Thị trường chứng khoán đóng vai trò quan trọng đối với sự phát triển của nền kinh tế. Thông qua thị trường chứng khoán, Chính phủ dễ dàng tạo ra nguồn thu bù lỗ thâm hụt ngân sách và điều chỉnh lạm phát thông qua giao dịch mua bán trái phiếu, cổ phiếu; các doanh nghiệp huy động được nguồn vốn kinh doanh hiệu quả và đánh giá được hoạt động kinh doanh thông qua giá chứng khoán; riêng đối với nhà đầu tư, TTCK đem đến một kênh đầu tư đa dạng, ít rủi ro với sự quản lý của UBCK , độ thanh khoản cao và minh bạch.

Các chủ thể tham gia trên TTCK bao gồm các nhóm sau: chủ thể phát hành, chủ thể nhà đầu tư, chủ thể trung gian chứng khoán, chủ thể quản lí và giám sát và các tổ chức có liên quan đến TTCK.

Chứng khoán xuất hiện trên TTCK là các loại chứng khoán vốn (cổ phiếu, chứng chỉ quỹ), trái phiếu, chứng khoán phái sinh.

CHƯƠNG 4: KẾT QUẢ MÔ HÌNH NGHIÊN CỨU

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3

Khái quát về sự biến động giá dầu và chỉ số giá VN30

setwd("D:/AnhThu/MH")
library(xlsx)
a <- read.xlsx("D:/AnhThu/MH/VNIW.xlsx", sheetIndex = 1, header = T)

# vẽ đồ thị
a %>% ggplot(aes(x=DATE, y=VN30)) +
  geom_line(color = "blue") +
  labs(x = 'DATE', y = 'Điểm', title = 'Biểu đồ chỉ số giá VN30')

Nhìn chung chỉ số giá VN30 đang ở trong xu hướng tăng trưởng khá ổn định từ đầu năm đến cuối tháng 7/2024. Sau đợt thị trường giảm điểm vào cuối tháng 4, chỉ số VN30 đã hồi phục trở lại và side way quanh vùng 1280 - 1300 điểm.

a %>% ggplot(aes(x=DATE, y=WTI)) +
  geom_line(color = "blue") +
  labs(x = 'DATE', y = 'USD', title = 'Biểu đồ giá dầu thô giai đoạn 01/2024 - 07/2024')

Giá dầu 4 tháng đầu năm 2024 tăng trưởng mạnh mẽ, giá đạt đỉnh vượt 86 USD/thùng. Giá dầu sau đó có sự sụt giảm, song cũng dần quay trở lại do nhu cầu dầu thô vẫn còn khá cao. Nhìn chung, biểu đồ cho thấy giá dầu thô WTI di chuyển khá ổn định, điều này có ý nghĩa thị trường tương đối cân bằng giữa cung và cầu.

Thống kê mô tả

aa <- a[,c(3,5)]
library(psych)
## Warning: package 'psych' was built under R version 4.3.3
## 
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
summary_stat <- describe(aa)
summary_stat <- round(summary_stat[, c("n", "mean", "sd", "min", "max", "skew", "kurtosis")], 5)
colnames(summary_stat) <- c("Obs.", "Mean", "St. Dev.", "Min", "Max", "Skewness", "Kurtosis")
print(summary_stat)
##       Obs. Mean St. Dev.   Min  Max Skewness Kurtosis
## RVN30  142    0     0.00 -0.02 0.01    -0.77     3.30
## RWTI   142    0     0.01 -0.03 0.02    -0.25     1.31

Bảng trên trình bày thống kê mô tả cho chuỗi tỷ suất lợi nhuận của chỉ số VN30 và giá dầu. Kết quả tỷ suất lợi nhuận trung bình gần như bằng 0, điều này cho thấy rằng, lợi suất của VN30 và giá dầu có sự biến động cao. Sự biến động lợi suất giữa hai biến trên giống nhau vì có độ lệch chuẩn xấp xỉ bằng nhau (0.00 và 0.01). Độ lệch Skewness của tất cả các chuỗi lợi suất có giá trị âm, từ đó xác suất nhận được lợi nhuận âm sẽ cao hơn lợi nhuận dương. Giá trị độ nhọn Kutosis của RVN30 vượt quá 3 và của RWTI là 1.31, chứng tỏ tỷ suất lợi nhuận của giá dầu có độ biến động ổn định.

Biến động của chuỗi lợi suất VN30 và lợi suất giá dầu

a %>% ggplot(aes(x=DATE, y=RVN30)) +
  geom_line(color ='blue') +
  labs(x = 'DATE', y = 'Độ biến động', title = 'Sự biến động của chuỗi RVN30 giai đoạn 01/2024 - 07/2024')

a %>% ggplot(aes(x=DATE, y=RWTI)) +
  geom_line(color ='blue') +
  labs(x = 'DATE', y = 'Độ biến động', title = 'Sự biến động của tỷ suất sinh lời của giá dầu giai đoạn 01/2024 - 07/2024')

Các kiểm định chuỗi dữ liệu

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

Đặt giả thuyết:

H0: RVN30 theo phân phối chuẩn

H1: RVN30 không theo phân phối chuẩn

Kết quả của kiểm định giá trị chi-squared = 82.33 và p_value < 2.2e-16. Với mức ý nghĩa 95%. Kết quả p_value < 2.2e-16, nhỏ hơn alpha = 0.05. Bác bỏ H0, tỷ suất sinh lợi VN30 không tuân theo phân phối chuẩn

library(tseries)
## Warning: package 'tseries' was built under R version 4.3.3
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
j <- jarque.bera.test(a$RVN30)
jj <- jarque.bera.test(a$RWTI)

Đặt giả thuyết:

H0: RWTI theo phân phối chuẩn

H1: RWTI không theo phân phối chuẩn

Kết quả của kiểm định giá trị chi-squared = 12.534 và p_value = 0.001897. Với mức ý nghĩa 95%, kết quả p_value = 0.001897, nhỏ hơn alpha = 0.05. Bác bỏ H0, tỷ suất sinh lợi RWTI không tuân theo phân phối chuẩn

Kết quả kiểm định Jarque-Bera bác bỏ mạnh mẽ giả định phân phối chuẩn của hai chuỗi tỷ suất sinh lợi, như vậy phân phối của hai chuỗi lợi suất không tuân theo phân phối chuẩn. Để củng cố thêm, đồ thị QQ plot được sử dụng để kiểm định sự phân bố chuẩn của hàm phân phối xác suất.

library(ggpubr)
## Warning: package 'ggpubr' was built under R version 4.3.3
ggqqplot(a$RVN30) + labs(title = "RVN30")

ggqqplot(a$RWTI) + labs(title = "RWTI")

kiểm định tính dừng: Augmented Dickey - Fuller

adf <- adf.test(a$RVN30)
## Warning in adf.test(a$RVN30): p-value smaller than printed p-value
adf1 <- adf.test(a$RWTI)
## Warning in adf.test(a$RWTI): p-value smaller than printed p-value

Đặt giả thuyết

H0: Chuỗi không dừng

H1: Chuỗi dừng

Kết quả kiểm định Augmented Dickey–Fuller (ADF) cho thấy, tất cả các chuỗi lợi suất có tính dừng với giá trị p_value đều bằng 0.01 < alpha = 0.05

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

library(stats)
box <- Box.test(a$RVN30, lag = 12, type = "Ljung-Box")
library(stats)
box1 <- Box.test(a$WTI, lag = 12, type = "Ljung-Box")

Đặt giả thuyết H0: Không có tương quan chuỗi Ljung-Box

H1: Có tương quan chuỗi Ljung-Box

Với giá trị của thống kê kiểm định (Q statistic) = 13.669 và giá trị p-value = 0.3224 > 0.05. Chấp nhận giả thuyết không có sự tự tương quan, chuỗi RVN30 không có sự tự tương quan

Với chuỗi RWTI giá trị của thống kê kiểm định (Q statistic) = 768.97 và giá trị p-value < 2.2e-16 < 0.05. Bác bỏ giả thuyết không có sự tự tương quan, chuỗi RWTI có sự tự tương quan

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

# ước lượng mô hình GARCH
library(fGarch)
## Warning: package 'fGarch' was built under R version 4.3.3
## NOTE: Packages 'fBasics', 'timeDate', and 'timeSeries' are no longer
## attached to the search() path when 'fGarch' is attached.
## 
## If needed attach them yourself in your R script by e.g.,
##         require("timeSeries")
library(rugarch)
## Warning: package 'rugarch' was built under R version 4.3.3
## Loading required package: parallel
## 
## Attaching package: 'rugarch'
## The following object is masked from 'package:stats':
## 
##     sigma
arch_s <- ugarchspec(variance.model = list(model = "sGARCH"))
arch_vn <- ugarchfit(spec = arch_s, data = a$RVN30)
#tính phần dư 
residuals <- residuals(arch_vn)

# tạo biến số và mô hình hồi quy tuyến tính
n <- length(residuals)
x <- 1:n
arch_lm <- lm(residuals^2 ~ x)

# kiểm định hiệu ứng ARCH-LM
library(lmtest)
## Warning: package 'lmtest' was built under R version 4.3.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.3.3
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
bp <- bptest(arch_lm)
arch_w <- ugarchfit(spec = arch_s, data = a$RWTI)
residuals1 <- residuals(arch_w)
m <- length(residuals1)
x <- 1:m
arch_lm_w <- lm(residuals1^2 ~ x)
bp1 <- bptest(arch_lm_w)

Kiểm định ARCH-LM được sử dụng để xác định xem có sự tồn tại của hiệu ứng ARCH trong biến động của chuỗi thời gian hay không. Giả thiết H0 là không có hiệu ứng ARCH trong dữ liệu. Giá trị p-value càng nhỏ, càng chứng tỏ tồn tại bằng chứng về hiệu ứng ARCH.

Kết quả kiểm định cho mỗi biến như sau:

Đối với RVN30, giá trị BP = 0.0031495 và p_value = 0.9552 > 0.05. Chấp nhận giả thuyết H0, vậy chuỗi RVN30 không có hiệu ứng ARCH

Đối với RWTI, giá trị BP = 0.072418 và p_value = 0.7878 > 0.05. Chấp nhận giả thuyết H0, vậy chuỗi RWTI không có hiệu ứng ARCH

library(tibble)
tb <- data.frame(
  'Kiểm định' = c("Jarque-bera","ADF","Ljung-Box","ARCH-GARCH"),
  'RVN30' = c(j$p.value, adf$p.value, box$p.value, bp$p.value ),
  'WTI' = c(jj$p.value, adf1$p.value, box1$p.value, bp1$p.value) 
)
print(tb)
##     Kiểm.định     RVN30         WTI
## 1 Jarque-bera 0.0000000 0.001897465
## 2         ADF 0.0100000 0.010000000
## 3   Ljung-Box 0.3223588 0.000000000
## 4  ARCH-GARCH 0.9552462 0.787848480

Hệ số tương quan

correlation_matrix <- cor(a[, c("RVN30", "RWTI")], method = "pearson")

spearman_corr <- cor(a[, c("RVN30", "RWTI")], method = "spearman")

kendall_corr <- cor(a[, c("RVN30", "RWTI")], method = "kendall")

correlation_matrix <- cbind(correlation_matrix, Spearman = spearman_corr[,"RWTI"], Kendall = kendall_corr[,"RWTI"])
print(correlation_matrix)
##            RVN30       RWTI   Spearman    Kendall
## RVN30 1.00000000 0.07267318 0.02139188 0.01538385
## RWTI  0.07267318 1.00000000 1.00000000 1.00000000
correlation_matrix
##            RVN30       RWTI   Spearman    Kendall
## RVN30 1.00000000 0.07267318 0.02139188 0.01538385
## RWTI  0.07267318 1.00000000 1.00000000 1.00000000

Hệ số tương quan tuyến tính Pearson giữa hai biến số bằng 0.07267, điều này cho thấy sự tương quan giữa chứng khoán và giá dầu gần như không liên quan. Tuy nhiên, hệ số tương quan tuyến tính Pearson dựa trên giả định rằng chuỗi lợi suất có phân phối chuẩn trong khi dữ liệu không tuân theo phân phối chuẩn. Do đó, hệ số Pearson có thể không phù hợp để giải thích mối tương quan giữa hai chuỗi này khi thị trường biến động cực biên.

Ngược lại, với phương pháp phân tích phi tham số, hệ số tương quan hạng Spearman và Kendall không yêu cầu các chuỗi lợi suất có phân phối chuẩn. Kết quả cho thấy hệ số tương quan lần lượt là 0.2139 và 0.01538, hệ số tương quan này cũng là hệ số tương quan yếu. Việc tính hệ số hai quang này cũng chưa phản ánh thông tin hoặc các cú sốc thị trường, và chưa xem xét đến sự phụ thuộc bất đối xứng ở phần đuôi của phân phối đồng thời giữa hai chuỗi dữ liệu khi giá cả rung lắc mạnh. Do đó, phương pháp copula có điều kiện sẽ được áp dụng để xem xét mức độ phụ thuộc và sự phụ thuộc giữa hai chuỗi tỷ suất sinh lợi chỉ số VN30 và giá dầu.

Biểu đồ hệ số tương quan theo kiểm định Pearson

da <- a[,c(3,5)]
cor(da)
##            RVN30       RWTI
## RVN30 1.00000000 0.07267318
## RWTI  0.07267318 1.00000000
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.3.3
## corrplot 0.92 loaded
corrplot.mixed(cor(da))

## Kết quả ước lượng mức độ phản ứng của VN30 và giá dầu

Ước lượng mô hình phân phối biên cho mỗi chuỗi lợi suất

#Tìm mô hình aram cho RVN30 và RWTI
autoarfima(a$RVN30,ar.max = 2, ma.max = 2, criterion = "AIC", method = "full") 
## $fit
## 
## *----------------------------------*
## *          ARFIMA Model Fit        *
## *----------------------------------*
## Mean Model   : ARFIMA(2,0,2)
## Distribution : norm 
## 
## Optimal Parameters
## ------------------------------------
##        Estimate  Std. Error  t value Pr(>|t|)
## ar1   -0.126395    0.066286  -1.9068 0.056545
## ar2   -0.824162    0.071042 -11.6011 0.000000
## ma1    0.159783    0.028780   5.5518 0.000000
## ma2    0.970851    0.031212  31.1055 0.000000
## sigma  0.004011    0.000238  16.8505 0.000000
## 
## Robust Standard Errors:
##        Estimate  Std. Error  t value Pr(>|t|)
## ar1   -0.126395    0.085530  -1.4778 0.139466
## ar2   -0.824162    0.120501  -6.8395 0.000000
## ma1    0.159783    0.032827   4.8675 0.000001
## ma2    0.970851    0.056146  17.2917 0.000000
## sigma  0.004011    0.000435   9.2317 0.000000
## 
## LogLikelihood : 582.1595 
## 
## Information Criteria
## ------------------------------------
##                     
## Akaike       -8.1290
## Bayes        -8.0249
## Shibata      -8.1314
## Hannan-Quinn -8.0867
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                          statistic p-value
## Lag[1]                      0.1685  0.6814
## Lag[2*(p+q)+(p+q)-1][11]    3.5130  1.0000
## Lag[4*(p+q)+(p+q)-1][19]    6.9543  0.9123
## 
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                     0.1563  0.6926
## Lag[2*(p+q)+(p+q)-1][2]    0.1988  0.8549
## Lag[4*(p+q)+(p+q)-1][5]    0.5092  0.9563
## 
## 
## ARCH LM Tests
## ------------------------------------
##              Statistic DoF P-Value
## ARCH Lag[2]     0.2471   2  0.8838
## ARCH Lag[5]     0.7623   5  0.9794
## ARCH Lag[10]    9.3554  10  0.4987
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  0.6091
## Individual Statistics:             
## ar1   0.04611
## ar2   0.03680
## ma1   0.03254
## ma2   0.12537
## sigma 0.23017
## 
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic:          1.28 1.47 1.88
## Individual Statistic:     0.35 0.47 0.75
## 
## 
## Elapsed time : 0.02900696 
## 
## 
## $rank.matrix
##    ar1 ar2 ma1 ma2 im arf       AIC converged
## 1    1   1   1   1  0   0 -8.129007         1
## 2    1   1   1   1  1   0 -8.124132         1
## 3    0   1   1   1  0   0 -8.122223         1
## 4    0   1   0   1  0   0 -8.118846         1
## 5    0   1   1   1  1   0 -8.117040         1
## 6    0   0   0   0  1   0 -8.115462         1
## 7    0   1   0   1  1   0 -8.113927         1
## 8    0   0   0   1  0   0 -8.113755         1
## 9    1   1   0   1  0   0 -8.113420         1
## 10   0   1   0   0  0   0 -8.111575         1
## 11   0   0   0   1  1   0 -8.108536         1
## 12   1   1   0   1  1   0 -8.107943         1
## 13   0   1   0   0  1   0 -8.106646         1
## 14   0   0   1   0  0   0 -8.105049         1
## 15   1   0   0   0  0   0 -8.104980         1
## 16   1   0   0   0  1   0 -8.101443         1
## 17   0   0   1   0  1   0 -8.101436         1
## 18   0   0   1   1  0   0 -8.100627         1
## 19   1   0   0   1  0   0 -8.099873         1
## 20   0   1   1   0  0   0 -8.097610         1
## 21   1   1   0   0  0   0 -8.097493         1
## 22   0   0   1   1  1   0 -8.094867         1
## 23   1   0   0   1  1   0 -8.094431         1
## 24   1   1   0   0  1   0 -8.092607         1
## 25   0   1   1   0  1   0 -8.092566         1
## 26   1   0   1   1  0   0 -8.092279         1
## 27   1   0   1   0  0   0 -8.090967         1
## 28   1   0   1   0  1   0 -8.089230         1
## 29   1   0   1   1  1   0 -8.086659         1
## 30   1   1   1   0  0   0 -8.086218         1
## 31   1   1   1   0  1   0 -8.081387         1
arma_rvn30 <- autoarfima(a$RVN30,ar.max = 2, ma.max = 2, criterion = "AIC", method = "full")
# arma của rvn30 là (2,2)
autoarfima(a$RWTI,ar.max = 2, ma.max = 2, criterion = "AIC", method = "full")
## $fit
## 
## *----------------------------------*
## *          ARFIMA Model Fit        *
## *----------------------------------*
## Mean Model   : ARFIMA(2,0,2)
## Distribution : norm 
## 
## Optimal Parameters
## ------------------------------------
##        Estimate  Std. Error  t value Pr(>|t|)
## ar1   -0.066688    0.043091  -1.5476  0.12172
## ar2   -0.879191    0.057691 -15.2396  0.00000
## ma1    0.000000          NA       NA       NA
## ma2    0.979997    0.026606  36.8335  0.00000
## sigma  0.006913    0.000410  16.8516  0.00000
## 
## Robust Standard Errors:
##        Estimate  Std. Error  t value Pr(>|t|)
## ar1   -0.066688    0.036295  -1.8374  0.06615
## ar2   -0.879191    0.051269 -17.1486  0.00000
## ma1    0.000000          NA       NA       NA
## ma2    0.979997    0.014327  68.4010  0.00000
## sigma  0.006913    0.000506  13.6702  0.00000
## 
## LogLikelihood : 504.8683 
## 
## Information Criteria
## ------------------------------------
##                     
## Akaike       -7.0545
## Bayes        -6.9712
## Shibata      -7.0560
## Hannan-Quinn -7.0206
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                          statistic p-value
## Lag[1]                     0.06656  0.7964
## Lag[2*(p+q)+(p+q)-1][11]   4.25289  0.9993
## Lag[4*(p+q)+(p+q)-1][19]   6.29420  0.9573
## 
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                     0.7321  0.3922
## Lag[2*(p+q)+(p+q)-1][2]    0.7515  0.5864
## Lag[4*(p+q)+(p+q)-1][5]    1.2880  0.7918
## 
## 
## ARCH LM Tests
## ------------------------------------
##              Statistic DoF P-Value
## ARCH Lag[2]     0.6653   2  0.7170
## ARCH Lag[5]     3.1580   5  0.6756
## ARCH Lag[10]    6.0540  10  0.8107
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  0.747
## Individual Statistics:             
## ar1   0.48278
## ar2   0.04588
## ma2   0.11083
## sigma 0.08287
## 
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic:          1.07 1.24 1.6
## Individual Statistic:     0.35 0.47 0.75
## 
## 
## Elapsed time : 0.05036092 
## 
## 
## $rank.matrix
##    ar1 ar2 ma1 ma2 im arf       AIC converged
## 1    1   1   0   1  0   0 -7.054482         1
## 2    0   1   1   1  0   0 -7.053427         1
## 3    1   1   0   1  1   0 -7.042292         1
## 4    0   1   1   1  1   0 -7.041275         1
## 5    0   0   0   1  0   0 -7.029366         1
## 6    0   1   0   0  0   0 -7.028805         1
## 7    0   0   0   0  1   0 -7.028320         1
## 8    1   0   0   0  0   0 -7.027855         1
## 9    0   0   1   0  0   0 -7.027730         1
## 10   0   0   0   1  1   0 -7.017114         1
## 11   0   1   0   1  0   0 -7.016777         1
## 12   0   1   0   0  1   0 -7.016561         1
## 13   1   0   0   1  0   0 -7.016410         1
## 14   0   0   1   1  0   0 -7.016205         1
## 15   1   1   0   0  0   0 -7.016091         1
## 16   0   1   1   0  0   0 -7.015865         1
## 17   1   0   0   0  1   0 -7.015779         1
## 18   1   0   1   0  0   0 -7.015735         1
## 19   0   0   1   0  1   0 -7.015647         1
## 20   0   1   0   1  1   0 -7.004551         1
## 21   1   0   0   1  1   0 -7.004236         1
## 22   0   0   1   1  1   0 -7.004021         1
## 23   1   1   0   0  1   0 -7.003888         1
## 24   1   0   1   0  1   0 -7.003672         1
## 25   0   1   1   0  1   0 -7.003659         1
## 26   1   0   1   1  0   0 -7.003201         1
## 27   1   1   1   0  0   0 -7.002885         1
## 28   1   1   1   1  0   0 -6.999399         1
## 29   1   0   1   1  1   0 -6.990946         1
## 30   1   1   1   0  1   0 -6.990700         1
## 31   1   1   1   1  1   0 -6.987034         1
arma_rwti <- autoarfima(a$RWTI,ar.max = 2, ma.max = 2, criterion = "AIC", method = "full")
# arma của rwti là (2,2)
# RVN30
# Ước lượng mô hình GARCH(1,1) theo phân phối chuẩn
vn30.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1)), mean.model = list(armaOrder = c(2,2), include.mean =TRUE), distribution.model = 'norm')
vn30.fit <- ugarchfit(spec = vn30.spec, data = a$RVN30)

# Phân phối Student (std)
vn30st.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "std")
vn30st.fit <- ugarchfit(spec = vn30st.spec, data = a$RVN30)

# Phân phối Student đối xứng (sstd)
vn30sst.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "sstd")
vn30sst.fit <- ugarchfit(spec = vn30sst.spec, data = a$RVN30)

# Phân phối Generalized Error Distribution(ged)
vn30ged.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "ged")
vn30ged.fit <- ugarchfit(spec = vn30ged.spec, data = a$RVN30)

# Phân phối Generalized Error Distribution đối xứng ("sged")
vn30sged.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "sged")
vn30sged.fit <- ugarchfit(spec = vn30sged.spec, data = a$RVN30)

# phân phối theo garch (1,2)

vn30.spec2 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 2)), mean.model = list(armaOrder = c(2,2), include.mean =TRUE), distribution.model = 'norm')
vn30.fit2 <- ugarchfit(spec = vn30.spec2, data = a$RVN30)

vn30st.spec2 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 2)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "std")
vn30st.fit2 <- ugarchfit(spec = vn30st.spec2, data = a$RVN30)

vn30sst.spec2 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 2)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "sstd")
vn30sst.fit2 <- ugarchfit(spec = vn30sst.spec2, data = a$RVN30)

vn30ged.spec2 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 2)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "ged")
vn30ged.fit2 <- ugarchfit(spec = vn30ged.spec2, data = a$RVN30)
# garch(2,1)

vn30st.spec21 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 1)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "std")
vn30st.fit21 <- ugarchfit(spec = vn30st.spec21, data = a$RVN30)

vn30sst.spec21 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 1)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "sstd")
vn30sst.fit21 <- ugarchfit(spec = vn30sst.spec21, data = a$RVN30)

vn30sged.spec21 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 1)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "sged")
vn30sged.fit21 <- ugarchfit(spec = vn30sged.spec21, data = a$RVN30)

#garch(2,2)


vn30ged.spec22 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 2)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "ged")
vn30ged.fit22 <- ugarchfit(spec = vn30ged.spec22, data = a$RVN30)

# tạo danh sách gồm các phân phối và ước lượng

VN30.model.list <- list(garch11n = vn30.fit, garch11t = vn30st.fit, garch11st = vn30sst.fit, 
                       garch11g = vn30ged.fit, garch11sg = vn30sged.fit,
                       garch12n = vn30.fit2, garch12t = vn30st.fit2,
                       garch12g = vn30ged.fit2,
                       garch21t = vn30st.fit21, garch21st = vn30sst.fit21,
                       garch21sg = vn30sged.fit21
                       ) 

# Tính toán các thông tin

VN30.info.mat <- sapply(VN30.model.list, infocriteria)
rownames(VN30.info.mat) <- rownames(infocriteria(vn30.fit))
VN30.info.mat
##               garch11n  garch11t garch11st  garch11g garch11sg  garch12n
## Akaike       -8.124709 -8.232163 -8.220231 -8.193380 -8.246303 -8.144519
## Bayes        -7.937368 -8.024006 -7.991258 -7.985223 -8.017331 -7.936363
## Shibata      -8.132123 -8.241239 -8.231121 -8.202455 -8.257193 -8.153595
## Hannan-Quinn -8.048581 -8.147577 -8.127186 -8.108793 -8.153258 -8.059933
##               garch12t  garch12g  garch21t garch21st garch21sg
## Akaike       -8.243453 -8.248256 -8.234807 -8.235644 -8.149204
## Bayes        -8.014481 -8.019283 -7.985019 -7.965040 -7.878601
## Shibata      -8.254343 -8.259146 -8.247661 -8.250605 -8.164166
## Hannan-Quinn -8.150408 -8.155211 -8.133304 -8.125681 -8.039242
vn30.inds <- which(VN30.info.mat == min(VN30.info.mat), arr.ind=TRUE)
model.vn30 <- colnames(VN30.info.mat)[vn30.inds[,2]]
model.vn30
## [1] "garch12g"
# Lựa chọn mô hình biên phù hợp cho chuỗi RWTI
# Ước lượng mô hình GARCH(1,1) theo phân phối chuẩn
wtin.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1)), mean.model = list(armaOrder = c(2,2), include.mean =TRUE), distribution.model = 'norm')
wtin.fit <- ugarchfit(spec = wtin.spec, data = a$RWTI)

# Phân phối Student (std)
wtist.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "std")
wtist.fit <- ugarchfit(spec = wtist.spec, data = a$WTI)

# Phân phối Student đối xứng (sstd)
wtisst.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "sstd")
wtisst.fit <- ugarchfit(spec = wtisst.spec, data = a$WTI)

# Phân phối Generalized Error Distribution(ged)
wtiged.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "ged")
wtiged.fit <- ugarchfit(spec = wtiged.spec, data = a$WTI)

# Phân phối Generalized Error Distribution đối xứng ("sged")
wtisged.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "sged")
wtisged.fit <- ugarchfit(spec = wtisged.spec, data = a$WTI)

# phân phối theo garch (1,2)

wti.spec2 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 2)), mean.model = list(armaOrder = c(2,2), include.mean =TRUE), distribution.model = 'norm')
wti.fit2 <- ugarchfit(spec = wti.spec2, data = a$WTI)

wtist.spec2 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 2)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "std")
wtist.fit2 <- ugarchfit(spec = wtist.spec2, data = a$WTI)

wtisst.spec2 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 2)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "sstd")
wtisst.fit2 <- ugarchfit(spec = wtisst.spec2, data = a$WTI)

wtiged.spec2 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 2)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "ged")
wtiged.fit2 <- ugarchfit(spec = wtiged.spec2, data = a$WTI)

wtisged.spec2 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 2)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "sged")
wtisged.fit2 <- ugarchfit(spec = wtisged.spec2, data = a$WTI)

# garch(2,1)

wtin.spec21 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 1)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "norm")
wtin.fit21 <- ugarchfit(spec = wtin.spec21, data = a$WTI)

wtist.spec21 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 1)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "std")
wtist.fit21 <- ugarchfit(spec = wtist.spec21, data = a$WTI)

wtisst.spec21 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 1)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "sstd")
wtisst.fit21 <- ugarchfit(spec = wtisst.spec21, data = a$WTI)


wtiged.spec21 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 1)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "ged")
wtiged.fit21 <- ugarchfit(spec = wtiged.spec21, data = a$WTI)

wtisged.spec21 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 1)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "sged")
wtisged.fit21 <- ugarchfit(spec = wtisged.spec21, data = a$WTI)

#garch(2,2)

wtin.spec22 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 2)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "norm")
wtin.fit22 <- ugarchfit(spec = wtin.spec22, data = a$WTI)

wtist.spec22 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 2)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "std")
wtist.fit22 <- ugarchfit(spec = wtist.spec22, data = a$WTI)

wtisst.spec22 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 2)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "sstd")
wtisst.fit22 <- ugarchfit(spec = wtisst.spec22, data = a$WTI)

wtiged.spec22 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 2)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "ged")
wtiged.fit22 <- ugarchfit(spec = wtiged.spec22, data = a$WTI)

wtisged.spec22 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 2)), mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "sged")
wtisged.fit22 <- ugarchfit(spec = wtisged.spec22, data = a$WTI)

# tạo danh sách gồm các phân phối và ước lượng

wti.model.list <- list(garch11n = wtin.fit, garch11t = wtist.fit, garch11st = wtisst.fit,
                       garch11g = wtiged.fit,
                       garch12t = wtist.fit2, garch12st = wtisst.fit2, 
                      garch12sg = wtisged.fit2,
                       garch21n = wtin.fit21, garch21t = wtist.fit21, garch21st = wtisst.fit21, 
                       garch21g = wtiged.fit21, garch21sg = wtisged.fit21,
                       garch21t = wtist.fit21, garch21st = wtisst.fit21
                       ) 

# Tính toán các thông tin

wti.info.mat <- sapply(wti.model.list, infocriteria)
rownames(wti.info.mat) <- rownames(infocriteria(wtin.fit))
wti.info.mat
##               garch11n garch11t garch11st garch11g garch12t garch12st garch12sg
## Akaike       -6.963583 3.310387  3.370749 3.327879 3.341006  3.351298  3.359301
## Bayes        -6.776242 3.518544  3.599722 3.536036 3.569978  3.601086  3.609089
## Shibata      -6.970997 3.301311  3.359859 3.318803 3.330116  3.338445  3.346448
## Hannan-Quinn -6.887455 3.394974  3.463795 3.412466 3.434051  3.452802  3.460805
##              garch21n garch21t garch21st garch21g garch21sg garch21t garch21st
## Akaike       3.391712 3.346571  3.393845 3.337741  3.364222 3.346571  3.393845
## Bayes        3.620685 3.596359  3.664448 3.587529  3.634826 3.596359  3.664448
## Shibata      3.380822 3.333717  3.378883 3.324888  3.349261 3.333717  3.378883
## Hannan-Quinn 3.484757 3.448075  3.503807 3.439245  3.474185 3.448075  3.503807
wti.inds <- which(wti.info.mat == min(wti.info.mat), arr.ind=TRUE)
model.wti <- colnames(wti.info.mat)[wti.inds[,2]]
model.wti
## [1] "garch11n"
tab <- tibble(
  'Chuỗi lợi suất' = c("RVN30", "RWTI"),
  'Dạng mô hình phân phối biên' = c("ARMA (2,2)-GJR-GARCH(1,2)-Skewed GED", "ARMA (2,2)-GJR-GARCH(1,1)-Normal")
)
print(tab)
## # A tibble: 2 × 2
##   `Chuỗi lợi suất` `Dạng mô hình phân phối biên`       
##   <chr>            <chr>                               
## 1 RVN30            ARMA (2,2)-GJR-GARCH(1,2)-Skewed GED
## 2 RWTI             ARMA (2,2)-GJR-GARCH(1,1)-Normal
# Tham số ước lượng mô hình biên phù hợp
vn30ged.fit2
## 
## *---------------------------------*
## *          GARCH Model Fit        *
## *---------------------------------*
## 
## Conditional Variance Dynamics    
## -----------------------------------
## GARCH Model  : gjrGARCH(1,2)
## Mean Model   : ARFIMA(2,0,2)
## Distribution : ged 
## 
## Optimal Parameters
## ------------------------------------
##         Estimate  Std. Error    t value Pr(>|t|)
## mu      0.000613    0.000010  62.022405 0.000000
## ar1    -0.112573    0.004344 -25.913159 0.000000
## ar2    -0.898457    0.017032 -52.749892 0.000000
## ma1     0.135063    0.003001  45.006872 0.000000
## ma2     0.995615    0.006333 157.214565 0.000000
## omega   0.000000    0.000002   0.070816 0.943544
## alpha1  0.039397    0.000418  94.354120 0.000000
## beta1   0.168668    0.000485 347.903912 0.000000
## beta2   0.833935    0.001658 503.123748 0.000000
## gamma1 -0.088072    0.001601 -55.000700 0.000000
## shape   0.985692    0.263518   3.740512 0.000184
## 
## Robust Standard Errors:
##         Estimate  Std. Error    t value Pr(>|t|)
## mu      0.000613    0.000087   7.069115 0.000000
## ar1    -0.112573    0.008251 -13.644177 0.000000
## ar2    -0.898457    0.055970 -16.052554 0.000000
## ma1     0.135063    0.007238  18.660806 0.000000
## ma2     0.995615    0.058661  16.972297 0.000000
## omega   0.000000    0.000065   0.001663 0.998673
## alpha1  0.039397    0.002650  14.868714 0.000000
## beta1   0.168668    0.008905  18.940716 0.000000
## beta2   0.833935    0.029314  28.448688 0.000000
## gamma1 -0.088072    0.025683  -3.429142 0.000605
## shape   0.985692    8.592706   0.114713 0.908673
## 
## LogLikelihood : 596.6262 
## 
## Information Criteria
## ------------------------------------
##                     
## Akaike       -8.2483
## Bayes        -8.0193
## Shibata      -8.2591
## Hannan-Quinn -8.1552
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                          statistic p-value
## Lag[1]                     0.02805  0.8670
## Lag[2*(p+q)+(p+q)-1][11]   4.22998  0.9994
## Lag[4*(p+q)+(p+q)-1][19]   7.91345  0.8061
## d.o.f=4
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                          statistic   p-value
## Lag[1]                   5.289e-05 9.942e-01
## Lag[2*(p+q)+(p+q)-1][8]  2.426e+01 8.471e-06
## Lag[4*(p+q)+(p+q)-1][14] 2.992e+01 8.547e-06
## d.o.f=3
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale P-Value
## ARCH Lag[4]   0.07348 0.500 2.000  0.7863
## ARCH Lag[6]   5.15874 1.461 1.711  0.1044
## ARCH Lag[8]   5.83867 2.368 1.583  0.1722
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  31.9713
## Individual Statistics:              
## mu     0.15009
## ar1    0.12712
## ar2    0.02926
## ma1    0.11186
## ma2    0.04483
## omega  9.11767
## alpha1 0.08950
## beta1  0.12466
## beta2  0.12316
## gamma1 0.07687
## shape  0.11741
## 
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic:          2.49 2.75 3.27
## Individual Statistic:     0.35 0.47 0.75
## 
## Sign Bias Test
## ------------------------------------
##                    t-value   prob sig
## Sign Bias           1.0861 0.2794    
## Negative Sign Bias  0.4112 0.6816    
## Positive Sign Bias  1.5309 0.1281    
## Joint Effect        2.5335 0.4693    
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20     11.80       0.8939
## 2    30     26.17       0.6164
## 3    40     32.65       0.7536
## 4    50     41.80       0.7573
## 
## 
## Elapsed time : 0.6159151
wtin.fit
## 
## *---------------------------------*
## *          GARCH Model Fit        *
## *---------------------------------*
## 
## Conditional Variance Dynamics    
## -----------------------------------
## GARCH Model  : gjrGARCH(1,1)
## Mean Model   : ARFIMA(2,0,2)
## Distribution : norm 
## 
## Optimal Parameters
## ------------------------------------
##         Estimate  Std. Error     t value Pr(>|t|)
## mu      0.000253    0.000578  4.3791e-01  0.66145
## ar1    -1.748686    0.001954 -8.9494e+02  0.00000
## ar2    -0.760184    0.011059 -6.8741e+01  0.00000
## ma1     1.730902    0.000782  2.2126e+03  0.00000
## ma2     0.729710    0.000060  1.2212e+04  0.00000
## omega   0.000000    0.000001  8.4586e-02  0.93259
## alpha1  0.000100    0.002324  4.3136e-02  0.96559
## beta1   0.999864    0.000002  4.0215e+05  0.00000
## gamma1 -0.004629    0.007325 -6.3197e-01  0.52741
## 
## Robust Standard Errors:
##         Estimate  Std. Error     t value Pr(>|t|)
## mu      0.000253    0.000519  4.8834e-01  0.62531
## ar1    -1.748686    0.003490 -5.0112e+02  0.00000
## ar2    -0.760184    0.037132 -2.0472e+01  0.00000
## ma1     1.730902    0.003442  5.0292e+02  0.00000
## ma2     0.729710    0.000582  1.2538e+03  0.00000
## omega   0.000000    0.000018  4.7410e-03  0.99622
## alpha1  0.000100    0.002802  3.5768e-02  0.97147
## beta1   0.999864    0.000006  1.6982e+05  0.00000
## gamma1 -0.004629    0.006617 -6.9956e-01  0.48420
## 
## LogLikelihood : 503.4144 
## 
## Information Criteria
## ------------------------------------
##                     
## Akaike       -6.9636
## Bayes        -6.7762
## Shibata      -6.9710
## Hannan-Quinn -6.8875
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                          statistic p-value
## Lag[1]                     0.01184  0.9133
## Lag[2*(p+q)+(p+q)-1][11]   4.19527  0.9996
## Lag[4*(p+q)+(p+q)-1][19]   7.01080  0.9074
## d.o.f=4
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                     0.6038  0.4371
## Lag[2*(p+q)+(p+q)-1][5]    1.2202  0.8081
## Lag[4*(p+q)+(p+q)-1][9]    2.1559  0.8856
## d.o.f=2
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale P-Value
## ARCH Lag[3]    0.5649 0.500 2.000  0.4523
## ARCH Lag[5]    1.1443 1.440 1.667  0.6906
## ARCH Lag[7]    1.5191 2.315 1.543  0.8175
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  28.8057
## Individual Statistics:               
## mu      0.18762
## ar1     0.07161
## ar2     0.04739
## ma1     0.07618
## ma2     0.07289
## omega  14.87728
## alpha1  0.13376
## beta1   0.08999
## gamma1  0.11750
## 
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic:          2.1 2.32 2.82
## Individual Statistic:     0.35 0.47 0.75
## 
## Sign Bias Test
## ------------------------------------
##                    t-value   prob sig
## Sign Bias          0.05797 0.9539    
## Negative Sign Bias 0.87419 0.3835    
## Positive Sign Bias 1.46304 0.1457    
## Joint Effect       3.38766 0.3356    
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20     16.87       0.5985
## 2    30     37.15       0.1423
## 3    40     43.92       0.2711
## 4    50     50.25       0.4235
## 
## 
## Elapsed time : 0.2451131

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

# tính toán phần dư

vn30.res <- residuals(vn30ged.fit2)/sigma(vn30ged.fit2)
fitdist(distribution = "ged", vn30.res, control = list())
## $pars
##           mu        sigma        shape 
## 2.400732e-08 1.007917e+00 8.798625e-01 
## 
## $convergence
## [1] 0
## 
## $values
## [1] 199.3276 187.1075 187.1075
## 
## $lagrange
## [1] 0
## 
## $hessian
##              [,1]      [,2]       [,3]
## [1,] 1556687.1170 154.59788 -201.34292
## [2,]     154.5979 123.21300   51.74797
## [3,]    -201.3429  51.74797   56.40292
## 
## $ineqx0
## NULL
## 
## $nfuneval
## [1] 118
## 
## $outer.iter
## [1] 2
## 
## $elapsed
## Time difference of 0.01615095 secs
## 
## $vscale
## [1] 1 1 1 1
u <- pdist(distribution = "ged", q = vn30.res, mu = 2.400732e-08 , sigma = 1.007917e+00, shape = 8.798625e-01) 

wti.res <- residuals(wtin.fit)/sigma(wtin.fit) 
fitdist(distribution = "norm", wti.res, control = list())
## $pars
##          mu       sigma 
## 0.008079976 1.019259591 
## 
## $convergence
## [1] 0
## 
## $values
## [1] 204.1999 204.1981 204.1981
## 
## $lagrange
## [1] 0
## 
## $hessian
##      [,1]     [,2]
## [1,]    1   0.0000
## [2,]    0 273.6374
## 
## $ineqx0
## NULL
## 
## $nfuneval
## [1] 58
## 
## $outer.iter
## [1] 2
## 
## $elapsed
## Time difference of 0.002774954 secs
## 
## $vscale
## [1] 1 1 1
v <- pdist(distribution = "norm", q = vn30.res, mu = 0.008079976 , sigma = 1.019259591)

# các kiểm định
## kiểm định AD 
library(nortest)
adt <- ad.test(u)
adt1 <- ad.test(v)
## Warning in ad.test(v): Incompatible methods ("Ops.xts", "Ops.zoo") for "+"
## kiểm định Cramer-von Mises
cvm <- cvm.test(u)
cvm1 <- cvm.test(v)
## Warning in cvm.test(v): p-value is smaller than 7.37e-10, cannot be computed
## more accurately
## Kiểm định Kolmogorov-Smirnov
ks <- ks.test(u, "punif")
ks1 <- ks.test(v, "punif")
tabl <- tibble(
  'Các kiểm định' = c("A-D","Cv-M","K-S"),
  'RVN30' = c(adt$statistic, cvm$statistic, ks$statistic),
  'RWTI' = c(adt1$statistic, cvm1$statistic, ks1$statistic)
)
print(tabl)
## # A tibble: 3 × 3
##   `Các kiểm định`  RVN30    RWTI
##   <chr>            <dbl>   <dbl>
## 1 A-D             1.76   155.   
## 2 Cv-M            0.215   26.1  
## 3 K-S             0.0377   0.932

Ước lượng tham số mô hình Copula

library(copula)
## Warning: package 'copula' was built under R version 4.3.3
library(MASS)
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
library(rugarch)
library(VineCopula)
## Warning: package 'VineCopula' was built under R version 4.3.3
## 
## Attaching package: 'VineCopula'
## The following object is masked from 'package:copula':
## 
##     pobs
tv <- BiCopSelect(u, v, familyset= 1:9, selectioncrit="AIC",indeptest = FALSE, level = 0.05)
tv1 <- BiCopPar2TailDep(5, 30.14)

table <- tibble(
  'Chuỗi lợi suất' = c("Copula", "Đuôi trên", "Đuôi dưới"),
  'RVN30-RWTI' = c("Frank", "0", "0")
)
print(table)
## # A tibble: 3 × 2
##   `Chuỗi lợi suất` `RVN30-RWTI`
##   <chr>            <chr>       
## 1 Copula           Frank       
## 2 Đuôi trên        0           
## 3 Đuôi dưới        0