# HỌ VA TEN: NGUYEN THI HA MY
#LOP: 24NH1
#MSSV:2454020014
#BÀI THI CUỐI KÌ
## Nhập liệu
likert=file.choose()
datalikert = read.csv(likert, header = TRUE, sep = ";")
save(datalikert,file = "datalikert.rda")
attach(datalikert)
is.data.frame(datalikert)
## [1] TRUE
head(datalikert)
## Ngày VNINDEX VN30 HNX X
## 1 15/09/2026 1811.15 1951.14 274.13 0
## 2 14/09/2026 1788.23 1928.57 271.94 NA
## 3 11/09/2026 1795.21 1936.69 272.68 NA
## 4 10/09/2026 1829.23 1976.82 278.37 NA
## 5 09/09/2026 1827.12 1967.64 279.48 NA
## 6 08/09/2026 1830.44 1968.52 281.11 NA
dim(datalikert)
## [1] 244 5
## Câu b
# MÃ HÓA BIẾN 1: VNINDEX SANG THANG ĐO ORDINAL SCALE
MHVNINDEX = datalikert$VNINDEX
MHVNINDEX = replace(MHVNINDEX, datalikert$VNINDEX <= 1700, "Thap")
MHVNINDEX = replace(MHVNINDEX, datalikert$VNINDEX > 1700 & datalikert$VNINDEX <= 1800, "Trung binh")
MHVNINDEX = replace(MHVNINDEX, datalikert$VNINDEX > 1800, "Cao")
VNINDEXcode = data.frame(datalikert$VNINDEX, MHVNINDEX)
# MÃ HÓA BIẾN 2: VN30 SANG THANG ĐO ORDINAL SCALE
MHVN30 = datalikert$VN30
MHVN30 = replace(MHVN30, datalikert$VN30 <= 1850, "Thap")
MHVN30 = replace(MHVN30, datalikert$VN30 > 1850 & datalikert$VN30 <= 1980, "Trung binh")
MHVN30 = replace(MHVN30, datalikert$VN30 > 1980, "Cao")
VN30code = data.frame(datalikert$VN30, MHVN30)
# MÃ HÓA BIẾN 3: HNX SANG THANG ĐO ORDINAL SCALE
MHHNX = datalikert$HNX
MHHNX = replace(MHHNX, datalikert$HNX <= 250, "Thap")
MHHNX = replace(MHHNX, datalikert$HNX > 250 & datalikert$HNX <= 275, "Trung binh")
MHHNX = replace(MHHNX, datalikert$HNX > 275, "Cao")
HNXcode = data.frame(datalikert$HNX, MHHNX)
##Câu c
library(psych)
attach(datalikert)
## The following objects are masked from datalikert (pos = 4):
##
## HNX, Ngày, VN30, VNINDEX, X
chiso_group = data.frame(datalikert$VNINDEX, datalikert$VN30, datalikert$HNX)
describe(chiso_group)
## vars n mean sd median trimmed mad min
## datalikert.VNINDEX 1 244 1768.29 85.32 1774.53 1769.07 114.89 1580.54
## datalikert.VN30 2 244 1949.00 75.04 1950.63 1950.42 86.60 1741.05
## datalikert.HNX 3 244 269.24 20.38 263.73 266.61 17.33 235.36
## max range skew kurtosis se
## datalikert.VNINDEX 1927.94 347.40 -0.11 -1.13 5.46
## datalikert.VN30 2096.76 355.71 -0.20 -0.65 4.80
## datalikert.HNX 336.16 100.80 1.05 0.52 1.30
MHVNINDEX = cut(datalikert$VNINDEX, breaks = 3, labels = c("Thap", "Trung binh", "Cao"))
MHVN30 = cut(datalikert$VN30, breaks = 3, labels = c("Thap", "Trung binh", "Cao"))
MHHNX = cut(datalikert$HNX, breaks = 3, labels = c("Thap", "Trung binh", "Cao"))
table(MHVNINDEX)
## MHVNINDEX
## Thap Trung binh Cao
## 67 88 89
table(MHVNINDEX) / length(MHVNINDEX)
## MHVNINDEX
## Thap Trung binh Cao
## 0.2745902 0.3606557 0.3647541
table(MHVNINDEX, MHVN30)
## MHVN30
## MHVNINDEX Thap Trung binh Cao
## Thap 30 37 0
## Trung binh 3 67 18
## Cao 0 13 76
table(MHVNINDEX)
## MHVNINDEX
## Thap Trung binh Cao
## 67 88 89
table(MHVNINDEX) / length(MHVNINDEX)
## MHVNINDEX
## Thap Trung binh Cao
## 0.2745902 0.3606557 0.3647541
table(MHVNINDEX, MHVN30)
## MHVN30
## MHVNINDEX Thap Trung binh Cao
## Thap 30 37 0
## Trung binh 3 67 18
## Cao 0 13 76
### nhận xét câu c
#Cả 3 chỉ số tài chính (VNINDEX, VN30, HNX) đều có 244 quan sát, hoàn toàn không bị khuyết thiếu dữ liệu.
#Chỉ số VNINDEX có độ phân tán và biến động lớn nhất với phương sai 7278.87, độ lệch chuẩn sd = 85.32 và giá trị trung bình đạt 1768.29.
#Chỉ số VN30 có mức trung bình cao nhất đạt 1949.00 với phương sai 5631.73 ,sd = 75.04.
#Chỉ số HNX có giá trị trung bình thấp nhất đạt 269.24 với phương sai nhỏ nhất 415.39 ,sd = 20.38.
## Câu d
attach(datalikert)
## The following objects are masked from datalikert (pos = 3):
##
## HNX, Ngày, VN30, VNINDEX, X
## The following objects are masked from datalikert (pos = 5):
##
## HNX, Ngày, VN30, VNINDEX, X
# Biểu đồ tròn cho biến MHVNINDEX,MHVN30,MHHNX
pie(table(MHVNINDEX), col = c("red", "blue", "orange"), main = "Biểu đồ tròn tỷ lệ MHVNINDEX")

