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)
Phân tích mô hình bằng các phương pháp thống kê
Chạy mô hình với các phân phối khác nhau của biến đầu vào
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 đó:
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))
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)))
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))
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))
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))
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))
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
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) \]
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))
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))
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))
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))
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))
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))
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
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))
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))
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))
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))
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))
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))
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
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
Xác định phân phối cho các biến đầu vào và giải thích
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.
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.
Vẽ đồ thị histogram
hist(rm1$KDH)
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
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
Vẽ đồ thị histogram
hist(rm1$DIG)
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
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ũ
Vẽ đồ thị histogram
hist(rm1$DXG)
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
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ũ
Vẽ đồ thị histogram
hist(rm1$VHM)
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
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
Vẽ đồ thị histogram
hist(rm1$NVL)
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
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.
Vẽ biểu đồ histogram
hist(rm1$VIC)
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
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
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.
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%.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}} \]
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
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
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)
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.
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
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
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)
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
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
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.
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)
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.
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
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)
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)
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
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.
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ó.
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)
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
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