library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.1
## Warning: package 'ggplot2' was built under R version 4.3.1
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.2 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.2 ✔ tibble 3.2.1
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ purrr 1.0.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(readxl)
library(extraDistr)
##
## Attaching package: 'extraDistr'
##
## The following object is masked from 'package:purrr':
##
## rdunif
library(psych)
## Warning: package 'psych' was built under R version 4.3.1
##
## Attaching package: 'psych'
##
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
library(rcompanion)
## Warning: package 'rcompanion' was built under R version 4.3.1
##
## Attaching package: 'rcompanion'
##
## The following object is masked from 'package:psych':
##
## phi
library(data.table)
##
## Attaching package: 'data.table'
##
## The following objects are masked from 'package:lubridate':
##
## hour, isoweek, mday, minute, month, quarter, second, wday, week,
## yday, year
##
## The following objects are masked from 'package:dplyr':
##
## between, first, last
##
## The following object is masked from 'package:purrr':
##
## transpose
DT <- read_excel("C:/HK2-2023/MPNN/Data.xlsx")
Chạy mô hình với các phân phối khác nhau của biến đầu vào.
Phân tích mô hình bằng các phương pháp thống kê.
Mô hình hồi quy được xây dựng như sau:
\[ VNI = \beta_0 + \beta_1GP + \beta_2 OP + \beta_3 EX + \beta_4 TP + \beta_5 HNX30 + \beta_6 DJIA \]
describe(DT)
## Warning in FUN(newX[, i], ...): no non-missing arguments to min; returning Inf
## Warning in FUN(newX[, i], ...): no non-missing arguments to max; returning -Inf
Biểu đồ về dữ liệu gốc của giá vàng
plot(DT$GP, type = "l",col = "blue", xlab = "Số ngày", ylab = "Giá vàng")
Mô phỏng giá vàng
set.seed(3)
n <- 1000
gp <- runif(n, min = -IQR(DT$GP)/2, max = IQR(DT$GP)/2)
gp[1] <- median(DT$GP)
cs <- numeric(n)
cs <- cumsum(gp)
t <- seq(from = 0, to = n-1)
d <- as.data.frame(cbind(t,gp,cs))
ggplot(d, aes(t,cs)) + geom_line(color = 'red',)+theme_classic()
set.seed(3)
gp.ret = DT$GP/lag(DT$GP)
gp.ret = as.numeric(gp.ret)
gp.ret[1] = 1
ndays = 1000
paths = replicate(n = 100, expr = sample(gp.ret, n, replace = T))
paths = apply(paths, 2, cumprod)
paths = data.table(paths)
paths$days = 1:nrow(paths)
paths = melt(paths, id.vars = "days")
ggplot(paths, aes(x=days, y = (value - 1)*100, col = variable)) + geom_line() +
theme(legend.position = "none") + xlab("Số ngày") + ylab("Giá trị")
Biểu đồ về dữ liệu gốc của giá dầu thô
plot(DT$OP, type = "l",col = "blue", xlab = "Số ngày", ylab = "Giá dầu thô")
Mô phỏng giá dầu thô
set.seed(49)
n <- 1000
op <- runif(n, min = -IQR(DT$OP)/2, max = IQR(DT$OP)/2)
op[1] <- median(DT$OP)
cs <- numeric(n)
cs <- cumsum(op)
t <- seq(from = 0, to = n-1)
d <- as.data.frame(cbind(t,op,cs))
ggplot(d, aes(t,cs)) + geom_line(color = 'red',)+theme_classic()
set.seed(49)
op.ret = DT$OP/lag(DT$OP)
op.ret = as.numeric(op.ret)
op.ret[1] = 1
ndays = 1000
paths = replicate(n = 100, expr = sample(op.ret, n, replace = T))
paths = apply(paths, 2, cumprod)
paths = data.table(paths)
paths$days = 1:nrow(paths)
paths = melt(paths, id.vars = "days")
ggplot(paths, aes(x=days, y = (value - 1)*100, col = variable)) + geom_line() +
theme(legend.position = "none") + xlab("Số ngày") + ylab("Giá trị")
Biểu đồ về dữ liệu gốc của tỷ giá USD/VND
plot(DT$EX, type = "l",col = "blue", xlab = "Số ngày", ylab = "Tỷ giá USD/VND")
Mô phỏng tỷ giá USD/VND
set.seed(9)
n <- 1000
ex <- runif(n, min = -IQR(DT$EX)/2, max = IQR(DT$EX)/2)
ex[1] <- median(DT$EX)
cs <- numeric(n)
cs <- cumsum(ex)
t <- seq(from = 0, to = n-1)
d <- as.data.frame(cbind(t,ex,cs))
ggplot(d, aes(t,cs)) + geom_line(color = 'red',)+theme_classic()
set.seed(9)
ex.ret = DT$EX/lag(DT$EX)
ex.ret = as.numeric(ex.ret)
ex.ret[1] = 1
ndays = 1000
paths = replicate(n = 100, expr = sample(ex.ret, n, replace = T))
paths = apply(paths, 2, cumprod)
paths = data.table(paths)
paths$days = 1:nrow(paths)
paths = melt(paths, id.vars = "days")
ggplot(paths, aes(x=days, y = (value - 1)*100, col = variable)) + geom_line() +
theme(legend.position = "none") + xlab("Số ngày") + ylab("Giá trị")
Biểu đồ về dữ liệu gốc của lợi suất trái phiếu 10 năm Việt Nam
plot(DT$TP, type = "l",col = "blue", xlab = "Số ngày", ylab = "Lợi suất trái phiếu 10 năm Việt Nam")
Mô phỏng lợi suất trái phiếu 10 năm Việt Nam
set.seed(50)
n <- 1000
tp <- runif(n, min = -IQR(DT$TP)/2, max = IQR(DT$TP)/2)
tp[1] <- median(DT$TP)
cs <- numeric(n)
cs <- cumsum(tp)
t <- seq(from = 0, to = n-1)
d <- as.data.frame(cbind(t,tp,cs))
ggplot(d, aes(t,cs)) + geom_line(color = 'red',)+theme_classic()
set.seed(50)
tp.ret = DT$TP/lag(DT$TP)
tp.ret = as.numeric(tp.ret)
tp.ret[1] = 1
ndays = 1000
paths = replicate(n = 100, expr = sample(tp.ret, n, replace = T))
paths = apply(paths, 2, cumprod)
paths = data.table(paths)
paths$days = 1:nrow(paths)
paths = melt(paths, id.vars = "days")
ggplot(paths, aes(x=days, y = (value - 1)*100, col = variable)) + geom_line() +
theme(legend.position = "none") + xlab("Số ngày") + ylab("Giá trị)")
Biểu đồ về dữ liệu gốc của chỉ số HNX30
plot(DT$HNX30, type = "l",col = "blue", xlab = "Số ngày", ylab = "Chỉ số HNX30")
Mô phỏng chỉ số HNX30
set.seed(16)
n <- 1000
hnx30 <- runif(n, min = -IQR(DT$HNX30)/2, max = IQR(DT$HNX30)/2)
hnx30[1] <- median(DT$HNX30)
cs <- numeric(n)
cs <- cumsum(hnx30)
t <- seq(from = 0, to = n-1)
d <- as.data.frame(cbind(t,hnx30,cs))
ggplot(d, aes(t,cs)) + geom_line(color = 'red',)+theme_classic()
set.seed(16)
hnx30.ret = DT$HNX30/lag(DT$HNX30)
hnx30.ret = as.numeric(hnx30.ret)
hnx30.ret[1] = 1
ndays = 1000
paths = replicate(n = 100, expr = sample(hnx30.ret, n, replace = T))
paths = apply(paths, 2, cumprod)
paths = data.table(paths)
paths$days = 1:nrow(paths)
paths = melt(paths, id.vars = "days")
ggplot(paths, aes(x=days, y = (value - 1)*100, col = variable)) + geom_line() +
theme(legend.position = "none") + xlab("Số ngày") + ylab("Giá trị")
Biểu đồ về dữ liệu gốc của chỉ số bình quân công nghiệp Dow Jones
plot(DT$DJIA, type = "l",col = "blue", xlab = "Số ngày", ylab = "Chỉ số bình quân công nghiệp Dow Jones")
Mô phỏng chỉ số bình quân công nghiệp Dow Jones
set.seed(15)
n <- 1000
djia <- runif(n, min = -IQR(DT$DJIA)/2, max = IQR(DT$DJIA)/2)
djia[1] <- median(DT$DJIA)
cs <- numeric(n)
cs <- cumsum(djia)
t <- seq(from = 0, to = n-1)
d <- as.data.frame(cbind(t,djia,cs))
ggplot(d, aes(t,cs)) + geom_line(color = 'red',)+theme_classic()
set.seed(15)
djia.ret = DT$DJIA/lag(DT$DJIA)
djia.ret = as.numeric(djia.ret)
djia.ret[1] = 1
ndays = 1000
paths = replicate(n = 100, expr = sample(djia.ret, n, replace = T))
paths = apply(paths, 2, cumprod)
paths = data.table(paths)
paths$days = 1:nrow(paths)
paths = melt(paths, id.vars = "days")
ggplot(paths, aes(x=days, y = (value - 1)*100, col = variable)) + geom_line() +
theme(legend.position = "none") + xlab("Số ngày") + ylab("Giá trị")
## VNI = 6,276e+02 - 3,559e-01*GP + 1,754e+00*OP + 1,658e-02*EX - 7,174e+01*TP + 5,371e-01*HNX30 + 2,010e-02*DJIA
new <- data.frame(gp,op,ex,tp,hnx30,djia)
vni <- 6.276e+02 - 3.559e-01*gp + 1.754e+00*op + 1.658e-02*ex - 7.174e+01*tp + 5.371e-01*hnx30 + 2.010e-02*djia
plotNormalHistogram(vni, col="blue", prob = TRUE, main = 'Mô phỏng cho VNI', xlab = 'VNI', linecol="red", lwd=3 )
summary(vni)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 345.8 551.0 636.5 633.8 707.9 944.5
sd(vni)
## [1] 110.6305
Từ kết quả mô phỏng được, ta thấy chỉ số VNI có:
Điểm trung bình là 633,8 điểm.
Điểm thấp nhất là 345,8 điểm.
Điểm cao nhất là 944,5 điểm.
Giá trị dưới 551 điểm chiếm 25%.
Giá trị dưới 636,5 điểm chiếm 50%.
Giá trị dưới 707,9 điểm chiếm 75%.
Độ lệch chuẩn là 110,6305 điểm.
Với dữ liệu mô phỏng được, đặt quy ước về giá trị của biến VNI như sau: Điểm thấp (300 - 500), Điểm vừa (500 - 700) và Điểm cao (700 - 1000).
VNI <- cut(vni, breaks = c(300,500,700,1000), labels = c("Điểm thấp", "Điểm vừa","Điểm cao"))
table(VNI)
## VNI
## Điểm thấp Điểm vừa Điểm cao
## 119 610 271
table(VNI)/sum(table(VNI))
## VNI
## Điểm thấp Điểm vừa Điểm cao
## 0.119 0.610 0.271
ggplot(,aes(VNI))+geom_bar(color = "red",fill = "pink")+ geom_text(aes(label = scales::percent(after_stat(count/sum(count)), accuracy = 0.01)), stat = 'count', vjust = - .5)+xlab("Chỉ số VNI")+theme_classic()
Như vậy theo kết quả thống kê ta thấy được:
Có 119 phiên chỉ số VNI đạt điểm thấp, chiếm 11,9%.
Có 610 phiên chỉ số VNI đạt điểm vừa, chiếm 61%.
Có 271 phiên chỉ số VNI đạt điểm cao, chiếm 27,1%.
Giả sử: Đầu tư vào chỉ số VNI ngày 03/07/2023 với số điểm ngày này là 1125,5 điểm. Nếu điểm tăng hơn 20% (1350,6 điểm) là lời và giảm hơn 20% (900,4 điểm) là lỗ, trong khoảng \(\pm20\%\) là hòa vốn (lời lỗ không đáng kể).
Xác suất lỗ
lo <- vni[vni < 900.4]
length(lo)/length(vni)
## [1] 0.995
Xác suất hòa vốn
hoa <- vni[vni <= 1350.6 & vni >= 900.4]
length(hoa)/length(vni)
## [1] 0.005
Xác suất lời
loi <- vni[vni > 1350.6]
length(loi)/length(vni)
## [1] 0
Như vậy nếu đầu tư vào ngày 03/07/2023 thì có đến 99,5% sẽ bị lỗ và chỉ có 5% là hòa vốn. Nhà đầu tư không nên đầu tư vào giai đoạn này. Tuy nhiên quá trình mô phỏng dữ liệu cũng chưa chắc chắn đúng hoàn toàn, nhà đầu tư nên xem xét kỹ các yếu tố khác để đưa ra quyết định hợp lý.
Xây dựng mô hình cho đối tượng cần mô phỏng và giải thích mô hình.
Mô hình hồi quy đánh giá sự tác động của các yếu tố vĩ mô đến thị trường chứng khoán được xây dựng như sau:
\[ VNI = \beta_0 + \beta_1GP + \beta_2 OP + \beta_3 EX + \beta_4 TP + \beta_5 HNX30 + \beta_6 DJIA \]
model <- lm(DT$VNI~DT$GP+DT$OP+DT$EX+DT$TP+DT$HNX30+DT$DJIA)
summary(model)
##
## Call:
## lm(formula = DT$VNI ~ DT$GP + DT$OP + DT$EX + DT$TP + DT$HNX30 +
## DT$DJIA)
##
## Residuals:
## Min 1Q Median 3Q Max
## -166.389 -33.024 -5.446 28.144 235.027
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.276e+02 6.952e+01 9.028 < 2e-16 ***
## DT$GP -3.559e-01 9.097e-03 -39.126 < 2e-16 ***
## DT$OP 1.754e+00 1.134e-01 15.465 < 2e-16 ***
## DT$EX 1.658e-02 3.401e-03 4.874 1.18e-06 ***
## DT$TP -7.174e+01 1.861e+00 -38.546 < 2e-16 ***
## DT$HNX30 5.371e-01 1.654e-02 32.468 < 2e-16 ***
## DT$DJIA 2.070e-02 7.931e-04 26.099 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 51.74 on 2047 degrees of freedom
## Multiple R-squared: 0.9603, Adjusted R-squared: 0.9602
## F-statistic: 8263 on 6 and 2047 DF, p-value: < 2.2e-16
Từ kết quả ta có phương trình như sau:
VNI = 6,276e+02 - 3,559e-01GP + 1,754e+00OP + 1,658e-02EX - 7,174e+01TP + 5,371e-01HNX30 + 2,010e-02DJIA
Từ kết quả chạy mô hình, ta thấy Multiple R-squared (\(R^2\)) = 0,9603 gần bằng 1 nên có thể kết luận mô hình trên là tốt và có ý nghĩa. Các biến độc lập GP, OP, EX, TP, HNX30, DJIA đều có ý nghĩa ở mức 5%, nghĩa là các biến độc lập này đều có tác động đến biến phụ thuộc VNI.
Khi các yếu tố độc lập bằng 0 thì VNI có giá trị trung bình là 6,276e+02 điểm.
Khi các yếu tố khác không đổi, giá vàng tăng lên 1 USD/ounce thì chỉ số VNI giảm 3,559e-01 điểm.
Khi các yếu tố khác không đổi, giá dầu thô tăng lên 1 USD/thùng thì chỉ số VNI tăng 1,754e+00 điểm.
Khi các yếu tố khác không đổi, tỷ giá USD/VND tăng lên 1 thì chỉ số VNI tăng 1,658e-02 điểm.
Khi các yếu tố khác không đổi, lợi suất trái phiếu 10 năm Việt Nam tăng lên 1% thì chỉ số VNI giảm 7,174e+01 điểm.
Khi các yếu tố khác không đổi, chỉ số HNX30 tăng lên 1 điểm thì chỉ số VNI tăng 5,371e-01 điểm.
Khi các yếu tố khác không đổi, chỉ số bình quân công nghiệp Dow Jones tăng lên 1 USD thì chỉ số VNI tăng 2,010e-02 điểm.
Xác định phân phối cho các biến (ngẫu nhiên) đầu vào, giải thích.
Dữ liệu nghiên cứu được thu thập trong khoảng thời gian từ 5/1/2015 đến 30/6/2023 từ trang web investing.com bao gồm 2054 quan sát.
DT <- read_excel("C:/HK2-2023/MPNN/Data.xlsx")
DT
summary(DT$VNI)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 521.9 702.3 953.4 934.6 1075.9 1528.6
sd(DT$VNI)
## [1] 259.4404
Theo thống kê mô tả, biến VNI có:
Điểm thấp nhất là 521,9 điểm.
Điểm cao nhất là 1528,6 điểm.
Điểm trung bình là 934,6 điểm.
Độ lệch chuẩn là 259,4404 điểm.
Đồ thị phân phối biến VNI:
hist(DT$VNI)
Kiểm định phân phối chuẩn:
Giả thuyết/Đối thuyết:
\(H_0\): Biến VNI tuân theo phân phối chuẩn
\(H_1\): Biến VNI không tuân theo phân phối chuẩn
Xét thống kê:
shapiro.test(DT$VNI)
##
## Shapiro-Wilk normality test
##
## data: DT$VNI
## W = 0.95713, p-value < 2.2e-16
Kết quả kiểm định cho thấy p_value < 0,05 nên ta bác bỏ \(H_0\). Vậy biến VNI không tuân theo phân phối chuẩn.
Kiểm định phân phối Lognomal
Giả thuyết/Đối thuyết:
\(H_0\): Biến VNI tuân theo phân phối Lognomal
\(H_1\): Biến VNI không tuân theo phân phối Lognomal
Xét thống kê:
ks.test(DT$VNI, "plnorm", meanlog = mean(log(DT$VNI)), sdlog = sd(log(DT$VNI)))
## Warning in ks.test.default(DT$VNI, "plnorm", meanlog = mean(log(DT$VNI)), :
## ties should not be present for the Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: DT$VNI
## D = 0.093645, p-value = 4.441e-16
## alternative hypothesis: two-sided
Kết quả kiểm định cho thấy p-value = 4,441e-16 < 0,05 nên ta bác bỏ \(H_0\). Vậy biến VNI không tuân theo phân phối Lognomal.
Kiểm định phân phối t
Giả thuyết/Đối thuyết:
\(H_0\): Biến VNI tuân theo phân phối t
\(H_1\): Biến VNI không tuân theo phân phối t
Xét thống kê:
t.test(DT$VNI)
##
## One Sample t-test
##
## data: DT$VNI
## t = 163.26, df = 2053, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## 923.3428 945.7957
## sample estimates:
## mean of x
## 934.5693
Kết quả kiểm định cho thấy p-value = 2,2e-16 < 0,05 nên ta bác bỏ \(H_0\). Vậy biến VNI không tuân theo phân phối t.
summary(DT$GP)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1052 1246 1339 1489 1786 2064
sd(DT$GP)
## [1] 287.1518
Theo thống kê mô tả, biến GP có:
Giá vàng thấp nhất là 1052 USD/ounce.
Giá vàng cao nhất là 2064 USD/ounce.
Giá vàng trung bình là 1489 USD/ounce.
Độ lệch chuẩn là 287,1518 USD/ounce.
Đồ thị phân phối biến GP:
hist(DT$GP)
Kiểm định phân phối chuẩn:
Giả thuyết/Đối thuyết:
\(H_0\): Biến GP tuân theo phân phối chuẩn
\(H_1\): Biến GP không tuân theo phân phối chuẩn
Xét thống kê:
shapiro.test(DT$GP)
##
## Shapiro-Wilk normality test
##
## data: DT$GP
## W = 0.88442, p-value < 2.2e-16
Kết quả kiểm định cho thấy p_value < 0,05 nên ta bác bỏ \(H_0\). Vậy biến GP không tuân theo phân phối chuẩn.
Kiểm định phân phối Lognomal
Giả thuyết/Đối thuyết:
\(H_0\): Biến GP tuân theo phân phối Lognomal
\(H_1\): Biến GP không tuân theo phân phối Lognomal
Xét thống kê:
ks.test(DT$GP, "plnorm", meanlog = mean(log(DT$GP)), sdlog = sd(log(DT$GP)))
## Warning in ks.test.default(DT$GP, "plnorm", meanlog = mean(log(DT$GP)), : ties
## should not be present for the Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: DT$GP
## D = 0.18229, p-value < 2.2e-16
## alternative hypothesis: two-sided
Kết quả kiểm định cho thấy p-value = 2,2e-16 < 0,05 nên ta bác bỏ \(H_0\). Vậy biến GP không tuân theo phân phối Lognomal.
Kiểm định phân phối t
Giả thuyết/Đối thuyết:
\(H_0\): Biến GP tuân theo phân phối t
\(H_1\): Biến GP không tuân theo phân phối t
Xét thống kê:
t.test(DT$GP)
##
## One Sample t-test
##
## data: DT$GP
## t = 235.06, df = 2053, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## 1476.900 1501.751
## sample estimates:
## mean of x
## 1489.325
Kết quả kiểm định cho thấy p-value = 2,2e-16 < 0,05 nên ta bác bỏ \(H_0\). Vậy biến GP không tuân theo phân phối t.
summary(DT$OP)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 7.79 46.95 56.05 58.42 69.52 126.47
sd(DT$OP)
## [1] 19.75852
Theo thống kê mô tả, biến OP có:
Giá dầu thô thấp nhất là 7,79 USD/thùng.
Giá dầu thô cao nhất là 126,47 USD/thùng.
Giá dầu thô trung bình là 58,42 USD/thùng.
Độ lệch chuẩn là 19,75852 USD/thùng.
Đồ thị phân phối biến OP:
hist(DT$OP)
Kiểm định phân phối chuẩn:
Giả thuyết/Đối thuyết:
\(H_0\): Biến OP tuân theo phân phối chuẩn
\(H_1\): Biến OP không tuân theo phân phối chuẩn
Xét thống kê:
shapiro.test(DT$OP)
##
## Shapiro-Wilk normality test
##
## data: DT$OP
## W = 0.97153, p-value < 2.2e-16
Kết quả kiểm định cho thấy p_value < 0,05 nên ta bác bỏ \(H_0\). Vậy biến OP không tuân theo phân phối chuẩn.
Kiểm định phân phối Lognomal
Giả thuyết/Đối thuyết:
\(H_0\): Biến OP tuân theo phân phối Lognomal
\(H_1\): Biến OP không tuân theo phân phối Lognomal
Xét thống kê:
ks.test(DT$OP, "plnorm", meanlog = mean(log(DT$OP)), sdlog = sd(log(DT$OP)))
## Warning in ks.test.default(DT$OP, "plnorm", meanlog = mean(log(DT$OP)), : ties
## should not be present for the Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: DT$OP
## D = 0.13412, p-value < 2.2e-16
## alternative hypothesis: two-sided
Kết quả kiểm định cho thấy p-value = 2,2e-16 < 0,05 nên ta bác bỏ \(H_0\). Vậy biến OP không tuân theo phân phối Lognomal.
Kiểm định phân phối t
Giả thuyết/Đối thuyết:
\(H_0\): Biến OP tuân theo phân phối t
\(H_1\): Biến OP không tuân theo phân phối t
Xét thống kê:
t.test(DT$OP)
##
## One Sample t-test
##
## data: DT$OP
## t = 134.01, df = 2053, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## 57.56732 59.27729
## sample estimates:
## mean of x
## 58.4223
Kết quả kiểm định cho thấy p-value = 2,2e-16 < 0,05 nên ta bác bỏ \(H_0\). Vậy biến OP không tuân theo phân phối t.
summary(DT$EX)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 21165 22676 22965 22899 23212 24871
sd(DT$EX)
## [1] 558.6198
Theo thống kê mô tả, biến EX có:
Tỷ giá USD/VND thấp nhất là 21165.
Tỷ giá USD/VND cao nhất là 24871.
Tỷ giá USD/VND trung bình là 22899.
Độ lệch chuẩn là 558,6198.
Đồ thị phân phối biến EX:
hist(DT$EX)
Kiểm định phân phối chuẩn:
Giả thuyết/Đối thuyết:
\(H_0\): Biến EX tuân theo phân phối chuẩn
\(H_1\): Biến EX không tuân theo phân phối chuẩn
Xét thống kê:
shapiro.test(DT$EX)
##
## Shapiro-Wilk normality test
##
## data: DT$EX
## W = 0.94329, p-value < 2.2e-16
Kết quả kiểm định cho thấy p_value < 0,05 nên ta bác bỏ \(H_0\). Vậy biến EX không tuân theo phân phối chuẩn.
Kiểm định phân phối Lognomal
Giả thuyết/Đối thuyết:
\(H_0\): Biến EX tuân theo phân phối Lognomal
\(H_1\): Biến EX không tuân theo phân phối Lognomal
Xét thống kê:
ks.test(DT$EX, "plnorm", meanlog = mean(log(DT$EX)), sdlog = sd(log(DT$EX)))
## Warning in ks.test.default(DT$EX, "plnorm", meanlog = mean(log(DT$EX)), : ties
## should not be present for the Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: DT$EX
## D = 0.10134, p-value < 2.2e-16
## alternative hypothesis: two-sided
Kết quả kiểm định cho thấy p-value = 2,2e-16 < 0,05 nên ta bác bỏ \(H_0\). Vậy biến EX không tuân theo phân phối Lognomal.
Kiểm định phân phối t
Giả thuyết/Đối thuyết:
\(H_0\): Biến EX tuân theo phân phối t
\(H_1\): Biến EX không tuân theo phân phối t
Xét thống kê:
t.test(DT$EX)
##
## One Sample t-test
##
## data: DT$EX
## t = 1857.8, df = 2053, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## 22874.61 22922.95
## sample estimates:
## mean of x
## 22898.78
Kết quả kiểm định cho thấy p-value = 2,2e-16 < 0,05 nên ta bác bỏ \(H_0\). Vậy biến EX không tuân theo phân phối t.
summary(DT$TP)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.038 3.081 4.741 4.571 5.896 7.157
sd(DT$TP)
## [1] 1.626151
Theo thống kê mô tả, biến TP có:
Trái phiếu 10 năm Việt Nam có lợi suất thấp nhất là 2,038%.
Trái phiếu 10 năm Việt Nam có lợi suất cao nhất là 7,157%.
Trái phiếu 10 năm Việt Nam có lợi suất trung bình là 4,571%.
Độ lệch chuẩn là 1,626151%.
Đồ thị phân phối biến TP:
hist(DT$TP)
Kiểm định phân phối chuẩn:
Giả thuyết/Đối thuyết:
\(H_0\): Biến TP tuân theo phân phối chuẩn
\(H_1\): Biến TP không tuân theo phân phối chuẩn
Xét thống kê:
shapiro.test(DT$TP)
##
## Shapiro-Wilk normality test
##
## data: DT$TP
## W = 0.93249, p-value < 2.2e-16
Kết quả kiểm định cho thấy p_value < 0,05 nên ta bác bỏ \(H_0\). Vậy biến TP không tuân theo phân phối chuẩn.
Kiểm định phân phối Lognomal
Giả thuyết/Đối thuyết:
\(H_0\): Biến TP tuân theo phân phối Lognomal
\(H_1\): Biến TP không tuân theo phân phối Lognomal
Xét thống kê:
ks.test(DT$TP, "plnorm", meanlog = mean(log(DT$TP)), sdlog = sd(log(DT$TP)))
## Warning in ks.test.default(DT$TP, "plnorm", meanlog = mean(log(DT$TP)), : ties
## should not be present for the Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: DT$TP
## D = 0.11973, p-value < 2.2e-16
## alternative hypothesis: two-sided
Kết quả kiểm định cho thấy p-value = 2,2e-16 < 0,05 nên ta bác bỏ \(H_0\). Vậy biến TP không tuân theo phân phối Lognomal.
Kiểm định phân phối t
Giả thuyết/Đối thuyết:
\(H_0\): Biến TP tuân theo phân phối t
\(H_1\): Biến TP không tuân theo phân phối t
Xét thống kê:
t.test(DT$TP)
##
## One Sample t-test
##
## data: DT$TP
## t = 127.4, df = 2053, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## 4.500877 4.641609
## sample estimates:
## mean of x
## 4.571243
Kết quả kiểm định cho thấy p-value = 2,2e-16 < 0,05 nên ta bác bỏ \(H_0\). Vậy biến TP không tuân theo phân phối t.
summary(DT$HNX30)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 125.1 166.3 196.2 278.6 357.7 874.0
sd(DT$HNX30)
## [1] 170.1238
Theo thống kê mô tả, biến HNX30 có:
Giá trị nhỏ nhất là 125,1 điểM.
Giá trị lớn nhất là 874 điểm.
Giá trị trung vị là 196,2 điểm.
Giá trị trung bình là 278,6 điểm.
Độ lệch chuẩn là 170,1238 điểm.
Đồ thị phân phối biến HNX30:
hist(DT$HNX30)
Kiểm định phân phối chuẩn:
Giả thuyết/Đối thuyết:
\(H_0\): Biến HNX30 tuân theo phân phối chuẩn
\(H_1\): Biến HNX30 không tuân theo phân phối chuẩn
Xét thống kê:
shapiro.test(DT$HNX30)
##
## Shapiro-Wilk normality test
##
## data: DT$HNX30
## W = 0.75581, p-value < 2.2e-16
Kết quả kiểm định cho thấy p_value < 0,05 nên ta bác bỏ \(H_0\). Vậy biến HNX30 không tuân theo phân phối chuẩn.
Kiểm định phân phối Lognomal
Giả thuyết/Đối thuyết:
\(H_0\): Biến HNX30 tuân theo phân phối Lognomal
\(H_1\): Biến HNX30 không tuân theo phân phối Lognomal
Xét thống kê:
ks.test(DT$HNX30, "plnorm", meanlog = mean(log(DT$HNX30)), sdlog = sd(log(DT$HNX30)))
## Warning in ks.test.default(DT$HNX30, "plnorm", meanlog = mean(log(DT$HNX30)), :
## ties should not be present for the Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: DT$HNX30
## D = 0.18972, p-value < 2.2e-16
## alternative hypothesis: two-sided
Kết quả kiểm định cho thấy p-value = 2,2e-16 < 0,05 nên ta bác bỏ \(H_0\). Vậy biến HNX30 không tuân theo phân phối Lognomal.
Kiểm định phân phối t
Giả thuyết/Đối thuyết:
\(H_0\): Biến HNX30 tuân theo phân phối t
\(H_1\): Biến HNX30 không tuân theo phân phối t
Xét thống kê:
t.test(DT$HNX30)
##
## One Sample t-test
##
## data: DT$HNX30
## t = 74.216, df = 2053, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## 271.2273 285.9504
## sample estimates:
## mean of x
## 278.5888
Kết quả kiểm định cho thấy p-value = 2,2e-16 < 0,05 nên ta bác bỏ \(H_0\). Vậy biến HNX30 không tuân theo phân phối t.
summary(DT$DJIA)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 15666 20422 25691 25768 31385 36800
sd(DT$DJIA)
## [1] 6036.438
Theo thống kê mô tả, biến DJIA có:
Chỉ số trung bình công nghiệp thấp nhất là 15666 USD.
Chỉ số trung bình công nghiệp cao nhất là 36800 USD.
Chỉ số trung bình công nghiệp trung bình là 25768 USD.
Độ lệch chuẩn là 6036,438 USD.
Đồ thị phân phối biến DJIA:
hist(DT$DJIA)
Kiểm định phân phối chuẩn:
Giả thuyết/Đối thuyết:
\(H_0\): Biến DJIA tuân theo phân phối chuẩn
\(H_1\): Biến DJIA không tuân theo phân phối chuẩn
Xét thống kê:
shapiro.test(DT$DJIA)
##
## Shapiro-Wilk normality test
##
## data: DT$DJIA
## W = 0.93649, p-value < 2.2e-16
Kết quả kiểm định cho thấy p_value < 0,05 nên ta bác bỏ \(H_0\). Vậy biến DJIA không tuân theo phân phối chuẩn.
Kiểm định phân phối Lognomal
Giả thuyết/Đối thuyết:
\(H_0\): Biến DJIA tuân theo phân phối Lognomal
\(H_1\): Biến DJIA không tuân theo phân phối Lognomal
Xét thống kê:
ks.test(DT$DJIA, "plnorm", meanlog = mean(log(DT$DJIA)), sdlog = sd(log(DT$DJIA)))
## Warning in ks.test.default(DT$DJIA, "plnorm", meanlog = mean(log(DT$DJIA)), :
## ties should not be present for the Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: DT$DJIA
## D = 0.10965, p-value < 2.2e-16
## alternative hypothesis: two-sided
Kết quả kiểm định cho thấy p-value = 2,2e-16 < 0,05 nên ta bác bỏ \(H_0\). Vậy biến DJIA không tuân theo phân phối Lognomal.
Kiểm định phân phối t
Giả thuyết/Đối thuyết:
\(H_0\): Biến DJIA tuân theo phân phối t
\(H_1\): Biến DJIA không tuân theo phân phối t
Xét thống kê:
t.test(DT$DJIA)
##
## One Sample t-test
##
## data: DT$DJIA
## t = 193.46, df = 2053, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## 25506.79 26029.20
## sample estimates:
## mean of x
## 25767.99
Kết quả kiểm định cho thấy p-value = 2,2e-16 < 0,05 nên ta bác bỏ \(H_0\). Vậy biến DJIA không tuân theo phân phối t.
Chọn và giải thích về đối tượng (vấn đề) cần mô phỏng (có ít nhất 6 biến ngẫu nhiên đầu vào)
Mô phỏng sự biến động của chỉ số VN-Index trên thị trường chứng khoán.
Thị trường chứng khoán là một thị trường mà ở đó người ta mua bán, chuyển nhượng, trao đổi chứng khoán nhằm mục đích kiếm lời. VN-Index là chỉ số đo lường xu hướng biến động giá cổ phiếu được niêm yết trên Sàn Giao dịch chứng khoán Hồ Chí Minh (HoSE). Chỉ số này so sánh giá trị vốn hóa vào ngày cơ sở (28/7/2000 với 100 điểm) và giá trị của thị trường hiện tại.
Tình hình kinh tế vĩ mô tác động tới toàn bộ các lĩnh vực và ngành nghề tồn tại trong nền kinh tế, trong đó có thị trường chứng khoán. Việc nắm được các diễn biến của tình hình kinh tế vĩ mô là điều vô cùng cần thiết với các nhà đầu tư tài chính, ngay cả đầu tư trong ngắn hạn. Điều này giúp các nhà đầu tư biết được mình đang trong giai đoạn nào của chu kỳ kinh tế tăng hay giảm, triển vọng sắp tới ra sao, để xây dựng được vị thế trong kế hoạch đầu tư phù hợp hơn.
Bằng việc mô phỏng sự biến động của chỉ số VN-Index có thể xem xét thực trạng hiện tại của thị trường chứng khoán Việt Nam khi bị tác động bởi các yếu tố kinh tế vĩ mô.
Chỉ số giá cổ phiếu (VNI) hay còn được gọi là chỉ số chứng khoán là một công cụ phân tích thị trường tài chính dùng để đo lường và phản ánh sự biến động của giá cổ phiếu trong một nhóm công ty cụ thể. Chỉ số này được tính dựa trên một mẫu các cổ phiếu đại diện cho thị trường chứng khoán, và nó thường được sử dụng để đánh giá sự phát triển và biến động của thị trường chứng khoán trong tổng thể. Tại Việt Nam, VN-Index là chỉ số đại diện cho Trung tâm Giao dịch Chứng khoán TP. Hồ Chí Minh (HoSE) từ khi thị trường chứng khoán đi vào hoạt động, đại diện cho tất cả cổ phiếu được niêm yết và giao dịch trên HoSE.
Chỉ số VN-Index được tính theo công thức:
\[ VNI = \frac{\sum{P_1 Q_1}}{\sum{P_0 Q_0}} *100 \] Trong đó:
Giá vàng giao ngay Đô la Mỹ XAU/USD (GP): Là cặp báo giá của vàng theo đồng đô la Mỹ trên thị trường Forex. Hiểu đơn giản cặp báo giá XAU USD được sử dụng để người giao dịch biết rằng cần bao nhiêu đô la Mỹ (đồng tiền định giá) để mua một Ounce vàng (đồng tiền cơ sở).
Giá dầu thô WTI giao ngay Đô la Mỹ WTI/USD (OP): WTI - West Texas Intermediate, được khai thác tại Texas, Mỹ. Dầu WTI là tài sản cơ bản cho các hợp đồng tương lai trên Sàn giao dịch hàng hóa New York (NYMEX).
Tỷ giá USD/VND (EX): Là tỷ giá giữa Đô la Mỹ và Việt Nam đồng.
Lợi suất trái phiếu 10 năm Việt Nam (TP): Là mức lợi nhuận mà một nhà đầu tư nhận được khi nắm giữ trái phiếu đến ngày đáo hạn, và được giám sát chặt chẽ như một chỉ số về tình hình nợ của chính phủ.
Chỉ số HNX30 (HNX30): HNX30 là chỉ số giá của 30 mã cổ phiếu có tính thanh khoản tốt nhất trên sàn HNX. Chỉ số này được lựa chọn dựa trên tính thanh khoản, điểm cơ sở là 100, ngày cơ sở được lấy ngày 3/1/2012. Chỉ số HNX30 sẽ áp dụng cách tính giá trị vốn hóa thị trường có thể tự do chuyển nhượng.
Chỉ số bình quân công nghiệp Dow Jones (DJIA): Là một trong các chỉ số quan trọng nhất của thị trường chứng khoán Hoa Kỳ. Nó không chỉ phản ánh được tình hình tổng quan của nền kinh tế, mà còn là khoản đầu tư được nhiều nhà giao dịch chỉ số quan tâm. Chỉ số Dow Jones được tạo ra từ 30 cổ phiếu niêm yết trên sàn giao dịch chứng khoán NASDAQ và New York.
Để mô phỏng sự biến động của chỉ số VN-Index trên thị trường chứng khoán Việt Nam, mô hình được xây dựng như sau:
\[ VNI = \beta_0 + \beta_1 GP + \beta_2 OP + \beta_3 EX + \beta_4 TP + \beta_5 HNX30 + \beta_6 DJIA \] Trong đó:
VNI: Chỉ số giá chứng khoán (Điểm)
GP: Giá vàng (USD/ounce)
OP: Giá dầu thô (USD/thùng)
EX: Tỷ giá USD/VND
TP: Lợi suất trái phiếu 10 năm Việt Nam (%)
HNX30: Chỉ số HNX30 (Điểm)
DJIA: Chỉ số bình quân công nghiệp Dow Jones (USD)
Mô phỏng ít nhất 5 biến ngẫu nhiên (có phân phối xác suất khác nhau), mô phỏng, vẽ đồ thị, tính toán các đặc trưng đo lường và giải thích ý nghĩa.
poisson <- rpois(10000, lambda = 1.5)
summary(poisson)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 1.000 1.000 1.502 2.000 8.000
var(poisson)
## [1] 1.442541
sd(poisson)
## [1] 1.201058
poisson <- table(poisson)
poisson <- as.data.frame(poisson)
ggplot(poisson, aes(poisson, Freq)) + geom_col(fill = 'red') + geom_point() + geom_line(aes(as.integer(poisson), Freq), color = 'yellow')
student <- round(rt(10000, df =10),0)
summary(student)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -6 -1 0 0 1 5
var(student)
## [1] 1.343134
sd(student)
## [1] 1.158937
student <- table(student)
student <- as.data.frame(student)
ggplot(student, aes(student, Freq)) + geom_col(fill = 'green') + geom_point() + geom_line(aes(as.integer(student), Freq), color = 'red')
chisquare <- round(rchisq(10000, df = 10),0)
summary(chisquare)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1 7 9 10 13 36
var(chisquare)
## [1] 19.98959
sd(chisquare)
## [1] 4.470972
chisquare <- table(chisquare)
chisquare <- as.data.frame(chisquare)
ggplot(chisquare, aes(chisquare, Freq)) + geom_col(fill = 'purple') + geom_point() + geom_line(aes(as.integer(chisquare), Freq), color = 'yellow')
binomial <- rbinom(10000, size = 10, prob = 0.2)
summary(binomial)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 1.000 2.000 2.014 3.000 8.000
var(binomial)
## [1] 1.623561
sd(binomial)
## [1] 1.27419
binomial <- table(binomial)
binomial <- as.data.frame(binomial)
ggplot(binomial, aes(binomial, Freq)) + geom_col(fill = 'yellow') + geom_point() + geom_line(aes(as.integer(binomial), Freq), color = 'red')
normal <- rnorm(n = 10000, mean = 1, sd = 4)
summary(normal)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -13.0383 -1.6944 0.9723 1.0035 3.6739 14.4074
var(normal)
## [1] 16.07937
sd(normal)
## [1] 4.009909
hist(normal)
exponential <- rexp(n = 10000, rate = 1)
summary(exponential)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000077 0.287396 0.710916 1.007756 1.392154 11.897577
var(exponential)
## [1] 1.002622
sd(exponential)
## [1] 1.00131
hist(exponential)
Uniform <- runif(10000, min = 0, max = 50)
summary(Uniform)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00563 12.62648 24.94428 25.04333 37.55813 49.99526
var(Uniform)
## [1] 208.3895
sd(Uniform)
## [1] 14.4357
hist(Uniform)
Triangular <- rtriang(10000, a = 2, b = 10, c = 6)
summary(Triangular)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.020 4.845 6.010 6.010 7.193 9.925
var(Triangular)
## [1] 2.683902
sd(Triangular)
## [1] 1.638262
hist(Triangular)