Dữ liệu sử dụng nghiên cứu là dữ liệu thời gian theo ngày của chỉ số đóng cửa các mã cổ phiếu NLG ( Công ty Cổ phần Địa ốc Nam Long), VIC (Tập đoàn Vingroup), PDR (Công ty Cổ phần Phát triển Bất động sản Phát Đạt) và VNI (chỉ số chứng khoán phản ánh biến động giá và thanh khoản của toàn thị trường chứng khoán Việt Nam). Dữ liệu giá cổ phiếu các tập đoàn và chỉ số thị trường chứng khoán được thu thập từ trang www.investing.com
library(PerformanceAnalytics)
## Loading required package: xts
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
##
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
##
## legend
library(xlsx)
data <- read.xlsx("D:/Mô hình ngẫu nhiên/btvn1_mhnn.xlsx", sheetIndex = 1, header = TRUE)
data <- na.omit(data)
mydata <- data[,c(2:5)]
head(data,6)
## Ngày VNI VIC PDR NLG
## 1 2023-12-29 1129.93 44600 25161.1 36650
## 2 2023-12-28 1128.93 44450 25025.6 37000
## 3 2023-12-27 1121.99 43600 24980.4 37100
## 4 2023-12-26 1122.25 43550 25116.0 37600
## 5 2023-12-25 1117.66 43400 24890.1 37700
## 6 2023-12-22 1103.06 43150 24212.5 36700
Dùng lệnh res() để hiển thị hệ số tương quan giữa các cặp biến. Sau đó dùng round() để làm tròn đến chữ số thập phân thứ 2.
res <- cor(mydata)
round(res, 2)
## VNI VIC PDR NLG
## VNI 1.00 0.67 0.81 0.94
## VIC 0.67 1.00 0.44 0.50
## PDR 0.81 0.44 1.00 0.82
## NLG 0.94 0.50 0.82 1.00
Nhìn vào kết quả, ta thấy mức độ tương quan giữa VNI và VIC là 0,67 > 0, vậy thì 2 biến này có mối quan hệ thuận, nếu biến VNI tăng thì VIC cũng tăng. Tương tự cho các cặp biến còn lại.
Lệnh rcorr() trong package Hmisc tính giá trị p của ma trận hệ số tương quan như Pearson hoặc là Spearman. Kết quả trả về bao gồm ma trận hệ số tương quan và giá trị p Của mối tương quan của các cặp biến tỏng dữ liệu.
Nếu chúng ta chỉ muốn kết quả hiển thị hoặc là hệ số tương quan hoặc là p_value thì có thể làm như sau:
library(Hmisc)
##
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:base':
##
## format.pval, units
res2<-rcorr(as.matrix(data[,2:5]))
res2
## VNI VIC PDR NLG
## VNI 1.00 0.67 0.81 0.94
## VIC 0.67 1.00 0.44 0.50
## PDR 0.81 0.44 1.00 0.82
## NLG 0.94 0.50 0.82 1.00
##
## n= 2461
##
##
## P
## VNI VIC PDR NLG
## VNI 0 0 0
## VIC 0 0 0
## PDR 0 0 0
## NLG 0 0 0
res2$r
## VNI VIC PDR NLG
## VNI 1.0000000 0.6737855 0.8096184 0.9412304
## VIC 0.6737855 1.0000000 0.4409943 0.5043476
## PDR 0.8096184 0.4409943 1.0000000 0.8205259
## NLG 0.9412304 0.5043476 0.8205259 1.0000000
res2$P
## VNI VIC PDR NLG
## VNI NA 0 0 0
## VIC 0 NA 0 0
## PDR 0 0 NA 0
## NLG 0 0 0 NA
Phần này cung cấp một hàm đơn giản để định dạng ma trận tương quan vào bảng với 4 cột chứa:
Cột 1 : tên hàng
Cột 2 : tên cột
Cột 3 : các hệ số tương quan
Cột 4 : các giá trị p của các tương quan
flattenCorrMatrix <- function(cormat, pmat) {
ut <- upper.tri(cormat)
data.frame(
row = rownames(cormat)[row(cormat)[ut]],
column = rownames(cormat)[col(cormat)[ut]],
cor =(cormat)[ut],
p = pmat[ut]
)
}
flattenCorrMatrix(res2$r, res2$P)
## row column cor p
## 1 VNI VIC 0.6737855 0
## 2 VNI PDR 0.8096184 0
## 3 VIC PDR 0.4409943 0
## 4 VNI NLG 0.9412304 0
## 5 VIC NLG 0.5043476 0
## 6 PDR NLG 0.8205259 0
symnum(res, abbr.colnames = FALSE)
## VNI VIC PDR NLG
## VNI 1
## VIC , 1
## PDR + . 1
## NLG * . + 1
## attr(,"legend")
## [1] 0 ' ' 0.3 '.' 0.6 ',' 0.8 '+' 0.9 '*' 0.95 'B' 1
Hàm symnum() là một trong hàm hiển thị ma trận tương quan trong phần mềm R. Nó thay thế cho các hệ số tương quan bằng các ký hiệu theo mức độ tương quan và lấy ma trận tương qaun làm đối số.
Trong đó:
res là ma trận tương quan muốn trực hóa
abbr.colnames là các giá trị logic. Nếu giá trị đúng thì các tên cột sẽ được viết tắt
library(corrplot)
## corrplot 0.92 loaded
corrplot(res, type = "upper", order = "hclust",
tl.col = "black", tl.srt = 45)
Biểu đồ tương quan (correlation plot) giúp chúng ta có thể sự tương quan của thị trường bất động sản và chứng Khoán của các tập đoàn NLG, VIC, PDR. Dựa vừa mô hình thì chúng ta thấy cả 2 thị trường này có sự tương quan chặt chẽ với nhau, nhìn chung thì hệ số hồi quy dương, thị trường bất động sản và chứng khoán tương quan mạnh ở các cặp VIC-PDR, VIC, VNI, VIC-NLG, PDR - VNI, PDR - NLG, VNI - NLG. Các giá trị này chỉ ra rằng các mã chứng khoán này có xu hướng biến động cùng chiều với nhau, nghĩa là khi giá của một mã chứng khoán tăng, các mã khác cũng có xu hướng tăng theo và ngược lại.
chart.Correlation(mydata, histogram=TRUE, pch=19)
## Warning in par(usr): argument 1 does not name a graphical parameter
## Warning in par(usr): argument 1 does not name a graphical parameter
## Warning in par(usr): argument 1 does not name a graphical parameter
## Warning in par(usr): argument 1 does not name a graphical parameter
## Warning in par(usr): argument 1 does not name a graphical parameter
## Warning in par(usr): argument 1 does not name a graphical parameter
Đường chéo trên biểu đồ thể hiện sự phân bố của từng biến
Ở dưới đường chéo là các ô đồ thị dạng scatter.
Ô ở dòng 2 cột 1 (2,1) biểu thị sự tương quan giữa biến VNI và VIC.
Ô (3,1) biểu thị sự tương quan giữa biến VNI và PDR.
Ô (3,2) biểu thị sự tương quan của cặp biến VIC và PDR.
Tương tự cho các ô còn lại.
Ở trên đường chéo là các hệ số tương quan và mức ý nghĩa thống kê (p_value) được thể hiện dưới dạng ngôi sao. Mỗi mức ý nghĩa sẽ được liên kết với 1 ký hiệu : *** nghĩa là giá trị từ 0 đến 0.001.
Ô (1,2) biểu thị mức độ tương quan của hai biến VNI và VIC là 0.67 và với mức ý nghĩa p nằm trong khoảng 0 đến 0.001
Ô (2,4) biểu thị mức độ tương quan của hai biến VIC và NLG là 0.50 và với mức ý nghĩa p nằm trong khoảng 0 đến 0.001
Tương tự cho các cặp biến khác.
library(ggplot2)
library(ggcorrplot)
df <- dplyr::select_if(mydata, is.numeric)
r <- cor(df, use="complete.obs")
ggcorrplot(r)
Tương quan của các thị trường trong giai đoạn này là ở mức cao. Mối tương quan cao nhất trong giai đoạn này là giữa NLG và PDR (0.82). Mức tương quan giữa các thị trường có xu hướng tăng.