# Họ và tên: Nguyễn Thị Mỹ Hạnh
# Lớp: 24NH1 - Mã số sinh viên: 2454020020
# Bài thực hành
# Nhập liệu
dulieu=file.choose()
dulieu=read.csv(dulieu,header=TRUE,check.names=FALSE)
save(dulieu,file="dulieu.rda")
attach(dulieu)
is.data.frame(dulieu)
## [1] TRUE
head(dulieu)
## STT Ngày VNI VN30 SP500
## 1 1 7/10/2026 1753.39 1894.20 7801.77
## 2 2 6/10/2026 1759.08 1898.82 7818.93
## 3 3 5/10/2026 1753.20 1894.46 7773.95
## 4 4 2/10/2026 1737.71 1875.99 7722.72
## 5 5 1/10/2026 1749.30 1890.57 7666.45
## 6 6 30/09/2026 1768.62 1906.81 7651.54
dim(dulieu)
## [1] 218 5
###CÂU A
names(dulieu)
## [1] "STT" "Ngày" "VNI" "VN30" "SP500"
str(dulieu)
## 'data.frame': 218 obs. of 5 variables:
## $ STT : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Ngày : chr "7/10/2026" "6/10/2026" "5/10/2026" "2/10/2026" ...
## $ VNI : num 1753 1759 1753 1738 1749 ...
## $ VN30 : num 1894 1899 1894 1876 1891 ...
## $ SP500: num 7802 7819 7774 7723 7666 ...
summary(dulieu)
## STT Ngày VNI VN30 SP500
## Min. : 1.00 Length :218 Min. :1581 Min. :1741 Min. :6344
## 1st Qu.: 55.25 N.unique :218 1st Qu.:1729 1st Qu.:1899 1st Qu.:6846
## Median :109.50 N.blank : 0 Median :1791 Median :1956 Median :7132
## Mean :109.50 Min.nchar: 8 Mean :1781 Mean :1952 Mean :7181
## 3rd Qu.:163.75 Max.nchar: 10 3rd Qu.:1844 3rd Qu.:2009 3rd Qu.:7542
## Max. :218.00 Max. :1928 Max. :2097 Max. :7819
# Nhận xét:
# Dữ liệu gồm 218 quan sát và 4 biến: Ngày, VNIDEX,VN30 và S&P 500.
# Ba biến VNIDEX,VN30 và S&P 500 là các biến định lượng.
###CÂU B
# MA HOA VNI
VNIMH = dulieu$VNI
VNIMH = replace(VNIMH, dulieu$VNI <= 1753.26, 1)
VNIMH = replace(VNIMH, dulieu$VNI > 1753.26 & dulieu$VNI <= 1823.65, 2)
VNIMH = replace(VNIMH, dulieu$VNI > 1823.65, 3)
VNIM = VNIMH
VNIM = replace(VNIM, VNIMH == 1, "<=1753.26")
VNIM = replace(VNIM, VNIMH == 2, ">1753.26 & <=1823.65")
VNIM = replace(VNIM, VNIMH == 3, ">1823.65")
VNI_DF = data.frame(dulieu$VNI, VNIMH, VNIM)
# MA HOA VN30
VN30MH = dulieu$VN30
VN30MH = replace(VN30MH, dulieu$VN30 <= 1922.99, 1)
VN30MH = replace(VN30MH, dulieu$VN30 > 1922.99 & dulieu$VN30 <= 1988.16, 2)
VN30MH = replace(VN30MH, dulieu$VN30 > 1988.16, 3)
VN30M = VN30MH
VN30M = replace(VN30M, VN30MH == 1, "<=1922.99")
VN30M = replace(VN30M, VN30MH == 2, ">1922.99 & <=1988.16")
VN30M = replace(VN30M, VN30MH == 3, ">1988.16")
VN30_DF = data.frame(dulieu$VN30, VN30MH, VN30M)
# MA HOA S&P 500
SP500MH = dulieu$SP500
SP500MH = replace(SP500MH, dulieu$SP500 <= 6901.35, 1)
SP500MH = replace(SP500MH, dulieu$SP500 > 6901.35 & dulieu$SP500 <= 7467.76, 2)
SP500MH = replace(SP500MH, dulieu$SP500 > 7467.76, 3)
SP500M = SP500MH
SP500M = replace(SP500M, SP500MH == 1, "<=6901.35")
SP500M = replace(SP500M, SP500MH == 2, ">6901.35 & <=7467.76")
SP500M = replace(SP500M, SP500MH == 3, ">7467.76")
SP500_DF = data.frame(dulieu$SP500, SP500MH, SP500M)
### CÂU C
library(psych)
abctb = data.frame(dulieu$VNI, dulieu$VN30, dulieu$SP500)
describe(abctb)
## vars n mean sd median trimmed mad min max
## dulieu.VNI 1 218 1780.99 79.50 1790.97 1784.17 88.67 1580.54 1927.94
## dulieu.VN30 2 218 1951.85 74.06 1955.72 1953.93 79.54 1741.05 2096.76
## dulieu.SP500 3 218 7181.03 395.26 7131.98 7185.96 497.49 6343.72 7818.93
## range skew kurtosis se
## dulieu.VNI 347.40 -0.35 -0.70 5.38
## dulieu.VN30 355.71 -0.26 -0.49 5.02
## dulieu.SP500 1475.21 -0.02 -1.41 26.77
# Nhận xét:
# VN-INDEX có giá trị trung bình khoảng 1780.99 điểm.
# VN30 có giá trị trung bình khoảng 1951.85 điểm.
# S&P 500 có giá trị trung bình khoảng 7181.03 điểm.
# Ba chỉ số đều có số quan sát ở các nhóm tương đối đồng đều.
### CÂU D
# VNI
pie(table(VNIMH), col=c("darkseagreen","forestgreen","lightgreen"), main="DO THI CHI SO VN INDEX")

