library(readxl)
## Warning: package 'readxl' was built under R version 3.6.3
library(mixtools)
## Warning: package 'mixtools' was built under R version 3.6.3
## mixtools package, version 1.2.0, Released 2020-02-05
## This package is based upon work supported by the National Science Foundation under Grant No. SES-0518772.
library(sn)
## Loading required package: stats4
## 
## Attaching package: 'sn'
## The following object is masked from 'package:stats':
## 
##     sd
library(dplyr)
## Warning: package 'dplyr' was built under R version 3.6.3
## 
## 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(VGAM)
## Warning: package 'VGAM' was built under R version 3.6.3
## Loading required package: splines
## 
## Attaching package: 'VGAM'
## The following object is masked from 'package:sn':
## 
##     zeta
cam<-file.choose()
rm<-read_excel(cam)
rm1<- rm %>% select(KDH, DIG, DXG, VHM, NVL, VIC)

1 Week 6

Phân tích mô hình bằng các phương pháp thống kê

1.1 Mô hình 1

2 Week 5

Chạy mô hình với các phân phối khác nhau của biến đầu vào

2.1 Kịch bản 1: Mô phỏng giá cổ phiếu sử dụng GBM giả định phân phối chuẩn

Phương trình

\[ S_{(N)_t} = S_{0} \exp\left((\theta-\frac{\epsilon^2}{2})t + \epsilon B_{N}\right) \]

\[ B_{N}=\sqrt{\frac{t} {n}}\sum_{i=1}^{n} Z_i=\sqrt{\frac{t} {n}}F_{Z}(z) \]

Trong đó:

  • S(Nt), S(NNt), S(NLt) là giá cổ phiếu tại thời điểm t ứng với giả định phân phối chuẩn, phân phối ghép
  • S0 là giá cổ phiếu tại thời điểm ban đầu
  • theta là hệ số drift , epsilon là hệ số volatility. Trong bài này tôi giả định theta = 5%, epsilon = 15%. BN là biến ngẫu nhiên tiêu chuẩn BM √t/n là độ lệch chuẩn của BM, Zi(i = 1, 2, ..., n) được phân phối theo phân phối chuẩn N(0, 1), BNN là một biến BM ghép giữa hai phân phối chuẩn liên tục BNL là một biến BM ghép giữa phân phối chuẩn và phân phối Laplace *FZi (zi) với i = 1, 2 định nghĩa tổng tích lũy của các phân phối ghép tương ứng.

2.1.1 Biến KDH