pie(table(MHVN30), col = c("yellow", "pink", "brown"), main = "Biểu đồ tròn tỷ lệ MHVN30")

pie(table(MHHNX), col = c("turquoise", "gray", "purple"), main = "Biểu đồ tròn tỷ lệ MHHNX")

# Biểu đồ cột cho biến MHVNINDEX,MHVN30,MHHNX
VNINDEX.freq <- table(MHVNINDEX)
barplot(VNINDEX.freq, xlab = "Nhóm chỉ số", ylab = "Số lượng", main = "Biểu đồ cột phân bố MHVNINDEX", col = c("red", "blue", "orange"))

VN30.freq <- table(MHVN30)
barplot(VN30.freq, xlab = "Nhóm chỉ số", ylab = "Số lượng", main = "Biểu đồ cột phân bố MHVN30", col = c("yellow", "pink", "brown"))

HNX.freq <- table(MHHNX)
barplot(HNX.freq, xlab = "Nhóm chỉ số", ylab = "Số lượng", main = "Biểu đồ cột phân bố MHHNX", col = c("turquoise", "gray", "purple"))

###nhận xét
#MHVNINDEX: Phân bố khá đồng đều, tập trung chủ yếu ở hai nhóm Trung bình và Cao, thể hiện xu thế tích cực chung của thị trường.
#MHVN30: Phần lớn ở nhóm Trung bình và Cao, nhóm Thấp chiếm tỷ rất nhỏ, sự ổn định và sức mạnh của nhóm cổ phiếu vốn hóa lớn
#MHHNX: Phần lớn ở nhóm Thấp, cho thấy quy mô, biên độ và sức hút dòng tiền của sàn HNX thấp hơn đáng kể so với HOSE.
#Tạo biến số thứ tự STT cho ngày giao dịch
STT <- 1:nrow(datalikert)
# Vẽ đồ thị đường cho riêng VNINDEX,MHVN30,MHHNX
plot(STT, datalikert$VNINDEX, type = "o", xlab = "Ngày giao dịch", ylab = "Giá trị VNINDEX", pch = 19, col = "blue", main = "Biểu đồ đường biến động VNINDEX")