VNIM.freq <- table(VNIMH)
VNIM.freq
## VNIMH
## 1 2 3
## 73 72 73
barplot(VNIM.freq, xlab="Diem", ylab="So ngay", main="Bieu do cot cua chi so VN INDEX", col=c("magenta","hotpink","lightpink"))

plot(dulieu$STT, dulieu$VNI, type="o", xlab="ngay thu", ylab="diem VNI", pch=19, main="Diem cua VNI tu ngay 1 den ngay 218", col="darkgreen")

# VN30
pie(table(VN30MH), col=c("darkseagreen","forestgreen","lightgreen"), main="DO THI CHI SO VN30")

VN30M.freq <- table(VN30MH)
VN30M.freq
## VN30MH
## 1 2 3
## 73 72 73
barplot(VN30M.freq, xlab="Diem", ylab="So ngay", main="Bieu do cot cua chi so VN30", col=c("magenta","hotpink","lightpink"))

plot(dulieu$STT, dulieu$VN30, type="o", xlab="ngay thu", ylab="diem VN30", pch=19, main="Diem cua VN30 tu ngay 1 den ngay 218", col="darkgreen")

# SP500
pie(table(SP500MH), col=c("darkseagreen","forestgreen","lightgreen"), main="DO THI CHI SO SP500")

SP500M.freq <- table(SP500MH)
SP500M.freq
## SP500MH
## 1 2 3
## 73 72 73
barplot(SP500M.freq, xlab="Diem", ylab="So ngay", main="Bieu do cot cua chi so SP500", col=c("magenta","hotpink","lightpink"))

plot(dulieu$STT, dulieu$SP500, type="o", xlab="ngay thu", ylab="diem SP500", pch=19, main="Diem cua SP500 tu ngay 1 den ngay 218", col="darkgreen")

# Nhận xét:
# Biểu đồ cột và biểu đồ tròn thể hiện sự phân bố của các chỉ số theo 3 nhóm Thấp, Trung bình và Cao tương đối cân bằng.
# Biểu đồ đường thể hiện sự biến động của các chỉ sỐ VN-Index, VN30 và S&P 500 liên tục theo thời gian từ ngày 1 đến ngày 218.
### CÂU E
library(psych)
vars = cbind(dulieu$VNI, dulieu$VN30, dulieu$SP500)
pairs.panels(vars)

library(Hmisc)
##
## Attaching package: 'Hmisc'
## The following object is masked from 'package:psych':
##
## describe
## The following objects are masked from 'package:base':
##
## format.pval, units
result = rcorr(as.matrix(vars),type="pearson")
result$r
## [,1] [,2] [,3]
## [1,] 1.0000000 0.8918374 0.4413539
## [2,] 0.8918374 1.0000000 0.1667167
## [3,] 0.4413539 0.1667167 1.0000000
result$P
## [,1] [,2] [,3]
## [1,] NA 0.00000000 8.308909e-12
## [2,] 0.000000e+00 NA 1.371414e-02
## [3,] 8.308909e-12 0.01371414 NA
### Nhận xét
# VNI và VN30 có mối tương quan thuận rất mạnh với hệ số tương quan r = 0.89.
# VNI và SP500 có mối tương quan thuận ở mức trung bình với hệ số tương quan r = 0.44.
# VN30 và SP500 có mối tương quan thuận yếu với hệ số tương quan r = 0.17.
# Các mối tương quan giữa VNI VN30 và VNI SP500 đều có ý nghĩa thống kê với p-value < 0.05.
### Câu G
mreg=lm(dulieu$VNI ~ dulieu$VN30 + dulieu$SP500)
summary(mreg)
##
## Call:
## lm(formula = dulieu$VNI ~ dulieu$VN30 + dulieu$SP500)
##
## Residuals:
## Min 1Q Median 3Q Max
## -57.322 -14.153 3.623 15.982 58.722
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -4.172e+02 5.523e+01 -7.553 1.2e-12 ***
## dulieu$VN30 9.034e-01 2.534e-02 35.647 < 2e-16 ***
## dulieu$SP500 6.055e-02 4.749e-03 12.750 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 27.26 on 215 degrees of freedom
## Multiple R-squared: 0.8835, Adjusted R-squared: 0.8824
## F-statistic: 815.1 on 2 and 215 DF, p-value: < 2.2e-16
library(car)
## Loading required package: carData
##
## Attaching package: 'car'
## The following object is masked from 'package:psych':
##
## logit
vif(mreg)
## dulieu$VN30 dulieu$SP500
## 1.028589 1.028589
require(lmtest)
## Loading required package: lmtest
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
dwtest(mreg)
##
## Durbin-Watson test
##
## data: mreg
## DW = 0.0925, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
op=par(mfrow=c(2,2))
plot(mreg)

# Nhận xét:
# Các giá trị VIF khoảng 1.028 và nhỏ hơn 10 nên chưa có hiện tượng đa cộng tuyến.
# Kiểm định Durbin-Watson cho kết quả p-value nhỏ hơn 0.05, cho thấy phần dư có hiện tượng tự tương quan.
# Bốn biểu đồ chẩn đoán được sử dụng để đánh giá các giả định của mô hình hồi quy.