set.seed(123)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Bt = sqrt(dt)*cumsum(rnorm((n),0,1))
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
KDH<-gbm.f(n=1055, theta = 0.05, epsilon = 0.15, S0 =rm1$KDH[1])
plot(KDH, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

KDH<-diff(log(KDH))

2.1.2 Biến DIG

set.seed(123)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Bt = sqrt(dt)*cumsum(rnorm((n),0,1))
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
DIG<-gbm.f(n=1055, theta = 0.05, epsilon = 0.15, S0 =rm1$DIG[1])
plot(DIG, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

DIG<-diff((log(DIG)))

2.1.3 Biến DXG

set.seed(123)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Bt = sqrt(dt)*cumsum(rnorm((n),0,1))
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
DXG<-gbm.f(n=1055, theta = 0.05, epsilon = 0.15, S0 =rm1$DXG[1])
plot(DXG, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

DXG<-diff(log(DXG))

2.1.4 Biến VHM

set.seed(123)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Bt = sqrt(dt)*cumsum(rnorm((n),0,1))
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
VHM<-gbm.f(n=1055, theta = 0.05, epsilon = 0.15, S0 =rm1$VHM[1])
plot(VHM, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

VHM<-diff(log(VHM))

2.1.5 Biến NVL

set.seed(123)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Bt = sqrt(dt)*cumsum(rnorm((n),0,1))
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
NVL<-gbm.f(n=1055, theta = 0.05, epsilon = 0.15, S0 =rm1$NVL[1])
plot(NVL, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

NVL<-diff(log(NVL))

2.1.6 Biến VIC

set.seed(123)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Bt = sqrt(dt)*cumsum(rnorm((n),0,1))
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
VIC<-gbm.f(n=1055, theta = 0.05, epsilon = 0.15, S0 =rm1$VIC[1])
plot(VIC, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

VIC<- diff(log(VIC))

2.1.7 Chạy mô hình

mac<-data.frame(DIG, DXG, NVL, VHM, KDH, VIC)
Vp<-100000 # Giá trị danh mục đầu tư
w<-c(0.2, 0.25, 0.1, 0.1, 0.2, 0.15)# Tỷ trọng của từng tài sản trong danh mục
RP1 <- apply(mac, 1, function(row) sum(row * w))#Tỷ suất lợi nhuận của danh mục
N<- 1055 # Số quan sát của chuối tỷ suất lợi nhuận danh mục
# Sắp xếp tỷ suất lợị nhuận danh mục theo thứ tự tăng dần
sorted_values <- sort(RP1)
# Chọn chỉ số tương ứng với mức tin cậy
alpha<- 0.95
k <- ceiling((1 - alpha) * N)
# Tính VaR
var <- Vp*sorted_values[k]
var
## [1] -745.3168

2.2 Kịch bản 2: Sử dụng mô hình GBM dưới giả định phân phối ghép (convoluted distribution( hai phân phối chuẩn))

Phương trình

\[ S_{(NN)_t} = S_{0} \exp\left((\theta-\frac{\epsilon^2}{2})t + \epsilon B_{NN}\right) \] \[ B_{NN}=\sqrt{\frac{t} {n}}F_{Z1}(z1) \]

2.2.1 Biến KDH

set.seed(123)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rnorm(n,0,1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
KDH<-gbm.f(n=1055, theta = 0.05, epsilon = 0.15, S0 =rm1$KDH[1])
plot(KDH, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

KDH<-diff(log(KDH))

2.2.2 Biến DIG

set.seed(123)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rnorm(n,0,1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
DIG<-gbm.f(n=1055, theta = 0.05, epsilon = 0.15, S0 =rm1$DIG[1])
plot(DIG, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

DIG<-diff(log(DIG))

2.2.3 Biến DXG

set.seed(123)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rnorm(n,0,1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
DXG<-gbm.f(n=1055, theta = 0.05, epsilon = 0.15, S0 =rm1$DXG[1])
plot(DXG, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

DXG<-diff(log(DXG))

2.2.4 Biến VHM

set.seed(123)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rnorm(n,0,1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
VHM<-gbm.f(n=1055, theta = 0.05, epsilon = 0.15, S0 =rm1$VHM[1])
plot(VHM, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

VHM<-diff(log(VHM))

2.2.5 Biến NVL

set.seed(123)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rnorm(n,0,1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
NVL<-gbm.f(n=1055, theta = 0.05, epsilon = 0.15, S0 =rm1$NVL[1])
plot(NVL, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

NVL<-diff(log(NVL))

2.2.6 Biến VIC

set.seed(123)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rnorm(n,0,1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
VIC<-gbm.f(n=1055, theta = 0.05, epsilon = 0.15, S0 =rm1$VIC[1])
plot(VIC, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

VIC<-diff(log(VIC))

2.2.7 Chạy mô hình

mac<-data.frame(DIG, DXG, NVL, VHM, KDH, VIC)
Vp<-100000 # Giá trị danh mục đầu tư
w<-c(0.2, 0.25, 0.1, 0.1, 0.2, 0.15)# Tỷ trọng của từng tài sản trong danh mục
RP2 <- apply(mac, 1, function(row) sum(row * w))#Tỷ suất lợi nhuận của danh mục
N<- 1055 # Số quan sát của chuối tỷ suất lợi nhuận danh mục
# Sắp xếp tỷ suất lợị nhuận danh mục theo thứ tự tăng dần
sorted_values <- sort(RP2)
# Chọn chỉ số tương ứng với mức tin cậy
alpha<- 0.95
k <- ceiling((1 - alpha) * N)
# Tính VaR
var <- Vp*sorted_values[k]
var
## [1] -1038.371

2.3 Kịch bản 3: Sử dụng mô hình GBM dưới giả định phân phối ghép (convoluted distribution( ghép phân phối chuẩn và phân phối Laplace))

PHương trình

\[ S_{(NL)_t} = S_{0} \exp\left((\theta-\frac{\epsilon^2}{2})t + \epsilon B_{NL}\right) \]

\[ B_{NL}=\sqrt{\frac{t} {n}}F_{Z2}(z2) \] ### Biến KDH

set.seed(123)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rlaplace(n, location = 0, scale = 1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
KDH<-gbm.f(n=1055, theta = 0.05, epsilon = 0.15, S0 =rm1$KDH[1])
plot(KDH, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

KDH<-diff(log(KDH))

2.3.1 Biến DIG

set.seed(123)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rlaplace(n, location = 0, scale = 1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
DIG<-gbm.f(n=1055, theta = 0.05, epsilon = 0.15, S0 =rm1$DIG[1])
plot(DIG, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

DIG<-diff(log(DIG))

2.3.2 Biến DXG

set.seed(123)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rlaplace(n, location = 0, scale = 1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
DXG<-gbm.f(n=1055, theta = 0.05, epsilon = 0.15, S0 =rm1$DXG[1])
plot(DXG, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

DXG<-diff(log(DXG))

2.3.3 Biến VHM

set.seed(123)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rlaplace(n, location = 0, scale = 1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
VHM<-gbm.f(n=1055, theta = 0.05, epsilon = 0.15, S0 =rm1$VHM[1])
plot(VHM, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

VHM<-diff(log(VHM))

2.3.4 Biến NVL

set.seed(123)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rlaplace(n, location = 0, scale = 1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
NVL<-gbm.f(n=1055, theta = 0.05, epsilon = 0.15, S0 =rm1$NVL[1])
plot(NVL, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

NVL<-diff(log(NVL))

2.3.5 Biến VIC

set.seed(123)
gbm.f= function(n,S0,theta, epsilon){
  t = 1
  t.s =seq(0,t,length=n)
  dt=t/n
  Z1<- rnorm(n,0,1)
  Z2<- rlaplace(n, location = 0, scale = 1)
  Bt = sqrt(dt)*cumsum(Z1+Z2)
  St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
VIC<-gbm.f(n=1055, theta = 0.05, epsilon = 0.15, S0 =rm1$VIC[1])
plot(VIC, type = 'l', col = 'blue', 
      ylab = "Price",
      xlab = "Time (Days)")

VIC<-diff(log(VIC))

2.3.6 Chạy mô hình

mac<-data.frame(DIG, DXG, NVL, VHM, KDH, VIC)

Vp<-100000 # Giá trị danh mục đầu tư
w<-c(0.2, 0.25, 0.1, 0.1, 0.2, 0.15)# Tỷ trọng của từng tài sản trong danh mục
RP3 <- apply(mac, 1, function(row) sum(row * w)) #Tỷ suất lợi nhuận của danh mục
N<- 1055 # Số quan sát của chuối tỷ suất lợi nhuận danh mục
# Sắp xếp tỷ suất lợị nhuận danh mục theo thứ tự tăng dần
sorted_values <- sort(RP3)
# Chọn chỉ số tương ứng với mức tin cậy
alpha<- 0.95
k <- ceiling((1 - alpha) * N)
# Tính VaR
var <- Vp*sorted_values[k]
var
## [1] -1194.062

3 Week 4

3.1 Mô hình

Mô hình VaR(Value at risk) của danh mục cổ phiểu($): \[ VaR = V_{p}*percentile(R_P, \alpha) \] Trong đó VP: khoản đầu tư của danh mục (100.000$) a là mức xác suất ứng với độ tin cậy 95%. *R(P) là chuỗi tỷ suất lợi nhuận của danh mục được tính toán theo công thức sau, sau đó được sắp xếp theo thứ tứ tăng dần.

\[ R_{P}=\sum_{i=1}^{n} w_{i}R_{i} \] Trong đó: * wi: tỷ trọng của tài sản i trong danh mục * Ri: tỷ suất lợi nhuận của tài sản i * n = 6

4 Week 3

Xác định phân phối cho các biến đầu vào và giải thích

4.1 Dữ liệu đầu vào

Dữ liệu giá đóng cửa của 6 mã cổ phiếu nhóm ngành bất động sản bao gồm: DIG, DXG, NVL, VHM, KDH và VIC. Dữ liệu được thu thập từ investing.com trong giai đoạn 02/01/2019 đến 24/03/2023 với 1.055 quan sát.

  • KDH: Công ty cổ phần Đầu tư và kinh doanh nhà Khang Điền
  • DIG: Tổng công ty Cổ phần Đầu tư Phát triển Xây dựng
  • DXG: Công ty cổ phần Tập đoàn Đất Xanh
  • VHM: Công ty cổ phần Vinhomes
  • NVL: Công ty cổ phần Tập đoàn Đầu tư Địa ốc No Va
  • VIC: Tập đoàn VINGROUP
summary(rm1)
##       KDH             DIG             DXG             VHM       
##  Min.   :14124   Min.   : 6592   Min.   : 6739   Min.   :40900  
##  1st Qu.:18833   1st Qu.: 8651   1st Qu.:11800   1st Qu.:58212  
##  Median :24000   Median :14800   Median :14900   Median :64905  
##  Mean   :27144   Mean   :22194   Mean   :17675   Mean   :64977  
##  3rd Qu.:35500   3rd Qu.:27041   3rd Qu.:21109   3rd Qu.:73491  
##  Max.   :51636   Max.   :98197   Max.   :46750   Max.   :88722  
##       NVL             VIC        
##  Min.   :10250   Min.   : 52500  
##  1st Qu.:31932   1st Qu.: 78873  
##  Median :35214   Median : 93422  
##  Mean   :49516   Mean   : 90104  
##  3rd Qu.:78000   3rd Qu.:104000  
##  Max.   :92366   Max.   :128000

Từ kết quả thống kê mô tả cho thấy:

Giá cổ phiếu KDH có giá trị nhỏ nhất là 14124; giá trị lớn nhất là 51636; giá trị trung bình là 27144.

Giá cổ phiếu DIG có giá trị nhỏ nhất là 6592; giá trị lớn nhất là 98197; giá trị trung bình là 22194.

Giá cổ phiếu DXG có giá trị nhỏ nhất là 6739; giá trị lớn nhất là 46750; giá trị trung bình là 17675.

Giá cổ phiếu VHM có giá trị nhỏ nhất là 40900; giá trị lớn nhất là 88722; giá trị trung bình là 64977.

Giá cổ phiếu NVL có giá trị nhỏ nhất là 10250; giá trị lớn nhất là 92366; giá trị trung bình là 49516.

Giá cổ phiếu VIC có giá trị nhỏ nhất là 52500; giá trị lớn nhất là 12800; giá trị trung bình là 90104

Sau đây tôi sẽ đi kiểm định một số phân phối thông dụng cho 6 biến này.

4.2 Kiểm định một số phân phối thông dụng

4.2.1 Biến KDH

Vẽ đồ thị histogram

hist(rm1$KDH)

4.2.1.1 Kiểm định phân phối chuẩn

Kiểm định SHapiro-Wilk Test

shapiro.test(rm1$KDH)
## 
##  Shapiro-Wilk normality test
## 
## data:  rm1$KDH
## W = 0.87824, p-value < 2.2e-16

Giả thuyết H0: Dãy số liệu giá cổ phiểu KDH có phân phối chuẩn

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối chuẩn

4.2.1.2 Kiểm định phân phối khác

ks.test(rm1$KDH, y = "plnorm")
## Warning in ks.test(rm1$KDH, y = "plnorm"): ties should not be present for the
## Kolmogorov-Smirnov test
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  rm1$KDH
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided

Giả thuyết H0: Dãy số liệu giá cổ phiểu KDH có phân phối loga chuẩn

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối loga chuẩn

4.2.2 Biến DIG

Vẽ đồ thị histogram

hist(rm1$DIG)

4.2.2.1 Kiểm định phân phối chuẩn

Kiểm định SHapiro-Wilk Test

shapiro.test(rm1$DIG)
## 
##  Shapiro-Wilk normality test
## 
## data:  rm1$DIG
## W = 0.7499, p-value < 2.2e-16

Giả thuyết H0: Dãy số liệu giá cổ phiểu DIG có phân phối chuẩn

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối chuẩn

4.2.2.2 Kiểm định phân phối khác

ks.test(rm1$DIG, y = "plnorm")
## Warning in ks.test(rm1$DIG, y = "plnorm"): ties should not be present for the
## Kolmogorov-Smirnov test
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  rm1$DIG
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided

Giả thuyết H0: Dãy số liệu giá cổ phiểu DIG có phân phối loga chuẩn

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối loga chuẩn

ks.test(rm1$DIG, y = "pexp")
## Warning in ks.test(rm1$DIG, y = "pexp"): ties should not be present for the
## Kolmogorov-Smirnov test
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  rm1$DIG
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided

Giả thuyết H0: Dãy số liệu giá cổ phiểu DIG có phân phối mũ

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối mũ

4.2.3 Biến DXG

Vẽ đồ thị histogram

hist(rm1$DXG)

4.2.3.1 Kiểm định phân phối chuẩn

Kiểm định SHapiro-Wilk Test

shapiro.test(rm1$DXG)
## 
##  Shapiro-Wilk normality test
## 
## data:  rm1$DXG
## W = 0.86726, p-value < 2.2e-16

Giả thuyết H0: Dãy số liệu giá cổ phiểu DXG có phân phối chuẩn

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối chuẩn

4.2.3.2 Kiểm định phân phối khác

ks.test(rm1$DXG, y = "plnorm")
## Warning in ks.test(rm1$DXG, y = "plnorm"): ties should not be present for the
## Kolmogorov-Smirnov test
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  rm1$DXG
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided

Giả thuyết H0: Dãy số liệu giá cổ phiểu DXG có phân phối loga chuẩn

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối loga chuẩn

ks.test(rm1$DXG, y = "pexp")
## Warning in ks.test(rm1$DXG, y = "pexp"): ties should not be present for the
## Kolmogorov-Smirnov test
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  rm1$DXG
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided

Giả thuyết H0: Dãy số liệu giá cổ phiểu DXG có phân phối mũ

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối mũ

4.2.4 Biến VHM

Vẽ đồ thị histogram

hist(rm1$VHM)

4.2.4.1 Kiểm định phân phối chuẩn

Kiểm định SHapiro-Wilk Test

shapiro.test(rm1$VHM)
## 
##  Shapiro-Wilk normality test
## 
## data:  rm1$VHM
## W = 0.98427, p-value = 3.021e-09

Giả thuyết H0: Dãy số liệu giá cổ phiểu VHM có phân phối chuẩn

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối chuẩn

4.2.4.2 Kiểm định phân phối khác

ks.test(rm1$VHM, y = "psn")
## Warning in ks.test(rm1$VHM, y = "psn"): ties should not be present for the
## Kolmogorov-Smirnov test
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  rm1$VHM
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided

Giả thuyết H0: Dãy số liệu giá cổ phiểu VHM có phân phối skew normal

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối skew normal

4.2.5 Biến NVL

Vẽ đồ thị histogram

hist(rm1$NVL)

4.2.5.1 Kiểm định phân phối chuẩn

Kiểm định SHapiro-Wilk Test

shapiro.test(rm1$NVL)
## 
##  Shapiro-Wilk normality test
## 
## data:  rm1$NVL
## W = 0.8347, p-value < 2.2e-16

Giả thuyết H0: Dãy số liệu giá cổ phiểu NVL có phân phối chuẩn

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối chuẩn

4.2.5.2 Kiểm định phân phối khác

Nhìn vào đồ thị histogram ta thấy có dạng 2 đỉnh , đây có thể là hình dạng của phân phối bimodal. Trong R, không có sẵn phân phối bimodal trong hàm ks.test(). DO đó tôi sử dụng gói thư viện "mixtools" trong R để ước lượng mô hình phân phối hỗn hợp và kiểm tra xem có hai thành phần phân phối hay không.

fit <- normalmixEM(rm1$NVL, k = 2)
## number of iterations= 12
summary(fit)
## summary of normalmixEM object:
##             comp 1      comp 2
## lambda 4.39013e-01 5.60987e-01
## mu     3.27857e+04 6.26080e+04
## sigma  2.06436e+03 2.52088e+04
## loglik at estimate:  -11604.34

Kết quả này cho biết mô hình phân phối hỗn hợp bimodal được ước lượng có hai thành phần. Thành phần 1 có tỷ lệ xuất hiện là 0.636333, giá trị trung bình là 32199.2 và độ lệch chuẩn là 8473.63. Thành phần 2 có tỷ lệ xuất hiện là 0.363667, giá trị trung bình là 79815.3 và độ lệch chuẩn là 4396.94. Giá trị log-likelihood (-11477.15) được sử dụng để đánh giá mức độ khớp giữa mô hình và dữ liệu. Mức độ khớp càng cao khi giá trị log-likelihood càng gần 0 hoặc càng lớn. Trong trường hợp này, giá trị log-likelihood âm có thể chỉ ra rằng mô hình không khớp hoàn toàn với dữ liệu.

4.2.6 Biến VIC

Vẽ biểu đồ histogram

hist(rm1$VIC)

4.2.6.1 Kiểm định phân phối chuẩn

Kiểm định SHapiro-Wilk Test

shapiro.test(rm1$VIC)
## 
##  Shapiro-Wilk normality test
## 
## data:  rm1$VIC
## W = 0.96166, p-value = 4.988e-16

Giả thuyết H0: Dãy số liệu giá cổ phiểu VIC có phân phối chuẩn

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối chuẩn

4.2.6.2 Kiểm định phân phối khác

ks.test(rm1$VIC, y = "psn")
## Warning in ks.test(rm1$VIC, y = "psn"): ties should not be present for the
## Kolmogorov-Smirnov test
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  rm1$VIC
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided

Giả thuyết H0: Dãy số liệu giá cổ phiểu VIC có phân phối skew normal

Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối skew normal

5 Week 2

5.1 Chủ đề

Mô phỏng giá trị rủi ro của danh mục đầu tư gồm 6 cổ phiếu nhóm ngành bất động sản.

5.1.1 Giá trị rủi ro

Có rất nhiều cách tiếp cận khác nhau về rủi ro, nhưng cách tiếp cận phổ biến nhất khi xem xét rủi ro đó là “khả năng xuất hiện các khoản thiệt hại về tài chính”. Xét trong phạm vi kinh doanh chứng khoán, rủi ro được xác định là “sự thay đổi không chắc chắn về tỷ suất sinh lợi” của giá chứng khoán. Trên cơ sở đó, rủi ro có thể xem xét thông qua các chỉ số sau: độ lệch chuẩn của giá từng cổ phiếu và của cả danh mục đầu tư, phương sai – hiệp phương sai của danh mục đầu tư, hệ số tương quan là thước đo đã chuẩn hóa của hiệp phương sai, giá trị rủi ro VaR, giá trị rủi ro có điều kiện CvaR.

VaR là giá trị thua lỗ tối đa dự báo trước từ việc nắm giữ một chứng khoán hay một danh mục chứng khoán trong một khoảng thời gian nhất định và tại một mức tin cậy xác định trước. Ví dụ VaR của một danh mục đầu tư là 1 triệu USD cho một ngày với xác suất là 0.05 được hiểu là có 5% khả năng giỏ đầu tư này sẽ lỗ ít nhất 1 triệu USD trong một ngày nếu thị trường tài chính vẫn trong một tình trạng bình thường. Hay, với độ tin cậy 95% NĐT có thể sẽ phải gánh chịu khoản lỗ tối đa là 1 triệu USD trong một ngày. Trong bài tiểu luận này tôi sẽ thực hiện mô phỏng giá trị rủi ro VaR của danh mục đầu tư 100.000$ trong ngày tiếp theo với độ tin cậy 95% . Danh mục đầu tư gồm 6 cổ phiếu nhóm ngành bất động sản: DIG, DXG, NVL, VHM, KDH và VIC với tỷ trọng của mỗi tài sản trong danh mục đều lần lượt là 20%, 25%, 10%, 10%, 20%, 15%.

5.1.2 Dữ liệu đầu vào

Giá đóng cửa của 6 cổ phiếu của 6 công ty ngành Bất động sản được niêm yết trên HOSE. Ta xem giá đóng cửa của từng cổ phiếu là một biến ngẫu nhiên tuân theo một phân phối x(phân phối này sẽ được xác định vào tuần sau) và thực hiện mô phỏng. Sau đó, thực hiện tính tỷ suất sinh lời của từng tài sản theo công thức:

\[ R_{t}=\log\frac{P_{t}} {P_{t-1}} \]

6 Week 1

Dùng hàm set.seed để cố định các giá trị sau mỗi lần mô phỏng

set.seed(1)
library(rcompanion)
## Warning: package 'rcompanion' was built under R version 3.6.3
library(moments)
library(VGAM)
library(EnvStats)
## 
## Attaching package: 'EnvStats'
## The following objects are masked from 'package:moments':
## 
##     kurtosis, skewness
## The following objects are masked from 'package:VGAM':
## 
##     calibrate, dpareto, ppareto, predict, qpareto, rpareto
## The following object is masked from 'package:sn':
## 
##     predict
## The following objects are masked from 'package:stats':
## 
##     predict, predict.lm
## The following object is masked from 'package:base':
## 
##     print.default

6.1 Weibull distribution

Phân bố xác suất Weibull là một dạng thường dùng để mô tả thống kê sự xuất hiện của các đại lượng cực trị trong khí tượng, thuỷ văn và dự báo thời tiết như dòng chảy lũ, sóng, gió lớn nhất. Ngoài ra phân bố này cũng hay được dùng trong phân tích xác suất sống sót hoặc phá huỷ trong lý thuyết độ tin cậy, dùng trong lý thuyết cực trị; biểu diễn thời gian sản xuất và phân phối trong công nghiệp; sự phân tán tín hiệu radar và sự suy giảm tín hiệu trong liên lạc không dây.

Hàm mật độ xác suất biểu thị xác suất xuất hiện giá trị của đại lượng ngẫu nhiên X bằng với một giá trị x cụ thể nào đó theo luật phân bố xác suất Weibull như:

\[ f(x) = \frac{a}{b}(\frac{x}{b})^{a-1} e^{-(\frac{x}{b})^a} \]

Trong đó:

  • a: thông số hình dạng( shape) quy định hình dạng của phân phối thông qua độ dốc. Shape càng lớn thì độ dốc của phân phối càng cao.

  • b: là thông số tỷ lệ(scale) thể hiện độ trải của dữ liệu. Scale càng lớn thì độ trải càng rộng

6.1.1 Mô phỏng

Thực hiện mô phỏng ngẫu nhiên dữ liệu có phân phối Weibull gồm 10000 quan sát với thông số hình dạng ( shape) là 15 và thông số tỷ lệ (scale) là 3. Gán tên cho dữ liệu là ppwei và sử dụng lệnh rweibull để thực hiện mô phỏng.

ppwei<-rweibull(n = 10000, shape = 15, scale = 3)

6.1.2 Đồ thị

plotNormalHistogram(ppwei, col = "yellow", prob= TRUE,
                    main = "Histogram of Weibull distribution",xlab = "ppwei",
                    length = 1000, linecol="red",lwd=2)

Biểu đồ tần suất của phân phối trên cho thấy dữ liệu nằm trong khoảng 2,8 đến 3,2 xuất hiện nhiều nhất.

6.1.3 Thống kê mô tả

summary(ppwei)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.584   2.755   2.930   2.896   3.065   3.477

Từ kết quả thống kê mô tả cho thấy giá trị nhỏ nhất của dữ liệu là 1,585; giá trị lớn nhất là 3,527; giá trị trung bình là 2,931; 25% dữ liệu nhỏ hơn 2.764 (giá trị tứ phân vị thứ nhất); 50% dữ liệu nhỏ hơn 2.931 (giá trị trung vị); 75% dữ liệu nhỏ hơn 3.071 (giá trị tứ phân vị thứ ba)

var(ppwei)
## [1] 0.05699003
sd(ppwei)
## [1] 0.2387258

Giá trị phương sai là 0,0566855. Độ lệch chuẩn là 0.23808728 cho thấy mức độ phân tán của dữ liệu so với giá trị trung bình.

skewness(ppwei)
## [1] -0.7301356

Hệ số độ lệch là -0,8007 nằm trong khoảng -3 đến 3 cho thấy phân phối này có hình dạng của phân phối chuẩn

kurtosis(ppwei)
## [1] 0.6756999

Hệ số độ nhọn là 1,037319 nằm trong khoảng -3 đến 3 cho thấy phân phối này có hình dạng của phân phối chuẩn

6.2 Lapplace distrbution

Phân phối Laplace hay còn gọi là phân phối mũ kép thể hiện phân phối của sự sai khác giữa hai biến độc lập có cùng phân phối , phân phối này có đuôi nặng hơn phân phối chuẩn.

Hàm mật độ xác suất:

\[ f(y) = \frac{1}{2b} e^\frac{-|y-a|}{b} \] Trong đó:

  • a: là tham số vị trí(location) cho thấy mức độ phân tán của dữ liệu so với giá trị trung bình.

  • b: tham số tỷ lệ(scale) thể hiện độ trải của phân phối

6.2.1 Mô phỏng

Thực hiện mô phỏng dãy số có phân phối laplace gồm 10000 quan sát với tham số vị trí(location) là 10 và tham số tỷ lệ (scale) là 10. Gán tên cho dãy số này pplap và sử dụng lênh rlaplace để thực hiện mô phỏng.

pplap<-rlaplace(n = 10000, location = 10, scale = 10)

6.2.2 Đồ thị

plotNormalHistogram(pplap, col = "yellow", prob= TRUE,
                    main = "Histogram of Laplace distribution",xlab = "pplap",
                    length = 1000, linecol="red",lwd=2)

Biểu đồ tần suất của phân phối trên cho thấy dữ liệu tập trung nhiều nhất ở khoảng 0 đến 10

6.2.3 Thống kê mô tả

summary(pplap)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## -65.211   2.988  10.019  10.008  16.791  91.467

Từ kết quả thống kê mô tả cho thấy giá trị nhỏ nhất của dữ liệu là -74.548; giá trị lớn nhất là 98.824; giá trị trung bình là 9.993; 25% dữ liệu nhỏ hơn 3.1713 (giá trị tứ phân vị thứ nhất); 50% dữ liệu nhỏ hơn 9.999 (giá trị trung vị); 75% dữ liệu nhỏ hơn 17.211 (giá trị tứ phân vị thứ ba).

var(pplap)
## [1] 197.1418
sd(pplap)
## [1] 14.04072

Giá trị phương sai là 203.7087. Độ lệch chuẩn là 14.272668 cho thấy mức độ phân tán của dữ liệu so với giá trị trung bình.

skewness(pplap)
## [1] 0.001544085

Hệ số độ lệch là -0.09242198 nằm trong khoảng -3 đến 3 cho thấy phân phối này có hình dạng của phân phối chuẩn

kurtosis(pplap)
## [1] 2.624437

Hệ số độ nhọn là 2.511897 nằm trong khoảng -3 đến 3 cho thấy phân phối này có hình dạng của phân phối chuẩn

6.3 Beta distrbution

Phân phối beta là phân phối xác suất liên tục được tham số hóa bởi hai biến định dạng dương là α, β (tương ứng với tham số shape1 và shape2). Thông thường, hai biến trên chính là lũy thừa của biến ngẫu nhiên X và sẽ quyết định hình dạng của phân phối.

6.3.1 Mô phỏng

Thực hiện mô phỏng ngẫu nhiên dữ liệu có phân phối beta gồm 10000 quan sát với 2 thông số hình dạng (shape1, shape2) là 10; 15. Gán tên cho dữ liệu là ppbe và sử dụng lệnh rbeta để thực hiện mô phỏng.

ppbe<-rbeta(n = 10000, shape1 = 10, shape2 = 15)

6.3.2 Đồ thị

plotNormalHistogram(ppbe, col = "yellow", prob= TRUE,
                    main = "Histogram of Beta distribution",xlab = "ppbe",
                    length = 1000, linecol="red",lwd=2)

Biểu đồ tần suất của phân phối trên cho thấy dữ liệu nằm trong khoảng 0,35 đến 0,45 xuất hiện nhiều nhất.

6.3.3 Thống kê mô tả

summary(ppbe)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.1011  0.3312  0.3958  0.3995  0.4635  0.7827

Từ kết quả thống kê mô tả cho thấy giá trị nhỏ nhất của dữ liệu 0.1005; giá trị lớn nhất là 0,748; giá trị trung bình là 0.3985; 25% dữ liệu nhỏ hơn 0.333424 (giá trị tứ phân vị thứ nhất); 50% dữ liệu nhỏ hơn 0.40002 (giá trị trung vị); 75% dữ liệu nhỏ hơn 0.46508 (giá trị tứ phân vị thứ ba))

var(ppbe)
## [1] 0.009204216
sd(ppbe)
## [1] 0.0959386

Giá trị phương sai là 0.009195596. Độ lệch chuẩn là 0.095893678 cho thấy mức độ đồng đều của dữ liệu so với giá trị trung bình

skewness(ppbe)
## [1] 0.1982225

Hệ số độ lệch là 0.1288513 nằm trong khoảng -3 đến 3 cho thấy phân phối này có hình dạng của phân phối chuẩn

kurtosis(ppbe)
## [1] -0.1355884

Hệ số độ nhọn là -0.117291 nằm trong khoảng -3 đến 3 cho thấy phân phối này có hình dạng của phân phối chuẩn

6.4 Triangle distribution

Phân phối Triangle là một phân phối xác suất liên tục có hình dạng tam giác. Các tham số của phân phối này là:

  • min: giá trị nhỏ nhất

  • max: giá trị lớn nhất

  • mode: giá trị đỉnh (chiều cao của tam giác)

6.4.1 Mô phỏng

Thực hiện mô phỏng dãy số có phân phối Triangle gồm 10000 quan sát với giá trị min là 20, max là 45 và mode là 29 . Gán tên cho dãy số này là pptri và sử dụng hàm rtri để thực hiện mô phỏng.

pptri<-rtri(n = 10000, min = 20, max = 45, mode = 29)

6.4.2 Đồ thị

plotNormalHistogram(pptri, col = "yellow", prob= TRUE,
                    main = "Histogram of Triangle distribution",xlab = "pptri",
                    length = 1000, linecol="red",lwd=2)

Nhìn vào đồ thi tần suất của phân phối trên ta thấy hình dạng của dữ liệu tạo thành hình tam giác với giá trị đỉnh của tam giác xấp xỉ ở mức 30

6.4.3 Thống kê mô tả

summary(pptri)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   20.05   27.43   30.91   31.30   34.93   44.73

Từ kết quả thống kê mô tả cho thấy giá trị nhỏ nhất của dữ liệu là 20,17; giá trị lớn nhất là 44,71; giá trị trung bình là 31,29; 25% dữ liệu nhỏ hơn 27,43 (giá trị tứ phân vị thứ nhất); 50% dữ liệu nhỏ hơn 30,79 (giá trị trung vị); 75% dữ liệu nhỏ hơn 34,99 (giá trị tứ phân vị thứ ba)

var(pptri)
## [1] 26.74783
sd(pptri)
## [1] 5.171831

Giá trị phương sai của dữ liệu là 27,1779. Độ lệch chuẩn là 5.213248 cho thấy mức độ đồng đều của dữ liệu so với giá trị trung bình

skewness(pptri)
## [1] 0.2393666

Hệ số độ lệch là 0,2577298 nhỏ hơn 3 cho thấy phân phối này có hình dạng của một phân phối chuẩn

kurtosis(pptri)
## [1] -0.5882381

Hệ số độ nhọn là -0,6080804 nằm trong khoảng -3, 3 cho thấy phân phối này có hình dạng của một phân phối chuẩn.

6.5 Log-normal distribution

Một biến ngẫu nhiên X được phân phối log-chuẩn khi và chỉ khi logarit của X có phân phối chuẩn. Giá trị của X phải là số dương.Phân phối này thường được ứng dụng trong tài chính để phân tích lợi nhuận.

Phân phối loga chuẩn là một phân phối hai tham số với các tham số μ và σ lần lượt là trung bình (meanlog) và độ lệch chuẩn (sdlog) của logarit tự nhiên X. Trong đó độ lệch chuẩn biểu thị độ phân tán của dữ liệu so với giá trị trung bình của nó.

6.5.1 Mô phỏng

Mô phỏng ngầu nhiên dãy số liệu X có phân phối Log_normal gồm 10000 quan sát với trung bình của logarit tự nhiên X(meanlog) bằng 0 và độ lệch chuẩn của logarit tự nhiên X(sdlog) bằng 1. Gán tên cho dãy số này là ppln và sử dụng hàm rlnorm để thực hiện mô phỏng.

ppln<-rlnorm(n= 10000, meanlog = 0, sdlog = 1)

6.5.2 Đồ thị

plotNormalHistogram(ppln, col = "yellow", prob= TRUE,
                    main = "Histogram of Log-normal distribution",xlab = "ppln",
                    length = 1000, linecol="red",lwd=2)

Nhìn vào biểu đồ tần suất của phân phối trên ta thấy các giá trị nằm trong khoảng từ 0 đến 10 xuất hiện nhiều nhất và đồ thị bị lệch về phía phải

6.5.3 Thống kê mô tả

summary(ppln)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
##  0.02181  0.50101  1.00962  1.66584  1.97509 38.50455

Từ kết quả thống kê mô tả cho thấy giá trị nhỏ nhất của dữ liệu là 0,02544; giá trị lớn nhất là 45,16293; giá trị trung bình là 1,64794; 25% dữ liệu nhỏ hơn 0,50997(tứ phân vị thứ nhất) ;50% dữ liệu nhỏ hơn 0,9842(tứ phân vị thứ 2); 75% dữ liệu nhỏ hơn 1,96927(tứ phân vị thứ 3).

var(ppln)
## [1] 4.44505
sd(ppln)
## [1] 2.108329

Giá trị phương sai của dữ liệu là 4,764351. Độ lệch chuẩn là 2.182739 cho thấy mức độ đồng đều của dữ liệu so với giá trị trung bình

skewness(ppln)
## [1] 4.41112

Hệ số độ lệch (skewness) là 5,316339 lớn hơn 3 và dương cho thấy phân phối bị lệch về phía bên phải

kurtosis(ppln)
## [1] 35.07919

Hệ số độ nhọn (kurt) là 51,57585 lớn hơn 3 và dương cho thấy phân phối có độ nhọn cao