plot(STT, MHVN30, type = "o", xlab = "Ngày giao dịch", ylab = "Giá trị MHVN30", pch = 19, col = "pink", main = "Biểu đồ đường biến động MHVN30")

plot(STT, MHHNX, type = "o", xlab = "Ngày giao dịch", ylab = "Giá trị MHHNX", pch = 19, col = "turquoise", main = "Biểu đồ đường biến động MHHNX0")

###Nhận xét
#Biểu đồ VNINDEX: Thể hiện xu hướng biến động liên tục của giá trị chỉ số qua các ngày giao dịch với biên độ lớn.
#Biểu đồ MHVN30: Phản ánh trạng thái chuyển dịch của nhóm vốn hóa lớn, chủ yếu duy trì ổn định ở các mức trung bình và cao.
#Biểu đồ MHHNX: Cho thấy các mức phân loại theo thời gian, với phần lớn chuỗi quan sát tập trung ở vùng giá trị thấp.
#Vẽ đồ thị đường kết hợp nhiều chỉ số Ratio Scale trên cùng 1 đồ thị VNINDEX, VN30, HNX
plot(STT, datalikert$VNINDEX, type = "o", xlab = "Ngày giao dịch", ylab = "Giá trị các chỉ số", pch = 19, col = "blue", lty = 1, ylim = c(min(datalikert$VNINDEX, datalikert$VN30, datalikert$HNX), max(datalikert$VNINDEX, datalikert$VN30, datalikert$HNX)), main = "Biểu đồ đường biến động các chỉ số tài chính")
lines(STT, datalikert$VN30, type = "o", pch = 18, col = "red", lty = 2)
lines(STT, datalikert$HNX, type = "o", pch = 17, col = "green", lty = 3)

###Nhận xét
#Biểu đồ đường kết hợp: Các chỉ số biến động đồng điệu qua thời gian;
#trong đó VN30 cao nhất, tiếp theo là VNINDEX , và HNX thấp nhất với biên độ hẹp.
###Câu e
library(psych)
attach(datalikert)
## The following objects are masked from datalikert (pos = 3):
##
## HNX, Ngày, VN30, VNINDEX, X
## The following objects are masked from datalikert (pos = 4):
##
## HNX, Ngày, VN30, VNINDEX, X
## The following objects are masked from datalikert (pos = 6):
##
## HNX, Ngày, VN30, VNINDEX, X
vars = cbind(datalikert$VNINDEX, datalikert$VN30, datalikert$HNX)
pairs.panels(vars)

