library(readxl)
library(mixtools)
## Warning: package 'mixtools' was built under R version 4.3.1
## mixtools package, version 2.0.0, Released 2022-12-04
## This package is based upon work supported by the National Science Foundation under Grant No. SES-0518772 and the Chan Zuckerberg Initiative: Essential Open Source Software for Science (Grant No. 2020-255193).
library(sn)
## Warning: package 'sn' was built under R version 4.3.1
## Loading required package: stats4
## 
## Attaching package: 'sn'
## The following object is masked from 'package:stats':
## 
##     sd
library(rlang)
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.1
VNM <- read_excel("C:/Users/pc/Downloads/VNM.xlsx")
View(VNM)
summary(VNM)
##       Ngày                              P               KL           
##  Min.   :2021-01-04 00:00:00.00   Min.   : 61260   Length:620        
##  1st Qu.:2021-08-18 18:00:00.00   1st Qu.: 72260   Class :character  
##  Median :2022-04-04 12:00:00.00   Median : 77456   Mode  :character  
##  Mean   :2022-04-03 10:43:21.28   Mean   : 78637                     
##  3rd Qu.:2022-11-14 06:00:00.00   3rd Qu.: 82496                     
##  Max.   :2023-06-30 00:00:00.00   Max.   :108707                     
##        G                    D             ROE       
##  Min.   :-0.0697000   Min.   :1000   Min.   :5.520  
##  1st Qu.:-0.0088250   1st Qu.:1100   1st Qu.:5.610  
##  Median :-0.0013000   Median :1400   Median :6.300  
##  Mean   :-0.0004471   Mean   :1345   Mean   :6.614  
##  3rd Qu.: 0.0066000   3rd Qu.:1500   3rd Qu.:7.620  
##  Max.   : 0.0697000   Max.   :1500   Max.   :8.570

#Xây dựng mô hình

Cổ phiếu Vinamilk từ 4/1/2021 đến 30/6/2023 với cổ tức được trả 6 tháng/lần.

Chiết khấu dòng tiền(FV) = Cổ tức bằng tiền / Giá thị trường của cổ phiếu

\(FV= \beta_0 + \beta_1 D + \beta_2P+ \beta_3G+\beta_4ROE\)

Kiểm Định Phân Phối D

Kiểm định Shapiro-Wilk Test

shapiro.test(VNM$D)
## 
##  Shapiro-Wilk normality test
## 
## data:  VNM$D
## W = 0.70152, p-value < 2.2e-16

Với p-value< 5% -> Biến D không tuân theo phân phối chuẩn

Kiểm định phân phối mũ

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

Với p-value < 5% -> Biến D không tuân theo phân phối mũ

Kiểm định phân phối đều

ks.test(VNM$D, y = 'punif')
## Warning in ks.test.default(VNM$D, y = "punif"): ties should not be present for
## the Kolmogorov-Smirnov test
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  VNM$D
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided

Với p-value < 5% -> Biến D không tuân theo phân phối đều

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

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

Với p-value < 5% -> Biến D không tuân theo phân phối loga chuẩn

Thông qua các kiểm định Shapiro-Wilk Test và Kolmogorov - Smirnov, biến D vẫn chưa xác định được phân phối cụ thể nên tác giả mô phỏng biến D theo Random Walk:

W <- function(N, x0, mu, variance) {
  z<-cumsum(rnorm(n=N, mean=0, 
                  sd=sqrt(variance)))
  t<-1:N
  x<-x0+t*mu+z
  return(x)
  }
# mu is the drift

set.seed(20)
N <- 40
x0 <- VNM$D[1]
mu <- 0
variance <- var(VNM$D)
D <- W(N, x0, mu, variance) 
plot(D, main="Random Walk",ylab="D", typ='l', col="red")

Sau khi mô phỏng biến D, ta kiểm định phân phối D thông qua kiểm định Shapiro-Wilk:

shapiro.test(D)
## 
##  Shapiro-Wilk normality test
## 
## data:  D
## W = 0.9524, p-value = 0.09171

P-value> 5%. vậy biến D tuân theo phân phối chuẩn.

Kiểm Định Phân Phối P

Kiểm định Shapiro-Wilk Test

shapiro.test(VNM$P)
## 
##  Shapiro-Wilk normality test
## 
## data:  VNM$P
## W = 0.93212, p-value = 3.71e-16

Với p-value< 5% -> Biến P không tuân theo phân phối chuẩn

Kiểm định phân phối mũ

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

Với p-value < 5% -> Biến P không tuân theo phân phối mũ

Kiểm định phân phối đều

ks.test(VNM$P, y = 'punif')
## Warning in ks.test.default(VNM$P, y = "punif"): ties should not be present for
## the Kolmogorov-Smirnov test
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  VNM$P
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided

Với p-value < 5% -> Biến P không tuân theo phân phối đều

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

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

Với p-value < 5% -> Biến P không tuân theo phân phối loga chuẩn

Thông qua các kiểm định Shapiro-Wilk Test và Kolmogorov - Smirnov, biến P vẫn chưa xác định được phân phối cụ thể nên tác giả mô phỏng biến P theo Random Walk:

W <- function(N, x0, mu, variance) {
  z<-cumsum(rnorm(n=N, mean=0, 
                  sd=sqrt(variance)))
  t<-1:N
  x<-x0+t*mu+z
  return(x)
  }
# mu is the drift

set.seed(20)
N <- 40
x0 <- VNM$P[1]
mu <- 0
variance <- var(VNM$P)
P <- W(N, x0, mu, variance) 
plot(P, main="Random Walk",ylab="P", typ='l', col="red")

Sau khi mô phỏng biến D, ta kiểm định phân phối D thông qua kiểm định Shapiro-Wilk:

shapiro.test(P)
## 
##  Shapiro-Wilk normality test
## 
## data:  P
## W = 0.9524, p-value = 0.09171

P-value> 5%. vậy biến D tuân theo phân phối chuẩn.