Nghiên cứu này xem xét sự phụ thuộc giữa TTCK Việt Nam và TTCK quốc tế
gồm Mỹ, Anh, Pháp, Đức, Trung Quốc, Hồng Kông, Nhật Bản, Hàn Quốc, Đài Loan,
Singapore, Thái Lan, Malaysia và Indonesia trong điều kiện thị trường biến động bình
thường và trong điều kiện thị trường biến động cực biên. Đồng thời, sự lây lan biến động
từ TTCK quốc tế dưới tác động của khủng hoảng tài chính thế giới năm 2008 đến TTCK
Việt Nam cũng được xem xét. Sự phụ thuộc lẫn nhau giữa TTCK Việt Nam với TTCK
quốc tế được giải thích dựa trên các nguyên tắc cơ bản của nền kinh tế vĩ mô như dao
động của tỷ giá song phương, thương mại quốc tế và cầu tiêu dùng hàng hóa, quy mô
nền kinh tế, quy mô vốn hóa thị trường, FDI, lạm phát, khoảng cách địa lý v.v. Khi mối
tương quan động giữa hai thị trường chịu tác động bổ sung bởi các yếu tố như tính thanh
khoản thị trường; thông tin bất cân xứng và thông tin không đồng nhất; nhiều điểm cân
bằng và giao dịch động lượng, khi đó tồn tại hiệu ứng lây lan. Mẫu dữ liệu theo tần suất
ngày với cỡ mẫu dao động từ 4.449 quan sát đến 4.710 quan sát cho mỗi chuỗi lợi suất
chứng khoán, được thu thập từ từ cơ sở dữ liệu Datastream của Thomson Reuters từ
ngày 01/01/2003 đến ngày 31/12/2021. Mô hình copula có điều kiện (ARMA-GJR-
GARCH Copula) được vận dụng trong nghiên cứu này. Copula có điều kiện cho phép
mô hình hóa sự phụ thuộc đối xứng, bất đối xứng, sự phụ thuộc đuôi và không giả định
các chuỗi lợi suất chứng khoán có phân phối chuẩn. Thông qua mức độ phụ thuộc giữa
hai thị trường, nghiên cứu xác định được mức độ phản ứng của TTCK Việt Nam đối với
sự biến động của các TTCK quốc tế. Các copula có điều kiện gồm copula Gauss,
Student-t, Clayton, Rotated-Clayton, Gumbel, Rotated-Gumbel, Frank, Joe, và các
copula hỗn hợp BB1, BB6, BB7 và BB8 được sử dụng để xây dựng hàm phân phối đồng
thời của các phân phối biên của mỗi chuỗi lợi suất đã được xác định, nhằm xác định
tham số phụ thuộc và phụ thuộc đuôi giữa hai chuỗi lợi suất.
186 trang |
Chia sẻ: Minh Bắc | Ngày: 16/01/2024 | Lượt xem: 266 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Luận án Phản ứng của thị trường chứng khoán Việt Nam đối với biến động của thị trường chứng khoán quốc tế, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
rộng và chứng minh tính hợp lệ của Định lý Sklar (1959)
đối với chuỗi dữ liệu theo thời gian. Hàm copula có xem xét đến sự thay đổi theo thời
gian của các phân phối biên còn được gọi là hàm copula có điều kiện. Nội dung của
copula có điều kiện được trình bày như sau:
Định lý 2: Gọi H là một hàm phân phối có điều kiện n chiều với các phân phối
tích lũy liên tục 1 1 1 1( ),..., ( )n nt tF x F x− − và gọi 1t− đại diện cho tập hợp các thông tin
tại thời điểm t-1. Khi đó, tồn tại một hàm copula điều kiện n chiều duy nhất
: 0,1 0,1
n
C → cho
1( ,..., )
n
nx x x=
( )
1 1 1 1 21 1
1 1 1 1 1
( ) ( ,..., ) ( ,..., )
( ),..., ( )
t n n t t
n nt t t
H x Pr X x X x C u u
C F x F x
− − −
− − −
= =
=
(2.4)
Với biến
1
( )i i i tu F x −= có phân phối đồng nhất trên 0,1 .
155
Ngược lại, nếu C là một copula điều kiện n chiều và 1 1 1 1( ),..., ( )n nt tF x F x− − là
các hàm phân phối điều kiện đơn biến. Khi đó, hàm phân phối H được định nghĩa bởi
phương trình (2) là một hàm phân phối có điều kiện n chiều với các phân phối biên có
điều kiện 1 1 1 1( ),..., ( )n nt tF x F x− − . Patton (2002) chỉ ra rằng hàm copula có điều kiện có
tất cả các tính chất của hàm copula không điều kiện. Giả định tất cả các phân phối đều
khả vi, hàm mật độ xác suất n chiều có dạng như sau:
1 1 11 1 1 1 1
1
( ,..., ) ( ( ),..., ( ) ) ( )
n
x n n n i it t t t t
i
h x x c F x F x f x
− − − − −
=
= (2.5)
Trong đó 1 1
1 1
1
( ,..., )
( ,..., )
,...,
n
n t
n t
n
C u u
c u u
u u
−
−
=
là hàm mật độ xác suất của hàm
copula có điều kiện.
1
( )i i tf x − là hàm mật độ xác suất biên có điều kiện của biến ix .
2.3 Các độ đo phụ thuộc liên kết với copula
Tương quan có lẽ là khái niệm quan trọng nhất trong lý thuyết danh mục đầu tư
hiện đại kể từ khi Markowitz (1952) chứng minh tầm quan trọng của đa dạng hóa trong
phân bổ danh mục đầu tư cách đây 50 năm. Khái niệm tương quan đã trở nên phổ biến
đến mức ngày nay người ta sử dụng thuật ngữ “tương quan” và “phụ thuộc” thay thế
cho nhau. Tuy nhiên, như đã đề cập trong Chương 2, sự tương quan không phải là thước
đo thích hợp cho sự phụ thuộc khi các chuỗi lợi suất không có phân phối chuẩn. Về mặt
hình thức, hai biến ngẫu nhiên ( , )X Y phụ thuộc hoặc liên kết nếu chúng không thỏa
mãn điều kiện độc lập theo xác suất, tức là
1 2( , ) ( ). ( )F x y F x F y . Độ đo phụ thuộc tóm
tắt cấu trúc phụ thuộc của hai biến ngẫu nhiên bằng một số duy nhất. Bây giờ chúng ta
xem xét các thuộc tính mong muốn của một thước đo sự phụ thuộc. Gọi ( , ) là một
đại lượng vô hướng của sự phụ thuộc. Theo Embrechts và ctv. (2002), các thuộc tính
phụ thuộc bao gồm:
(i) ( , ) ( , )X Y Y X = : Đối xứng.
(ii) 1 ( , ) 1X Y− : Chuẩn.
(iii) ( , ) 1 ( , )X Y X Y = : Phụ thuộc dương hoàn hảo.
( , ) 1 ( , )X Y X Y = − : Phụ thuộc âm hoàn hảo.
(iv) Với một phép biến đổi đơn điệu nghiêm ngặt :T →
( , ),
( ( ), )
( , ),
Y X T
T X Y
Y X T
=
−
Sự phụ thuộc có thể được đo lường bởi các độ đo như tương quan tuyến tính, độ
đo sự tương thích (concordance) và độ đo phụ thuộc đuôi. Trong đó, độ đo sự tương
thích và độ đo phụ thuộc đuôi có liên quan trực tiếp đến lý thuyết copula.
2.3.1 Tương quan tuyến tính
Phép đo quen thuộc nhất về sự phụ thuộc giữa hai biến ngẫu nhiên ( , )X Y là hệ số
tương quan tuyến tính Pearson. Hệ số Pearson được định nghĩa là:
cov( , )
( , ) , 1 1
X Y
X Y
X Y
= − (2.6)
156
trong đó, ,X Y lần lượt là độ lệch chuẩn của ,X Y , cov( , )X Y là hiệp phương sai giữa
X và Y , cov( , ) ( , ) ( ) ( )X Y E X Y E X E Y= − . Sự phổ biến của tương quan tuyến tính có thể
được giải thích vì những lý do sau. Đầu tiên, nó rất dễ tính toán. Đối với hầu hết các
phân phối hai biến, việc tính toán mômen thứ hai (phương sai và hiệp phương sai) và
suy ra hệ số tương quan rất đơn giản. Thứ hai, tương quan tuyến tính là bất biến đối với
các phép biến đổi tuyến tính của các biến.
Tương quan tuyến tính là một thước đo tốt cho sự phụ thuộc giữa các biến ngẫu
nhiên trong phân phối chuẩn đa biến; tuy nhiên, nó vẫn có một vài thiếu sót sau:
(i) Tương quan tuyến tính không được xác định đối với một số phân phối có đuôi
dày mà mômen thứ hai không tồn tại, ví dụ như phân phối Student-t với bậc tự do nhỏ
hơn 3. Điều này không lý tưởng cho chuỗi thời gian tài chính, các chuỗi lợi suất tài chính
thường có phân phối với đuôi dày và tồn tại các mômen cao hơn.
(ii) Tính độc lập giữa hai biến ngẫu nhiên ngụ ý rằng tương quan tuyến tính bằng
0 (không tương quan), nhưng điều ngược lại chỉ đúng với phân phối chuẩn đa biến. Ví
dụ, nếu (0,1)X N và 2Y X= , khi đó cov( , ) 0X Y = , nhưng ,X Y rõ ràng là phụ thuộc.
Tương quan giữa ,X Y bằng 0 yêu cầu cov( , ) 0X Y = ; nhưng sự phụ thuộc giữa ,X Y
bằng 0 yêu cầu ( )1 2cov ( ), ( ) 0X Y = cho bất kỳ phân phối 1 2, .
(iii) Tương quan tuyến tính không bất biến với các phép biến đổi phi tuyến tăng
nghiêm ngặt :T → , tức là ( )( ), ( ) ( , )T X T Y X Y . Ví dụ, nếu chúng ta lấy hàm
phân phối chuẩn hai biến với hệ số tương quan và hàm chuyển đổi ( ) ( )T x x= (phân
phối chuẩn tắc), chúng ta có ( )
6
( ), ( ) arcsin( )
2
T X T Y
= .
(iv) Hơn nữa, cũng có những vấn đề thống kê với sự tương quan; ví dụ, một quan
sát đơn lẻ có thể có ảnh hưởng mạnh tùy ý đến mối tương quan tuyến tính. Vì vậy, tương
quan tuyến tính không phải là một thước đo mạnh.
2.3.2 Tương quan hạng
Như thảo luận ở nội dung trên, theo giả định về tính chuẩn tắc, hệ số tương quan
tuyến tính là thước đo thích hợp cho sự phụ thuộc giữa hai biến. Tuy nhiên, hệ số tương
quan tuyến tính (tương quan Pearson) cho cùng một trọng số cho tất cả các quan sát
trong mẫu. Do đó, khi giả định phân phối của các biến ngẫu nhiên không tuân theo phân
phối chuẩn, tương quan Pearson không phải là thước đo phụ thuộc thích hợp, vì tương
quan Pearson không bất biến đối với phép biến đổi tăng nghiêm ngặt (trái ngược với
phép biến đổi tích phân xác suất) và do đó hệ số Pearson bị ảnh hưởng bởi các phân phối
biên. Do đó, cần phải áp dụng các thước đo phụ thuộc vào copula chứ không phụ thuộc
vào các phân phối biên. Hệ số Kendall Tau (Kendall, 1938) và Spearman Rho
(Spearman, 1904) đều thỏa mãn những tính chất đó. Một ưu điểm khác của các thước
đo phụ thuộc này đó là chúng ít nhạy cảm hơn với các giá trị ngoại lai khi so với tương
quan tuyến tính. Thông tin chi tiết về các phép biến đổi đơn điệu và bất biến của copula
có thể được tìm thấy trong Schweizer & Wol (1981).
Hệ số tương quan hạng Kendall Tau và Spearman Rho là các độ đo sự tương thích
(có thể được mô tả là sự phụ thuộc trung bình) giữa X và Y . Các độ đo này chỉ phụ
thuộc vào copula của ( , )X Y , không phụ thuộc vào phân phối biên 1( )F x và 2 ( )F y . Do
đó, chúng ta không cần biết các dạng phân phối của biến X và Y . Nelsen (2006, p. 157)
157
giải thích rằng hai biến ngẫu nhiên là tương thích (concordant) nếu giá trị “lớn” của một
biến này có xu hướng liên kết với giá trị “lớn” của biến kia và giá trị “nhỏ” của biến này
với giá trị “nhỏ” của biến kia. Giả sử ( , )i ix y và ( , )i ix y là hai quan sát từ một vectơ ngẫu
nhiên ( , )X Y của các biến ngẫu nhiên liên tục X và Y . Khi đó, ( , )i ix y và ( , )i ix y được
gọi là tương thích (concordant) nếu
i jx x và i jy y hoặc i jx x và i jy y . Hay nói
cách khác, ( , )i ix y và ( , )i ix y là tương thích khi ( )( ) 0i j i jx x y y− − . Ngược lại, ( , )i ix y
và ( , )i ix y là không tương thích (discordant) khi ( )( ) 0i j i jx x y y− − .
a) Hệ số Kendall Tau
Giả sử
1 1( , )X Y và 2 2( , )X Y là hai vectơ ngẫu nhiên độc lập và có phân phối đồng
nhất (iid), với phân phối đồng thời H, hệ số Kendall Tau được xác định là sự khác biệt
giữa xác suất tương thích và xác suất không tương thích (Nelsen, 2006, p.158):
1 2 1 2 1 2 1 2( , ) Pr ( )( ) 0 Pr ( )( ) 0X Y X X Y Y X X Y Y = − − − − − (2.7)
Xét ở khía cạnh copula, hệ số Kendall Tau có thể được biểu thị như sau. Cho hai
biến ngẫu nhiên ,X Y và hàm copula của chúng C, hệ số Kendall Tau được xác định
như sau (Nelsen, 2006, p.161):
2
( , ) 4 ( , ) ( , ) 1X Y C u v dC u v
= − (2.8)
b) Hệ số Spearman Rho
Gọi
1 1( , )X Y , 2 2( , )X Y và 3 3( , )X Y là ba biến ngẫu nhiên độc lập và có phân phối
đồng nhất (iid), với phân phối đồng thời H (với phân phối biên F và G) và một copula
C, khi đó hệ số Spearman được xác định như sau:
1 2 1 3 1 2 1 3( , ) 3(Pr ( )( ) 0 Pr ( )( ) 0X Y X X Y Y X X Y Y = − − − − − (2.9)
Được giải thích trong Nelsen (2006, p.167), hệ số Spearman Rho được định nghĩa
là số lần khác biệt giữa xác suất tương thích và xác suất không tương thích của hai vectơ
1 1( , )X Y và 2 3( , )X Y với cùng phân phối biên. Nhưng phân phối đồng thời của 1 1( , )X Y là
( , )H x y , trong khi các thành phần của 2 3( , )X Y là độc lập và phân phối của 2 3( , )X Y là
( ) ( )F x G y và copula của chúng là copula tích.
Xét mối liên kết với copula, hệ số Spearman Rho được xác định như sau. Cho hai
biến ngẫu nhiên ,X Y và hàm copula của chúng C, hệ số Spearman Rho có dạng (Nelsen,
2006, p.161):
2 2
( , ) 12 ( , ) 3 12 ( , ) 3X Y uvdC u v C u v dudv
= − = − (2.10)
trong đó, ( )u F x= , ( )v G y= .
c) Hệ số phụ thuộc đuôi
Hệ số phụ thuộc đuôi đo lường xu hướng của hai thị trường sụp đổ hoặc bùng nổ
cùng nhau. Sự phụ thuộc đuôi giữa hai biến 1Z và 2Z được biểu thị qua công thức đo
lường hệ số phụ thuộc đuôi trên và hệ số phụ thuộc đuôi dưới như sau:
1 1
2 2 1 1 1
1
1 2 ( , )
lim ( ( ) ( )) lim
1
U u
u
u C u u
P Z F u Z F u
u
−
− −
→
→
− +
= =
−
(2.11)
158
1 1
2 2 1 1 00
( , )
lim ( ( ) ( )) limL uu
C u u
P Z F u Z F u
u
+
+
− −
→→
= = (2.12)
Trong đó, , (0,1)U L , hệ số phụ thuộc đuôi trên (dưới) đo lường xác suất để xảy
ra tình huống lợi suất cổ phiếu 2Z sẽ tăng (giảm) mạnh vượt qua một ngưỡng lớn nào
đấy khi biết rằng lợi suất cổ phiếu 1Z đã tăng (giảm) mạnh vượt qua một ngưỡng lớn
nào đó.
159
Phụ lục 3
Dạng mô hình biên và tham số ước lượng, giai đoạn trước,
trong và sau khủng hoảng
3.1. Mô hình phân phối biên các chuỗi lợi suất
Giai đoạn trước khủng hoảng
Bảng 3.1: Dạng mô hình phân phối biên, giai đoạn trước khủng hoảng (1/2003-7/2007)
Chuỗi lợi suất Dạng mô hình phân phối biên
VNI ARMA(2,2)-GJR-GARCH(2,2)-Skewed t
S&P500 ARMA(0,1)-GJR-GARCH(1,1)-Skewed GED
FTSE100 ARMA(2,2)-GJR-GARCH(1,1)-Skewed t
CAC40 ARMA(2,2)-GJR-GARCH(1,1)-Skewed t
DAX ARMA(2,2)-GJR-GARCH(1,1)-Skewed GED
SSEC ARMA(2,2)-GJR-GARCH(2,1)-GED
HSI ARMA(2,2)-GJR-GARCH(2,2)-GED
Nikkei225 ARMA(1,0)-GJR-GARCH(2,1)-Skewed t
KOSPI ARMA(2,2)-GJR-GARCH(2,2)-Skewed GED
TAIEX ARMA(1,2)-GJR-GARCH(2,1)-GED
STI ARMA(2,2)-GJR-GARCH(2,1)-Skewed GED
SET ARMA(2,0)-GJR-GARCH(1,1)-t
KLCI ARMA(1,0)-GJR-GARCH(1,1)-Skewed t
IDX ARMA(0,2)-GJR-GARCH(1,2)-t
Nguồn: Xử lý dữ liệu thu thập từ Datastream.
Giai đoạn khủng hoảng
Bảng 3.2: Dạng mô hình phân phối biên, giai đoạn khủng hoảng (8/2007-3/2009)
Chuỗi lợi suất Dạng mô hình phân phối biên
VNI ARMA(1,0)-GJR-GARCH(1,1)-Skewed t
S&P500 ARMA(2,1)-GJR-GARCH(1,1)-Skewed GED
FTSE100 ARMA(2,2)-GJR-GARCH(1,1)-GED
CAC40 ARMA(2,2)-GJR-GARCH(1,1)-Skewed t
DAX ARMA(2,2)-GJR-GARCH(1,1)-Skewed t
SSEC ARMA(2,2)-GJR-GARCH(1,1)-Skewed-GED
HSI ARMA(1,0)-GJR-GARCH(1,1)-Skewed-t
Nikkei225 ARMA(2,2)-GJR-GARCH(1,1)-Skewed GED
KOSPI ARMA(2,2)-GJR-GARCH(1,2)-GED
TAIEX ARMA(1,2)-GJR-GARCH(2,1)-Skewed GED
STI ARMA(2,2)-GJR-GARCH(1,1)-Skewed t
SET ARMA(0,2)-GJR-GARCH(1,1)-GED
KLCI ARMA(0,1)-GJR-GARCH(2,1)-t
IDX ARMA(1,0)-GJR-GARCH(1,1)-Skewed t
Nguồn: Xử lý dữ liệu thu thập từ Datastream.
160
Giai đoạn sau khủng hoảng
Bảng 3.3: Dạng mô hình phân phối biên, giai đoạn sau khủng hoảng (4/2009-12/2021)
Chuỗi lợi suất Dạng mô hình phân phối biên
VNI ARMA(1,1)-GARCH(1,1)-Skewed t
S&P500 ARMA(2,2)-GARCH(1,1)-Skewed GED
FTSE100 ARMA(2,2)-GARCH(2,1)-Skewed GED
CAC40 ARMA(2,1)-GARCH(1,2)-Skewed t
DAX ARMA(1,0)-GARCH(1,1)-Skewed GED
SSEC ARMA(2,2)-GARCH(1,1)-Skewed-GED
HSI ARMA(0,2)-GARCH(2,1)-Skewed t
Nikkei225 ARMA(2,0)-GARCH(2,1)-Skewed t
KOSPI ARMA(2,2)-GARCH(2,2)-Skewed GED
TAIEX ARMA(1,0)-GARCH(2,1)-Skewed t
STI ARMA(1,2)-GARCH(1,1)-Skewed t
SET ARMA(2,2)-GARCH(2,1)-Skewed t
KLCI ARMA(2,2)-GARCH(1,1)-t
IDX ARMA(2,2)-GARCH(2,1)-Skewed t
Nguồn: Xử lý dữ liệu thu thập từ Datastream.
3.2 Kết quả ước lượng tham số mô hình biên
Giai đoạn trước khủng hoảng
Bảng 3.4.: Kết quả ước lượng tham số mô hình biên của mỗi chuỗi lợi suất trước khủng hoảng
Phần A: Mô hình ARMA(p,q)
c 1 2 1 2
VNI 0,0003** - - -0,0769* -
0,0002 - - 0,0276 -
S&P500 0,0003 - - -0,0765** -
0,0002 - - 0,0307 -
FTSE100 0,0004* 0,1316* 0,7902* -0,1895* -0,7815*
0,0001 0,0189 0,0184 0,0011 0,0002
CAC40 0,0007 1,3350* -0,9923* 1,3282* 0,9823*
0,0079 0,0670 0,0805 0,0235 0,0064
DAX 0,0007*** -1,3350* -0,9923* 1,3282* 0,9823*
0,0004 0,0035 0,0037 0,0034 0,0006
SSEC 0,0006 -0,3207* -0,8720* 0,3267* 0,8368*
0,0005 0,0129 0,0438 0,01705 0,0448
HSI 0,0007* -0,0085* 0,9827* -0,0054* -1,0062*
0,0000 0,0016 0,0026 0,0001 0,0002
Nikkei225 0,0007** -0,0245 - - -
0,0003 0,0313 - - -
KOSPI 0,0013* 1,2583* -0,5478* -1,2443* 0,4953*
0,0003 0,0862 0,0491 0,0951 0,0628
TAIEX 0,0007** 0,6769* - -0,6609* -0,0258
0,0004 0,0329 - 0,0279 0,0824
STI 0,0008* 0,4203* -0,9878* -0,4296* 0,9823*
161
0,0002 0,0050 0,0063 0,0048 0,0006
SET 0,0009** 0,1002* 0,0394 - -
0,0004 0,0261 0,0288 - -
KLCI 0,0004** - - 0,1410* -
0,0002 - - 0,0303 -
IDX 0,0018* - - 0,1407* -0,0535**
0,0004 - - 0,0356 0,0270
Phần B: Mô hình GJR-GARCH(r,m)
1 2 1 2 1 2
VNI 0,0000 0,0000 - 0,9149* - 0,1179* -
0,0000 0,0185 - 0.0114 - 0,0233 -
S&P500 0,0000 0,0000 - 0,9413* - 0,0929* -
0,0000 0,0091 - 0,0101 - 0,0210 -
FTSE100 0,0000* 0,0000 - 0,8742* - 0,1503* -
0,0000 0,0086 - 0,0130 - 0,0308 -
CAC40 0,0000 0,0000 - 0,9149* - 0,1179* -
0.0003 0,0034 - 0,0114 - 0,0234 -
DAX 0,0000 0,0034 - 0,9267* - 0,1104 -
0,0000 0,0531 - 0,1238 - 0,1107 -
SSEC 0.0000 0,0000 0,0975* 0,8852* - 0,0647 -0,0808
0,0000 0,0221 0,0381 0,0229 - 0,0583 0,0626
HSI 0.0000** 0,0000 0,0357 0,9415* 0,0001 -0,0250 0,0364
0,0000 0,0345 0,0504 0,0179 0,0121 0,0696 0,0378
Nikkei225 0.0000 0,0000 0,0527 0,9029* - 0,0360 0,0129
0,0000 0,1506 0,1410 0,0272 - 0,1429 0,1378
KOSPI 0.0000* 0,0000 0,0782 0,2317*** 0,5793* 0,0467 0,0555
0,0000 0,1296 0,1168 0,1331 0,1325 0,1535 0,1280
TAIEX 0.0000 0,0000 0,0414 0,9276* - 0,0778 -0,0595
0,0000 0,5433 0,4804 0,0517 - 0,5166 0,4681
STI 0.0000 0,0079 0,0646 0,8933* - 0,0895 -0,0667
0,0000 0,0528 0,1448 0,2907 - 0,0636 0,1232
SET 0.0000* 0,0702 0,0173 0,7576* - 0,0038 0,1136
0,0000 0,0474 0,0476 0,0271 - 0,0619 0,0724
KLCI 0.0000 0,0633 - 0,9216* - 0,0095 -
0,0000 0,0652 - 0,678 - 0,0296 -
IDX 0.0000* 0,0289 - 0,1165 0,3835* 0,3956* -
0,0000 0,0241 - 0,1497 0,1880 0,1102 -
Nguồn: Xử lý dữ liệu thu thập từ Datastream.
162
Giai đoạn khủng hoảng
Bảng 3.5: Kết quả ước lượng tham số mô hình biên của mỗi chuỗi lợi suất khủng hoảng
Phần A: Mô hình ARMA(p,q)
c 1 2 1 2
VNI -0,0025** 0,3870* - - -
0,0014 0,0541 - - -
S&P500 -0,0011** -0,3118 -0,1274 0,1072 -
0,0005 0,4678 0,0941 0,4729 -
FTSE100 -0,0014 1,1567* -0,9626* -1,1872* 0,9895*
0,0007 0,0099 0,0114 0,0023 0,0014
CAC40 -0,0016* -0,9850* 0,0159* 0,9264* -0,0936*
0,0001 0,0003 0,0001 0,0001 0,0003
DAX -0,0010** -2,0096* -1,0098* 2,0085* 1,0085*
0,0005 0,0011 0,0005 0,0004 0,0004
SSEC -0,0008 -0,0874** -0,9600* 0,0912*** 0,9196*
0,0010 0,0399 0,0429 0,0546 0,0602
HSI -0,0015 -0,0172 - - -
0,0012 0,0531 - - -
Nikkei225 -0,0011* 0,0216* 0,9457* -0,1153* -0,9276*
0,0000 0,0002 0,0002 0,0001 0,0005
KOSPI -0,0011 -1,0985* -0,9808* 1,1275* 1,0110*
0,0008 0,0021 0,0032 0,0023 0,0004
TAIEX -0,0015 -0,8965* -0,9328* 0,9019* 0,9882*
0,0009 0,0189 0,0160 0,0058 0,0049
STI -0,0019** -0,5678* -1,0027* 0,5695* 1,0216*
0,0008 0,0019 0,0153 0,0005 0,0015
SET -0,0008 - - 0,0149 0,0308
0,0007 - - 0,0499 0,0545
KLCI 0,0008 - - 0,1108** -
0,0006 - - 0,0542 -
IDX -0,0010 0,0995*** - - -
0,0010 0,0523 - - -
Phần B: Mô hình GJR-GARCH (r,m)
1 2 1 2 1 2
VNI 0,0000 0,1578* - 07965* - 0,0810 -
0,0000 0,0557 - 0.0430 - 0,0725 -
S&P500 0,0000 0,0000 - 0,9044* - 0,1660* -
0,0000 0,0142 - 0,0208 - 0,0066 -
FTSE100 0,0000* 0,0000 - 0,8745* - 0,1969* -
0,0000 0,0129 - 0,0225 - 0,0466 -
CAC40 0,0000* 0,0000 - 0,8841* 0,0000 0,2071* -
0,0000 0,0103 - 0,3466 0,3187 0,0705 -
DAX 0,0000 0,0000 - 0,8959* - 0,1922 -
163
0,0000 0,1576 - 0,0038 - 0,1998 -
SSEC 0,0000 0,0000 - 0,9249* - 0,0832 -
0,0000 0,0497 - 0,1559 - 0,0583 -
HSI 0,0000** 0,0119 - 0,8182* - 0,2327* -
0,0000 0,0317 - 0,0511 - 0,0685 -
Nikkei225 0,0000* 0,0196* - 0,8156* - 0,1921* -
0,0000 0,0055 - 0,0485 - 0,0616 -
KOSPI 0,0000* 0,0000 - 0,8815** 0,0000 0,1878* -
0,0000 0,0174 - 0,4421 0,4095 0,0709 -
TAIEX 0,0000* 0,0000 0,0000 0,9365* - -0,0220 0,1128
0,0000 0,1195 0,1280 0,0251 - 0,1250 0,1333
STI 0,0000 0,0000 - 0,9094* - 0,1507* -
0,0000 0,0078 - 0,0308 - 0,0191 -
SET 0,0000* 0,0000 - 0,8519* - 0,2012* -
0,0000 0,0123 - 0,0292 - 0,0613 -
KLCI 0,0000* 0,0000 0,0000 0,6330* - 0,0929 0.3405***
0,0000 0,0849 0,0737 0,0967 - 0,1120 0.1774
IDX 0,0000* 0,0035 - 0,6331* - 0,4626* -
0,0000 0,0489 - 0,0914 - 0,1617 -
Nguồn: Xử lý dữ liệu thu thập từ Datastream.
Giai đoạn sau khủng hoảng
Bảng 3.6: Kết quả ước lượng tham số mô hình biên của mỗi chuỗi lợi suất sau khủng hoảng
Phần A: Mô hình ARMA(p,q)
c 1 2 1 2
VNI
S&P500 0,0004* 0,3194* 0,2699* -0,3906* -0.,461*
0,0001 0,0258 0,0252 0,0257 0,0239
FTSE100 0,0001 -0,0556* 0,8378* 0,0387* -0,8744*
0,0000 0,0169 0,0331 0,0138 0,0288
CAC40 0,0002* 0,9486* 0,0460* -0,9987* -
0,0000 0,0032 0,0038 0,0000 -
DAX 0,0003** -0,0251 - - -
0,0001 0,0161 - - -
SSEC 0,0001 -0,1566* 0,6610* 0,1521* -0,6843*
0,0003 0,0210 0,0242 0,0201 0,0233
HSI 0,0001 - - -0,0061 0,0082
0,0002 - - 0,0173 0,0184
Nikkei225 0,0004** -0,0210 0,0318*** - -
0,0002 0,0188 0,0186 - -
KOSPI 0,0000 0,6318* -0,9955* -0,6342* 1,0004*
0,0001 0,0012 0,0015 0,0007 0,0001
TAIEX 0,0004** 0,0264 - - -
164
0,0002 0,0184 - - -
STI 0,0001 0,7567* - -0,7632* 0,0289
0,0001 0,1351 - 0,1358 0,0188
SET 0,0025* 0,3206* 0,6798* -0,3075* -0,6887*
0,0000 0,0002 0,0003 0,0001 0,0000
KLCI 0,0002** 1,1134* -0,5179* -1,0803* 0,5094*
0,0001 0,2366 0,0747 0,2387 0,0733
IDX 0,0003* 0,5195** -0,0359 -0,5336** -0,0410
0,0001 0,2552 0,2147 0,2554 0,2235
Phần B: Mô hình GJR-GARCH (r,m)
1 2 1 2 1 2
VNI 0,0000 - - - - - -
0,0000 - - - - - -
S&P500 0,0000* 0,0068*** - 0,8338* - 0,2698* -
0,0000 0,0041 - 0,0114 - 0,0274 -
FTSE100 0,0000** 0,0027 0,0230 0,9210* - 0,2942* -0,2064*
0,0000 0,0148 0,0154 0,0094 - 0,0415 0,0391
CAC40 0,0000* 0,0000 - 0,6976* 0,1545 0,2658* -
0,0000 0,0000 - 0,1565 0,1441 0,0389 -
DAX 0,0000 0,0006 - 0,9027* - 0,1636* -
0,0000 0,0029 - 0,0062 - 0,0227 -
SSEC 0,0000** 0,0581* - 0,9391* - -0,0061 -
0,0000 0,0028 - 0,0075 - 0,0114 -
HSI 0,0000 0,0000 0,0292 0,9170* - 0,0409 0,0281
0,0000 0,0315 0,0562 0,1071 - 0,0378 0,0902
Nikkei225 0,0000* 0,0000 0,0240 0,8389* - 0,2619* 0,0720
0,0000 0,0245 0,0245 0,0124 - 0,0556 0,0533
KOSPI 0,0000 0,0000 0,0281 0,8939* 0,0000 0,1989* -0,0945**
0,0000 0,0281 0,0287 0,0216 0,0509 0,0539 0,0371
TAIEX 0,0000* 0,0000 0,0329 0,8574* - 0,1634* -0,0313
0,0000 0,0512 0,0536 0,0142 - 0,0619 0,0639
STI 0,0000*** 0,0301* - 0,9162* - 0,0822* -
0,0000 0,0015 - 0,0099 - 0,0116 -
SET 0,0000 0,0000 0,0491** 0,8935* - 0,1852* -0,0901***
0,0000 0,0264 0,0247 0,0169 - 0,0478 0,0472
KLCI 0,0000*** 0,0384* - 0,9265* - 0,0531* -
0,0000 0,0039 - 0,0055 - 0,0143 -
IDX 0,0000 0,0005 0,0499** 0,9084* - 0,3132* -0,2589*
0,0000 0,0227 0,0202 0,0192 - 0,0598 0,0563
Nguồn: Xử lý dữ liệu thu thập từ Datastream.
165
Phụ lục 4
Kết quả ước lượng số liệu
Thủ tục ước lượng được tiến hành cho 13 cặp TTCK giữa Việt Nam và mỗi TTCK
quốc tế cho ba giai đoạn gồm trước khủng hoảng (01/2003-07/2007), khủng hoảng
(08/2007-03/2009) và sau khủng hoảng (04/2009-12/2021). Kết quả ước lượng cho từng
cặp thị trường trong mỗi giai đoạn là rất nhiều, vì vậy, phụ lục này chỉ trình bày minh
họa kết quả các kiểm định thống kê và kết quả ước lượng tham số và lựa chọn hàm
copula phù hợp cho mối quan hệ phụ thuộc giữa TTCK Việt Nam và TTCK Mỹ giai
đoạn 2002-2021.
R version 4.1.2 (2021-11-01) -- "Bird Hippie"
Copyright (C) 2021 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)
## 1/ THỐNG KÊ MÔ TẢ
# A tibble: 6 x 2
sample group
1 -0.00346 rvnindex
2 -0.00624 rvnindex
3 -0.00466 rvnindex
4 -0.00479 rvnindex
5 -0.00145 rvnindex
6 -0.00359 rvnindex
> vni_sp500.summary %>%
+ knitr::kable(format = "markdown", digits = 6)
|group | N| Min.| Mean| Median| Max.| SD| var| SE|
|:--------|----:|---------:|--------:|--------:|--------:|--------:|--------:|--------:|
|rS&P500 | 4596| -0.127652| 0.000362| 0.000795| 0.109572| 0.012163| 0.000148| 0.000179|
|rvnindex | 4596| -0.080623| 0.000456| 0.000574| 0.086870| 0.014281| 0.000204| 0.000211|
> ### DO LECH & DO NHON
> skewness(vni.data, na.rm = FALSE, type = 3)
date rvni
NA -0.1637091
> kurtosis(vni.data[,2], na.rm = FALSE, method = c("excess" ))
[1] 3.1301
attr(,"method")
[1] "excess"
>
> skewness(sp500.data, na.rm = FALSE, type = 3)
date rsp500
NA -0.5382143
Warning message:
In skewness.default(X[[i]], ...) :
argument is not numeric or logical: returning NA
> kurtosis(sp500.data[,2], na.rm = FALSE, method = c("excess" ))
[1] 13.84524
attr(,"method")
[1] "excess"
> ## 2/ KIEM DINH TINH DUNG
> adf.test(rvni, alternative = c("stationary"), k = trunc((length(rvni)-1)^(1/3)))
Augmented Dickey-Fuller Test
data: rvni
Dickey-Fuller = -14.723, Lag order = 16, p-value = 0.01
166
alternative hypothesis: stationary
> adf.test(rsp500, alternative = c("stationary"), k = trunc((length(rsp500)-1)^(1/3)))
Augmented Dickey-Fuller Test
data: rsp500
Dickey-Fuller = -16.576, Lag order = 16, p-value = 0.01
alternative hypothesis: stationary
> kpss.test(rvni, null="Trend") # H0: chuoi dung
KPSS Test for Trend Stationarity
data: rvni
KPSS Trend = 0.090292, Truncation lag parameter = 10, p-value = 0.1
Warning message:
In kpss.test(rvni, null = "Trend") : p-value greater than printed p-value
> kpss.test(rsp500, null = "Trend")
KPSS Test for Trend Stationarity
data: rsp500
KPSS Trend = 0.051519, Truncation lag parameter = 10, p-value = 0.1
> ## 3/ KIEM DINH PHAN PHOI CHUAN
> # Null hypothesis: Normality
> jarque.bera.test(rvni)
Jarque Bera Test
data: rvni
X-squared = 1900, df = 2, p-value < 2.2e-16
> jarque.bera.test(rsp500)
Jarque Bera Test
data: rsp500
X-squared = 36970, df = 2, p-value < 2.2e-16
> ## 4/ KIEM DINH TU TUONG QUAN
> Box.test(rvni, lag = 2, type = "Ljung-Box") # Ho: khong co tu tuong quan
Box-Ljung test
data: rvni
X-squared = 127.28, df = 2, p-value < 2.2e-16
> Box.test(rsp500, lag = 2, type = "Ljung-Box")
Box-Ljung test
data: rsp500
X-squared = 110.49, df = 2, p-value < 2.2e-16
## 5/KIEM DINH HIEU UNG ARCH
> ArchTest(rvni, lags = 2)
ARCH LM-test; Null hypothesis: no ARCH effects
data: rvni
Chi-squared = 571.01, df = 2, p-value < 2.2e-16
167
> ArchTest(rsp500, lags = 2)
ARCH LM-test; Null hypothesis: no ARCH effects
data: rsp500
Chi-squared = 1187.1, df = 2, p-value < 2.2e-16
> ### 6/ VE DO THI QQPLOT CUA VNI & SP500
> # VNI
> qqplot1.vni <- ggqqplot(rvni[,2]) +
+ ggtitle("VN-Index")
> qqplot1.vni
>
> # SP500
> qqplot1.sp500 <- ggqqplot(rsp500[,2]) +
+ ggtitle("S&P500")
> qqplot1.sp500
> ## BUOC 7/ HE SO TUONG QUAN ####
> cor.test(vni.sp500[, 1], vni.sp500[, 2])
Pearson's product-moment correlation
data: vni.sp500[, 1] and vni.sp500[, 2]
t = 16.117, df = 4594, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.2037881 0.2585201
sample estimates:
cor
0.2313371
> cor.test(vni.sp500[, 1], vni.sp500[, 2], method = "spearman")
Spearman's rank correlation rho
data: vni.sp500[, 1] and vni.sp500[, 2]
S = 1.3175e+10, p-value < 2.2e-16
alternative hypothesis: true rho is not equal to 0
sample estimates:
rho
0.1857299
> cor.test(vni.sp500[, 1], vni.sp500[, 2], method = "kendall")
Kendall's rank correlation tau
data: vni.sp500[, 1] and vni.sp500[, 2]
z = 12.884, p-value < 2.2e-16
alternative hypothesis: true tau is not equal to 0
sample estimates:
tau
0.1267446
168
### MÔ HÌNH ARMA
> autoarfima(vni.data[, 2],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 1.014961 0.010530 96.3891 0.000000
ar2 -0.056893 0.015380 -3.6991 0.000216
ma1 -0.820789 0.006799 -120.7233 0.000000
ma2 -0.101859 0.019465 -5.2328 0.000000
sigma 0.013957 0.000146 95.8767 0.000000
Robust Standard Errors:
Estimate Std. Error t value Pr(>|t|)
ar1 1.014961 0.021806 46.5454 0.000000
ar2 -0.056893 0.020886 -2.7239 0.006451
ma1 -0.820789 0.003532 -232.3929 0.000000
ma2 -0.101859 0.026405 -3.8576 0.000115
sigma 0.013957 0.000499 27.9517 0.000000
LogLikelihood : 13111.58
Information Criteria
------------------------------------
Akaike -5.7035
Bayes -5.6965
Shibata -5.7035
Hannan-Quinn -5.7010
> autoarfima(sp500.data[,2], ar.max = 2, ma.max = 2, criterion = "AIC", method = "full")
$fit
*----------------------------------*
* ARFIMA Model Fit *
*----------------------------------*
Mean Model : ARFIMA(1,0,0)
Distribution : norm
Optimal Parameters
------------------------------------
Estimate Std. Error t value Pr(>|t|)
mu 0.000362 0.000155 2.3311 0.019747
ar1 -0.144259 0.014599 -9.8811 0.000000
sigma 0.012037 0.000126 95.8442 0.000000
Robust Standard Errors:
Estimate Std. Error t value Pr(>|t|)
mu 0.000362 0.000151 2.3929 0.016718
ar1 -0.144259 0.037143 -3.8839 0.000103
sigma 0.012037 0.000887 13.5694 0.000000
LogLikelihood : 13792.87
Information Criteria
------------------------------------
Akaike -6.0008
Bayes -5.9966
Shibata -6.0008
Hannan-Quinn -5.9993
169
> ### ƯỚC LƯỢNG CÁC DẠNG MÔ HÌNH GJR-GARCH
> # Các dạng MH GJR-GARCH cho chuỗi lợi suất VNI
## GJR-GARCH(11)VNI
> vni.garch11n.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1)),
mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "norm")
> vni.garch11n.fit <- ugarchfit(spec = vni.garch11n.spec, data = vni.data[,2])
> vni.garch11t.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1)),
mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "std")
> vni.garch11t.fit <- ugarchfit(spec = vni.garch11t.spec, data = vni.data[, 2])
>
> vni.garch11st.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1)),
mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "sstd")
> vni.garch11st.fit <- ugarchfit(spec = vni.garch11st.spec, data = vni.data[, 2])
>
> vni.garch11g.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1)),
mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "ged")
> vni.garch11g.fit <- ugarchfit(spec = vni.garch11g.spec, data = vni.data[, 2])
>
> vni.garch11sg.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1)),
mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "sged")
> vni.garch11sg.fit <- ugarchfit(spec = vni.garch11sg.spec, data = vni.data[, 2])
## GJR-GARCH(12)VNI
> vni.garch12n.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 2)),
mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "norm")
> vni.garch12n.fit <- ugarchfit(spec = vni.garch12n.spec, data = vni.data[,2])
>
> vni.garch12t.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 2)),
mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "std")
> vni.garch12t.fit <- ugarchfit(spec = vni.garch12t.spec, data = vni.data[, 2])
>
> vni.garch12st.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 2)),
mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "sstd")
> vni.garch12st.fit <- ugarchfit(spec = vni.garch12st.spec, data = vni.data[, 2])
>
> vni.garch12g.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 2)),
mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "ged")
> vni.garch12g.fit <- ugarchfit(spec = vni.garch12g.spec, data = vni.data[, 2])
>
> vni.garch12sg.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 2)),
mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "sged")
> vni.garch12sg.fit <- ugarchfit(spec = vni.garch12sg.spec, data = vni.data[, 2])
## GJR-GARCH(21)VNI
> vni.garch21n.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 1)),
mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "norm")
> vni.garch21n.fit <- ugarchfit(spec = vni.garch21n.spec, data = vni.data[,2])
>
> vni.garch21t.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 1)),
mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "std")
> vni.garch21t.fit <- ugarchfit(spec = vni.garch21t.spec, data = vni.data[, 2])
>
> vni.garch21st.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 1)),
mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "sstd")
> vni.garch21st.fit <- ugarchfit(spec = vni.garch21st.spec, data = vni.data[, 2])
>
> vni.garch21g.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 1)),
mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "ged")
> vni.garch21g.fit <- ugarchfit(spec = vni.garch21g.spec, data = vni.data[, 2])
170
>
> vni.garch21sg.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 1)),
mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "sged")
> vni.garch21sg.fit <- ugarchfit(spec = vni.garch21sg.spec, data = vni.data[, 2])
> vni.garch22n.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 2)),
mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "norm")
> vni.garch22n.fit <- ugarchfit(spec = vni.garch22n.spec, data = vni.data[,2])
## GJR-GARCH(22)VNI
> vni.garch22t.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 2)),
mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "std")
> vni.garch22t.fit <- ugarchfit(spec = vni.garch22t.spec, data = vni.data[, 2])
>
> vni.garch22st.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 2)),
mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "sstd")
> vni.garch22st.fit <- ugarchfit(spec = vni.garch22st.spec, data = vni.data[, 2])
>
> vni.garch22g.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 2)),
mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "ged")
> vni.garch22g.fit <- ugarchfit(spec = vni.garch22g.spec, data = vni.data[, 2])
>
> vni.garch22sg.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 2)),
mean.model = list(armaOrder = c(2, 2), include.mean = TRUE), distribution.model = "sged")
> vni.garch22sg.fit <- ugarchfit(spec = vni.garch22sg.spec, data = vni.data[, 2])
> # Các dạng MH GJR-GARCH cho chuỗi lợi suất SP500
## GJR-GARCH(11)SP500
> sp500.garch11n.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1)),
mean.model = list(armaOrder = c(1, 0), include.mean = TRUE), distribution.model = "norm")
> sp500.garch11n.fit <- ugarchfit(spec = sp500.garch11n.spec, data = sp500.data[,2])
> sp500.garch11t.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1)),
mean.model = list(armaOrder = c(1, 0), include.mean = TRUE), distribution.model = "std")
> sp500.garch11t.fit <- ugarchfit(spec = sp500.garch11t.spec, data = sp500.data[, 2])
> sp500.garch11st.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1)),
mean.model = list(armaOrder = c(1, 0), include.mean = TRUE), distribution.model = "sstd")
> sp500.garch11st.fit <- ugarchfit(spec = sp500.garch11st.spec, data = sp500.data[, 2])
> sp500.garch11g.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1)),
mean.model = list(armaOrder = c(1, 0), include.mean = TRUE), distribution.model = "ged")
> sp500.garch11g.fit <- ugarchfit(spec = sp500.garch11g.spec, data = sp500.data[, 2])
> sp500.garch11sg.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1)),
mean.model = list(armaOrder = c(1, 0), include.mean = TRUE), distribution.model = "sged")
> sp500.garch11sg.fit <- ugarchfit(spec = sp500.garch11sg.spec, data = sp500.data[, 2])
## GJR-GARCH(12)SP500
> sp500.garch12n.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 2)),
mean.model = list(armaOrder = c(1, 0), include.mean = TRUE), distribution.model = "norm")
> sp500.garch12n.fit <- ugarchfit(spec = sp500.garch12n.spec, data = sp500.data[,2])
> sp500.garch12t.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 2)),
mean.model = list(armaOrder = c(1, 0), include.mean = TRUE), distribution.model = "std")
> sp500.garch12t.fit <- ugarchfit(spec = sp500.garch12t.spec, data = sp500.data[, 2])
> sp500.garch12st.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 2)),
mean.model = list(armaOrder = c(1, 0), include.mean = TRUE), distribution.model = "sstd")
> sp500.garch12st.fit <- ugarchfit(spec = sp500.garch12st.spec, data = sp500.data[, 2])
> sp500.garch12g.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 2)),
mean.model = list(armaOrder = c(1, 0), include.mean = TRUE), distribution.model = "ged")
> sp500.garch12g.fit <- ugarchfit(spec = sp500.garch12g.spec, data = sp500.data[, 2])
> sp500.garch12sg.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 2)),
mean.model = list(armaOrder = c(1, 0), include.mean = TRUE), distribution.model = "sged")
> sp500.garch12sg.fit <- ugarchfit(spec = sp500.garch12sg.spec, data = sp500.data[, 2])
## GJR-GARCH(21)SP500
171
> sp500.garch21n.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 1)),
mean.model = list(armaOrder = c(1, 0), include.mean = TRUE), distribution.model = "norm")
> sp500.garch21n.fit <- ugarchfit(spec = sp500.garch21n.spec, data = sp500.data[, 2])
> sp500.garch21t.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 1)),
mean.model = list(armaOrder = c(1, 0), include.mean = TRUE), distribution.model = "std")
> sp500.garch21t.fit <- ugarchfit(spec = sp500.garch21t.spec, data = sp500.data[, 2])
> sp500.garch21st.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 1)),
mean.model = list(armaOrder = c(1, 0), include.mean = TRUE), distribution.model = "sstd")
> sp500.garch21st.fit <- ugarchfit(spec = sp500.garch21st.spec, data = sp500.data[, 2])
> sp500.garch21g.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 1)),
mean.model = list(armaOrder = c(1, 0), include.mean = TRUE), distribution.model = "ged")
> sp500.garch21g.fit <- ugarchfit(spec = sp500.garch21g.spec, data = sp500.data[, 2])
> sp500.garch21sg.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 1)),
mean.model = list(armaOrder = c(1, 0), include.mean = TRUE), distribution.model = "sged")
> sp500.garch21sg.fit <- ugarchfit(spec = sp500.garch21sg.spec, data = sp500.data[, 2])
## GJR-GARCH(22)SP500
> sp500.garch22n.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 2)),
mean.model = list(armaOrder = c(1, 0), include.mean = TRUE), distribution.model = "norm")
> sp500.garch22n.fit <- ugarchfit(spec = sp500.garch22n.spec, data = sp500.data[, 2])
> sp500.garch22t.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 2)),
mean.model = list(armaOrder = c(1, 0), include.mean = TRUE), distribution.model = "std")
> sp500.garch22t.fit <- ugarchfit(spec = sp500.garch22t.spec, data = sp500.data[, 2])
> sp500.garch22st.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 2)),
mean.model = list(armaOrder = c(1, 0), include.mean = TRUE), distribution.model = "sstd")
> sp500.garch22st.fit <- ugarchfit(spec = sp500.garch22st.spec, data = sp500.data[, 2])
> sp500.garch22g.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 2)),
mean.model = list(armaOrder = c(1, 0), include.mean = TRUE), distribution.model = "ged")
> sp500.garch22g.fit <- ugarchfit(spec = sp500.garch22g.spec, data = sp500.data[, 2])
> sp500.garch22sg.spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(2, 2)),
mean.model = list(armaOrder = c(1, 0), include.mean = TRUE), distribution.model = "sged")
> sp500.garch22sg.fit <- ugarchfit(spec = sp500.garch22sg.spec, data = sp500.data[, 2])
### LỰA CHỌN MO HINH GJR-GARCH ###
# 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,
+ garch12n = vni.garch12n.fit, garch12t = vni.garch12t.fit, garch12st = vni.garch12st.fit,
garch12g = vni.garch12g.fit, garch12sg = vni.garch12sg.fit,
+ garch21n = vni.garch21n.fit, garch21t = vni.garch21t.fit, garch21st = vni.garch21st.fit,
garch21g = vni.garch21g.fit, garch21sg = vni.garch21sg.fit,
+ garch22n = vni.garch22n.fit, garch22t = vni.garch22t.fit, garch22st = vni.garch22st.fit,
garch22g = vni.garch22g.fit, garch22sg = vni.garch22sg.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 garch12n garch12t garch12st garch12g
garch12sg garch21n garch21t garch21st
Akaike -6.074942 -6.148378 -6.149971 -6.136195 -6.138837 -6.076107 -6.148868 -6.150634 -
6.136721 -6.139556 -6.075309 -6.148241 -6.149802
Bayes -6.062344 -6.134382 -6.134575 -6.122198 -6.123441 -6.062110 -6.133471 -6.133838 -
6.121324 -6.122760 -6.059913 -6.131445 -6.131606
Shibata -6.074949 -6.148388 -6.149983 -6.136205 -6.138849 -6.076116 -6.148879 -6.150648 -
6.136732 -6.139570 -6.075321 -6.148255 -6.149818
Hannan-Quinn -6.070508 -6.143452 -6.144552 -6.131269 -6.133418 -6.071180 -6.143448 -6.144722 -
6.131301 -6.133644 -6.069890 -6.142329 -6.143398
garch21g garch21sg garch22n garch22t garch22st garch22g garch22sg
Akaike -6.135963 -6.138552 -6.079611 -6.148083 -6.151254 -6.137678 -6.140673
Bayes -6.119167 -6.120356 -6.062814 -6.129887 -6.131658 -6.119482 -6.121077
Shibata -6.135977 -6.138568 -6.079624 -6.148099 -6.151272 -6.137694 -6.140692
Hannan-Quinn -6.130051 -6.132147 -6.073699 -6.141678 -6.144356 -6.131273 -6.133776
172
> vni.inds <- which(vni.info.mat == min(vni.info.mat), arr.ind=TRUE)
> model.vni <- colnames(vni.info.mat)[vni.inds[,2]]
> model.vni
[1] "garch22st"
# Lựa chọn mô hình biên phù hợp nhất cho chuỗi SP500
> sp500.model.list <- list(garch11n = sp500.garch11n.fit, garch11t = sp500.garch11t.fit, garch11st =
sp500.garch11st.fit, garch11g = sp500.garch11g.fit, garch11sg = sp500.garch11sg.fit,
+ garch12n = sp500.garch12n.fit, garch12t = sp500.garch12t.fit, garch12st =
sp500.garch12st.fit, garch12g = sp500.garch12g.fit, garch12sg = sp500.garch12sg.fit,
+ garch21n = sp500.garch21n.fit, garch21t = sp500.garch21t.fit, garch21st =
sp500.garch21st.fit, garch21g = sp500.garch21g.fit, garch21sg = sp500.garch21sg.fit,
+ garch22n = sp500.garch22n.fit, garch22t = sp500.garch22t.fit, garch22st =
sp500.garch22st.fit, garch22g = sp500.garch22g.fit, garch22sg = sp500.garch22sg.fit)
> sp500.info.mat <- sapply(sp500.model.list, infocriteria)
> rownames(sp500.info.mat) <- rownames(infocriteria(sp500.garch11n.fit))
> sp500.info.mat
garch11n garch11t garch11st garch11g garch11sg garch12n garch12t garch12st garch12g
garch12sg garch21n garch21t garch21st
Akaike -6.605855 -6.658348 -6.674851 -6.657802 -6.675970 -6.605597 -6.658014 -6.674520 -
6.657442 -6.675614 -6.606018 -6.657785 -6.674364
Bayes -6.597456 -6.648550 -6.663653 -6.648004 -6.664773 -6.595799 -6.646816 -6.661923 -
6.646245 -6.663017 -6.594821 -6.645188 -6.660367
Shibata -6.605858 -6.658353 -6.674857 -6.657807 -6.675976 -6.605601 -6.658020 -6.674528 -
6.657448 -6.675622 -6.606024 -6.657793 -6.674373
Hannan-Quinn -6.602899 -6.654899 -6.670909 -6.654353 -6.672029 -6.602148 -6.654073 -6.670086 -
6.653501 -6.671180 -6.602077 -6.653351 -6.669437
garch21g garch21sg garch22n garch22t garch22st garch22g garch22sg
Akaike -6.657332 -6.675373 -6.605583 -6.658839 -6.675481 -6.656894 -6.676031
Bayes -6.644734 -6.661376 -6.592986 -6.644842 -6.660085 -6.642897 -6.660634
Shibata -6.657339 -6.675382 -6.605591 -6.658848 -6.675493 -6.656903 -6.676042
Hannan-Quinn -6.652898 -6.670446 -6.601149 -6.653912 -6.670062 -6.651967 -6.670611
> sp500.inds <- which(sp500.info.mat == min(sp500.info.mat), arr.ind = TRUE)
> model.sp500 <- colnames(sp500.info.mat)[sp500.inds[, 2]]
> model.sp500
[1] "garch22sg"
> ### THAM SỐ ƯỚC LƯỢNG MÔ HÌNH BIÊN PHÙ HỢP NHẤT:
> vni.garch22st.fit
*---------------------------------*
* GARCH Model Fit *
*---------------------------------*
Conditional Variance Dynamics
-----------------------------------
GARCH Model : gjrGARCH(2,2)
Mean Model : ARFIMA(2,0,2)
Distribution : sstd
Optimal Parameters
------------------------------------
Estimate Std. Error t value Pr(>|t|)
mu 0.000108 0.000283 0.382974 0.701739
ar1 1.007260 0.017135 58.784953 0.000000
ar2 -0.030045 0.017710 -1.696544 0.089783
ma1 -0.863563 0.003128 -276.051229 0.000000
ma2 -0.087777 0.007578 -11.582402 0.000000
omega 0.000005 0.000002 2.976167 0.002919
alpha1 0.233529 0.037655 6.201882 0.000000
alpha2 0.072380 0.065388 1.106929 0.268325
beta1 0.000001 0.211944 0.000003 0.999998
beta2 0.643596 0.174903 3.679721 0.000233
gamma1 -0.011699 0.033855 -0.345570 0.729666
gamma2 0.113401 0.029678 3.820984 0.000133
173
skew 0.934262 0.019200 48.659558 0.000000
shape 6.388071 0.543219 11.759654 0.000000
Robust Standard Errors:
Estimate Std. Error t value Pr(>|t|)
mu 0.000108 0.000331 0.327031 0.743644
ar1 1.007260 0.022972 43.847545 0.000000
ar2 -0.030045 0.024860 -1.208573 0.226827
ma1 -0.863563 0.003380 -255.470418 0.000000
ma2 -0.087777 0.008956 -9.801042 0.000000
omega 0.000005 0.000005 1.060207 0.289050
alpha1 0.233529 0.105260 2.218586 0.026515
alpha2 0.072380 0.226197 0.319984 0.748980
beta1 0.000001 0.801792 0.000001 0.999999
beta2 0.643596 0.666636 0.965437 0.334326
gamma1 -0.011699 0.040588 -0.288242 0.773161
gamma2 0.113401 0.028363 3.998243 0.000064
skew 0.934262 0.022131 42.215317 0.000000
shape 6.388071 0.875349 7.297742 0.000000
LogLikelihood : 14149.58
Information Criteria
------------------------------------
Akaike -6.1513
Bayes -6.1317
Shibata -6.1513
Hannan-Quinn -6.1444
> sp500.garch22sg.fit
*---------------------------------*
* GARCH Model Fit *
*---------------------------------*
Conditional Variance Dynamics
-----------------------------------
GARCH Model : gjrGARCH(2,2)
Mean Model : ARFIMA(1,0,0)
Distribution : sged
Optimal Parameters
------------------------------------
Estimate Std. Error t value Pr(>|t|)
mu 0.000301 0.000094 3.188997 0.001428
ar1 -0.078923 0.014644 -5.389381 0.000000
omega 0.000004 0.000000 15.467271 0.000000
alpha1 0.000000 0.014346 0.000002 0.999998
alpha2 0.000000 0.015110 0.000013 0.999989
beta1 0.072356 0.065492 1.104811 0.269242
beta2 0.689920 0.063193 10.917643 0.000000
gamma1 0.174243 0.026532 6.567359 0.000000
gamma2 0.220687 0.028355 7.782885 0.000000
skew 0.845197 0.015414 54.833670 0.000000
shape 1.349138 0.038595 34.955846 0.000000
Robust Standard Errors:
Estimate Std. Error t value Pr(>|t|)
mu 0.000301 0.000109 2.768148 0.005638
ar1 -0.078923 0.013648 -5.782669 0.000000
omega 0.000004 0.000000 10.006760 0.000000
alpha1 0.000000 0.018507 0.000001 0.999999
alpha2 0.000000 0.017408 0.000012 0.999991
beta1 0.072356 0.050073 1.445003 0.148457
beta2 0.689920 0.051355 13.434301 0.000000
gamma1 0.174243 0.030131 5.782814 0.000000
gamma2 0.220687 0.030201 7.307291 0.000000
174
skew 0.845197 0.016965 49.821350 0.000000
shape 1.349138 0.044025 30.645069 0.000000
LogLikelihood : 15352.52
Information Criteria
------------------------------------
Akaike -6.6760
Bayes -6.6606
Shibata -6.6760
Hannan-Quinn -6.6706
> ### KIỂM ĐỊNH SỰ PHÙ HỢP CỦA MÔ HÌNH BIÊN
> ## Trích xuất chuỗi phần dư u của chuỗi lợi suất S&P500
> sp500.res <- residuals(sp500.garch22sg.fit)/sigma(sp500.garch22sg.fit)
> fitdist(distribution = "sged", sp500.res, control = list())
$pars
mu sigma skew shape
0.000644163 1.000295086 0.845440906 1.348716514
> u <- pdist(distribution = "sged", q = sp500.res, mu = 0.000644163 , sigma = 1.000295086, skew =
0.845440906, shape = 1.348716514)
> ## Trích xuất chuỗi phần dư v của chuỗi lợi suất VNI
> vni.res <- residuals(vni.garch22st.fit)/sigma(vni.garch22st.fit)
> fitdist(distribution = "sstd", vni.res, control = list())
$pars
mu sigma skew shape
0.009319884 1.019121719 0.938542841 6.025807972
> v = pdist("sstd",vni.res, mu = 0.009319884, sigma = 1.019121719, skew = 0.938542841, shape =
6.025807972)
> ### Các kiểm định sự phù hợp của mô hình biên:
> # Kiem dinh Anderson-Darling
> ad.test(u, "punif")
Anderson-Darling test of goodness-of-fit
Null hypothesis: uniform distribution
Parameters assumed to be fixed
data: u
An = 0.95718, p-value = 0.3806
> ad.test(v, "punif")
Anderson-Darling test of goodness-of-fit
Null hypothesis: uniform distribution
Parameters assumed to be fixed
data: v
An = 0.58067, p-value = 0.6665
> # Kiem dinh Cramer-von Mises
> # Null hypothesis: uniform distribution
> cvm.test(u, "punif")
Cramer-von Mises test of goodness-of-fit
Null hypothesis: uniform distribution
Parameters assumed to be fixed
data: u
omega2 = 0.14482, p-value = 0.4058
> cvm.test(v, "punif")
Cramer-von Mises test of goodness-of-fit
Null hypothesis: uniform distribution
Parameters assumed to be fixed
data: v
omega2 = 0.086323, p-value = 0.6561
> # Kiem dinh ks-test
> ##Null hypothesis: uniform distribution
> ks.test(u, "punif")
One-sample Kolmogorov-Smirnov test
data: u
175
D = 0.012332, p-value = 0.4868
alternative hypothesis: two-sided
> ks.test(v, "punif")
One-sample Kolmogorov-Smirnov test
data: v
D = 0.010813, p-value = 0.6557
alternative hypothesis: two-sided
### ƯỚC LƯỢNG THAM SỐ MÔ HÌNH COPULA
> BiCopSelect(u, v, familyset= 1:9, selectioncrit="AIC",indeptest = FALSE, level = 0.05)
Bivariate copula: t (par = 0.19, par2 = 10, tau = 0.12)
> Stu <- BiCopEst(u, v, family = 2, method = "mle", se = T, max.df = 10)
> summary(Stu)
Family
------
No: 2
Name: t
Parameter(s)
------------
par: 0.18 (SE = 0.02)
par2: 10 (SE = NA)
Dependence measures
-------------------
Kendall's tau: 0.12 (empirical = 0.12, p value < 0.01)
Upper TD: 0.02
Lower TD: 0.02
Fit statistics
--------------
logLik: 73.13
AIC: -142.25
BIC: -129.39