library(htmlwidgets)
library(stringi)
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.87908884 0.22989721
## [2,] 0.8790888 1.00000000 0.05884544
## [3,] 0.2298972 0.05884544 1.00000000
result$P
## [,1] [,2] [,3]
## [1,] NA 0.0000000 0.0002931339
## [2,] 0.0000000000 NA 0.3600507466
## [3,] 0.0002931339 0.3600507 NA
##Nhận xét:
#Tương quan giữa VNINDEX và VN30: Hệ số tương quan r = 0,88 (p < 0,001$), cho thấy mối quan hệ tuyến tính đồng biến rất chặt chẽ giữa hai chỉ số này
#Tương quan giữa VNINDEX và HNX: Hệ số tương quan r = 0,23 (p = 0,00029 < 0,05), thể hiện mối quan hệ đồng biến ở mức độ yếu nhưng có ý nghĩa thống kê
#Tương quan giữa VN30 và HNX: Hệ số tương quan r = 0,06 với (p = 0,36 > 0,05), cho thấy không có ý nghĩa thống kê giữa hai chỉ số này.
###Câu f
mreg <- lm(VNINDEX ~ VN30 + HNX, data = datalikert)
summary(mreg)
##
## Call:
## lm(formula = VNINDEX ~ VN30 + HNX, data = datalikert)
##
## Residuals:
## Min 1Q Median 3Q Max
## -86.234 -35.192 9.033 31.034 76.025
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -357.74234 69.23453 -5.167 4.99e-07 ***
## VN30 0.98745 0.03242 30.455 < 2e-16 ***
## HNX 0.74841 0.11939 6.269 1.67e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 37.86 on 241 degrees of freedom
## Multiple R-squared: 0.8047, Adjusted R-squared: 0.803
## F-statistic: 496.3 on 2 and 241 DF, p-value: < 2.2e-16
anova(mreg)
## Analysis of Variance Table
##
## Response: VNINDEX
## Df Sum Sq Mean Sq F value Pr(>F)
## VN30 1 1366897 1366897 953.391 < 2.2e-16 ***
## HNX 1 56342 56342 39.298 1.666e-09 ***
## Residuals 241 345527 1434
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Phương trình hồi quy: VNINDEX = -357,74234 + 0,98745*VN30 + 0,74841*HNX + ei
#Kết quả hồi quy cho thấy mô hình có ý nghĩa thống kê tổng thể với giá trị F-statistic bằng 496,3 và mức ý nghĩa p < 2,2*10^-16
#Hệ số R^2 = 0,8047; cho thấy các biến độc lập VN30 và HNX giải thích khoảng 80,47% sự biến thiên của biến phụ thuộc VNINDEX, trong khi R^2 hiệu chỉnh đạt 0,803.
#Xét riêng từng biến, VN30 có tác động cùng chiều đến VNINDEX với hệ số hồi quy 0,98745, điều này có nghĩa khi VN30 tăng 1 đơn vị thì VNINDEX tăng 0,98745 đơn vị
#và mối quan hệ này có ý nghĩa thống kê ở mức rất cao p < 2*12^-16.
#Biến HNX cũng có tác động cùng chiều và có ý nghĩa thống kê ở mức rất cao, với hệ số 0,74841 ,p = 1,67*10^-9.
#Nhìn chung, cả hai biến VN30 và HNX đều có mối quan hệ cùng chiều và có ý nghĩa thống kê rõ rệt với VNINDEX trong mô hình nghiên cứu.
###Câu g
mreg <- lm(VNINDEX ~ VN30 + HNX, data = datalikert)
summary(mreg)
##
## Call:
## lm(formula = VNINDEX ~ VN30 + HNX, data = datalikert)
##
## Residuals:
## Min 1Q Median 3Q Max
## -86.234 -35.192 9.033 31.034 76.025
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -357.74234 69.23453 -5.167 4.99e-07 ***
## VN30 0.98745 0.03242 30.455 < 2e-16 ***
## HNX 0.74841 0.11939 6.269 1.67e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 37.86 on 241 degrees of freedom
## Multiple R-squared: 0.8047, Adjusted R-squared: 0.803
## F-statistic: 496.3 on 2 and 241 DF, p-value: < 2.2e-16
op <- par(mfrow = c(2, 2))
plot(mreg)

par(op)
###nhận xét :
#Đồ thị bên trái dòng 1 vẽ phần dư ei và giá trị dự báo của VNINDEX
#Đồ thị này cho thấy các giá trị phần dư tập trung quanh đường y = 0,
#cho nên giả định về giá trị trung bình của ei = 0 là có thể chấp nhận được.
#Đồ thị bên phải dòng 1 vẽ giá trị phần dư ei và giá trị kỳ vọng dựa vào phân phối chuẩn.
#Kết quả cho thấy các giá trị phần dư tập trung rất gần các giá trị trên đường chuẩn,
#Do đó, phần dư ei tuân thủ theo quy luật phân phối chuẩn.
#Đồ thị bên trái dòng 2 vẽ căn bậc hai của sai số chuẩn phần dư và các giá trị VNINDEX.
#Đồ thị này cho thấy không có sự khác biệt lớn về phương sai phần dư chuẩn cho các giá trị củ VNINDEX,do đó phương sai sai số đồng nhất.
#Đồ thị bên phải dòng 2 vẽ phần dư chuẩn hóa so với độ đòn bẩy,
#Cho thấy các điểm quan sát đều nằm trong giới hạn cho phép và không có điểm ngoại lai nào vượt quá khoảng cách Cook's distance gây ảnh hưởng nghiêm trọng đến mô hình.