Đặng Thùy Dung - MSSV: 2221000296
Đỗ Nguyễn Nhật Minh - MSSV: 2321000336
Giảng viên hướng dẫn: ThS. Trần Mạnh Tường
Công ty Cổ phần CokyVina (CKV) là một tổ chức có lịch sử phát triển từ năm 1990, khởi điểm là một doanh nghiệp nhà nước trực thuộc Tổng cục Bưu điện. Sau quá trình chuyển đổi mô hình hoạt động, CKV đã được tái cấu trúc thành công ty cổ phần, trong đó vốn Nhà nước chiếm 49%. Lĩnh vực hoạt động chính của CKV bao gồm: viễn thông (phát triển và quản lý hạ tầng mạng, truyền dẫn), công nghệ thông tin (cung cấp các dịch vụ như EKYC, xác thực khuôn mặt) và hoạt động xuất nhập khẩu vật tư, thiết bị chuyên ngành.
a. Chi tiết bộ dữ liệu
data_ckv <- read.csv("C:/Users/Admin/Documents/DataR/Data_ckv.csv")
# Xóa các cột lỗi (từ X đến X.7)
data_ckv <- data_ckv %>%
select(-starts_with("X"))
# GIỮ LẠI 40 DÒNG ĐẦU TIÊN
data_ckv <- data_ckv[1:40, ]
# --- KIỂM TRA SAU KHI CẮT ---
cat("- Số dòng:", nrow(data_ckv), "\n")
## - Số dòng: 40
cat("- Số cột:", ncol(data_ckv), "\n")
## - Số cột: 13
dim(data_ckv)
## [1] 40 13
str(data_ckv)
## 'data.frame': 40 obs. of 13 variables:
## $ Quarter : chr "Q1/2015" "Q2/2015" "Q3/2015" "Q4/2015" ...
## $ TongTaiSan : num 2.14e+11 1.88e+11 1.98e+11 2.13e+11 2.20e+11 ...
## $ Tongno : num 1.29e+11 1.12e+11 1.15e+11 1.28e+11 1.34e+11 ...
## $ QuyMo : num 26.1 26 26 26.1 26.1 ...
## $ TangTruongTTS... : num NA -0.1203 0.0509 0.0772 0.0311 ...
## $ TySoNo.TTS.DR. : num 60.1 59.7 58.2 60.2 61 ...
## $ TSNH : num 1.33e+11 1.33e+11 1.52e+11 1.69e+11 1.27e+11 ...
## $ NoNganHan : num 1.00e+11 1.10e+11 1.14e+11 1.26e+11 1.31e+11 ...
## $ VCSH : num 7.76e+10 7.58e+10 8.27e+10 8.49e+10 8.57e+10 ...
## $ TSNH.TTS : num 0.62 0.706 0.769 0.792 0.579 ...
## $ HeSoDBTC.TTS.VCSH.: num 2.76 2.48 2.39 2.51 2.56 ...
## $ TysoVCSH.TTS : num 0.363 0.403 0.418 0.398 0.39 ...
## $ NoNganHan.TongNo : num 0.778 0.981 0.988 0.98 0.981 ...
Giới thiệu code: Đoạn code trên thực hiện các bước tiền xử lý dữ liệu cơ bản trước khi tiến hành phân tích:
Giới thiệu bộ dữ liệu: Bộ dữ liệu được sử dụng trong phân tích này được thu thập từ Báo cáo tài chính theo quý của Công ty Cổ phần CokyVina trong giai đoạn từ quý I năm 2015 đến quý IV năm 2024, gồm 40 quan sát tương ứng với 40 quý và 13 biến số tài chính chủ yếu. Trong đó, các biến phản ánh các khía cạnh khác nhau của tình hình tài chính doanh nghiệp như sau:
b. Hiển thị 10 dòng đầu
head(data_ckv,10)
## Quarter TongTaiSan Tongno QuyMo TangTruongTTS... TySoNo.TTS.DR.
## 1 Q1/2015 214042197072 128626558166 26.0894 NA 60.09
## 2 Q2/2015 188283218987 112468623209 25.9612 -0.1203 59.73
## 3 Q3/2015 197872379506 115146229314 26.0109 0.0509 58.19
## 4 Q4/2015 213147896266 128276641196 26.0853 0.0772 60.18
## 5 Q1/2016 219783960176 134058235710 26.1159 0.0311 61.00
## 6 Q2/2016 230748108527 148634770669 26.1646 0.0499 64.41
## 7 Q3/2016 219402048429 135615211333 26.1142 -0.0492 61.81
## 8 Q4/2016 198243566957 23514990456 26.0128 -0.0964 11.86
## 9 Q1/2017 182493817080 96624713482 25.9300 -0.0794 52.95
## 10 Q2/2017 177278170496 94630594222 25.9010 -0.0286 53.38
## TSNH NoNganHan VCSH TSNH.TTS HeSoDBTC.TTS.VCSH.
## 1 132727112434 100054839994 77612285106 0.6201 2.7578
## 2 132824453803 110368623209 75814595778 0.7055 2.4835
## 3 152110186350 113761295979 82726150192 0.7687 2.3919
## 4 168814373995 125703974027 84871228070 0.7920 2.5114
## 5 127348368660 131453862365 85725724446 0.5794 2.5638
## 6 127171356165 146030397324 82113337858 0.5511 2.8101
## 7 118252158383 93995786810 83786837096 0.5390 2.6186
## 8 111122743129 303132423 85419851209 0.5605 2.3208
## 9 95533409248 73412855449 85869103598 0.5235 2.1253
## 10 92598075484 72923736189 82647576274 0.5223 2.1450
## TysoVCSH.TTS NoNganHan.TongNo
## 1 0.3626 0.7779
## 2 0.4027 0.9813
## 3 0.4181 0.9880
## 4 0.3982 0.9799
## 5 0.3900 0.9806
## 6 0.3559 0.9825
## 7 0.3819 0.6931
## 8 0.4309 0.0129
## 9 0.4705 0.7598
## 10 0.4662 0.7706
Lệnh head(data_ckv, 10) được sử dụng để hiển thị 10 dòng đầu tiên của bộ dữ liệu data_ckv, cụ thể:
a. Kiểm tra dữ liệu khuyết NA
# --- KIỂM TRA GIÁ TRỊ NA ---
colSums(is.na(data_ckv))
## Quarter TongTaiSan Tongno QuyMo
## 0 0 0 0
## TangTruongTTS... TySoNo.TTS.DR. TSNH NoNganHan
## 1 0 0 0
## VCSH TSNH.TTS HeSoDBTC.TTS.VCSH. TysoVCSH.TTS
## 0 0 0 0
## NoNganHan.TongNo
## 0
Giải thích code: Để kiểm tra các giá trị khuyết, nhóm chúng em đã thực hiện lệnh sau:
Kết quả: Từ bảng kết quả trên, ta thấy chỉ có một giá trị bị thiếu (NA) ở biến TangTruongTTS do biến “tăng trưởng tổng tài sản” được tính theo tỷ lệ thay đổi qua các quý, nên quý đầu tiên (Q1/2015) không có dữ liệu của quý trước để so sánh từ đó dẫn đến giá trị bị thiếu.
b. Xử lý dữ liệu bị khuyết(NA)
# --- THAY THẾ GIÁ TRỊ NA BẰNG TRUNG BÌNH CỘNG ---
# Tính giá trị trung bình của cột (bỏ qua NA)
mean_tts <- mean(data_ckv$TangTruongTTS..., na.rm = TRUE)
# Thay thế NA bằng giá trị trung bình
data_ckv$TangTruongTTS...[is.na(data_ckv$TangTruongTTS...)] <- mean_tts
# --- KIỂM TRA LẠI ---
cat("Số lượng NA còn lại trong từng cột:\n")
## Số lượng NA còn lại trong từng cột:
print(colSums(is.na(data_ckv)))
## Quarter TongTaiSan Tongno QuyMo
## 0 0 0 0
## TangTruongTTS... TySoNo.TTS.DR. TSNH NoNganHan
## 0 0 0 0
## VCSH TSNH.TTS HeSoDBTC.TTS.VCSH. TysoVCSH.TTS
## 0 0 0 0
## NoNganHan.TongNo
## 0
Giải thích code:
Kết quả:
c. Kiểm tra trùng lặp
# --- KIỂM TRA TRÙNG LẶP ---
duplicated_rows <- sum(duplicated(data_ckv))
cat("Số dòng trùng lặp:", duplicated_rows, "\n")
## Số dòng trùng lặp: 0
Nhóm chúng em sử dụng lệnh “um(duplicated(data_ckv))” để kiểm tra dữ liệu trùng lặp và kết quả đạt được là bộ dữ liệu không có xuất hiện trùng lặp.
d. Chuẩn hóa tên biến
# --- CHUẨN HÓA TÊN BIẾN ---
# Hiển thị tên biến gốc
names(data_ckv)
## [1] "Quarter" "TongTaiSan" "Tongno"
## [4] "QuyMo" "TangTruongTTS..." "TySoNo.TTS.DR."
## [7] "TSNH" "NoNganHan" "VCSH"
## [10] "TSNH.TTS" "HeSoDBTC.TTS.VCSH." "TysoVCSH.TTS"
## [13] "NoNganHan.TongNo"
# Dùng gsub() để loại bỏ ký tự đặc biệt, khoảng trắng, thay bằng dấu gạch dưới
names(data_ckv) <- gsub("[^[:alnum:]]+", "_", names(data_ckv))
# Đưa tên về chữ thường cho đồng nhất
names(data_ckv) <- tolower(names(data_ckv))
# Kiểm tra lại danh sách tên biến sau khi chuẩn hóa
names(data_ckv)
## [1] "quarter" "tongtaisan" "tongno"
## [4] "quymo" "tangtruongtts_" "tysono_tts_dr_"
## [7] "tsnh" "nonganhan" "vcsh"
## [10] "tsnh_tts" "hesodbtc_tts_vcsh_" "tysovcsh_tts"
## [13] "nonganhan_tongno"
Giải thích code:
Kết quả: Kết quả cho thấy tên biến đã được chuẩn hóa thành dạng nhất quán ví dụ như:
e. Chuyển đổi kiểu dữ liệu và kiểm tra kiểu dữ liệu của biến “Quarter”
# liệt kê dữ liệu cột quarter
unique(data_ckv$quarter)
## [1] "Q1/2015" "Q2/2015" "Q3/2015" "Q4/2015" "Q1/2016" "Q2/2016" "Q3/2016"
## [8] "Q4/2016" "Q1/2017" "Q2/2017" "Q3/2017" "Q4/2017" "Q1/2018" "Q2/2018"
## [15] "Q3/2018" "Q4/2018" "Q1/2019" "Q2/2019" "Q3/2019" "Q4/2019" "Q1/2020"
## [22] "Q2/2020" "Q3/2020" "Q4/2020" "Q1/2021" "Q2/2021" "Q3/2021" "Q4/2021"
## [29] "Q1/2022" "Q2/2022" "Q3/2022" "Q4/2022" "Q1/2023" "Q2/2023" "Q3/2023"
## [36] "Q4/2023" "Q1/2024" "Q2/2024" "Q3/2024" "Q4/2024"
Để xem dữ liệu cột “Quarter”, nhóm chúng em dùng lệnh “unique(data_ckv$quarter)” để liệt kê chi tiết dữ liệu lấy từ cột “Quarter” ở trong bảng có tên “data_ckv”.
# --- TÁCH QUÝ VÀ NĂM TỪ CỘT QUARTER ---
library(stringr)
data_ckv <- data_ckv %>%
mutate(
quarter = as.character(quarter), # ép kiểu để xử lý regex
quarter = str_trim(quarter), # xóa khoảng trắng thừa nếu có
Quarter = str_replace_all(quarter, "⁄", "/"), # đổi ký tự chia đặc biệt thành '/'
qtr = as.integer(str_extract(quarter, "(?<=Q)\\d")), # lấy số quý
year = as.integer(str_extract(quarter, "(?<=/)\\d{4}")) # lấy năm
)
# Kiểm tra kết quả
data_ckv %>% select(quarter, qtr, year) %>% head(10)
## quarter qtr year
## 1 Q1/2015 1 2015
## 2 Q2/2015 2 2015
## 3 Q3/2015 3 2015
## 4 Q4/2015 4 2015
## 5 Q1/2016 1 2016
## 6 Q2/2016 2 2016
## 7 Q3/2016 3 2016
## 8 Q4/2016 4 2016
## 9 Q1/2017 1 2017
## 10 Q2/2017 2 2017
Ở phần này, mục đích nhằm tách cột Quarter thành 2 cột riêng thể hiện Quý và Năm tương ứng, nhóm chúng em đã thực hiện các thao tác sau đây:
mo_ta_bien <- data.frame(
Bien = c("quarter", "tongtaisan", "tongno", "quymo",
"tangtruongtts_", "tysono_tts_dr_", "tsnh", "nonganhan",
"vcsh", "tsnh_tts", "hesodbtc_tts_vcsh_",
"tysovcsh_tts", "nonganhan_tongno"),
Kieu_Du_Lieu = c("character", "numeric", "numeric", "numeric",
"numeric", "numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric"),
Y_Nghia = c(
"Quý quan sát (theo dạng thời gian Q1, Q2, Q3, Q4 hằng năm)",
"Tổng tài sản của doanh nghiệp trong kỳ",
"Tổng nợ phải trả trong kỳ",
"Quy mô doanh nghiệp (ước tính qua tổng tài sản log hoặc gốc)",
"Tốc độ tăng trưởng tổng tài sản so với kỳ trước",
"Tỷ số nợ trên tổng tài sản (Debt Ratio)",
"Tài sản ngắn hạn của doanh nghiệp",
"Nợ ngắn hạn (phải trả trong vòng 1 năm)",
"Vốn chủ sở hữu (Equity)",
"Tỷ lệ tài sản ngắn hạn trên tổng tài sản",
"Hệ số đảm bảo tài chính giữa tổng tài sản và vốn chủ sở hữu",
"Tỷ số vốn chủ sở hữu trên tổng tài sản",
"Tỷ lệ nợ ngắn hạn trên tổng nợ"
)
)
# Hiển thị bảng
mo_ta_bien %>%
kbl(caption = "Bảng 1.1: Mô tả các biến trong bộ dữ liệu CKV",
align = c('c', 'c', 'l'),
col.names = c("Biến", "Kiểu dữ liệu", "Ý nghĩa")) %>%
kable_paper(full_width = F, lightable_options = "striped") %>%
column_spec(1, bold = TRUE, width = "5em") %>%
column_spec(2, width = "6em") %>%
column_spec(3, width = "30em") %>%
row_spec(0, bold = TRUE, background = "#BFD3E6")
| Biến | Kiểu dữ liệu | Ý nghĩa |
|---|---|---|
| quarter | character | Quý quan sát (theo dạng thời gian Q1, Q2, Q3, Q4 hằng năm) |
| tongtaisan | numeric | Tổng tài sản của doanh nghiệp trong kỳ |
| tongno | numeric | Tổng nợ phải trả trong kỳ |
| quymo | numeric | Quy mô doanh nghiệp (ước tính qua tổng tài sản log hoặc gốc) |
| tangtruongtts_ | numeric | Tốc độ tăng trưởng tổng tài sản so với kỳ trước |
| tysono_tts_dr_ | numeric | Tỷ số nợ trên tổng tài sản (Debt Ratio) |
| tsnh | numeric | Tài sản ngắn hạn của doanh nghiệp |
| nonganhan | numeric | Nợ ngắn hạn (phải trả trong vòng 1 năm) |
| vcsh | numeric | Vốn chủ sở hữu (Equity) |
| tsnh_tts | numeric | Tỷ lệ tài sản ngắn hạn trên tổng tài sản |
| hesodbtc_tts_vcsh_ | numeric | Hệ số đảm bảo tài chính giữa tổng tài sản và vốn chủ sở hữu |
| tysovcsh_tts | numeric | Tỷ số vốn chủ sở hữu trên tổng tài sản |
| nonganhan_tongno | numeric | Tỷ lệ nợ ngắn hạn trên tổng nợ |
Sau khi tiền xử lý dữ liệu, chúng em tạo bảng tổng hợp kết quả và mô tả ý nghĩa các biến, cụ thể:
data.frame() để liệt kê tên biến
(Bien), kiểu dữ liệu (Kieu_Du_Lieu) và ý nghĩa
từng biến (Y_Nghia).
kableExtra được dùng để trình bày bảng đẹp
mắt: kbl() tạo bảng cơ bản với tiêu đề và căn chỉnh cột,
kable_paper() thêm style dạng “striped”,
column_spec() điều chỉnh độ rộng và in đậm cột,
row_spec() định dạng hàng tiêu đề với màu nền và chữ
đậm.Mục tiêu: Phần này nhằm cung cấp cái nhìn tổng quan về các đặc trưng thống kê cơ bản của từng biến trong bộ dữ liệu CKV, bao gồm trung bình, trung vị, độ lệch chuẩn, phương sai, giá trị nhỏ nhất và lớn nhất, cũng như các đặc trưng hình dạng phân bố như độ lệch (skewness) và độ nhọn (kurtosis).
a. Thống kê mô tả từng biến
Biến Tổng tài sản (tongtaisan)
# Tính toán các chỉ số thống kê cơ bản
mean_tts <- mean(data_ckv$tongtaisan, na.rm = TRUE) # Giá trị trung bình
median_tts <- median(data_ckv$tongtaisan, na.rm = TRUE) # Trung vị
min_tts <- min(data_ckv$tongtaisan, na.rm = TRUE) # Giá trị nhỏ nhất
max_tts <- max(data_ckv$tongtaisan, na.rm = TRUE) # Giá trị lớn nhất
sd_tts <- sd(data_ckv$tongtaisan, na.rm = TRUE) # Độ lệch chuẩn
var_tts <- var(data_ckv$tongtaisan, na.rm = TRUE) # Phương sai
mad_tts <- mad(data_ckv$tongtaisan, na.rm = TRUE) # Độ lệch tuyệt đối trung vị
iqr_tts <- IQR(data_ckv$tongtaisan, na.rm = TRUE) # Khoảng tứ phân vị
range_tts <- range(data_ckv$tongtaisan, na.rm = TRUE) # Biên độ giá trị
skew_tts <- moments::skewness(data_ckv$tongtaisan, na.rm = TRUE) # Độ lệch (skewness)
kurt_tts <- moments::kurtosis(data_ckv$tongtaisan, na.rm = TRUE) # Độ nhọn (kurtosis)
# Tổng hợp kết quả vào bảng
thongke_tts <- data.frame(
Chỉ_Số = c("Trung bình", "Trung vị", "Nhỏ nhất", "Lớn nhất",
"Độ lệch chuẩn", "Phương sai", "MAD",
"IQR", "Biên độ", "Độ lệch (Skewness)", "Độ nhọn (Kurtosis)"),
Giá_Trị = c(mean_tts, median_tts, min_tts, max_tts,
sd_tts, var_tts, mad_tts, iqr_tts,
diff(range_tts), skew_tts, kurt_tts)
)
# Hiển thị bảng kết quả đẹp
thongke_tts %>%
kbl(caption = "Bảng 2.1: Thống kê mô tả biến Tổng tài sản (tongtaisan)",
align = c("l", "r"),
col.names = c("Chỉ số thống kê", "Giá trị")) %>%
kable_paper(full_width = F, lightable_options = "striped") %>%
row_spec(0, bold = TRUE, background = "#BFD3E6")
| Chỉ số thống kê | Giá trị |
|---|---|
| Trung bình | 1.775841e+11 |
| Trung vị | 1.749598e+11 |
| Nhỏ nhất | 1.309533e+11 |
| Lớn nhất | 2.314463e+11 |
| Độ lệch chuẩn | 2.890741e+10 |
| Phương sai | 8.356385e+20 |
| MAD | 3.532826e+10 |
| IQR | 4.886679e+10 |
| Biên độ | 1.004930e+11 |
| Độ lệch (Skewness) | 2.202354e-01 |
| Độ nhọn (Kurtosis) | 1.819651e+00 |
Ở phần này để phân tích thống kê mô tả cho biến Tổng tài sản, nhóm chúng em đã thực hiện các lệnh sau đây:
Kết quả:
Biến Tổng nợ(tongno)
library(psych)
thongke_tongno <- describe(data_ckv$tongno)
# Hiển thị kết quả gọn, chỉ chọn một số chỉ số chính
thongke_tongno_chon <- thongke_tongno %>%
select(n, mean, median, sd, min, max, range, skew, kurtosis, se)
# Đổi tên cột tiếng Việt cho dễ đọc
colnames(thongke_tongno_chon) <- c(
"Số quan sát", "Trung bình", "Trung vị", "Độ lệch chuẩn",
"Nhỏ nhất", "Lớn nhất", "Biên độ", "Độ lệch (Skewness)",
"Độ nhọn (Kurtosis)", "Sai số chuẩn"
)
# Hiển thị bảng kết quả đẹp
thongke_tongno_chon %>%
kbl(caption = "Bảng 2.2: Thống kê mô tả biến Tổng nợ (tongno)",
align = "r",
digits = 3) %>%
kable_paper(full_width = F, lightable_options = "striped") %>%
row_spec(0, bold = TRUE, background = "#BFD3E6")
| Số quan sát | Trung bình | Trung vị | Độ lệch chuẩn | Nhỏ nhất | Lớn nhất | Biên độ | Độ lệch (Skewness) | Độ nhọn (Kurtosis) | Sai số chuẩn | |
|---|---|---|---|---|---|---|---|---|---|---|
| X1 | 40 | 95123206955 | 87849724545 | 27224497420 | 23514990456 | 148634770669 | 125119780213 | 0.009 | -0.39 | 4304571000 |
Ở phần này, chúng em sử dụng thư viện psych – một gói thống kê chuyên dụng trong R – để mô tả chi tiết biến Tổng nợ (tongno) thông qua hàm describe().
Mô tả và diễn giải kết quả:
Biến vốn chủ sở hữu(vcsh)
library(pastecs)
library(dplyr)
library(kableExtra)
# --- 2.2.3 THỐNG KÊ MÔ TẢ BIẾN VỐN CHỦ SỞ HỮU ---
thongke_vcsh <- stat.desc(data_ckv["vcsh"], basic = TRUE, desc = TRUE, norm = TRUE)
# Chuyển kết quả sang data frame
thongke_vcsh_df <- data.frame(
Chỉ_tiêu = rownames(thongke_vcsh),
Giá_trị = round(thongke_vcsh$vcsh, 3)
)
rownames(thongke_vcsh_df) <- NULL
# Hiển thị bảng
thongke_vcsh_df %>%
kbl(caption = "Bảng 2.3: Thống kê mô tả biến Vốn chủ sở hữu (vcsh)",
align = "lcr") %>%
kable_paper(full_width = FALSE, lightable_options = "striped") %>%
row_spec(0, bold = TRUE, background = "#BFD3E6")
| Chỉ_tiêu | Giá_trị |
|---|---|
| nbr.val | 4.000000e+01 |
| nbr.null | 0.000000e+00 |
| nbr.na | 0.000000e+00 |
| min | 7.555583e+10 |
| max | 8.874570e+10 |
| range | 1.318988e+10 |
| sum | 3.317836e+12 |
| median | 8.325649e+10 |
| mean | 8.294589e+10 |
| SE.mean | 5.508418e+08 |
| CI.mean.0.95 | 1.114183e+09 |
| var | 1.213707e+19 |
| std.dev | 3.483829e+09 |
| coef.var | 4.200000e-02 |
| skewness | -3.480000e-01 |
| skew.2SE | -4.660000e-01 |
| kurtosis | -8.360000e-01 |
| kurt.2SE | -5.710000e-01 |
| normtest.W | 9.660000e-01 |
| normtest.p | 2.660000e-01 |
Trong phần này, chúng em sử dụng thư viện pastecs, một gói chuyên dụng trong thống kê mô tả, với hàm stat.desc() để phân tích biến Vốn chủ sở hữu (vcsh).
Kết quả trả về từ stat.desc() được chuyển đổi sang dạng data frame bằng hàm data.frame() để tiện trình bày. Các giá trị được làm tròn 3 chữ số thập phân nhằm đảm bảo tính nhất quán và dễ đọc.
Diễn giải kết quả
b. Phân tích theo quý và năm
Tăng trường trung bình tài sản theo năm
# --- Tăng trưởng trung bình tài sản theo năm ---
tangtruong_taisan_nam <- data_ckv %>%
group_by(year) %>%
summarise(
mean_growth = mean(tangtruongtts_, na.rm = TRUE),
sd_growth = sd(tangtruongtts_, na.rm = TRUE)
)
knitr::kable(tangtruong_taisan_nam, caption = "Bảng: Tốc độ tăng trưởng trung bình tài sản theo năm")
| year | mean_growth | sd_growth |
|---|---|---|
| 2015 | 0.0028218 | 0.0875653 |
| 2016 | -0.0161500 | 0.0686234 |
| 2017 | 0.0118500 | 0.0828293 |
| 2018 | 0.0139500 | 0.1294899 |
| 2019 | -0.0145500 | 0.1843542 |
| 2020 | -0.0416000 | 0.0803912 |
| 2021 | 0.0216500 | 0.0959921 |
| 2022 | -0.0184250 | 0.1252931 |
| 2023 | -0.0023500 | 0.0631592 |
| 2024 | 0.0776750 | 0.1567805 |
Đầu tiên, nhóm chúng em sử dụng hàm group_by(year) trong dplyr để phân nhóm dữ liệu theo từng năm, giúp phân tích sự thay đổi của các chỉ tiêu tài chính theo thời gian.
Tiếp theo, hàm summarise() được dùng để tính giá trị trung bình (mean_growth) và độ lệch chuẩn (sd_growth) của biến tăng trưởng tổng tài sản (tangtruongtts_) trong từng năm.
Kết quả và diễn giải
Năm 2015 – 2024 cho thấy mức tăng trưởng trung bình của tổng tài sản có sự biến động đáng kể qua các giai đoạn: một số năm ghi nhận tăng trưởng dương, trong khi một số khác lại sụt giảm. Cụ thể:
So sánh tăng trưởng giữa hai giai đoạn (2015–2019 vs. 2020–2024)
# --- Tạo biến giai đoạn ---
data_ckv <- data_ckv %>%
mutate(
period = ifelse(year <= 2019, "Trước 2020", "Từ 2020 trở đi")
)
# --- Tính trung bình tăng trưởng theo giai đoạn ---
growth_period <- data_ckv %>%
group_by(period) %>%
summarise(
mean_growth = mean(tangtruongtts_, na.rm = TRUE),
sd_growth = sd(tangtruongtts_, na.rm = TRUE)
)
knitr::kable(growth_period, caption = "Bảng: So sánh tăng trưởng tài sản giữa hai giai đoạn")
| period | mean_growth | sd_growth |
|---|---|---|
| Trước 2020 | -0.0004156 | 0.1059378 |
| Từ 2020 trở đi | 0.0073900 | 0.1058929 |
Diễn giải code: Ở phần này, chúng em tạo biến giai đoạn (period), trong đó:
Tiếp theo đó để tính thống kê, chúng em đã thực hiện các thao tác sau đây:
Nhận xét: Kết quả cho thấy tốc độ tăng trưởng tài sản trung bình của công ty CKV có sự khác biệt nhẹ giữa hai giai đoạn.
c. Hệ số tương quan giữa các biến tổng tài sản, tổng nợ và vốn chủ
# --- Ma trận tương quan ---
library(corrplot)
data_tuongquan <- data_ckv %>%
select(tongtaisan, tongno, vcsh, tysono_tts_dr_, tysovcsh_tts, nonganhan_tongno)
cor_matrix <- cor(data_tuongquan, use = "complete.obs")
# Hiển thị bảng tương quan
knitr::kable(cor_matrix, caption = "Bảng: Ma trận tương quan giữa các chỉ tiêu tài chính của CKV")
| tongtaisan | tongno | vcsh | tysono_tts_dr_ | tysovcsh_tts | nonganhan_tongno | |
|---|---|---|---|---|---|---|
| tongtaisan | 1.0000000 | 0.8065567 | 0.3600881 | 0.6280981 | -0.9643658 | -0.0076843 |
| tongno | 0.8065567 | 1.0000000 | 0.1812405 | 0.8954284 | -0.7756607 | 0.2937803 |
| vcsh | 0.3600881 | 0.1812405 | 1.0000000 | 0.0251669 | -0.1357018 | -0.0710634 |
| tysono_tts_dr_ | 0.6280981 | 0.8954284 | 0.0251669 | 1.0000000 | -0.6604711 | 0.6309582 |
| tysovcsh_tts | -0.9643658 | -0.7756607 | -0.1357018 | -0.6604711 | 1.0000000 | -0.0350065 |
| nonganhan_tongno | -0.0076843 | 0.2937803 | -0.0710634 | 0.6309582 | -0.0350065 | 1.0000000 |
Sau khi phân tích thống kê từng biến riêng lẻ, việc tính toán ma trận tương quan giúp đánh giá mối quan hệ tuyến tính giữa các chỉ tiêu tài chính chính của công ty CKV. Qua đó, có thể nhận biết các biến có xu hướng biến động cùng chiều hay ngược chiều, và mức độ gắn kết của chúng.Trong đó, chúng em chọn ra 6 biến như sau: tongtaisan, tongno, tongno, tysono_tts_dr, tysovcsh_tts, nonganhan_tongno.
Để tính hệ số tương quan Pearson cho từng cặp biến, chúng em dùng hàm cor() và để loại bỏ những giá trị bị thiếu (NA) thì dùng use = “complete.obs”. Kết quả trả về một ma trận 6×6, trong đó mỗi ô biểu thị hệ số tương quan giữa hai biến.
Nhận xét:
d. Phân tích tương quan theo giai đoạn 2015–2019 với giai đoạn 2020–2024
# --- So sánh hệ số tương quan giữa hai giai đoạn ---
cor_1 <- cor(data_ckv %>% filter(year <= 2019) %>%
select(tongtaisan, tongno, vcsh, tysono_tts_dr_), use = "complete.obs")
cor_2 <- cor(data_ckv %>% filter(year >= 2020) %>%
select(tongtaisan, tongno, vcsh, tysono_tts_dr_), use = "complete.obs")
list(
"2015–2019" = cor_1,
"2020–2024" = cor_2
)
## $`2015–2019`
## tongtaisan tongno vcsh tysono_tts_dr_
## tongtaisan 1.00000000 0.6748979 -0.08327695 0.3764861
## tongno 0.67489786 1.0000000 -0.18726772 0.9373132
## vcsh -0.08327695 -0.1872677 1.00000000 -0.2046768
## tysono_tts_dr_ 0.37648610 0.9373132 -0.20467684 1.0000000
##
## $`2020–2024`
## tongtaisan tongno vcsh tysono_tts_dr_
## tongtaisan 1.00000000 0.71661011 0.05629495 0.9157868
## tongno 0.71661011 1.00000000 -0.05883599 0.6235455
## vcsh 0.05629495 -0.05883599 1.00000000 -0.3067937
## tysono_tts_dr_ 0.91578678 0.62354554 -0.30679365 1.0000000
Để xem xét liệu mối quan hệ giữa các chỉ tiêu tài chính của CKV có thay đổi đáng kể trước và sau năm 2020 (thời điểm nền kinh tế chịu tác động mạnh của đại dịch COVID-19), nhóm tiến hành tách dữ liệu thành hai giai đoạn và tính ma trận tương quan riêng biệt cho từng giai đoạn. Cụ thể, sau đây là các thao tác nhóm đã thực hiện trong R:
Tính ma trận tương quan cho giai đoạn 2015–2019: “cor_1 <- cor(data_ckv %>% filter(year <= 2019) %>% select(tongtaisan, tongno, vcsh, tysono_tts_dr_), use =”complete.obs”)“, trong đó:
Tương tự giai đoạn 2020-2024 cũng thực hiện như vậy.
Cuối cùng, hai ma trận được gộp lại trong một danh sách (list) giúp so sánh trực quan giữa hai giai đoạn trong cùng một bảng kết quả.
Diễn giải kết quả: