Tập dữ liệu này chứa thông tin được thu thập từ sinh viên đại học thông qua biểu mẫu Google. Bộ dữ liệu này chứa thông tin về nhân khẩu học, kết quả học tập, sở thích, thói quen học tập, nguyện vọng nghề nghiệp và các yếu tố khác để phân tích hành vi của sinh viên đại học khi chọn công việc.
library(xlsx)
## Warning: package 'xlsx' was built under R version 4.4.3
library(DT)
## Warning: package 'DT' was built under R version 4.4.3
dl <- read.csv(file.choose(),header = T)
dl
File dữ liệu có 235 quan sát và 19 biến
Mô tả cho từng cột trong tập dữ liệu:
Certification Course: Xác nhận sinh viên có bằng cấp/ chứng chỉ nào chưa(Yes/Có hoặc No/không).
Gender: Giới tính sinh viên.
Department: Khoa hoặc lĩnh vực học tập mà sinh viên đang theo học.
Height(CM): Chiều cao của sinh viên tính bằng centimet.
Weight(KG): Cân nặng của sinh viên tính bằng kilogam.
10th Mark: Điểm của sinh viên đạt được vào lớp 10.
12th Mark: Điểm của sinh viên đạt được vào năm lớp 12.
College Mark: Điểm của sinh viên đạt được ở trường cao đẳng hoặc đại học.
Hobbies: Sở thích của đối tượng.
Daily studing time: Lượng thời gian sinh viên dành cho việc học hàng ngày.
Prefer to Study in: Môi trường học tập hoặc địa điểm học tập ưa thích của sinh viên.
Salary expectation: Kỳ vọng của sinh viên về mức lương tương lai của họ.
Do you like your degree?: Ý kiến của sinh viên về việc họ có thích bằng cấp của mình hay không.
willingness to pursue a career based on their degree: Sự sẵn lòng của sinh viên theo đuổi nghề nghiệp liên quan đến bằng cấp của họ
Social medai & video: Sự tham gia của sinh viên với các nền tảng truyền thông xã hội và video
Travelling Time: Thời gian để sinh viên đi lại hoặc di chuyển đến cơ sở giáo dục của mình
Stress Level: Mức độ căng thẳng cảm nhận được của sinh viên
Financial Status: Tình trạng tài chính hoặc nền tảng kinh tế của sinh viên
Part-time job: Liệu sinh viên có tham gia vào công việc bán thời gian hay không
=> Với 13 biến định tính và 6 biến định lượng
Bài phân tích tập trung các yếu tố chính ảnh hưởng đến sức khỏe tinh thần và định hướng nghề nghiệp của sinh viên. Hai biến phụ thuộc được lựa chọn là Tình trạng Stress và Mức độ sẵn lòng theo đuổi sự nghiệp theo ngành học. Các biến độc lập bao gồm ngành học, giới tính, tình hình tài chính, và việc có đi làm thêm hay không. Bài phân tích sẽ làm rõ cách các yếu tố trên tác động đến mức độ căng thẳng, đồng thời xem xét liệu chính mức độ căng thẳng đó có ảnh hưởng đến quyết định gắn bó với ngành học của sinh viên hay không.
tl <- c("Gender", "Department", "willingness.to.pursue.a.career.based.on.their.degree", "part.time.job", "Stress.Level", "Financial.Status")
tl_dt <- dl[,tl]
Tóm lại các biến được giữ lại Gender, Department, willingness to pursue a career based on their degree, part time job, Stress Level và Financial Status
colSums(is.na(tl_dt))
## Gender
## 0
## Department
## 0
## willingness.to.pursue.a.career.based.on.their.degree
## 0
## part.time.job
## 0
## Stress.Level
## 0
## Financial.Status
## 0
df <- lapply(tl_dt, function(x) { if(is.character(x)) factor(x) else x})# lapply() áp dụng hàm cho từng cột trong df_dt.
Dòng lệnh sau thực hiện việc chuyển đổi tất cả các cột có kiểu dữ
liệu character trong tl_dt
thành kiểu
factor, giữ nguyên các cột khác không đổi.
Thông kê bằng cách tạo ra cột “Stress.Group” bằng cách gộp các mức độ căng thẳng ban đầu (“Awful”, “Bad”, “Good”, “Fabulous”) thành hai nhóm chính là “Stress cao” và “Stress thấp” là một bước xử lý dữ liệu quan trọng. Mục đích của việc này là để đơn giản hóa phân tích, giúp việc so sánh và rút ra kết luận trở nên trực quan và dễ dàng hơn. Thay vì phải xử lý 4 nhóm nhỏ, giờ đây chúng ta chỉ cần tập trung vào hai trạng thái đối lập rõ ràng, điều này đặc biệt hữu ích khi thực hiện các kiểm định thống kê và giúp kết quả phân tích trở nên vững chắc và đáng tin cậy hơn.
# Lập bảng tần số của biến
freq_tbl4 <- table(tl_dt$Stress.Level)
# Chuyển bảng tần số thành data frame
freq_df4 <- as.data.frame(freq_tbl4)
# Đổi tên cột cho dễ dùng
colnames(freq_df4) <- c("Stress Level", "Count")
# Tính phần trăm
freq_df4$Percent <- freq_df4$Count / sum(freq_df4$Count) * 100
# In ra bảng
freq_df4[, c("Stress Level", "Count", "Percent")]
# Tạo cột nhóm mới
tl_dt$Stress.Group <- ifelse(tl_dt$Stress.Level %in% c("Awful", "Bad"), "Stress cao", "Stress thấp")
# Lập bảng tần số của biến
freq_tbla <- table(tl_dt$Stress.Group)
# Chuyển bảng tần số thành data frame
freq_dfa <- as.data.frame(freq_tbla)
# Đổi tên cột cho dễ dùng
colnames(freq_dfa) <- c("Stress Level", "Count")
# Tính phần trăm
freq_dfa$Percent <- freq_dfa$Count / sum(freq_dfa$Count) * 100
# In ra bảng
freq_dfa[, c("Stress Level", "Count", "Percent")]
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
library(gridExtra)
## Warning: package 'gridExtra' was built under R version 4.4.3
# Biểu đồ 1
p1 <- ggplot(freq_df4, aes(x = "", y = Count, fill = `Stress Level`)) +
geom_col(width = 1, color = "white") +
coord_polar(theta = "y") +
geom_text(aes(label = sprintf("%.1f%%", Percent)),
position = position_stack(vjust = 0.5), size = 5) +
labs(title = "Tỷ lệ sinh viên theo mức độ căng thẳng", x = NULL, y = NULL) +
scale_fill_brewer(palette = "Pastel1") +
theme_void()
# Biểu đồ 2
p2 <- ggplot(freq_dfa, aes(x = "", y = Count, fill = `Stress Level`)) +
geom_col(width = 1, color = "white") +
coord_polar(theta = "y") +
geom_text(aes(label = sprintf("%.1f%%", Percent)),
position = position_stack(vjust = 0.5), size = 5) +
labs(title = "Tỷ lệ sinh viên theo nhóm căng thẳng", x = NULL, y = NULL) +
scale_fill_brewer(palette = "Pastel1") +
theme_void()
# Hiển thị cả hai biểu đồ cạnh nhau
grid.arrange(p1, p2, ncol = 2)
Nhận xét
Cuộc khảo sát ghi nhận mức độ căng thẳng của sinh viên như sau: 137 (58,3%) sinh viên có mức độ căng thẳng ở mức “Tốt” (Good); 68 (28,9%) ở mức “Tệ” (Bad); 19 (8,1%) ở mức “Kinh khủng” (Awful); và 11 (4,7%) cảm thấy “Tuyệt vời” (Fabulous).
Sự phân bổ giữa các mức độ căng thẳng là khá rõ rệt. Phần lớn sinh viên (tổng cộng 63%) đang ở trạng thái tâm lý tích cực, trong khi tỷ lệ sinh viên trải qua căng thẳng ở mức độ tiêu cực (Tệ và Kinh khủng) cũng chiếm một phần đáng kể là 37%. Điều này cho thấy mặc dù tình hình chung là khả quan, vấn đề sức khỏe tinh thần vẫn hiện hữu trong một bộ phận không nhỏ của cộng đồng sinh viên.
Để làm rõ xu hướng dữ liệu và nâng cao hiệu quả phân tích, các biến định tính ban đầu đã được mã hóa lại thành nhóm nhị phân. Cách tiếp cận này không chỉ giúp đơn giản hóa mô hình mà còn tăng tính trực quan và độ tin cậy cho các kết luận. Cụ thể, biến phản ánh mức độ sẵn sàng theo đuổi sự nghiệp được chia thành hai nhóm: “Sẵn sàng theo ngành” (bao gồm những người chọn mức 75% và 100%, thể hiện sự cam kết rõ ràng) và “Không hoàn toàn theo ngành” (gồm các mức 0%, 25%, 50%, đại diện cho sự do dự hoặc thiếu định hướng).
Dữ liệu gốc
# Lập bảng tần số của biến
freq_tbl2 <- table(tl_dt$willingness.to.pursue.a.career.based.on.their.degree)
# Chuyển bảng tần số thành data frame
freq_df2 <- as.data.frame(freq_tbl2)
# Đổi tên cột cho dễ dùng
colnames(freq_df2) <- c("willingness to pursue a career based on their degree", "Count")
# Tính phần trăm
freq_df2$Percent <- freq_df2$Count / sum(freq_df2$Count) * 100
# In ra bảng
freq_df2[, c("willingness to pursue a career based on their degree", "Count", "Percent")]
Dữ liệu sau khi phân nhóm
# Tạo cột nhóm mới
tl_dt$willingness.to.pursue.a.career.based.on.their.degree.Group <- ifelse(tl_dt$willingness.to.pursue.a.career.based.on.their.degree %in% c("75%", "100%"), "Sẵn sàng theo ngành", "Không hoàn toàn theo ngành")
# Lập bảng tần số của biến
freq_tblb <- table(tl_dt$willingness.to.pursue.a.career.based.on.their.degree.Group)
# Chuyển bảng tần số thành data frame
freq_dfb <- as.data.frame(freq_tblb)
# Đổi tên cột cho dễ dùng
colnames(freq_dfb) <- c("willingness to pursue a career based on their degree", "Count")
# Tính phần trăm
freq_dfb$Percent <- freq_dfb$Count / sum(freq_dfb$Count) * 100
# In ra bảng
freq_dfb[, c("willingness to pursue a career based on their degree", "Count", "Percent")]
library(ggplot2)
# Biểu đồ cột (p3)
library(ggplot2)
library(gridExtra)
# Biểu đồ cột (p3)
p3 <- ggplot(freq_df2, aes(
x = `willingness to pursue a career based on their degree`,
y = Count,
fill = `willingness to pursue a career based on their degree`)
) +
geom_col(width = 0.5, color = "black") +
geom_text(aes(label = sprintf("%.1f%%", Percent)), vjust = -0.2, size = 4) +
labs(
title = "(%) Chấp nhận làm việc đúng ngành",
x = "Mức độ chấp nhận", y = "Số lượng") +
scale_fill_brewer(palette = "Pastel2") +
theme_minimal(base_size = 11) +
theme(plot.title = element_text(face = "bold", hjust = 0.5),
axis.title = element_text(margin = margin(t = 10, r = 10)),
legend.position = "none")
# Biểu đồ tròn (p4)
p4 <- ggplot(freq_dfb, aes(x = "", y = Count,
fill = `willingness to pursue a career based on their degree`)) +
geom_col(width = 1, color = "white") +
coord_polar("y") +
geom_text(aes(label = sprintf("%.1f%%", Percent)),
position = position_stack(vjust = 0.5), size = 5) +
labs(title = "Nhóm chấp nhận làm việc đúng ngành") +
scale_fill_brewer(palette = "Pastel2") +
theme_void(base_size = 11) +
theme(plot.title = element_text(face = "bold", hjust = 0.5),
legend.title = element_blank(),
legend.position = "bottom")
# Ghép biểu đồ
grid.arrange(p3, p4, ncol = 2)
Nhận xét
Cuộc khảo sát ghi nhận mức độ sẵn sàng theo đuổi công việc đúng ngành của sinh viên như sau: 114 (48,5%) sinh viên có mức độ sẵn lòng ở mức 75%; 61 (26,0%) sinh viên ở mức 50%; 44 (18,7%) sinh viên hoàn toàn mong muốn (100%); 14 (6,0%) sinh viên ở mức 25%; và chỉ có 2 (0,9%) sinh viên không có ý định làm việc đúng ngành (0%).
Sự phân bổ giữa các mức độ là rất rõ rệt. Đa số sinh viên thể hiện mong muốn làm việc đúng chuyên môn, với nhóm có mức độ sẵn sàng cao (từ trên 50%) chiếm tới 67,2% tổng số. Ngược lại, tỷ lệ sinh viên phân vân hoặc không có nguyện vọng theo đuổi công việc đúng ngành là thấp (32,8%). Điều này cho thấy một xu hướng mạnh mẽ về việc sinh viên muốn vận dụng kiến thức đã học vào sự nghiệp tương lai.
#Lập bảng tần số của biến
freq_tbl <- table(tl_dt$Gender)
# Chuyển bảng tần số thành data frame
freq_df <- as.data.frame(freq_tbl)
# Đổi tên cột cho dễ dùng
colnames(freq_df) <- c("Gender", "Count")
# Tính phần trăm
freq_df$Percent <- freq_df$Count / sum(freq_df$Count) * 100
# In ra bảng
freq_df[, c("Gender", "Count", "Percent")]
library(ggplot2)
ggplot(freq_df, aes(x = "", y = Count, fill = Gender)) +
geom_col(width = 1, color = "white") +
coord_polar(theta = "y") + # chuyển thành hình tròn
geom_text(aes(label = sprintf("%.1f%%", Percent)),
position = position_stack(vjust = 0.5), size = 5) +
labs(title = "Tỷ lệ sinh viên theo giới tính", x = NULL, y = NULL) +
scale_fill_brewer(palette = "Set2") +
theme_void() # bỏ khung, trục, để biểu đồ tròn đẹp
Nhận xét - Cuộc khảo sát ghi nhận cơ cấu giới tính của
sinh viên gồm 79 nữ (33,6%) và 156 nam (66,4%), trên tổng số 235 sinh
viên tham gia.
# Lập bảng tần số của biến
freq_tbl1 <- table(tl_dt$Department)
# Chuyển bảng tần số thành data frame
freq_df1 <- as.data.frame(freq_tbl1)
# Đổi tên cột cho dễ dùng
colnames(freq_df1) <- c("Department", "Count")
# Tính phần trăm
freq_df1$Percent <- freq_df1$Count / sum(freq_df1$Count) * 100
# In ra bảng
freq_df1[, c("Department", "Count", "Percent")]
library(ggplot2)
ggplot(freq_df1, aes(x = "", y = Count, fill = Department)) +
geom_col(width = 1, color = "white") +
coord_polar(theta = "y") + # chuyển thành hình tròn
geom_text(aes(label = sprintf("%.1f%%", Percent)),
position = position_stack(vjust = 0.5), size = 5) +
labs(title = "Tỷ lệ sinh viên theo giới tính", x = NULL, y = NULL) +
scale_fill_brewer(palette = "Set1") +
theme_void() # bỏ khung, trục, để biểu đồ tròn đẹp
Nhận xét
Cuộc khảo sát ghi nhận cơ cấu ngành học của sinh viên gồm: 15 sinh viên ngành B.Com Accounting and Finance (6,4%), 28 sinh viên ngành B.Com ISM (11,9%), 132 sinh viên ngành BCA (56,2%), và 60 sinh viên ngành Commerce (25,5%), trên tổng số 235 sinh viên tham gia.
Sự chênh lệch về tỷ lệ sinh viên giữa các ngành học là khá rõ rệt, với mức chênh lệch khoảng 49.787234% giữa ngành có tỷ trọng cao nhất và ngành có tỷ trọng thấp nhất trong khảo sát. Sinh viên ngành BCA chiếm tỷ trọng cao, gần như hơn một nửa tổng số sinh viên trong mẫu khảo sát.
# Lập bảng tần số của biến
freq_tbl3 <- table(tl_dt$part.time.job)
# Chuyển bảng tần số thành data frame
freq_df3 <- as.data.frame(freq_tbl3)
# Đổi tên cột cho dễ dùng
colnames(freq_df3) <- c("part.time.job", "Count")
# Tính phần trăm
freq_df3$Percent <- freq_df3$Count / sum(freq_df3$Count) * 100
# In ra bảng
freq_df3[, c("part.time.job", "Count", "Percent")]
library(ggplot2)
ggplot(freq_df3, aes(x = "", y = Count, fill = part.time.job)) +
geom_col(width = 1, color = "white") +
coord_polar(theta = "y") + # chuyển thành hình tròn
geom_text(aes(label = sprintf("%.1f%%", Percent)),
position = position_stack(vjust = 0.5), size = 5) +
labs(title = "Tỷ lệ sinh viên theo giới tính", x = NULL, y = NULL) +
scale_fill_brewer(palette = "Set3") +
theme_void() # bỏ khung, trục, để biểu đồ tròn đẹp
Nhận xét
Cuộc khảo sát ghi nhận tình hình sinh viên có mong muốn đi làm bán thời gian hay không như sau: 194 sinh viên không đồng ý (82,6%) và 41 sinh viên đồng ý (17,4%), trên tổng số 235 sinh viên tham gia.
Sự chênh lệch về tỷ lệ đồng ý hoặc không đồng ý đi làm bán thời gian là khá rõ rệt, với mức chênh lệch khoảng 65.106383%. Điều này cho thấy phần lớn sinh viên có xu hướng muốn dành toàn bộ thời gian cho việc học hoặc ưu tiên các công việc toàn thời gian và ổn định trong tương lai, thay vì lựa chọn công việc bán thời gian trong quá trình học tập.
# Lập bảng tần số của biến
freq_tbl5 <- table(tl_dt$Financial.Status)
# Chuyển bảng tần số thành data frame
freq_df5 <- as.data.frame(freq_tbl5)
# Đổi tên cột cho dễ dùng
colnames(freq_df5) <- c("Financial.Status", "Count")
# Tính phần trăm
freq_df5$Percent <- freq_df5$Count / sum(freq_df5$Count) * 100
# In ra bảng
freq_df5[, c("Financial.Status", "Count", "Percent")]
library(ggplot2)
ggplot(freq_df5, aes(x = "", y = Count, fill = Financial.Status)) +
geom_col(width = 1, color = "white") +
coord_polar(theta = "y") + # chuyển thành hình tròn
geom_text(aes(label = sprintf("%.1f%%", Percent)),
position = position_stack(vjust = 0.5), size = 5) +
labs(title = "Tỷ lệ sinh viên theo tình trạng tài chính", x = NULL, y = NULL) + # chỉnh tiêu đề cho đúng
scale_fill_brewer(palette = "Pastel2") + # có dấu +
theme_void() # bỏ khung, trục, để biểu đồ tròn đẹp
Nhận xét
Cuộc khảo sát ghi nhận tình hình tài chính của sinh viên như sau: 129 (54,9%) sinh viên có tình hình tài chính ở mức “Tốt” (Good); 88 (37,4%) ở mức “Tệ” (Bad); 14 (6,0%) ở mức “Kinh khủng” (Awful); và 4 (1,7%) cảm thấy “Tuyệt vời” (Fabulous).
Sự phân bổ giữa các mức độ tài chính là khá rõ rệt. Phần lớn sinh viên (tổng cộng 56,6%) có tình hình tài chính ở mức ổn định, trong khi tỷ lệ sinh viên gặp khó khăn tài chính (Tệ và Kinh khủng) cũng chiếm một tỷ lệ rất đáng kể là 43,4%. Điều này cho thấy mặc dù đa số có tình hình tài chính tương đối tốt, gánh nặng tài chính vẫn là một vấn đề nghiêm trọng, ảnh hưởng đến gần một nửa số sinh viên được khảo sát.
Giả thuyết
# Số người đã phục hồi
n_stress_c <- sum(tl_dt$Stress.Group == "Stress cao")
# Tổng số quan sát
n_total <- nrow(tl_dt)
# Ước lượng khoảng tin cậy 95% cho tỷ lệ phục hồi (p = 0.5 là tỷ lệ kỳ vọng để kiểm định)
test_stress_c <- prop.test(n_stress_c, n_total, p = 0.5, correct = FALSE)
# In kết quả
test_stress_c
##
## 1-sample proportions test without continuity correction
##
## data: n_stress_c out of n_total, null probability 0.5
## X-squared = 15.834, df = 1, p-value = 6.915e-05
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.3110274 0.4335731
## sample estimates:
## p
## 0.3702128
Kết quả kiểm định tỷ lệ mẫu đơn không hiệu chỉnh liên tục
Kết luận:
Với \(p-value\) = 6.915e-05 < 0,05, có đủ cơ sở để bác bỏ giả thuyết \(H_0\). Điều này cho thấy tỷ lệ đang stress cao trên tổng thể không bằng đúng 37%. Mặc dù tỷ lệ mẫu quan sát được là 37,02128%, sự chênh lệch này là không đáng kể về mặt thống kê. Nói cách khác, sự khác biệt giữa tỷ lệ quan sát và tỷ lệ giả định có thể chỉ là do yếu tố ngẫu nhiên trong quá trình chọn mẫu.
Giả thuyết
# Số người đã phục hồi
n_stress_t <- sum(tl_dt$Stress.Group == "Stress thấp")
# Tổng số quan sát
n_total <- nrow(tl_dt)
# Ước lượng khoảng tin cậy 95% cho tỷ lệ phục hồi (p = 0.5 là tỷ lệ kỳ vọng để kiểm định)
test_stress_c <- prop.test(n_stress_c, n_total, p = 0.5, correct = FALSE)
# In kết quả
test_stress_c
##
## 1-sample proportions test without continuity correction
##
## data: n_stress_c out of n_total, null probability 0.5
## X-squared = 15.834, df = 1, p-value = 6.915e-05
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.3110274 0.4335731
## sample estimates:
## p
## 0.3702128
Kết quả kiểm định tỷ lệ mẫu đơn không hiệu chỉnh liên tục
Kết luận:
Với \(p-value\) = 6.915e-05 < 0,05, có đủ cơ sở để bác bỏ giả thuyết \(H_0\). Điều này cho thấy tỷ lệ đang stress thấp trên tổng thể không bằng đúng 63%. Mặc dù tỷ lệ mẫu quan sát được là 37,02128%, sự chênh lệch này là không đáng kể về mặt thống kê. Nói cách khác, sự khác biệt giữa tỷ lệ quan sát và tỷ lệ giả định có thể chỉ là do yếu tố ngẫu nhiên trong quá trình chọn mẫu.
Giả thuyết
# Số người đã phục hồi
n_2 <- sum(tl_dt$willingness.to.pursue.a.career.based.on.their.degree.Group == "Sẵn sàng theo ngành")
# Tổng số quan sát
n_total <- nrow(tl_dt)
# Ước lượng khoảng tin cậy 95% cho tỷ lệ phục hồi (p = 0.5 là tỷ lệ kỳ vọng để kiểm định)
test_2 <- prop.test(n_2, n_total, p = 0.5, correct = FALSE)
# In kết quả
test_2
##
## 1-sample proportions test without continuity correction
##
## data: n_2 out of n_total, null probability 0.5
## X-squared = 27.919, df = 1, p-value = 1.265e-07
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.6099791 0.7291580
## sample estimates:
## p
## 0.6723404
Kết quả kiểm định tỷ lệ mẫu đơn không hiệu chỉnh liên tục
Kết luận:
Với \(p-value\) = 1.265e-07 < 0,05, có đủ cơ sở để bác bỏ giả thuyết \(H_0\). Điều này cho thấy tỷ lệ sinh viên sẵn sàng làm việc theo đúng ngày trên tổng thể không bằng đúng 67,2%. Mặc dù tỷ lệ mẫu quan sát được là 67,23404%, sự chênh lệch này là không đáng kể về mặt thống kê. Nói cách khác, sự khác biệt giữa tỷ lệ quan sát và tỷ lệ giả định có thể chỉ là do yếu tố ngẫu nhiên trong quá trình chọn mẫu.
Giả thuyết
n_will <- sum(tl_dt$willingness.to.pursue.a.career.based.on.their.degree.Group == "Không hoàn toàn theo ngành")
# Tổng số quan sát
n_total <- nrow(tl_dt)
# Ước lượng khoảng tin cậy 95% cho tỷ lệ phục hồi (p = 0.5 là tỷ lệ kỳ vọng để kiểm định)
test_will <- prop.test(n_will, n_total, p = 0.5, correct = FALSE)
# In kết quả
test_will
##
## 1-sample proportions test without continuity correction
##
## data: n_will out of n_total, null probability 0.5
## X-squared = 27.919, df = 1, p-value = 1.265e-07
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.2708420 0.3900209
## sample estimates:
## p
## 0.3276596
Kết quả kiểm định tỷ lệ mẫu đơn không hiệu chỉnh liên tục
Kết luận:
Với \(p-value\) = 1.265e-07 < 0,05, có đủ bằng chứng thống kê bác bỏ \(H_0\) để kết luận rằng tỷ lệ sinh viên không hoàn toàn muốn làm đúng ngành khác 32,8%. Mặc dù tỷ lệ quan sát trong mẫu là khoảng 32,77%, rất gần với 26%, nhưng p-value cực nhỏ cho thấy sự chênh lệch này là thật và không phải do may rủi của mẫu.
# Lập bảng chéo giữa Gender và Stress.Group
freq_tb_group <- table(tl_dt$Gender, tl_dt$Stress.Group)
# Thêm tổng hàng và tổng cột
freq_tb_group1 <- addmargins(freq_tb_group)
# Hiển thị bảng
freq_tb_group1
##
## Stress cao Stress thấp Sum
## Female 28 51 79
## Male 59 97 156
## Sum 87 148 235
# Tạo bảng tần suất chéo (theo hàng)
gender_stress_f <- prop.table(table(tl_dt$Gender, tl_dt$Stress.Group), margin = 1)
# Làm tròn kết quả cho dễ đọc
gender_stress_freq <- round(gender_stress_f, 2)
# Hiển thị bảng
gender_stress_freq
##
## Stress cao Stress thấp
## Female 0.35 0.65
## Male 0.38 0.62
# CHUYỂN bảng tần suất thành data frame để vẽ ggplot
gender_stress_freq_df <- as.data.frame(gender_stress_f)
colnames(gender_stress_freq_df) <- c("Gender", "Stress.Group", "Percent")
# Đổi sang % để dễ nhìn
gender_stress_freq_df$Percent <- gender_stress_freq_df$Percent * 100
# Vẽ biểu đồ cột chồng (stacked bar chart)
library(ggplot2)
ggplot(gender_stress_freq_df, aes(x = Gender, y = Percent, fill = Stress.Group)) +
geom_col(position = "dodge", width = 0.7, color = "black") +
geom_text(aes(label = sprintf("%.1f%%", Percent)),
position = position_dodge(width = 0.7),
vjust = -0.3, size = 4) +
labs(title = "Tần suất (%) sinh viên theo giới tính và nhóm Stress",
x = "Giới tính", y = "Tần suất (%)") +
scale_fill_brewer(palette = "Set3") +
theme_minimal()
Nhận xét
Biểu đồ cho thấy một sự khác biệt không lớn về mức độ căng thẳng giữa hai giới. Tỷ lệ sinh viên nam bị căng thẳng cao (37,8%) chỉ nhỉnh hơn một chút so với sinh viên nữ (35,4%). Tương ứng, tỷ lệ sinh viên nữ có mức độ căng thẳng thấp (64,6%) cũng chỉ cao hơn một chút so với nam giới (62,2%).
Sự chênh lệch không đáng kể này cho thấy xu hướng căng thẳng giữa hai giới là tương đối đồng đều. Kết quả này có thể phản ánh rằng các nguồn gây căng thẳng chính trong môi trường đại học - như áp lực học tập, thi cử, và các vấn đề tài chính - có tác động tương tự lên cả sinh viên nam và nữ, không có sự phân biệt rõ rệt về giới tính.
Giả thuyết
# Thực hiện kiểm định Chi-squared
chi2 <- chisq.test(freq_tb_group)
# In kết quả kiểm định
print(chi2)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: freq_tb_group
## X-squared = 0.045613, df = 1, p-value = 0.8309
Kết quả kiểm định Chi-squared
Kết luận:
Với \(p-value\) = 0.8309 > 0.05, ta không có bằng chứng để bác bỏ giả thuyết \(H_0\), Điều này cho thấy giữa hai biến quan sát không tồn tại mối liên hệ có ý nghĩa thống kê, tức là chúng độc lập với nhau.
Ký hiệu tỷ lệ:
\(p_1 = P(\text{Stress Group} =
\text{Cao} \mid \text{Gender} = \text{Male})\)
(Tỷ lệ sinh viên nam bị stress cao)
\(p_2 = P(\text{Stress Group} =
\text{Cao} \mid \text{Gender} = \text{Female})\)
(Tỷ lệ sinh viên nữ bị stress cao)
Giả thuyết kiểm định:
\(H_0: p_1 - p_2 = 0\)
(Tỷ lệ stress cao của sinh viên nam bằng với tỷ lệ stress cao của
sinh viên nữ)
\(H_1: p_1 - p_2 \neq 0\)
(Tỷ lệ stress cao của sinh viên nam khác với tỷ lệ stress cao của
sinh viên nữ)
# Tạo vector số lượng "Stress cao" cho mỗi giới tính
counts <- c(freq_tb_group["Female", "Stress cao"], freq_tb_group["Male", "Stress cao"])
# Tạo vector tổng số sinh viên từng giới tính
totals <- c(sum(freq_tb_group["Female", ]), sum(freq_tb_group["Male", ]))
# Thực hiện kiểm định tỷ lệ 2 mẫu
test_stress <- prop.test(counts, totals, alternative = "two.sided", correct = FALSE)
# Xem kết quả
test_stress
##
## 2-sample test for equality of proportions without continuity correction
##
## data: counts out of totals
## X-squared = 0.12714, df = 1, p-value = 0.7214
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## -0.1538401 0.1062906
## sample estimates:
## prop 1 prop 2
## 0.3544304 0.3782051
Kết quả kiểm định
Giá trị thống kê: \(\chi^2\) =
0.12714
Bậc tự do: \(df\) = 1
Giá trị \(p-value\) = 0.7214
Khoảng tin cậy 95%: (-0.1538401; 0.1062906)
Kết quả kiểm định cho ra \(p-value\) = 0.7214. Vì giá trị này lớn hơn nhiều so với mức ý nghĩa 0.05, không có đủ cơ sở để bác bỏ giả thuyết \(H_0\). Do đó, có thể kết luận rằng sự khác biệt về tỷ lệ sinh viên bị căng thẳng cao giữa hai giới là không có ý nghĩa thống kê.
Dữ liệu mẫu cho thấy tỷ lệ sinh viên nam bị căng thẳng cao là khoảng 37,8%, cao hơn một chút so với tỷ lệ ở sinh viên nữ là 35,4%. Tuy nhiên, kết quả kiểm định đã khẳng định rằng sự chênh lệch nhỏ này rất có thể chỉ do yếu tố ngẫu nhiên trong quá trình lấy mẫu.
Giả thuyết kiểm định:
\(H_0: p_1 = p_2\)
\(H_1: p_1 ≠ p_2 \neq 0\)
library(epitools)
# Đảo cột: đưa Stress cao ra sau
reordered_table <- freq_tb_group[, c("Stress thấp", "Stress cao")]
# Tính Risk Ratio
riskratio(reordered_table)
## $data
##
## Stress thấp Stress cao Total
## Female 51 28 79
## Male 97 59 156
## Total 148 87 235
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Female 1.000000 NA NA
## Male 1.067079 0.7450413 1.528314
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Female NA NA NA
## Male 0.7268852 0.7757862 0.7214196
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Kết quả phân tích Tỷ lệ Rủi ro (Risk Ratio - RR) cho thấy không có sự khác biệt đáng kể về mức độ căng thẳng giữa hai giới. Cụ thể, khả năng một sinh viên nam bị căng thẳng cao là 1,07 lần so với sinh viên nữ. Diễn giải một cách đơn giản hơn, nguy cơ bị căng thẳng cao ở hai nhóm là gần như tương đương nhau. Điều này được củng cố bởi khoảng tin cậy 95% [0,75; 1,53], vì khoảng này chứa giá trị 1, cho thấy sự khác biệt này không có ý nghĩa thống kê.
Kết quả từ cả ba phương pháp kiểm định khác nhau (Fisher’s exact, Chi-bình phương,…) đều cho ra \(p-value\) rất lớn cao hơn nhiều so với mức 0,05. Điều này cung cấp một bằng chứng rất mạnh mẽ, khẳng định rằng sự khác biệt nhỏ về tỷ lệ căng thẳng giữa nam và nữ rất có thể chỉ do tình cờ, không phản ánh một xu hướng thực sự.
oddsratio(freq_tb_group)
## $data
##
## Stress cao Stress thấp Total
## Female 28 51 79
## Male 59 97 156
## Total 87 148 235
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Female 1.0000000 NA NA
## Male 0.9042884 0.5100626 1.585073
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Female NA NA NA
## Male 0.7268852 0.7757862 0.7214196
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Kết quả phân tích Tỷ lệ Chênh (Odds Ratio - OR) cho thấy không có sự khác biệt đáng kể về mức độ căng thẳng giữa hai nhóm giới tính. Cụ thể, tỷ lệ chênh để một sinh viên nữ bị căng thẳng cao là khoảng 1,11 lần so với sinh viên nam. Diễn giải một cách dễ hiểu, odds bị căng thẳng cao ở hai nhóm là gần như tương đương nhau. Khoảng tin cậy 95% của OR là từ [0,51; 1,59], vì khoảng này chứa giá trị 1, điều này củng cố rằng sự khác biệt quan sát được không có ý nghĩa thống kê và rất có thể do yếu tố ngẫu nhiên.
Bên cạnh đó, kết quả từ nhiều phép kiểm định khác nhau (bao gồm Fisher’s Exact Test, Chi-Square Test, …) đều cho ra giá trị \(p-value\) lớn hơn đáng kể so với mức ý nghĩa 0.05. Điều này cung cấp bằng chứng thống kê cho thấy sự khác biệt nhỏ về odds liên quan đến mức độ căng thẳng giữa sinh viên nam và nữ không có ý nghĩa thống kê, và nhiều khả năng chỉ là kết quả của yếu tố ngẫu nhiên.
# Lập bảng chéo
tl_dt$Stress.Group <- factor(tl_dt$Stress.Group, levels = c("Stress cao", "Stress thấp"))
# Lập bảng chéo theo Department và Stress Group
freq_tb_1 <- table(tl_dt$Stress.Group, tl_dt$Department)
# Kiểm tra và hiển thị
print(freq_tb_1)
##
## B.com Accounting and Finance B.com ISM BCA Commerce
## Stress cao 6 13 53 15
## Stress thấp 9 15 79 45
# Tạo bảng tần suất chéo (theo hàng) giữa Stress.Group và Financial.Group
stress_1_f <- prop.table(table(tl_dt$Stress.Group, tl_dt$Department), margin = 1)
# Làm tròn kết quả cho dễ đọc
stress_1_freq <- round(stress_1_f, 2)
# Hiển thị bảng
stress_1_freq
##
## B.com Accounting and Finance B.com ISM BCA Commerce
## Stress cao 0.07 0.15 0.61 0.17
## Stress thấp 0.06 0.10 0.53 0.30
# CHUYỂN bảng tần suất thành data frame để vẽ ggplot
stress_1_freq_df <- as.data.frame(stress_1_f)
colnames(stress_1_freq_df) <- c("Stress.Group", "Department", "Percent")
# Đổi sang % để dễ nhìn
stress_1_freq_df$Percent <- stress_1_freq_df$Percent * 100
# Vẽ biểu đồ cột chồng (stacked bar chart)
library(ggplot2)
ggplot(stress_1_freq_df, aes(x = Stress.Group, y = Percent, fill = Department)) +
geom_col(position = "stack", width = 0.7, color = "black") +
geom_text(aes(label = sprintf("%.1f%%", Percent)),
position = position_stack(vjust = 0.5),
size = 4) +
labs(title = "Tần suất (%) sinh viên theo nhóm Stress và ngành học",
x = "Nhóm Stress", y = "Tần suất (%)") +
scale_fill_brewer(palette = "Set2") +
theme_minimal()
Nhận xét
Biểu đồ cho thấy mối liên hệ rõ rệt giữa ngành học và mức độ căng thẳng của sinh viên. Sự khác biệt nổi bật nhất đến từ ngành Commerce, khi tỷ lệ sinh viên của ngành này trong nhóm “Stress thấp” (30,4%) cao hơn đáng kể so với nhóm “Stress cao” (17,2%), tạo ra mức chênh lệch 13,2%.
Ngược lại, cả ba ngành còn lại đều cho thấy xu hướng chiếm tỷ trọng cao hơn trong nhóm “Stress cao”. Cụ thể, mức chênh lệch nghiêng về nhóm “Stress cao” ở ngành BCA là 7,5%, ngành B.com ISM là 4,8%, và ngành B.com Accounting and Finance là 0,8%.
Sự phân hóa này khẳng định rằng ngành học là một yếu tố quan trọng có liên quan đến sức khỏe tinh thần của sinh viên. Kết quả này gợi ý rằng áp lực từ chương trình học hoặc môi trường cạnh tranh có thể khiến sinh viên các ngành BCA, B.com ISM, và B.com Accounting and Finance có xu hướng bị căng thẳng nhiều hơn. Trong khi đó, việc sinh viên Commerce chiếm ưu thế rõ rệt trong nhóm “Stress thấp” cho thấy đây là nhóm có trạng thái tinh thần tích cực hơn trong khảo sát này.
Giả thuyết
# Thực hiện kiểm định Chi-squared
chi2 <- chisq.test(freq_tb_1)
# In kết quả kiểm định
print(chi2)
##
## Pearson's Chi-squared test
##
## data: freq_tb_1
## X-squared = 5.3934, df = 3, p-value = 0.1452
Kết quả kiểm định Chi-squared
Kết luận:
Với \(p-value\) = 0.7148 > 0.05, ta có không có đủ bằng chứng để bác bỏ giả thuyết \(H_0\), Điều này cho thấy giữa hai biến quan sát độc lập với nhau.
Giả thuyết kiểm định:
\(H_0: p_i - p_j = 0\)
(Không có sự khác biệt về tỷ lệ stress cao giữa ngành \(i\) và \(j\))
\(H_1: p_i - p_j \ne 0\)
(Có sự khác biệt về tỷ lệ stress cao giữa ngành \(i\) và \(j\))
# Lấy tên ngành
major_names <- colnames(freq_tb_1)
# Tách số lượng Stress cao và tổng sinh viên mỗi ngành
stress_high <- as.numeric(freq_tb_1["Stress cao", ])
totals <- colSums(freq_tb_1)
# So sánh từng cặp ngành
for (i in 1:(length(stress_high) - 1)) {
for (j in (i + 1):length(stress_high)) {
# Tính tỷ lệ Stress cao
p1 <- stress_high[i] / totals[i]
p2 <- stress_high[j] / totals[j]
# Thực hiện kiểm định tỉ lệ hai mẫu
test <- suppressWarnings(
prop.test(
x = c(stress_high[i], stress_high[j]),
n = c(totals[i], totals[j]),
correct = FALSE
)
)
# In kết quả
cat("So sánh:", major_names[i], "vs", major_names[j], "\n")
cat("- Tỷ lệ stress cao:", round(p1, 3), "vs", round(p2, 3), "\n")
cat("- Risk Difference (RD):", round(p1 - p2, 3), "\n")
cat("- 95% CI:", paste0("[", round(test$conf.int[1], 3), ", ", round(test$conf.int[2], 3), "]"), "\n")
cat("- p-value:", round(test$p.value, 4), "\n")
cat("---------------------------------------------\n")
}
}
## So sánh: B.com Accounting and Finance vs B.com ISM
## - Tỷ lệ stress cao: 0.4 vs 0.464
## - Risk Difference (RD): -0.064
## - 95% CI: [-0.373, 0.245]
## - p-value: 0.6858
## ---------------------------------------------
## So sánh: B.com Accounting and Finance vs BCA
## - Tỷ lệ stress cao: 0.4 vs 0.402
## - Risk Difference (RD): -0.002
## - 95% CI: [-0.263, 0.26]
## - p-value: 0.9909
## ---------------------------------------------
## So sánh: B.com Accounting and Finance vs Commerce
## - Tỷ lệ stress cao: 0.4 vs 0.25
## - Risk Difference (RD): 0.15
## - 95% CI: [-0.121, 0.421]
## - p-value: 0.2472
## ---------------------------------------------
## So sánh: B.com ISM vs BCA
## - Tỷ lệ stress cao: 0.464 vs 0.402
## - Risk Difference (RD): 0.063
## - 95% CI: [-0.14, 0.266]
## - p-value: 0.54
## ---------------------------------------------
## So sánh: B.com ISM vs Commerce
## - Tỷ lệ stress cao: 0.464 vs 0.25
## - Risk Difference (RD): 0.214
## - 95% CI: [0, 0.429]
## - p-value: 0.0444
## ---------------------------------------------
## So sánh: BCA vs Commerce
## - Tỷ lệ stress cao: 0.402 vs 0.25
## - Risk Difference (RD): 0.152
## - 95% CI: [0.014, 0.289]
## - p-value: 0.0419
## ---------------------------------------------
Kết quả kiểm định
Giả thuyết kiểm định:
\(H_0: p_i = p_j\)
\(H_1: p_i ≠ p_j \neq 0\)
library(epitools)
freq_tb_1a <- table(tl_dt$Department, tl_dt$Stress.Group)
# Đảo cột: đưa Stress cao ra sau
reordered_table <- freq_tb_1a[, c("Stress thấp", "Stress cao")]
# Tính Risk Ratio
riskratio(reordered_table)
## Warning in chisq.test(xx, correct = correction): Chi-squared approximation may
## be incorrect
## $data
##
## Stress thấp Stress cao Total
## B.com Accounting and Finance 9 6 15
## B.com ISM 15 13 28
## BCA 79 53 132
## Commerce 45 15 60
## Total 148 87 235
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## B.com Accounting and Finance 1.000000 NA NA
## B.com ISM 1.160714 0.5557288 2.424308
## BCA 1.003788 0.5220078 1.930220
## Commerce 0.625000 0.2925574 1.335208
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## B.com Accounting and Finance NA NA NA
## B.com ISM 0.7035299 0.7554394 0.6857955
## BCA 0.9979908 1.0000000 0.9909487
## Commerce 0.2720474 0.3350622 0.2471600
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Kết quả
Khi tổng hợp các kết quả, có thể đưa ra một kết luận chung và nhất quán rằng không có sự khác biệt có ý nghĩa thống kê về nguy cơ bị căng thẳng cao giữa các ngành học được phân tích, khi lấy ngành Kế toán & Tài chính (B.com Accounting and Finance) làm nhóm tham chiếu.
Phân tích Tỷ lệ Rủi ro (Risk Ratio - RR) cho thấy, dù có những dao động nhỏ trong dữ liệu, xu hướng chung vẫn không thay đổi. Cụ thể, nguy cơ bị căng thẳng cao ở sinh viên ngành Hệ thống Thông tin Quản lý (B.com ISM) (RR ≈ 1,16) và ngành Ứng dụng Máy tính (BCA) (RR = 1,00) là gần như tương đương với nhóm tham chiếu. Ngoại lệ, ngành Thương mại (Commerce) cho thấy nguy cơ thấp hơn (RR ≈ 0,63), nhưng sự khác biệt này cũng không đủ lớn để mang ý nghĩa thống kê.
Điểm chung then chốt củng cố cho kết luận này là khoảng tin cậy 95% của tất cả các so sánh này đều chứa giá trị 1. Điều này khẳng định một cách mạnh mẽ rằng những chênh lệch quan sát được rất có thể chỉ do yếu tố ngẫu nhiên, không phản ánh một xu hướng thực sự về mối liên hệ giữa ngành học và mức độ căng thẳng trong khuôn khổ nghiên cứu này.
Thêm vào đó, kết quả từ các phương pháp kiểm định (Fisher’s exact, Chi-bình phương,…) cho từng cặp so sánh đều cho ra các giá trị \(p-value\) rất lớn (p > 0,2). Dựa trên những bằng chứng này, chúng ta không đủ cơ sở để bác bỏ giả thuyết gốc \(H_0\). Vì vậy, có thể khẳng định rằng sự chênh lệch nhỏ quan sát được trong dữ liệu rất có thể chỉ do yếu tố ngẫu nhiên, không phản ánh một xu hướng thực sự.
oddsratio(reordered_table)
## Warning in chisq.test(xx, correct = correction): Chi-squared approximation may
## be incorrect
## $data
##
## Stress thấp Stress cao Total
## B.com Accounting and Finance 9 6 15
## B.com ISM 15 13 28
## BCA 79 53 132
## Commerce 45 15 60
## Total 148 87 235
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## B.com Accounting and Finance 1.0000000 NA NA
## B.com ISM 1.2857199 0.3550299 4.891636
## BCA 0.9985761 0.3341809 3.202011
## Commerce 0.5026206 0.1511185 1.755377
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## B.com Accounting and Finance NA NA NA
## B.com ISM 0.7035299 0.7554394 0.6857955
## BCA 0.9979908 1.0000000 0.9909487
## Commerce 0.2720474 0.3350622 0.2471600
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Kết quả phân tích Tỷ lệ chênh (Odds Ratio - OR) cho thấy một kết luận nhất quán: không có sự khác biệt có ý nghĩa thống kê về mức độ căng thẳng giữa các ngành học khi so sánh với nhóm tham chiếu là Kế toán & Tài chính (B.com Accounting and Finance).
Mặc dù tỷ lệ chênh (OR) bị căng thẳng cao có dao động – từ cao hơn 1,29 lần ở ngành Hệ thống Thông tin Quản lý (B.com ISM), đến thấp hơn một nửa (OR ≈ 0,50) ở ngành Thương mại (Commerce). Trong khi đó, tỷ lệ chênh ở ngành Ứng dụng Máy tính (BCA) thì gần như tương đương tuyệt đối (OR ≈ 1,00) so với nhóm tham chiếu. Tuy nhiên, điều quan trọng là không có sự khác biệt nào trong số này đủ lớn để mang ý nghĩa thống kê.
Bằng chứng cốt lõi cho kết luận này là khoảng tin cậy 95% của tất cả các so sánh này đều chứa giá trị 1. Kết quả từ các phương pháp kiểm định (Fisher’s exact, Chi-bình phương,…) cho từng cặp so sánh đều cho ra các giá trị \(p-value\) rất lớn, cao hơn nhiều so với mức 0,05. Điều này cung cấp một bằng chứng rất mạnh mẽ, khẳng định rằng sự khác biệt về tỷ lệ căng thẳng giữa các ngành học rất có thể chỉ do tình cờ, không phản ánh một xu hướng thực sự.
# Lập bảng chéo
freq_tb_2 <- factor(tl_dt$Stress.Group, levels = c("Stress cao", "Stress thấp"))
freq_tb_2 <- table(tl_dt$Stress.Group, tl_dt$part.time.job)
# Thêm tổng hàng và tổng cột
freq_tb_2a <- addmargins(freq_tb_2)
# Hiển thị bảng
freq_tb_2a
##
## No Yes Sum
## Stress cao 71 16 87
## Stress thấp 123 25 148
## Sum 194 41 235
# Tạo bảng tần suất chéo (theo hàng) giữa Stress.Group và Financial.Group
stress_2_f <- prop.table(table(tl_dt$Stress.Group, tl_dt$part.time.job), margin = 1)
# Làm tròn kết quả cho dễ đọc
stress_2_freq <- round(stress_2_f, 2)
# Hiển thị bảng
stress_2_freq
##
## No Yes
## Stress cao 0.82 0.18
## Stress thấp 0.83 0.17
# Chuyển bảng tần suất thành data frame để vẽ ggplot
stress_2_freq_df <- as.data.frame(stress_2_f)
colnames(stress_2_freq_df) <- c("Stress.Group", "Part time job", "Percent")
# Đổi sang % để dễ nhìn
stress_2_freq_df$Percent <- stress_2_freq_df$Percent * 100
# Vẽ biểu đồ cột chồng (stacked bar chart)
ggplot(stress_2_freq_df, aes(x = Stress.Group, y = Percent, fill = `Part time job`)) +
geom_col(position = "stack", width = 0.7, color = "black") +
geom_text(aes(label = sprintf("%.1f%%", Percent)),
position = position_stack(vjust = 0.5), size = 4) +
labs(title = "Tần suất (%) sinh viên theo nhóm Stress và công việc làm thêm",
x = "Nhóm Stress", y = "Tần suất (%)") +
scale_fill_brewer(palette = "Set2") +
theme_minimal()
Nhận xét
Biểu đồ cho thấy có mối liên hệ giữa nhu cầu làm thêm (bán thời gian) và mức độ căng thẳng của sinh viên. Tỷ lệ sinh viên có việc làm thêm (“Yes”) trong nhóm “Stress cao” là 18,4%, cao hơn một chút so với tỷ lệ này trong nhóm “Stress thấp” là 16,9%, tạo ra mức chênh lệch 1,5%.
Ngược lại, nhóm sinh viên không có việc làm thêm (“No”) lại cho thấy xu hướng chiếm tỷ trọng cao hơn trong nhóm “Stress thấp” (83,1%) so với nhóm “Stress cao” (81,6%), với mức chênh lệch 1,5%.
Sự phân hóa này, mặc dù không lớn, nhưng vẫn cho thấy việc đi làm thêm là một yếu tố có thể liên quan đến sức khỏe tinh thần của sinh viên. Kết quả này gợi ý rằng áp lực từ việc phải cân bằng giữa học tập và công việc có thể khiến một bộ phận sinh viên bị căng thẳng nhiều hơn. Trong khi đó, việc không đi làm thêm có thể là một yếu tố giúp sinh viên có trạng thái tinh thần tích cực hơn trong khảo sát này.
Giả thuyết
# Thực hiện kiểm định Chi-squared
chi2 <- chisq.test(freq_tb_2)
# In kết quả kiểm định
print(chi2)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: freq_tb_2
## X-squared = 0.01308, df = 1, p-value = 0.9089
Kết quả kiểm định Chi-squared
Kết luận:
Với \(p-value\) = 0.9089 > 0.05, ta có không có đủ bằng chứng để bác bỏ giả thuyết \(H_0\), Điều này cho thấy giữa hai biến quan sát độc lập với nhau.
\(p_1 = P(\text{Stress Group} =
\text{Cao} \mid \text{Part time job} = \text{không})\)
(Tỷ lệ sinh viên có nhu cầu làm việc bán thời gian bị stress
cao)
\(p_2 = P(\text{Stress Group} =
\text{Cao} \mid \text{Part time job} = \text{có})\)
(Tỷ lệ sinh viên không có nhu cầu làm việc bán thời gian bị stress
cao)
Giả thuyết kiểm định:
\(H_0: p_1 - p_2 = 0\)
(Tỷ lệ stress cao của sinh viên có nhu cầu làm việc bán thời gian
bằng với tỷ lệ stress cao của sinh viên có không có nhu cầu làm việc bán
thời gian)
\(H_1: p_1 - p_2 \neq 0\)
(Tỷ lệ stress cao của sinh viên có nhu cầu làm việc bán thời gian
khác với tỷ lệ stress cao của sinh viên không có nhu cầu làm việc bán
thời gian)
counts <- c(freq_tb_2a["Stress cao", "Yes"], freq_tb_2a["Stress cao", "No"])
# Tạo vector tổng số sinh viên trong từng nhóm
totals <- c(freq_tb_2a["Sum", "Yes"], freq_tb_2a["Sum", "No"])
# Thực hiện kiểm định tỷ lệ 2 mẫu (không hiệu chỉnh)
test_stress <- prop.test(counts, totals, alternative = "two.sided", correct = FALSE)
# Xem kết quả
print(test_stress)
##
## 2-sample test for equality of proportions without continuity correction
##
## data: counts out of totals
## X-squared = 0.08547, df = 1, p-value = 0.77
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## -0.1397157 0.1882448
## sample estimates:
## prop 1 prop 2
## 0.3902439 0.3659794
Kết quả kiểm định
Giá trị thống kê: \(\chi^2\) =
0.08547
Bậc tự do: \(df\) = 1
Giá trị \(p-value\) = 0.77
Khoảng tin cậy 95%: (-0.1397157; 0.1882448)
Kết quả kiểm định cho ra \(p-value\) = 0.77, vì giá trị này lớn hơn mức ý nghĩa 0.05, không có đủ cơ sở để bác bỏ giả thuyết \(H_0\). Nói cách khác, sự khác biệt về tỷ lệ sinh viên bị stress cao giữa hai nhóm (có hoặc không có nhu cầu làm việc bán thời gian) là không có ý nghĩa thống kê.
Dữ liệu mẫu cho thấy tỷ lệ sinh viên bị stress cao ở nhóm thứ nhất (làm việc bán thời gian) là khoảng 39,0%, gần bằng với tỷ lệ ở nhóm thứ hai (không nhu cầu làm việc bán thời gian) là 36,6% (chênh lệch 2,4%). Kết quả kiểm định đã khẳng định rằng sự chênh lệch nhỏ này rất có thể chỉ do yếu tố ngẫu nhiên trong quá trình lấy mẫu, không phản ánh một xu hướng thực sự.
Giả thuyết kiểm định:
\(H_0: p_1 = p_2\)
\(H_1: p_1 ≠ p_2 \neq 0\)
library(epitools)
riskratio(freq_tb_2)
## $data
##
## No Yes Total
## Stress cao 71 16 87
## Stress thấp 123 25 148
## Total 194 41 235
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Stress cao 1.0000000 NA NA
## Stress thấp 0.9184966 0.5200086 1.62235
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Stress cao NA NA NA
## Stress thấp 0.7670131 0.8589825 0.7700165
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Kết quả phân tích Tỷ lệ Rủi ro (Risk Ratio - RR) cho thấy không có sự khác biệt có ý nghĩa thống kê về mối liên hệ giữa việc đi làm thêm và mức độ căng thẳng. Cụ thể, khả năng một sinh viên có đi làm thêm thuộc nhóm “Stress thấp” chỉ bằng 0,92 lần so với nhóm “Stress cao”. Diễn giải một cách đơn giản hơn, khả năng một sinh viên có đi làm thêm thuộc nhóm stress nào là gần như tương đương nhau. Điều này được củng cố bởi khoảng tin cậy 95% [0,52; 1,62], vì khoảng này chứa giá trị 1, cho thấy sự khác biệt này không có ý nghĩa thống kê.
Kết quả từ cả ba phương pháp kiểm định khác nhau (Fisher’s exact, Chi-bình phương,…) đều cho ra \(p-value\) rất lớn, so với mức 0,05. Điều này cung cấp một bằng chứng rất mạnh mẽ, khẳng định rằng sự khác biệt về tỷ lệ căng thẳng giữa nhu cầu làm thêm rất có thể chỉ do tình cờ, không phản ánh một xu hướng thực sự.
oddsratio(freq_tb_2)
## $data
##
## No Yes Total
## Stress cao 71 16 87
## Stress thấp 123 25 148
## Total 194 41 235
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Stress cao 1.0000000 NA NA
## Stress thấp 0.8997816 0.4517154 1.834836
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Stress cao NA NA NA
## Stress thấp 0.7670131 0.8589825 0.7700165
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Kết quả cho thấy không có sự khác biệt có ý nghĩa thống kê về mối liên hệ giữa việc đi làm thêm và mức độ căng thẳng. Ước tính Tỷ lệ chênh (OR) là 0,90. Vậy để một sinh viên có đi làm thêm bị stress cao chỉ cao hơn 1,11 lần so với sinh viên không đi làm thêm. Sự chênh lệch rất nhỏ này được khẳng định là không có ý nghĩa thống kê, vì khoảng tin cậy 95% của OR dao động từ 0,45 đến 1,83, và do khoảng này chứa giá trị 1, điều này củng cố thêm bằng chứng rằng sự khác biệt quan sát được không có ý nghĩa thống kê và rất có thể chỉ do yếu tố ngẫu nhiên.
Bên cạnh đó, kết quả từ nhiều phép kiểm định khác nhau (bao gồm Fisher’s Exact Test, Chi-Square Test, …) đều cho ra giá trị \(p-value\) nrất lớn, cao hơn nhiều so với mức ý nghĩa 0,05. Điều này cung cấp bằng chứng thống kê vững chắc rằng không có mối liên hệ thực sự giữa việc đi làm thêm và mức độ căng thẳng, và sự khác biệt nhỏ quan sát được trong mẫu rất có thể chỉ do tình cờ.
Việc tạo cột “Financial.Group” nhằm mục đích tái phân loại các mức độ tình trạng tài chính ban đầu thành hai nhóm chính: “Tài chính ổn định” và “Tài chính khó khăn”. Cách phân nhóm này giúp đơn giản hóa dữ liệu, làm cho việc so sánh, trực quan hóa (biểu đồ), cũng như thực hiện các phân tích thống kê trở nên dễ hiểu, rõ ràng và có độ tin cậy cao hơn. Qua đó, các kết luận rút ra từ dữ liệu cũng sẽ dễ truyền đạt và có ý nghĩa thực tiễn hơn.
# Tạo cột nhóm mới (sửa nhãn đúng ý nghĩa)
tl_dt$Financial.Group <- ifelse(tl_dt$Financial.Status %in% c("Awful", "Bad"),
"Tài chính khó khăn",
"Tài chính ổn định")
# Lập bảng chéo giữa Gender và Financial.Group
freq_tb_groupa1 <- factor(tl_dt$Stress.Group, levels = c("Stress cao", "Stress thấp"))
freq_tb_groupa1 <- table(tl_dt$Stress.Group, tl_dt$Financial.Group)
# Thêm tổng hàng và tổng cột
freq_tb_2a <- addmargins(freq_tb_groupa1)
# Hiển thị bảng
freq_tb_2a
##
## Tài chính khó khăn Tài chính ổn định Sum
## Stress cao 48 39 87
## Stress thấp 54 94 148
## Sum 102 133 235
# Tạo bảng tần suất chéo (theo hàng) giữa Stress.Group và Financial.Group
stress_financial_f <- prop.table(table(tl_dt$Stress.Group, tl_dt$Financial.Group), margin = 1)
# Làm tròn kết quả cho dễ đọc
stress_financial_freq <- round(stress_financial_f, 2)
# Hiển thị bảng
stress_financial_freq
##
## Tài chính khó khăn Tài chính ổn định
## Stress cao 0.55 0.45
## Stress thấp 0.36 0.64
# CHUYỂN bảng tần suất thành data frame để vẽ ggplot
stress_financial_freq_df <- as.data.frame(stress_financial_f)
colnames(stress_financial_freq_df) <- c("Stress.Group", "Financial.Group", "Percent")
# Đổi sang % để dễ nhìn
stress_financial_freq_df$Percent <- stress_financial_freq_df$Percent * 100
# Vẽ biểu đồ cột chồng (stacked bar chart)
library(ggplot2)
ggplot(stress_financial_freq_df, aes(x = Stress.Group, y = Percent, fill = Financial.Group)) +
geom_col(position = "stack", width = 0.7, color = "black") +
geom_text(aes(label = sprintf("%.1f%%", Percent)),
position = position_stack(vjust = 0.5),
size = 4) +
labs(title = "Tần suất (%) sinh viên theo nhóm Stress và tình hình tài chính",
x = "Nhóm Stress", y = "Tần suất (%)") +
scale_fill_brewer(palette = "Set2") +
theme_minimal()
Nhận xét
Biểu đồ cho thấy một mối liên hệ mạnh mẽ giữa tình hình tài chính và mức độ căng thẳng của sinh viên. Tỷ lệ sinh viên có “Tài chính khó khăn” trong nhóm “Stress cao” là rất lớn (55,2%), cao hơn đáng kể so với nhóm “Stress thấp” (36,5%). Tương ứng, tỷ lệ sinh viên có “Tài chính ổn định” lại chiếm đa số áp đảo trong nhóm “Stress thấp” (63,5%) so với nhóm “Stress cao” (44,8%).
Sự chênh lệch rõ rệt này khẳng định xu hướng rằng tình hình tài chính là một yếu tố quan trọng ảnh hưởng đến sức khỏe tinh thần của sinh viên. Kết quả này có thể phản ánh rằng những lo lắng về chi phí sinh hoạt, học phí, và sự thiếu thốn về vật chất là một trong những nguồn gây căng thẳng chính, trực tiếp dẫn đến việc sinh viên rơi vào nhóm “Stress cao”.
Giả thuyết
# Thực hiện kiểm định Chi-squared
chi2 <- chisq.test(freq_tb_groupa1)
# In kết quả kiểm định
print(chi2)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: freq_tb_groupa1
## X-squared = 7.0459, df = 1, p-value = 0.007945
Kết quả kiểm định Chi-squared
Kết luận:
Với \(p-value\) = 0.007945 < 0.05, ta có đủ bằng chứng để bác bỏ giả thuyết \(H_0\), Điều này cho thấy giữa hai biến quan sát có tồn tại mối liên hệ có ý nghĩa thống kê.
\(p_1 = P(\text{Stress Group} =
\text{Cao} \mid \text{Financial Group} = \text{Khó khăn})\)
(Tỷ lệ sinh viên có tình hình tài chính khó khăn bị stress
cao)
\(p_2 = P(\text{Stress Group} =
\text{Cao} \mid \text{Financial.Group} = \text{Ổn định})\)
(Tỷ lệ sinh viên có tình hình tài chính ổn định bị stress
cao)
Giả thuyết kiểm định:
\(H_0: p_1 - p_2 = 0\)
(Tỷ lệ stress cao của sinh viên có tình hình tài chính khó khăn bằng
với tỷ lệ stress cao của sinh viên có tình hình tài chính ổn
định)
\(H_1: p_1 - p_2 \neq 0\)
(Tỷ lệ stress cao của sinh viên có tình hình tài chính khó khăn khác
với tỷ lệ stress cao của sinh viên có tình hình tài chính ổn
định)
# Tạo vector số lượng "Stress cao" cho từng nhóm tình hình tài chính
counts <- c(freq_tb_groupa1["Stress cao", "Tài chính khó khăn"], freq_tb_groupa1["Stress cao", "Tài chính ổn định"])
# Tạo vector tổng số sinh viên trong từng nhóm tình hình tài chính
totals <- c(sum(freq_tb_groupa1[, "Tài chính khó khăn"]), sum(freq_tb_groupa1[, "Tài chính ổn định"]))
# Thực hiện kiểm định tỷ lệ 2 mẫu
test_stress <- prop.test(counts, totals, alternative = "two.sided", correct = FALSE)
# Xem kết quả
test_stress
##
## 2-sample test for equality of proportions without continuity correction
##
## data: counts out of totals
## X-squared = 7.788, df = 1, p-value = 0.005259
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## 0.05338451 0.30132579
## sample estimates:
## prop 1 prop 2
## 0.4705882 0.2932331
Kết quả kiểm định
Giá trị thống kê: \(\chi^2\) =
7.788
Bậc tự do: \(df\) = 1
Giá trị \(p-value\) = 0.005259
Khoảng tin cậy 95%: (0.05338451; 0.30132579)
Kết quả kiểm định cho ra \(p-value\) = 0.005259, vì giá trị này nhỏ hơn mức ý nghĩa 0.05, có đủ cơ sở để bác bỏ giả thuyết \(H_0\). Nói cách khác, sự khác biệt về tỷ lệ sinh viên bị stress cao giữa hai nhóm tình hình tài chính (khó khăn và ổn định) là có ý nghĩa thống kê.
Dữ liệu mẫu cho thấy tỷ lệ sinh viên có “tài chính chưa ổn định” trong nhóm “Stress cao” là khoảng 47,1%, cao hơn đáng kể so với tỷ lệ ở nhóm “Stress thấp” là 29,3% (chênh lệch 17,8%). Kết quả kiểm định đã khẳng định rằng sự chênh lệch lớn này không phải là do yếu tố ngẫu nhiên trong quá trình lấy mẫu.
Giả thuyết kiểm định:
\(H_0: p_1 = p_2\)
\(H_1: p_1 ≠ p_2 \neq 0\)
library(epitools)
riskratio(freq_tb_groupa1)
## $data
##
## Tài chính khó khăn Tài chính ổn định Total
## Stress cao 48 39 87
## Stress thấp 54 94 148
## Total 102 133 235
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Stress cao 1.00000 NA NA
## Stress thấp 1.41684 1.089006 1.843365
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Stress cao NA NA NA
## Stress thấp 0.005712537 0.006412576 0.005259418
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Kết quả phân tích Tỷ lệ Rủi ro (Risk Ratio - RR) cho thấy có sự khác biệt rất đáng kể về tình hình tài chính giữa hai nhóm stress. Cụ thể, khả năng một sinh viên có tài chính ổn định thuộc nhóm “Stress thấp” cao gấp 1,42 lần so với nhóm “Stress cao”. Diễn giải một cách đơn giản hơn, sinh viên có tài chính ổn định có khả năng thuộc nhóm ít căng thẳng cao hơn rõ rệt. Điều này được củng cố bởi khoảng tin cậy 95% [1,09; 1,84], vì toàn bộ khoảng này nằm trên 1, cho thấy sự khác biệt này có ý nghĩa thống kê.
Kết quả từ cả ba phương pháp kiểm định khác nhau (Fisher’s exact, Chi-bình phương,…) đều cho ra \(p-value\) rất nhỏ, thấp hơn nhiều so với mức 0,05. Điều này cung cấp một bằng chứng rất mạnh mẽ, khẳng định rằng mối liên hệ giữa tình hình tài chính và mức độ căng thẳng là có thật, không phải do tình cờ.
oddsratio(freq_tb_groupa1)
## $data
##
## Tài chính khó khăn Tài chính ổn định Total
## Stress cao 48 39 87
## Stress thấp 54 94 148
## Total 102 133 235
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Stress cao 1.000000 NA NA
## Stress thấp 2.133206 1.245675 3.681633
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Stress cao NA NA NA
## Stress thấp 0.005712537 0.006412576 0.005259418
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Kết quả Kết quả phân tích Tỷ lệ chênh (Odds Ratio - OR) cho thấy một mối liên hệ có ý nghĩa thống kê giữa tình hình tài chính và mức độ stress của sinh viên. Cụ thể, so với nhóm “Stress cao”, sinh viên thuộc nhóm “Stress thấp” có tỷ lệ chênh về tình hình tài chính ổn định cao hơn 2,13 lần. Diễn giải một cách đơn giản, điều này có nghĩa là sinh viên có tài chính ổn định có khả năng thuộc nhóm ít căng thẳng cao hơn một cách đáng kể. Sự khác biệt này có ý nghĩa thống kê, được củng cố bởi khoảng tin cậy 95% của OR dao động từ 1,25 đến 3,68. Vì toàn bộ khoảng tin cậy này đều lớn hơn 1, chúng ta có thể kết luận rằng mối liên hệ quan sát được không phải do ngẫu nhiên, mà phản ánh một sự liên quan chặt chẽ giữa hai yếu tố này.
Bên cạnh đó, kết quả từ nhiều phép kiểm định khác nhau (bao gồm Fisher’s Exact Test, Chi-Square Test, …) đều cho ra giá trị \(p-value\) nhỏ hơn nhiều so với mức ý nghĩa 0.05. Điều này cung cấp bằng chứng thống kê vững chắc rằng mối liên hệ giữa tình hình tài chính và mức độ căng thẳng là có thật và không phải do tình cờ.
freq_tb_w <- factor(tl_dt$willingness.to.pursue.a.career.based.on.their.degree.Group, levels = c("Sẵn sàng theo ngành", "Không hoàn toàn theo ngành"))
freq_tb_w <- table(tl_dt$Gender, tl_dt$willingness.to.pursue.a.career.based.on.their.degree.Group)
# Thêm tổng hàng và tổng cột
freq_tb_w1 <- addmargins(freq_tb_w)
# Hiển thị bảng
freq_tb_w1
##
## Không hoàn toàn theo ngành Sẵn sàng theo ngành Sum
## Female 21 58 79
## Male 56 100 156
## Sum 77 158 235
# Tạo bảng tần suất chéo (theo hàng)
freq_tb_w_f <- prop.table(table(tl_dt$Gender, tl_dt$willingness.to.pursue.a.career.based.on.their.degree.Group), margin = 1)
# Làm tròn kết quả cho dễ đọc
freq_tb_w_freq <- round(freq_tb_w_f, 2)
# Hiển thị bảng
freq_tb_w_freq
##
## Không hoàn toàn theo ngành Sẵn sàng theo ngành
## Female 0.27 0.73
## Male 0.36 0.64
# Chuyển bảng tần suất thành data frame để vẽ ggplot
freq_tb_w_df <- as.data.frame(freq_tb_w_f)
colnames(freq_tb_w_df) <- c("Gender", "Stress.Group", "Percent")
# Đổi sang % để dễ nhìn
freq_tb_w_df$Percent <- freq_tb_w_df$Percent * 100
# Vẽ biểu đồ cột chồng (stacked bar chart hoặc dodge)
library(ggplot2)
ggplot(freq_tb_w_df, aes(x = Gender, y = Percent, fill = Stress.Group)) +
geom_col(position = "dodge", width = 0.7, color = "black") +
geom_text(aes(label = sprintf("%.1f%%", Percent)),
position = position_dodge(width = 0.7),
vjust = -0.3, size = 4) +
labs(title = "Tỷ lệ (%) sinh viên theo giới tính và mức độ sẵn sàng làm việc đúng ngành",
x = "Giới tính", y = "Tần suất (%)") +
scale_fill_brewer(palette = "Set3") +
theme_minimal()
Nhận xét
Biểu đồ cho thấy một sự khác biệt rõ rệt về định hướng nghề nghiệp sau tốt nghiệp giữa hai giới. Tỷ lệ sinh viên nữ “Sẵn sàng theo ngành” (73,4%) cao hơn đáng kể so với sinh viên nam (64,1%). Điều đáng chú ý là mức chênh lệch 9,3% này cũng được phản ánh một cách tương ứng ở nhóm còn lại, nơi tỷ lệ sinh viên nam “Không hoàn toàn theo ngành” (35,9%) cao hơn so với nữ (26,6%).
Sự chênh lệch đáng kể này cho thấy xu hướng lựa chọn nghề nghiệp có sự phân hóa theo giới tính. Kết quả này có thể phản ánh rằng sinh viên nữ có xu hướng kiên định và tập trung hơn vào con đường sự nghiệp đã chọn từ đầu. Ngược lại, sinh viên nam có thể cởi mở hơn với các cơ hội đa dạng hoặc sẵn sàng khám phá các lĩnh vực khác ngoài chuyên ngành đã học, dẫn đến tỷ lệ không hoàn toàn theo ngành cao hơn.
Giả thuyết
# Thực hiện kiểm định Chi-squared
chi2 <- chisq.test(freq_tb_w)
# In kết quả kiểm định
print(chi2)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: freq_tb_w
## X-squared = 1.6644, df = 1, p-value = 0.197
Kết quả kiểm định Chi-squared
Kết luận:
Với \(p-value\) = 0.197 > 0.05, ta không có đủ bằng chứng để bác bỏ giả thuyết \(H_0\), Điều này cho thấy hai biến là độc lập với nhau.
\(p_1 = P(\text{Willingness to pursue a
career based on their degree Group} = \text{Sẵn sàng theo ngành} \mid
\text{Gender} = \text{Female})\)
(Tỷ lệ sinh viên sẵn sàng theo ngành là nữ)
\(p_2 = P(\text{Willingness to pursue a
career based on their degree Group} = \text{Sẵn sàng theo ngành} \mid
\text{Gender} = \text{Male})\)
(Tỷ lệ sinh viên sẵn sàng theo ngành là nam)
Giả thuyết kiểm định:
\(H_0: p_1 - p_2 = 0\)
(Tỷ lệ sinh viên sẵn sàng theo ngành là nữ bằng với tỷ lệ sinh viên
sẵn sàng theo ngành là nam)
\(H_1: p_1 - p_2 \neq 0\)
(Tỷ lệ sinh viên sẵn sàng theo ngành là nữ khác với tỷ lệ sinh viên
sẵn sàng theo ngành là nam)
# Đảm bảo tên hàng và cột khớp chính xác
counts <- as.numeric(c(
freq_tb_w["Female", "Sẵn sàng theo ngành"],
freq_tb_w["Male", "Sẵn sàng theo ngành"]
))
totals <- as.numeric(c(
sum(freq_tb_w["Female", ]),
sum(freq_tb_w["Male", ])
))
# Thực hiện kiểm định tỷ lệ 2 mẫu
test_w <- prop.test(counts, totals, correct = FALSE)
test_w
##
## 2-sample test for equality of proportions without continuity correction
##
## data: counts out of totals
## X-squared = 2.0656, df = 1, p-value = 0.1507
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## -0.02995957 0.21626272
## sample estimates:
## prop 1 prop 2
## 0.7341772 0.6410256
Kết quả kiểm định
Giá trị thống kê: \(\chi^2\) =
2.0656
Bậc tự do: \(df\) = 1
Giá trị \(p-value\) = 0.1507
Khoảng tin cậy 95%: (-0.02995957; 0.21626272)
Kết quả kiểm định cho ra \(p-value\) = 0.1507, vì giá trị này lớn hơn mức ý nghĩa 0.05, do đó không có đủ cơ sở để bác bỏ giả thuyết \(H_0\). Nói cách khác, sự khác biệt về tỷ lệ sinh viên “sẵn sàng theo ngành” giữa hai nhóm giới tính (nữ và nam) là không có ý nghĩa thống kê.
Dữ liệu mẫu cho thấy tỷ lệ sinh viên nữ “sẵn sàng theo ngành” là khoảng 73,4%, cao hơn so với tỷ lệ ở nam giới là 64,1% (chênh lệch 9,3 điểm phần trăm). Tuy nhiên, kết quả kiểm định đã khẳng định rằng sự chênh lệch này không đủ lớn để loại trừ khả năng nó chỉ là do yếu tố ngẫu nhiên trong quá trình lấy mẫu.
Giả thuyết kiểm định:
\(H_0: p_1 = p_2\)
\(H_1: p_1 ≠ p_2 \neq 0\)
library(epitools)
riskratio(freq_tb_w)
## $data
##
## Không hoàn toàn theo ngành Sẵn sàng theo ngành Total
## Female 21 58 79
## Male 56 100 156
## Total 77 158 235
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Female 1.0000000 NA NA
## Male 0.8731211 0.7313452 1.042381
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Female NA NA NA
## Male 0.1531214 0.1856139 0.1506528
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Kết quả phân tích Tỷ lệ Rủi ro (Risk Ratio - RR) cho thấy không có sự khác biệt có ý nghĩa thống kê về mức độ sẵn sàng làm việc đúng ngành giữa hai giới. Cụ thể, khả năng một sinh viên nam “Sẵn sàng theo ngành” chỉ bằng 0,87 lần so với một sinh viên nữ. Diễn giải một cách đơn giản hơn, mặc dù nam giới có xu hướng sẵn sàng theo ngành thấp hơn một chút, sự khác biệt này không đủ lớn để mang ý nghĩa thực tiễn. Điều này được củng cố bởi khoảng tin cậy 95% [0,73; 1,04], vì khoảng này chứa giá trị 1, cho thấy sự khác biệt này không có ý nghĩa thống kê.
Kết quả từ cả ba phương pháp kiểm định khác nhau (Fisher’s exact, Chi-bình phương,…) đều cho ra \(p-value\) rất nhỏ, thấp hơn nhiều so với mức 0,05. Điều này cung cấp một bằng chứng rất mạnh mẽ, khẳng định rằng mối liên hệ giữa tình hình tài chính và mức độ căng thẳng là có thật, không phải do tình cờ.
oddsratio(freq_tb_w)
## $data
##
## Không hoàn toàn theo ngành Sẵn sàng theo ngành Total
## Female 21 58 79
## Male 56 100 156
## Total 77 158 235
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Female 1.0000000 NA NA
## Male 0.6497259 0.3515325 1.171077
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Female NA NA NA
## Male 0.1531214 0.1856139 0.1506528
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Kết quả Kết quả phân tích Tỷ lệ chênh (Odds Ratio - OR) cho thấy không có sự khác biệt có ý nghĩa thống kê về mức độ sẵn sàng làm việc đúng ngành giữa hai giới. Cụ thể, ước tính Tỷ lệ chênh (OR) là 0,65. Điều này có nghĩa là, khi so sánh giữa việc “Sẵn sàng theo ngành” và “Không hoàn toàn theo ngành”, tỷ lệ này ở nhóm nam giới chỉ bằng 0,65 lần so với nhóm nữ giới. Mặc dù có sự chênh lệch trong dữ liệu mẫu, khoảng tin cậy 95% của OR dao động từ 0,35 đến 1,17, vì khoảng này chứa giá trị 1, nó củng cố thêm bằng chứng rằng sự khác biệt quan sát được không có ý nghĩa thống kê.
Bên cạnh đó, kết quả từ nhiều phép kiểm định khác nhau (bao gồm Fisher’s Exact Test, Chi-Square Test, …) đều cho ra giá trị \(p-value\) nhỏ hơn nhiều so với mức ý nghĩa 0.05 (khoảng 0.005). Điều này cung cấp bằng chứng thống kê vững chắc rằng mối liên hệ giữa tình hình tài chính và mức độ căng thẳng là có thật và không phải do tình cờ.
freq_tb_wd <- factor(tl_dt$willingness.to.pursue.a.career.based.on.their.degree.Group, levels = c("Sẵn sàng theo ngành", "Không hoàn toàn theo ngành"))
freq_tb_wd <- table(tl_dt$Department, tl_dt$willingness.to.pursue.a.career.based.on.their.degree.Group)
# Thêm tổng hàng và tổng cột
freq_tb_wd1 <- addmargins(freq_tb_wd)
# Hiển thị bảng
freq_tb_wd1
##
## Không hoàn toàn theo ngành Sẵn sàng theo ngành
## B.com Accounting and Finance 5 10
## B.com ISM 9 19
## BCA 46 86
## Commerce 17 43
## Sum 77 158
##
## Sum
## B.com Accounting and Finance 15
## B.com ISM 28
## BCA 132
## Commerce 60
## Sum 235
# Tạo bảng tần suất chéo (theo hàng) giữa Stress.Group và Financial.Group
freq_tb_wd_f <- prop.table(table(tl_dt$Department, tl_dt$willingness.to.pursue.a.career.based.on.their.degree.Group), margin = 1)
# Làm tròn kết quả cho dễ đọc
freq_tb_wd_freq <- round(freq_tb_wd_f, 2)
# Hiển thị bảng
freq_tb_wd_freq
##
## Không hoàn toàn theo ngành Sẵn sàng theo ngành
## B.com Accounting and Finance 0.33 0.67
## B.com ISM 0.32 0.68
## BCA 0.35 0.65
## Commerce 0.28 0.72
# Chuyển bảng tần suất thành data frame
freq_tb_wd_df <- as.data.frame(freq_tb_wd_f)
# Đặt lại tên cột cho gọn gàng và rõ ràng
colnames(freq_tb_wd_df) <- c("Willingness", "Department", "Percent")
# Chuyển tỷ lệ thành phần trăm
freq_tb_wd_df$Percent <- freq_tb_wd_df$Percent * 100
# Vẽ biểu đồ cột chồng theo ngành
library(ggplot2)
ggplot(freq_tb_wd_df, aes(x = Department, y = Percent, fill = Willingness)) +
geom_col(position = "stack", width = 0.7, color = "black") +
geom_text(aes(label = sprintf("%.1f%%", Percent)),
position = position_stack(vjust = 0.5),
size = 4) +
labs(title = "Tần suất (%) sinh viên theo mức độ sẵn sàng làm việc đúng ngành và ngành học",
x = "Ngành học", y = "Tần suất (%)",
fill = "Ngành") +
scale_fill_brewer(palette = "Set2")
Nhận xét
Phân tích về mức độ sẵn sàng làm việc đúng chuyên ngành cho thấy một bức tranh đa dạng và có sự phân hóa rõ rệt theo ngành học. Trong đó, sinh viên ngành Commerce nổi bật lên như một nhóm có định hướng nghề nghiệp rõ ràng và mạnh mẽ nhất, với 71,7% khẳng định sẽ theo đuổi sự nghiệp đúng chuyên môn tạo sự chênh lệch ở mức (43,4%) so với nhóm đang do dự.
Các ngành B.com ISM và B.com Accounting and Finance cho thấy tỷ lệ sẵn sàng theo ngành rất cao và tương đồng (lần lượt là 67,9% và 66,7%). Ngược lại, ngành BCA tạo ra sự khác biệt rõ rệt khi vừa có đa số sinh viên cam kết theo ngành (65,2%), vừa có tỷ lệ do dự cao nhất (34,8%). Tỷ lệ thiếu chắc chắn này cao hơn hẳn các ngành còn lại, cho thấy một sự phân hóa nội bộ lớn hơn về định hướng sự nghiệp trong nhóm sinh viên BCA.
Những kết quả này không chỉ phản ánh sự tự tin của sinh viên Commerce mà còn đặt ra một câu hỏi quan trọng về ngành BCA. Điều này gợi ý sự cần thiết phải tìm hiểu sâu hơn các yếu tố có thể ảnh hưởng đến quyết định của sinh viên, từ sở thích cá nhân, nhận thức về thị trường lao động cho đến tính thực tiễn của chương trình học.
Giả thuyết
# Thực hiện kiểm định Chi-squared
chi2 <- chisq.test(freq_tb_wd)
## Warning in chisq.test(freq_tb_wd): Chi-squared approximation may be incorrect
# In kết quả kiểm định
print(chi2)
##
## Pearson's Chi-squared test
##
## data: freq_tb_wd
## X-squared = 0.80212, df = 3, p-value = 0.849
Kết quả kiểm định Chi-squared
Kết luận:
Với \(p-value\) = 0.849 > 0.05, ta có không có đủ bằng chứng để bác bỏ giả thuyết \(H_0\), Điều này cho thấy giữa hai biến quan sát độc lập với nhau.
Giả thuyết kiểm định:
\(H_0: p_i - p_j = 0\)
(Không có sự khác biệt về tỷ lệ sẵn sàng làm việc đúng chuyên ngành
cao giữa ngành \(i\) và \(j\))
\(H_1: p_i - p_j \ne 0\)
(Có sự khác biệt về tỷ lệ sẵn sàng làm việc đúng chuyên ngành giữa
ngành \(i\) và \(j\))
# Lấy tên ngành
major_names <- rownames(freq_tb_wd)
# Số lượng "Sẵn sàng theo ngành" của từng ngành (lấy theo cột)
willing_yes <- as.numeric(freq_tb_wd[, "Sẵn sàng theo ngành"])
# Tổng số sinh viên mỗi ngành (tính theo hàng)
totals <- rowSums(freq_tb_wd)
# So sánh từng cặp ngành
for (i in 1:(length(willing_yes) - 1)) {
for (j in (i + 1):length(willing_yes)) {
# Tính tỷ lệ sẵn sàng theo ngành
p1 <- willing_yes[i] / totals[i]
p2 <- willing_yes[j] / totals[j]
# Kiểm định tỷ lệ
test <- suppressWarnings(
prop.test(
x = c(willing_yes[i], willing_yes[j]),
n = c(totals[i], totals[j]),
correct = FALSE ) )
# In kết quả
cat("So sánh:", major_names[i], "vs", major_names[j], "\n")
cat("- Tỷ lệ sẵn sàng theo ngành:", round(p1, 3), "vs", round(p2, 3), "\n")
cat("- Risk Difference (RD):", round(p1 - p2, 3), "\n")
cat("- 95% CI:", paste0("[", round(test$conf.int[1], 3), ", ", round(test$conf.int[2], 3), "]"), "\n")
cat("- p-value:", round(test$p.value, 4), "\n")
cat("---------------------------------------------\n") }}
## So sánh: B.com Accounting and Finance vs B.com ISM
## - Tỷ lệ sẵn sàng theo ngành: 0.667 vs 0.679
## - Risk Difference (RD): -0.012
## - 95% CI: [-0.307, 0.283]
## - p-value: 0.9367
## ---------------------------------------------
## So sánh: B.com Accounting and Finance vs BCA
## - Tỷ lệ sẵn sàng theo ngành: 0.667 vs 0.652
## - Risk Difference (RD): 0.015
## - 95% CI: [-0.237, 0.267]
## - p-value: 0.907
## ---------------------------------------------
## So sánh: B.com Accounting and Finance vs Commerce
## - Tỷ lệ sẵn sàng theo ngành: 0.667 vs 0.717
## - Risk Difference (RD): -0.05
## - 95% CI: [-0.314, 0.214]
## - p-value: 0.7036
## ---------------------------------------------
## So sánh: B.com ISM vs BCA
## - Tỷ lệ sẵn sàng theo ngành: 0.679 vs 0.652
## - Risk Difference (RD): 0.027
## - 95% CI: [-0.164, 0.218]
## - p-value: 0.7842
## ---------------------------------------------
## So sánh: B.com ISM vs Commerce
## - Tỷ lệ sẵn sàng theo ngành: 0.679 vs 0.717
## - Risk Difference (RD): -0.038
## - 95% CI: [-0.245, 0.169]
## - p-value: 0.7152
## ---------------------------------------------
## So sánh: BCA vs Commerce
## - Tỷ lệ sẵn sàng theo ngành: 0.652 vs 0.717
## - Risk Difference (RD): -0.065
## - 95% CI: [-0.205, 0.075]
## - p-value: 0.3728
## ---------------------------------------------
Kết quả kiểm định
Giả thuyết kiểm định:
\(H_0: p_i = p_j\)
\(H_1: p_i ≠ p_j \neq 0\)
library(epitools)
riskratio(freq_tb_wd)
## Warning in chisq.test(xx, correct = correction): Chi-squared approximation may
## be incorrect
## Warning in chisq.test(xx, correct = correction): Chi-squared approximation may
## be incorrect
## $data
##
## Không hoàn toàn theo ngành Sẵn sàng theo ngành
## B.com Accounting and Finance 5 10
## B.com ISM 9 19
## BCA 46 86
## Commerce 17 43
## Total 77 158
##
## Total
## B.com Accounting and Finance 15
## B.com ISM 28
## BCA 132
## Commerce 60
## Total 235
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## B.com Accounting and Finance 1.0000000 NA NA
## B.com ISM 1.0178571 0.6559579 1.579420
## BCA 0.9772727 0.6690109 1.427573
## Commerce 1.0750000 0.7266633 1.590317
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## B.com Accounting and Finance NA NA NA
## B.com ISM 0.9320976 1.0000000 0.9367150
## BCA 0.9277700 1.0000000 0.9070007
## Commerce 0.7029308 0.7554502 0.7036276
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Kết quả
Khi tổng hợp các kết quả, có thể đưa ra một kết luận chung và nhất quán rằng không có sự khác biệt có ý nghĩa thống kê về tỷ lệ sinh viên “Sẵn sàng theo ngành” giữa các ngành học được phân tích, khi lấy ngành Kế toán & Tài chính (B.com Accounting and Finance) làm nhóm tham chiếu.
Phân tích Tỷ lệ Rủi ro (Risk Ratio - RR) cho thấy, dù có những dao động nhỏ trong dữ liệu, tỷ lệ sinh viên “Sẵn sàng theo ngành” ở các nhóm là gần như tương đương nhau. Cụ thể, so với nhóm tham chiếu, tỷ lệ này ở sinh viên ngành Hệ thống Thông tin Quản lý (B.com ISM) (RR ≈ 1,02), Ứng dụng Máy tính (BCA) (RR ≈ 0,98), và Thương mại (Commerce) (RR ≈ 1,08) đều rất gần với 1, cho thấy không có sự chênh lệch lớn.
Điểm chung then chốt củng cố cho kết luận này là khoảng tin cậy 95% của tất cả các so sánh này đều chứa giá trị 1. Điều này khẳng định một cách mạnh mẽ rằng những chênh lệch quan sát được rất có thể chỉ do yếu tố ngẫu nhiên, không phản ánh một xu hướng thực sự về mối liên hệ giữa ngành học và mức độ sẵn sàng làm việc đúng ngành trong khuôn khổ nghiên cứu này.
Thêm vào đó, kết quả từ các phương pháp kiểm định (Fisher’s exact, Chi-bình phương,…) cho từng cặp so sánh đều cho ra các giá trị \(p-value\) rất lớn. Dựa trên những bằng chứng này, chúng ta không đủ cơ sở để bác bỏ giả thuyết gốc \(H_0\). Vì vậy, có thể khẳng định rằng sự chênh lệch nhỏ quan sát được trong dữ liệu rất có thể chỉ do yếu tố ngẫu nhiên, không phản ánh một xu hướng thực sự.
oddsratio(freq_tb_wd)
## Warning in chisq.test(xx, correct = correction): Chi-squared approximation may
## be incorrect
## Warning in chisq.test(xx, correct = correction): Chi-squared approximation may
## be incorrect
## $data
##
## Không hoàn toàn theo ngành Sẵn sàng theo ngành
## B.com Accounting and Finance 5 10
## B.com ISM 9 19
## BCA 46 86
## Commerce 17 43
## Total 77 158
##
## Total
## B.com Accounting and Finance 15
## B.com ISM 28
## BCA 132
## Commerce 60
## Total 235
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## B.com Accounting and Finance 1.0000000 NA NA
## B.com ISM 1.0612311 0.2568611 4.089995
## BCA 0.9482267 0.2740383 2.886145
## Commerce 1.2744357 0.3437953 4.248342
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## B.com Accounting and Finance NA NA NA
## B.com ISM 0.9320976 1.0000000 0.9367150
## BCA 0.9277700 1.0000000 0.9070007
## Commerce 0.7029308 0.7554502 0.7036276
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Kết quả phân tích Tỷ lệ chênh (Odds Ratio - OR) cho thấy một kết luận nhất quán: không có sự khác biệt có ý nghĩa thống kê về mức độ “Sẵn sàng theo ngành” giữa các ngành học khi so sánh với nhóm tham chiếu là Kế toán & Tài chính (B.com Accounting and Finance).
Mặc dù tỷ lệ chênh (OR) của việc “Sẵn sàng theo ngành” có dao động nhỏ, nhưng tất cả đều xoay quanh giá trị 1. Cụ thể, odds này ở ngành Hệ thống Thông tin Quản lý (B.com ISM) là (OR ≈ 1,06), ở ngành Ứng dụng Máy tính (BCA) là (OR ≈ 0,95), và ở ngành Thương mại (Commerce) là (OR ≈ 1,27) so với nhóm tham chiếu. Tuy nhiên, điều quan trọng là không có sự khác biệt nào trong số này đủ lớn để mang ý nghĩa thống kê.
Bằng chứng cốt lõi cho kết luận này là khoảng tin cậy 95% của tất cả các so sánh này đều chứa giá trị 1. Kết quả từ các phương pháp kiểm định (Fisher’s exact, Chi-bình phương,…) cho từng cặp so sánh đều cho ra các giá trị \(p-value\) rất lớn, cao hơn nhiều so với mức 0,05. Điều này cung cấp một bằng chứng rất mạnh mẽ, khẳng định rằng sự khác biệt về tỷ lệ căng thẳng giữa các ngành học rất có thể chỉ do tình cờ, không phản ánh một xu hướng thực sự.
# Lập bảng chéo
freq_tb_3 <- factor(tl_dt$willingness.to.pursue.a.career.based.on.their.degree.Group, levels = c("Sẵn sàng theo ngành", "Không hoàn toàn theo ngành"))
freq_tb_3 <- table(tl_dt$willingness.to.pursue.a.career.based.on.their.degree.Group, tl_dt$part.time.job)
# Thêm tổng hàng và tổng cột
freq_tb_3a <- addmargins(freq_tb_3)
# Hiển thị bảng
freq_tb_3a
##
## No Yes Sum
## Không hoàn toàn theo ngành 66 11 77
## Sẵn sàng theo ngành 128 30 158
## Sum 194 41 235
# Tạo bảng tần suất chéo (theo hàng) giữa Stress.Group và Financial.Group
stress_3_f <- prop.table(table(tl_dt$willingness.to.pursue.a.career.based.on.their.degree.Group, tl_dt$part.time.job), margin = 1)
# Làm tròn kết quả cho dễ đọc
stress_3_freq <- round(stress_3_f, 2)
# Hiển thị bảng
stress_3_freq
##
## No Yes
## Không hoàn toàn theo ngành 0.86 0.14
## Sẵn sàng theo ngành 0.81 0.19
# Chuyển bảng tần suất thành data frame để vẽ ggplot
stress_3_freq_df <- as.data.frame(stress_3_f)
colnames(stress_3_freq_df) <- c("Willingness", "Part_time_job", "Percent")
# Chuyển sang phần trăm
stress_3_freq_df$Percent <- stress_3_freq_df$Percent * 100
# Vẽ biểu đồ
library(ggplot2)
ggplot(stress_3_freq_df, aes(x = Willingness, y = Percent, fill = Part_time_job)) +
geom_col(position = "stack", width = 0.7, color = "black") +
geom_text(aes(label = sprintf("%.1f%%", Percent)),
position = position_stack(vjust = 0.5), size = 4) +
labs(title = "Tỷ lệ (%) sẵn sàng làm việc đúng ngành theo tình trạng làm thêm",
x = "Mức độ sẵn sàng", y = "Tần suất (%)",
fill = "Công việc làm thêm") +
scale_fill_brewer(palette = "Set2") +
theme_minimal()
Nhận xét
Biểu đồ cho thấy một mối liên hệ thú vị giữa việc đi làm thêm và sự quyết tâm theo đuổi đúng ngành học của sinh viên. Cụ thể, những bạn có đi làm thêm dường như có định hướng rõ ràng hơn (19%), tạo ra mức chênh lệch 4,7%.
Ngược lại, những bạn không đi làm thêm lại chiếm số đông hơn trong nhóm còn đang phân vân (85,7%), chưa chắc chắn về định hướng, với mức chênh lệch 4,7%.
Dù sự khác biệt này không quá lớn, nó gợi ý rằng kinh nghiệm làm việc thực tế có thể đã giúp sinh viên củng cố quyết tâm theo đuổi sự nghiệp đúng chuyên môn. Nói cách khác, việc va chạm với công việc dường như giúp các bạn tự tin hơn vào con đường mình đã chọn, trong khi nhóm không đi làm thêm có thể còn đang do dự nhiều hơn một chút.
Giả thuyết
# Thực hiện kiểm định Chi-squared
chi2 <- chisq.test(freq_tb_3)
# In kết quả kiểm định
print(chi2)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: freq_tb_3
## X-squared = 0.50165, df = 1, p-value = 0.4788
Kết quả kiểm định Chi-squared
Kết luận:
Với \(p-value\) = 0.4788 > 0.05, ta có không có đủ bằng chứng để bác bỏ giả thuyết \(H_0\), Điều này cho thấy giữa hai biến quan sát độc lập với nhau.
\(p_1 = P(\text{Willingness to pursue a
career based on their degree Group} = \text{Sẵn sàng theo ngành} \mid
\text{Part time job} = \text{không})\)
(Tỷ lệ sinh viên làm thêm và sẵn sàng làm đúng ngành)
\(p_2 = P(\text{Willingness to pursue a
career based on their degree Group} = \text{Sẵn sàng theo ngành} \mid
\text{Part time job} = \text{có})\)
(Tỷ lệ sinh viên không làm thêm và sẵn sàng làm đúng
ngành)
Giả thuyết kiểm định:
\(H_0: p_1 - p_2 = 0\)
(Tỷ lệ sinh viên làm thêm và sẵn sàng làm đúng ngành bằng với tỷ lệ
sinh viên không làm thêm và sẵn sàng làm đúng ngành)
\(H_1: p_1 - p_2 \neq 0\)
(Tỷ lệ sinh viên làm thêm và sẵn sàng làm đúng ngành khác với tỷ lệ
sinh viên không làm thêm và sẵn sàng làm đúng ngành)
counts <- c(freq_tb_3a["Sẵn sàng theo ngành", "Yes"], freq_tb_3a["Sẵn sàng theo ngành", "No"])
# Tạo vector tổng số sinh viên trong từng nhóm
totals <- c(freq_tb_3a["Sum", "Yes"], freq_tb_3a["Sum", "No"])
# Thực hiện kiểm định tỷ lệ 2 mẫu (không hiệu chỉnh)
test_stress <- prop.test(counts, totals, alternative = "two.sided", correct = FALSE)
# Xem kết quả
print(test_stress)
##
## 2-sample test for equality of proportions without continuity correction
##
## data: counts out of totals
## X-squared = 0.79456, df = 1, p-value = 0.3727
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## -0.07920889 0.22303590
## sample estimates:
## prop 1 prop 2
## 0.7317073 0.6597938
Kết quả kiểm định
Giá trị thống kê: \(\chi^2\) =
0.79456
Bậc tự do: \(df\) = 1
Giá trị \(p-value\) = 0.3727
Khoảng tin cậy 95%: (-0.07920889; 0.22303590)
Kết quả kiểm định cho ra \(p-value\) = 0.3727, vì giá trị này lớn hơn mức ý nghĩa 0.05, không có đủ cơ sở để bác bỏ giả thuyết \(H_0\). Nói cách khác, sự khác biệt về tỷ lệ sinh viên “sẵn sàng làm việc đúng ngành” giữa hai nhóm (có đi làm thêm hoặc không) là không có ý nghĩa thống kê.
Dữ liệu mẫu cho thấy tỷ lệ sinh viên “sẵn sàng làm việc đúng ngành” ở nhóm thứ nhất (có đi làm thêm) là khoảng 73,2%, cao hơn một chút so với tỷ lệ ở nhóm thứ hai (không đi làm thêm) là 66,0% (chênh lệch khoảng 7,2%). Kết quả kiểm định đã khẳng định rằng sự chênh lệch nhỏ này rất có thể chỉ do yếu tố ngẫu nhiên trong quá trình lấy mẫu, không phản ánh một xu hướng thực sự.
Giả thuyết kiểm định:
\(H_0: p_1 = p_2\)
\(H_1: p_1 ≠ p_2 \neq 0\)
library(epitools)
riskratio(freq_tb_3)
## $data
##
## No Yes Total
## Không hoàn toàn theo ngành 66 11 77
## Sẵn sàng theo ngành 128 30 158
## Total 194 41 235
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Không hoàn toàn theo ngành 1.000000 NA NA
## Sẵn sàng theo ngành 1.329114 0.7044306 2.507761
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Không hoàn toàn theo ngành NA NA NA
## Sẵn sàng theo ngành 0.3824905 0.4647619 0.3727249
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Kết quả phân tích Tỷ lệ Rủi ro (Risk Ratio - RR) cho thấy không có sự khác biệt có ý nghĩa thống kê về mối liên hệ giữa việc có đi làm thêm và mức độ sẵn sàng làm việc đúng ngành. Cụ thể, khả năng một sinh viên có đi làm thêm thuộc nhóm “Sẵn sàng theo ngành” cao hơn 1,33 lần so với nhóm “Không hoàn toàn theo ngành”. Diễn giải một cách đơn giản hơn, dù có xu hướng những sinh viên sẵn sàng theo ngành có việc làm thêm nhiều hơn, nhưng sự khác biệt này không đủ lớn để có ý nghĩa thống kê. Điều này được củng cố bởi khoảng tin cậy 95% [0,70; 2,51], vì khoảng này chứa giá trị 1.
Kết quả từ cả ba phương pháp kiểm định khác nhau (Fisher’s exact, Chi-bình phương,…) đều cho ra \(p-value\) rất lớn, so với mức 0,05. Điều này cung cấp một bằng chứng rất mạnh mẽ, khẳng định rằng sự khác biệt về tỷ lệ sinh viên có việc làm thêm giữa hai nhóm sẵn sàng theo ngành rất có thể chỉ do tình cờ, không phản ánh một xu hướng thực sự.
oddsratio(freq_tb_3)
## $data
##
## No Yes Total
## Không hoàn toàn theo ngành 66 11 77
## Sẵn sàng theo ngành 128 30 158
## Total 194 41 235
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Không hoàn toàn theo ngành 1.000000 NA NA
## Sẵn sàng theo ngành 1.393577 0.6701999 3.089887
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Không hoàn toàn theo ngành NA NA NA
## Sẵn sàng theo ngành 0.3824905 0.4647619 0.3727249
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Kết quả cho thấy không có sự khác biệt có ý nghĩa thống kê về mối liên hệ giữa việc có đi làm thêm và mức độ sẵn sàng làm việc đúng ngành. Ước tính Tỷ lệ chênh (OR) là 1,39. Diễn giải một cách đơn giản, odds (cơ hội) để một sinh viên có việc làm thêm thuộc nhóm “Sẵn sàng theo ngành” cao hơn 1,39 lần so với nhóm “Không hoàn toàn theo ngành”. Tuy nhiên, sự chênh lệch này được khẳng định là không có ý nghĩa thống kê, vì khoảng tin cậy 95% của OR dao động từ 0,67 đến 3,09, và do khoảng này chứa giá trị 1, điều này củng cố thêm bằng chứng rằng sự khác biệt quan sát được không có ý nghĩa thống kê và rất có thể chỉ do yếu tố ngẫu nhiên.
Bên cạnh đó, kết quả từ nhiều phép kiểm định khác nhau (bao gồm Fisher’s Exact Test, Chi-Square Test, …) đều cho ra giá trị \(p-value\) nrất lớn, cao hơn nhiều so với mức ý nghĩa 0,05. Điều này cung cấp bằng chứng thống kê vững chắc rằng không có mối liên hệ thực sự giữa việc có đi làm thêm và mức độ sẵn sàng làm việc đúng ngành, và sự khác biệt nhỏ quan sát được trong mẫu rất có thể chỉ do tình cờ.
# Lập bảng chéo
freq_tb_4 <- factor(tl_dt$willingness.to.pursue.a.career.based.on.their.degree.Group, levels = c("Sẵn sàng theo ngành", "Không hoàn toàn theo ngành"))
freq_tb_4 <- table(tl_dt$willingness.to.pursue.a.career.based.on.their.degree.Group, tl_dt$Financial.Group)
# Thêm tổng hàng và tổng cột
freq_tb_4a <- addmargins(freq_tb_4)
# Hiển thị bảng
freq_tb_4a
##
## Tài chính khó khăn Tài chính ổn định Sum
## Không hoàn toàn theo ngành 39 38 77
## Sẵn sàng theo ngành 63 95 158
## Sum 102 133 235
# Tạo bảng tần suất chéo
stress_4_f <- prop.table(table(tl_dt$willingness.to.pursue.a.career.based.on.their.degree.Group, tl_dt$Financial.Group), margin = 1)
# Làm tròn kết quả cho dễ đọc
stress_4_freq <- round(stress_4_f, 2)
# Hiển thị bảng
stress_4_freq
##
## Tài chính khó khăn Tài chính ổn định
## Không hoàn toàn theo ngành 0.51 0.49
## Sẵn sàng theo ngành 0.40 0.60
# CHUYỂN bảng tần suất thành data frame để vẽ ggplot
stress_4_freq_df <- as.data.frame(stress_4_f)
colnames(stress_4_freq_df) <- c("Willingness", "Financial.Group", "Percent")
# Đổi sang % để dễ nhìn
stress_4_freq_df$Percent <- stress_4_freq_df$Percent * 100
# Vẽ biểu đồ cột chồng (stacked bar chart)
library(ggplot2)
ggplot(stress_4_freq_df, aes(x = Willingness, y = Percent, fill = Financial.Group)) +
geom_col(position = "stack", width = 0.7, color = "black") +
geom_text(aes(label = sprintf("%.1f%%", Percent)),
position = position_stack(vjust = 0.5),
size = 4) +
labs(
title = "Tỷ lệ (%) sinh viên theo mức độ sẵn sàng làm việc đúng ngành và tình hình tài chính",
x = "Mức độ sẵn sàng làm việc đúng ngành",
y = "Tần suất (%)",
fill = "Tài chính"
) +
scale_fill_brewer(palette = "Set2") +
theme_minimal()
Nhận xét
Biểu đồ cho thấy một mối liên hệ mạnh mẽ giữa tình hình tài chính và mức độ sẵn sàng làm việc đúng ngành của sinh viên. Tỷ lệ sinh viên có “Tài chính ổn định” chiếm đa số áp đảo trong nhóm “Sẵn sàng theo ngành” (60,1%), cao hơn đáng kể so với nhóm “Không hoàn toàn theo ngành” (49,4%), với chênh lệch 10,7%.
Ngược lại, tỷ lệ sinh viên có “Tài chính khó khăn” lại chiếm đa số trong nhóm “Không hoàn toàn theo ngành” (50,6%), trong khi tỷ lệ này ở nhóm “Sẵn sàng theo ngành” thấp hơn rõ rệt (39,9%).
Sự chênh lệch rõ rệt này khẳng định xu hướng rằng tình hình tài chính là một yếu tố quan trọng có liên quan đến định hướng nghề nghiệp của sinh viên. Kết quả này có thể phản ánh rằng khi có tài chính ổn định, sinh viên ít bị áp lực phải tìm kiếm việc làm trái ngành để trang trải cuộc sống. Điều này cho phép họ tự tin và tập trung hơn vào việc theo đuổi sự nghiệp đúng với chuyên môn đã được đào tạo.
Giả thuyết
# Thực hiện kiểm định Chi-squared
chi2 <- chisq.test(freq_tb_4)
# In kết quả kiểm định
print(chi2)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: freq_tb_4
## X-squared = 2.0282, df = 1, p-value = 0.1544
Kết quả kiểm định Chi-squared
Kết luận:
Với \(p-value\) = 0.1544 > 0.05, ta có đủ bằng chứng để bác bỏ giả thuyết \(H_0\), Điều này cho thấy giữa hai biến quan sát độc lập với nhau.
\(p_1 = P(\text{Willingness to pursue a
career based on their degree Group} \mid \text{Financial Group} =
\text{Khó khăn})\)
(Tỷ lệ sinh viên gặp khó khăn tài chính sẵn sàng làm việc đúng
ngành)
\(p_2 = P(\text{Willingness to pursue a
career based on their degree Group} \mid \text{Financial.Group} =
\text{Ổn định})\)
(Tỷ lệ sinh viên có tài chính ổn định sẵn sàng làm việc đúng
ngành)
Giả thuyết kiểm định:
\(H_0: p_1 - p_2 = 0\)
(Tỷ lệ sinh viên gặp khó khăn tài chính sẵn sàng làm việc đúng ngành
bằng với Tỷ lệ sinh viên có tài chính ổn định sẵn sàng làm việc đúng
ngành)
\(H_1: p_1 - p_2 \neq 0\)
(Tỷ lệ sinh viên gặp khó khăn tài chính sẵn sàng làm việc đúng ngành
khác với Tỷ lệ sinh viên có tài chính ổn định sẵn sàng làm việc đúng
ngành)
# Tạo vector số lượng
counts <- c(freq_tb_4["Sẵn sàng theo ngành", "Tài chính khó khăn"], freq_tb_4["Sẵn sàng theo ngành", "Tài chính ổn định"])
# Tạo vector tổng số sinh viên trong từng nhóm tình hình tài chính
totals <- c(sum(freq_tb_4[, "Tài chính khó khăn"]), sum(freq_tb_4[, "Tài chính ổn định"]))
# Thực hiện kiểm định tỷ lệ 2 mẫu
test_stress <- prop.test(counts, totals, alternative = "two.sided", correct = FALSE)
# Xem kết quả
test_stress
##
## 2-sample test for equality of proportions without continuity correction
##
## data: counts out of totals
## X-squared = 2.4472, df = 1, p-value = 0.1177
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## -0.21824703 0.02496972
## sample estimates:
## prop 1 prop 2
## 0.6176471 0.7142857
Kết quả kiểm định
Giá trị thống kê: \(\chi^2\) =
2.4472
Bậc tự do: \(df\) = 1
Giá trị \(p-value\) = 0.1177
Khoảng tin cậy 95%: (-0.21824703 ; 0.02496972)
Kết quả kiểm định cho ra \(p-value\) = 0.1177, vì giá trị này nhỏ hơn mức ý nghĩa 0.05, có đủ cơ sở để bác bỏ giả thuyết \(H_0\). Nói cách khác, sự khác biệt về tỷ lệ sinh viên “sẵn sàng làm việc đúng ngành” giữa hai nhóm tình hình tài chính (khó khăn và ổn định) là không có ý nghĩa thống kê..
Dữ liệu mẫu cho thấy tỷ lệ sinh viên có “tài chính khó khăn” trong nhóm “sẵn sàng làm việc đúng ngành” là khoảng 61,77%, cao hơn đáng kể so với tỷ lệ ở nhóm “tài chính ổn định” là 71,43% (chênh lệch 9,66%). Kết quả kiểm định đã khẳng định rằng sự chênh lệch lớn này không phải là do yếu tố ngẫu nhiên trong quá trình lấy mẫu.
Giả thuyết kiểm định:
\(H_0: p_1 = p_2\)
\(H_1: p_1 ≠ p_2 \neq 0\)
library(epitools)
riskratio(freq_tb_4)
## $data
##
## Tài chính khó khăn Tài chính ổn định Total
## Không hoàn toàn theo ngành 39 38 77
## Sẵn sàng theo ngành 63 95 158
## Total 102 133 235
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Không hoàn toàn theo ngành 1.000000 NA NA
## Sẵn sàng theo ngành 1.218354 0.939911 1.579285
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Không hoàn toàn theo ngành NA NA NA
## Sẵn sàng theo ngành 0.1217435 0.1252645 0.117733
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Kết quả Kết quả phân tích Tỷ lệ Rủi ro (Risk Ratio - RR) cho thấy không có sự khác biệt có ý nghĩa thống kê về mối liên hệ giữa tình hình tài chính và mức độ sẵn sàng làm việc đúng ngành. Cụ thể, khả năng một sinh viên có tài chính ổn định thuộc nhóm “Sẵn sàng theo ngành” cao gấp 1,22 lần so với nhóm “Không hoàn toàn theo ngành”. Tuy nhiên, sự khác biệt này không có ý nghĩa thống kê, vì khoảng tin cậy 95% [0,94; 1,58] chứa giá trị 1, cho thấy sự khác biệt quan sát được rất có thể chỉ do ngẫu nhiên.
Kết quả từ cả ba phương pháp kiểm định khác nhau (Fisher’s exact, Chi-bình phương,…) đều cho ra \(p-value\) rất nhỏ, thấp hơn nhiều so với mức 0,05. Điều này cung cấp một bằng chứng rất mạnh mẽ, khẳng định rằng mối liên hệ khảo sát được giữa tình hình tài chính và định hướng nghề nghiệp rất có thể chỉ do tình cờ, không phản ánh một xu hướng thực sự.
oddsratio(freq_tb_4)
## $data
##
## Tài chính khó khăn Tài chính ổn định Total
## Không hoàn toàn theo ngành 39 38 77
## Sẵn sàng theo ngành 63 95 158
## Total 102 133 235
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Không hoàn toàn theo ngành 1.000000 NA NA
## Sẵn sàng theo ngành 1.544166 0.890546 2.684991
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Không hoàn toàn theo ngành NA NA NA
## Sẵn sàng theo ngành 0.1217435 0.1252645 0.117733
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Kết quả Kết quả phân tích Tỷ lệ chênh (Odds Ratio - OR) cho thấy không có một mối liên hệ có ý nghĩa thống kê giữa tình hình tài chính và mức độ sẵn sàng làm việc đúng ngành của sinh viên. Cụ thể, so với nhóm “Không hoàn toàn theo ngành”, sinh viên thuộc nhóm “Sẵn sàng theo ngành” có tỷ lệ chênh (OR) về tình hình tài chính ổn định cao hơn 1,54 lần. Tuy nhiên, sự khác biệt này không có ý nghĩa thống kê, được củng cố bởi khoảng tin cậy 95% của OR dao động từ 0,89 đến 2,68. Vì khoảng tin cậy này chứa giá trị 1, chúng ta có thể kết luận rằng mối liên hệ quan sát được rất có thể chỉ do yếu tố ngẫu nhiên.
Bên cạnh đó, kết quả từ nhiều phép kiểm định khác nhau (bao gồm Fisher’s Exact Test, Chi-Square Test, …) đều cho ra giá trị \(p-value\) nhỏ hơn nhiều so với mức ý nghĩa 0.05. Điều này cung cấp bằng chứng thống kê vững chắc rằng không có đủ cơ sở để kết luận có mối liên hệ thực sự giữa tình hình tài chính và mức độ sẵn sàng làm việc đúng ngành, và sự khác biệt quan sát được trong mẫu rất có thể chỉ do tình cờ.
Dựa trên các phân tích thống kê, có thể rút ra những kết luận cốt lõi sau:
1. Phát hiện quan trọng nhất: Mối liên hệ giữa tình hình tài chính và mức độ Stress
Các chỉ số thống kê minh chứng: - Tỷ lệ rủi ro (Risk Ratio - RR): 1.42, với khoảng tin cậy 95% là [1.09; 1.84]. - Tỷ lệ chênh (Odds Ratio - OR): 2.13, với khoảng tin cậy 95% là [1.25; 3.68]. - Vì cả hai khoảng tin cậy đều không chứa giá trị 1, nên có thể khẳng định rằng mối liên hệ này là có thật, không phải do ngẫu nhiên.
2. Các yếu tố khác không có mối liên hệ thống kê với mức độ stress
3. Không có yếu tố nào liên quan thống kê với mức độ sẵn sàng làm việc đúng ngành
4. Tổng quan mẫu khảo sát
Nghiên cứu này có vài điểm hạn chế quan trọng. Đầu tiên, nhóm người tham gia chưa thật sự đại diện cho số đông, vì có quá nhiều nam và đa số đến từ ngành BCA, nên kết quả khó áp dụng cho mọi nhóm người khác nhau. Thứ hai, cách làm nghiên cứu chỉ cho thấy mối liên hệ giữa các yếu tố, chứ không thể xác định cái gì là nguyên nhân gây ra cái gì. Thêm vào đó, vì người tham gia tự đánh giá bản thân nên kết quả có thể bị lệch do cảm tính hoặc thiếu chính xác. Cuối cùng, nghiên cứu chưa xem xét đến những yếu tố khác có thể ảnh hưởng như thành tích học tập hay các mối quan hệ xã hội.
1. Hỗ trợ Tài chính và Sức khỏe Tinh thần
Vì tình hình tài chính là yếu tố có liên hệ mạnh mẽ và ý nghĩa thống kê với mức độ stress, nhà trường cần xem xét các biện pháp hỗ trợ sau:
Nâng cao năng lực tài chính: Tổ chức các workshop kỹ năng quản lý tài chính cá nhân, và lồng ghép nội dung này vào các hoạt động sinh viên hoặc môn học kỹ năng mềm.
Hỗ trợ trực tiếp: Mở rộng các quỹ học bổng và chương trình miễn giảm học phí cho các đối tượng khó khăn, Xây dựng một cổng thông tin việc làm bán thời gian uy tín, kết nối sinh viên với các công việc phù hợp để giảm gánh nặng tài chính.
2. Định hướng Nghề nghiệp
Đáp ứng nguyện vọng làm việc đúng chuyên ngành của đa số sinh viên (67%), nhà trường nên triển khai:
Tăng trải nghiệm thực tế: Đẩy mạnh các chương trình thực tập, kiến tập, đặc biệt từ năm 1–2, nhằm giúp sinh viên làm quen sớm với môi trường làm việc chuyên môn.
Kết nối với chuyên gia: Tổ chức định kỳ các buổi hội thảo, tọa đàm với: Chuyên gia trong ngành, Cựu sinh viên nhằm giúp sinh viên có thêm góc nhìn thực tế, hiểu rõ yêu cầu công việc và định hướng rõ ràng hơn cho tương lai nghề nghiệp.
1. Cải thiện Thiết kế và Phương pháp luận
2. Đào sâu Phân tích
3. Gợi ý câu hỏi cho nghiên cứu tiếp theo