Dữ liệu được sử dụng trong bài tập này có tên là “Student Spending Habits”, tạm dịch: Thói quen chi tiêu của sinh viên.
Bộ dữ liệu được thu thập và công bố trênnền tảng Kaggle, nhằm phục vụ mục đích học tập và nghiên cứu trong lĩnh vực phân tích dữ liệu.
Nguồn trích dẫn cụ thể: Student Spending Habits Dataset
Dữ liệu mô phỏng kết quả khảo sát về tình hình chi tiêu của sinh viên đại học, bao gồm nhiều nhóm đối tượng khác nhau dựa trên đặc điểm nhân khẩu học và ngành học. Thông tin được thu thập thông qua bảng khảo sát trực tuyến, với trọng tâm là các khoản chi tiêu thường gặp cũng như sự khác biệt trong hành vi tài chính của sinh viên.
Bộ dữ liệu “Student Spending” mô phỏng chi tiết thói quen chi tiêu của 1.000 sinh viên đại học đến từ nhiều nhóm nhân khẩu học và chuyên ngành khác nhau. Mỗi quan sát tương ứng với một sinh viên, bao gồm thông tin cá nhân (tuổi, giới tính, năm học, chuyên ngành), thu nhập và hỗ trợ tài chính, cùng với các khoản chi tiêu theo từng danh mục cụ thể và phương thức thanh toán ưa thích.
library(readr)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(skimr)
library(psych)
library(csv)
library(DT)
library(ggplot2)
##
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
##
## %+%, alpha
library(forcats)
library(knitr)
library(tibble)
library(kableExtra)
##
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rows
data <- read.csv("F:/Ngôn ngữ lập trình/student_spending (1).csv", header = T)
datatable(data)
Trước khi tiến hành phân tích, ta cần tìm hiểu cụ thể các biến có trong bộ dữ liệu, bao gồm tên biến, kiểu dữ liệu và ý nghĩa nội dung. Việc hiểu rõ các biến giúp xác định chính xác phương pháp xử lý phù hợp cho từng loại biến (định tính hay định lượng).
Tên của các biến trong bộ dữ liệu có thể được liệt kê thông qua lệnh names() như sau:
names(data)
## [1] "X" "age"
## [3] "gender" "year_in_school"
## [5] "major" "monthly_income"
## [7] "financial_aid" "tuition"
## [9] "housing" "food"
## [11] "transportation" "books_supplies"
## [13] "entertainment" "personal_care"
## [15] "technology" "health_wellness"
## [17] "miscellaneous" "preferred_payment_method"
Dưới đây là bảng mô tả chi tiết từng biến:
variable_description <- data.frame(
Bien = c("Unnamed: 0", "Age", "Gender", "Year in School", "Major",
"Monthly Income", "Financial Aid", "Tuition", "Housing", "Food",
"Transportation", "Books & Supplies", "Entertainment",
"Personal Care", "Technology", "Health & Wellness",
"Miscellaneous", "Preferred Payment Method"),
Mo_ta = c("Chỉ số dòng trong tập dữ liệu (tự sinh ra, có thể bỏ qua)",
"Tuổi của sinh viên",
"Giới tính của sinh viên (Nam, Nữ, Không phân biệt)",
"Năm học hiện tại (Năm nhất, Năm hai, Năm ba, Năm cuối)",
"Ngành học chính của sinh viên",
"Thu nhập hàng tháng của sinh viên (USD)",
"Số tiền hỗ trợ tài chính/học bổng nhận được (USD)",
"Chi phí học phí hàng tháng (USD)",
"Chi phí nhà ở hàng tháng (USD)",
"Chi phí thực phẩm hàng tháng (USD)",
"Chi phí đi lại hàng tháng (USD)",
"Chi phí sách vở và dụng cụ học tập (USD)",
"Chi phí giải trí hàng tháng (USD)",
"Chi phí chăm sóc cá nhân hàng tháng (USD)",
"Chi phí công nghệ hàng tháng (USD)",
"Chi phí sức khỏe và chăm sóc sức khỏe (USD)",
"Các chi phí lặt vặt khác (USD)",
"Phương thức thanh toán ưa thích (Tiền mặt, Thẻ tín dụng/Ghi nợ, Ứng dụng thanh toán)"),
stringsAsFactors = FALSE
)
kbl(variable_description, col.names = c("Biến", "Mô tả"), booktabs = TRUE) %>%
kable_styling(latex_options = c("striped", "hold_position"))
| Biến | Mô tả |
|---|---|
| Unnamed: 0 | Chỉ số dòng trong tập dữ liệu (tự sinh ra, có thể bỏ qua) |
| Age | Tuổi của sinh viên |
| Gender | Giới tính của sinh viên (Nam, Nữ, Không phân biệt) |
| Year in School | Năm học hiện tại (Năm nhất, Năm hai, Năm ba, Năm cuối) |
| Major | Ngành học chính của sinh viên |
| Monthly Income | Thu nhập hàng tháng của sinh viên (USD) |
| Financial Aid | Số tiền hỗ trợ tài chính/học bổng nhận được (USD) |
| Tuition | Chi phí học phí hàng tháng (USD) |
| Housing | Chi phí nhà ở hàng tháng (USD) |
| Food | Chi phí thực phẩm hàng tháng (USD) |
| Transportation | Chi phí đi lại hàng tháng (USD) |
| Books & Supplies | Chi phí sách vở và dụng cụ học tập (USD) |
| Entertainment | Chi phí giải trí hàng tháng (USD) |
| Personal Care | Chi phí chăm sóc cá nhân hàng tháng (USD) |
| Technology | Chi phí công nghệ hàng tháng (USD) |
| Health & Wellness | Chi phí sức khỏe và chăm sóc sức khỏe (USD) |
| Miscellaneous | Các chi phí lặt vặt khác (USD) |
| Preferred Payment Method | Phương thức thanh toán ưa thích (Tiền mặt, Thẻ tín dụng/Ghi nợ, Ứng dụng thanh toán) |
Để có cái nhìn tổng quan về dữ liệu, ta sử dụng hàm
str(). Lệnh này sẽ hiển thị tổng số dòng (quan sát) và số
cột (biến), tên các biến cùng kiểu dữ liệu tương ứng (số, chuỗi ký tự,
nhân tố), cũng như một vài giá trị đầu tiên của từng biến, giúp xác định
nhanh cấu trúc và đặc điểm cơ bản của tập dữ liệu.
str(data)
## 'data.frame': 1000 obs. of 18 variables:
## $ X : int 0 1 2 3 4 5 6 7 8 9 ...
## $ age : int 19 24 24 23 20 25 23 23 22 18 ...
## $ gender : chr "Non-binary" "Female" "Non-binary" "Female" ...
## $ year_in_school : chr "Freshman" "Junior" "Junior" "Senior" ...
## $ major : chr "Psychology" "Economics" "Economics" "Computer Science" ...
## $ monthly_income : int 958 1006 734 617 810 523 1354 631 1402 1423 ...
## $ financial_aid : int 270 875 928 265 522 790 69 748 248 74 ...
## $ tuition : int 5939 4908 3051 4935 3887 3151 4973 3966 5638 3977 ...
## $ housing : int 709 557 666 652 825 413 812 571 599 626 ...
## $ food : int 296 365 220 289 372 386 398 269 354 249 ...
## $ transportation : int 123 85 137 114 168 122 101 92 82 117 ...
## $ books_supplies : int 188 252 99 223 194 131 213 251 155 123 ...
## $ entertainment : int 41 74 130 99 48 73 21 37 123 51 ...
## $ personal_care : int 78 92 23 30 71 38 38 90 41 74 ...
## $ technology : int 134 226 239 163 88 234 157 152 162 243 ...
## $ health_wellness : int 127 129 112 105 71 108 117 56 172 34 ...
## $ miscellaneous : int 72 68 133 55 104 99 48 62 194 196 ...
## $ preferred_payment_method: chr "Credit/Debit Card" "Credit/Debit Card" "Cash" "Mobile Payment App" ...
Dựa trên kết quả từ str(), bộ dữ liệu bao gồm
1.000 quan sát và 18 biến. Trong đó,
các biến thể hiện thông tin nhân khẩu học, tình hình tài chính, chi tiêu
và hành vi thanh toán của sinh viên.
Để phục vụ cho quá trình phân tích, ta cần xác định các biến định tính trong bộ dữ liệu. Việc này giúp phân biệt giữa các biến phân loại (danh mục) và biến định lượng, từ đó lựa chọn phương pháp phân tích phù hợp. Trong R, ta có thể sử dụng đoạn mã sau để lọc ra tên các biến định tính:
qualitative_vars <- names(data)[sapply(data, function(x) is.factor(x) || is.character(x))]
qualitative_vars
## [1] "gender" "year_in_school"
## [3] "major" "preferred_payment_method"
Câu lệnh trên trả về danh sách các biến có kiểu dữ liệu là factor hoặc character, vốn thường được dùng để biểu diễn thông tin phân loại như giới tính, ngành học, hoặc phương thức thanh toán.
Phân tích dữ liệu tập trung vào việc khám phá đặc điểm chi tiêu của sinh viên, và đánh giá vai trò của các biến định tính trong việc phản ánh thông tin cá nhân và hành vi tiêu dùng.
Sau khi lọc và kiểm tra kiểu dữ liệu, có thể xác định được 4 biến định tính chính trong bộ dữ liệu như sau:
Gender: Giới tính của sinh viên
(Male – Nam, Female – Nữ, Non-binary – Không phân biệt giới
tính)
Year in School: Năm học hiện tại của sinh viên
(Freshman – Năm nhất, Sophomore – Năm hai, Junior – Năm ba, Senior –
Năm cuối)
Major: Ngành học chính
Preferred Payment Method: Phương thức thanh toán ưa
thích
(Cash – Tiền mặt, Credit/Debit Card – Thẻ tín dụng/Ghi nợ, Mobile
Payment App – Ứng dụng thanh toán di động)
Ngoài ra, các biến định lượng phản ánh tình hình tài chính và chi tiêu bao gồm:
Monthly Income: Thu nhập hàng tháng (USD)Financial Aid: Học bổng/Hỗ trợ tài chính (USD)Tuition, Housing, Food,
Transportation, Books & Supplies,
Entertainment, Personal Care,
Technology, Health & Wellness,
Miscellaneous: Các khoản chi tiêu cụ thể theo danh mục
(USD)Sau khi đã xác định được các biến định tính, ta tiến hành trích lọc
riêng các biến này để phục vụ phân tích mô tả và kiểm định giả thuyết
cho từng nhóm phân loại. Tập con dữ liệu mới này được đặt tên là
dl để tiện thao tác và xử lý trong các bước tiếp theo.
dldt <- data[, qualitative_vars]
Bảng tần số
tanso_gender <- table(dldt$gender)
tanso_gender
##
## Female Male Non-binary
## 323 356 321
Biểu đồ
barplot(
tanso_gender,
main = "Tần số theo giới tính",
xlab = "Giới tính",
ylab = "Số quan sát",
las = 1,
col = c("pink", "blue","green"),
border = "white")
Bảng tần suất
tansuat_gender <- tanso_gender/sum(nrow(dldt))
tansuat_gender
##
## Female Male Non-binary
## 0.323 0.356 0.321
Biểu đồ
# Màu cho từng lát
cols <- c("pink", "green","yellow")
# Nhãn phần trăm
nhangender <- paste0(round(tansuat_gender * 100, 1), "%")
# Vẽ pie chart không nhãn
pie(
tansuat_gender,
labels = NA, # ẩn nhãn ngay trên lát
main = "Tần suất theo giới tính",
col = cols,
border = "white"
)
# Thêm legend bên ngoài góc phải
legend(
x = "topright",
legend = paste(names(tansuat_gender), nhangender),
fill = cols,
)
Nhận xét:
Kết quả phân tích cho thấy cơ cấu giới tính trong bộ dữ liệu khá đồng đều giữa ba nhóm:
Biểu đồ tần số và tần suất cho thấy sự phân bố giới tính tương đối cân bằng, với sự chênh lệch không đáng kể giữa các nhóm. Điều này cho thấy dữ liệu được thu thập khá đại diện, tạo điều kiện thuận lợi cho việc phân tích so sánh theo giới tính trong các phần tiếp theo.
n_female <- sum(dldt$gender == "Female")
n_total <- nrow(dldt)
prop.test(n_female, n_total, conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: n_female out of n_total, null probability 0.5
## X-squared = 124.61, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.2942555 0.3531225
## sample estimates:
## p
## 0.323
Tỷ lệ ước lượng: Khoảng 32.3% sinh viên trong mẫu là nữ.
Khoảng tin cậy 95%: nằm trong khoảng từ 29.43% đến 35.31%.
Diễn giải: Kết quả kiểm định cho thấy tỷ lệ sinh
viên nữ trong mẫu là khoảng 32.3%. Khoảng tin cậy 95% cho tỷ lệ này được
tính từ kết quả prop.test(). Vì khoảng tin cậy không bao
gồm 50% và p-value nhỏ hơn 0.05, ta có thể kết luận rằng tỷ lệ sinh viên
nữ trong tổng thể khác 50% với độ tin cậy cao.
Giả thuyết H₀ (H0): Tỷ lệ sinh viên nữ trong tổng thể là 50% (p = 0.5).
Giả thuyết H₁ (H1): Tỷ lệ sinh viên nữ trong tổng thể khác 50% (p ≠ 0.5).
Quy tắc quyết định:
Nếu p-value < 0.05 → Bác bỏ giả thuyết H₀: Có đủ bằng chứng thống kê để kết luận rằng tỷ lệ sinh viên nữ khác 50%.
Nếu p-value ≥ 0.05 → Không bác bỏ giả thuyết H₀: Chưa đủ bằng chứng để kết luận tỷ lệ sinh viên nữ khác 50%.
prop.test(n_female, n_total, p = 0.5, alternative = "two.sided", conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: n_female out of n_total, null probability 0.5
## X-squared = 124.61, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.2942555 0.3531225
## sample estimates:
## p
## 0.323
→ Kết quả: p-value < 2.2e-16 < 0.05 →
bác bỏ giả thuyết H₀.
Do đó, có thể kết luận rằng tỷ lệ sinh viên nữ khác
50%, và thực tế là khoảng 32.3%, thấp hơn so
với mức giả định.
Bảng tần số
tanso_year <- table(dldt$year_in_school)
tanso_year
##
## Freshman Junior Senior Sophomore
## 253 247 254 246
Biểu đồ
barplot(
tanso_year,
main = "Tần số theo năm học",
xlab = "Năm học",
ylab = "Số quan sát",
las = 1,
col = c("skyblue", "orange", "lightgreen", "plum"),
border = "white"
)
Bảng tần suất
tansuat_year <- tanso_year / sum(tanso_year)
tansuat_year
##
## Freshman Junior Senior Sophomore
## 0.253 0.247 0.254 0.246
Biểu đồ
# Màu cho từng lát
cols <- c("skyblue", "orange", "lightgreen", "plum")
# Nhãn phần trăm
nhan_year <- paste0(round(tansuat_year * 100, 1), "%")
# Vẽ biểu đồ tròn
pie(
tansuat_year,
labels = NA,
main = "Tần suất theo năm học",
col = cols,
border = "white"
)
# Thêm chú thích
legend(
x = "topright",
legend = paste(names(tansuat_year), nhan_year),
fill = cols
)
Nhận xét:
Kết quả phân tích cho thấy cơ cấu năm học trong bộ dữ liệu khá đồng đều giữa bốn nhóm:
Freshman (Năm nhất): chiếm khoảng 25.3%
Sophomore (Năm hai): chiếm khoảng 24.6%
Junior (Năm ba): chiếm khoảng 24.7%
Senior (Năm tư): chiếm khoảng 25.4%
Biểu đồ tần số và tần suất cho thấy sự phân bố sinh viên theo năm học tương đối cân bằng, với sự chênh lệch rất nhỏ giữa các nhóm. Điều này cho thấy dữ liệu được thu thập khá đại diện cho các năm học, tạo điều kiện thuận lợi cho các phân tích so sánh theo năm học trong các phần tiếp theo.
n_freshman <- sum(dldt$year_in_school == "Freshman")
n_total <- nrow(dldt)
prop.test(n_freshman, n_total, conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: n_freshman out of n_total, null probability 0.5
## X-squared = 243.05, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.2265552 0.2813702
## sample estimates:
## p
## 0.253
Tỷ lệ ước lượng: Khoảng 25.3% sinh viên trong mẫu là sinh viên năm nhất.
Khoảng tin cậy 95%: nằm trong khoảng từ 22.66% đến 28.14%.
Diễn giải: Kết quả kiểm định cho thấy tỷ lệ sinh
viên năm nhất trong mẫu là khoảng 25.3%. Khoảng tin cậy 95% cho tỷ lệ
này được tính từ kết quả prop.test(). Vì khoảng tin cậy
không bao gồm 50% và p-value nhỏ hơn 0.05, ta có thể kết luận rằng tỷ lệ
sinh viên năm nhất trong tổng thể khác 50% với độ tin
cậy cao.
Giả thuyết H₀ (H0): Tỷ lệ sinh viên năm nhất trong tổng thể là 20% (p = 0.2).
Giả thuyết H₁ (H1): Tỷ lệ sinh viên năm nhất trong tổng thể bé hơn 20% (p < 0.2).
Quy tắc quyết định:
Nếu p-value < 0.05 → Bác bỏ giả thuyết H₀: Có đủ bằng chứng thống kê để kết luận rằng tỷ lệ sinh viên năm nhất nhỏ hơn 20%.
Nếu p-value ≥ 0.05 → Không đủ cơ sở bác bỏ giả thuyết H₀: Chưa đủ bằng chứng để kết luận tỷ lệ sinh viên năm nhất nhỏ hơn 20%.
prop.test(n_freshman, n_total, p = 0.2, alternative = "less", conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: n_freshman out of n_total, null probability 0.2
## X-squared = 17.227, df = 1, p-value = 1
## alternative hypothesis: true p is less than 0.2
## 95 percent confidence interval:
## 0.0000000 0.2767716
## sample estimates:
## p
## 0.253
→ Kết quả: p-value = 1 > 0.05 → không đủ cơ sở bác bỏ giả thuyết H₀. Do đó, chưa có đủ bằng chứng thống kê để kết luận rằng tỷ lệ sinh viên năm nhất nhỏ hơn 20%. Tỷ lệ thực tế trong mẫu là khoảng 25.3%, cao hơn so với giả định ban đầu.
Bảng tần số
tanso_major <- table(dldt$major)
tanso_major
##
## Biology Computer Science Economics Engineering
## 228 192 204 192
## Psychology
## 184
Biểu đồ
barplot(
tanso_major,
main = "Tần số theo chuyên ngành",
xlab = "Chuyên ngành",
ylab = "Số quan sát",
las = 1,
col = rainbow(length(tanso_major)),
border = "white",
cex.names = 0.8
)
Bảng tần suất
tansuat_major <- tanso_major / nrow(dldt)
tansuat_major
##
## Biology Computer Science Economics Engineering
## 0.228 0.192 0.204 0.192
## Psychology
## 0.184
Biểu đồ
cols_major <- rainbow(length(tansuat_major))
nhanmajor <- paste0(round(tansuat_major * 100, 1), "%")
pie(
tansuat_major,
labels = NA,
main = "Tần suất theo chuyên ngành",
col = cols_major,
border = "white"
)
legend(
x = "topright",
legend = paste(names(tansuat_major), nhanmajor),
fill = cols_major,
)
Nhận xét:
Kết quả phân tích cho thấy cơ cấu chuyên ngành trong bộ dữ liệu có sự phân bố tương đối đồng đều giữa năm nhóm chính:
Biology: chiếm khoảng 22.8%
Computer Science: chiếm khoảng 19.2%
Economics: chiếm khoảng 20.4%
Engineering: chiếm khoảng 19.2%
Psychology: chiếm khoảng 18.4%
Biểu đồ tần số và tần suất cho thấy sự phân bố sinh viên theo chuyên ngành khá cân bằng, với một chút chênh lệch giữa các nhóm. Nhóm Biology có số lượng sinh viên cao nhất (228 sinh viên), trong khi các nhóm còn lại dao động từ 184 đến 204 sinh viên. Điều này cho thấy dữ liệu được thu thập tương đối đồng đều giữa các chuyên ngành, hỗ trợ tốt cho các phân tích tiếp theo theo chuyên ngành học.
most_common_major <- names(which.max(tanso_major))
most_common_major
## [1] "Biology"
n_major <- max(tanso_major)
n_total <- nrow(dldt)
prop.test(n_major, n_total, conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: n_major out of n_total, null probability 0.5
## X-squared = 294.85, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.2025887 0.2555330
## sample estimates:
## p
## 0.228
Tỷ lệ ước lượng: Khoảng 22.8% sinh viên thuộc chuyên ngành phổ biến nhất (Biology).
Diễn giải: Dựa trên kết quả kiểm định, tỷ lệ sinh
viên thuộc chuyên ngành phổ biến nhất được ước lượng và khoảng tin cậy
95% được tính bằng prop.test().
Giả thuyết H₀ (H0): Tỷ lệ sinh viên theo chuyên ngành phổ biến nhất là 20% (p = 0.2).
Giả thuyết H₁ (H1): Tỷ lệ sinh viên theo chuyên ngành đó lớn hơn 20% (p > 0.2).
Quy tắc quyết định:
Nếu p-value < 0.05 → bác bỏ H₀
Nếu p-value ≥ 0.05 → không bác bỏ H₀
prop.test(n_major, n_total, p = 0.2, alternative = "greater", conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: n_major out of n_total, null probability 0.2
## X-squared = 4.7266, df = 1, p-value = 0.01485
## alternative hypothesis: true p is greater than 0.2
## 95 percent confidence interval:
## 0.2064467 1.0000000
## sample estimates:
## p
## 0.228
→ Kết quả: p-value = 0.01485 < 0.05 → đủ
cơ sở để bác bỏ giả thuyết H₀.
Do đó, có đủ bằng chứng thống kê để kết luận rằng tỷ lệ sinh
viên chọn chuyên ngành Biology lớn hơn 20%.
Tỷ lệ thực tế trong mẫu là khoảng 22.8%, cao hơn so với
giả định ban đầu.
Bảng tần số
tanso_payment <- table(dldt$preferred_payment_method)
tanso_payment
##
## Cash Credit/Debit Card Mobile Payment App
## 310 340 350
Biểu đồ
barplot(
tanso_payment,
main = "Tần số theo phương thức thanh toán ưa thích",
xlab = "Phương thức",
ylab = "Số quan sát",
las = 1,
col = terrain.colors(length(tanso_payment)),
border = "white")
Bảng tần suất
tansuat_payment <- tanso_payment / nrow(dldt)
tansuat_payment
##
## Cash Credit/Debit Card Mobile Payment App
## 0.31 0.34 0.35
Biểu đồ
cols_payment <- terrain.colors(length(tansuat_payment))
nhanpayment <- paste0(round(tansuat_payment * 100, 1), "%")
pie(
tansuat_payment,
labels = NA,
main = "Tần suất theo phương thức thanh toán ưa thích",
col = cols_payment,
border = "white"
)
legend(
x = "topright",
legend = paste(names(tansuat_payment), nhanpayment),
fill = cols_payment,
)
Nhận xét:
Kết quả phân tích cho thấy cơ cấu Preferred Payment Method trong bộ dữ liệu có sự phân bố tương đối đồng đều giữa ba nhóm chính:
Cash: chiếm khoảng 31%
Credit/Debit Card: chiếm khoảng 34%
Mobile Payment App: chiếm khoảng 35%
Biểu đồ tần số và tần suất cho thấy sự phân bố theo phương thức thanh toán khá cân bằng, với một chút chênh lệch giữa các nhóm. Nhóm Mobile Payment App có số lượng người dùng cao nhất (350 người), trong khi các nhóm còn lại dao động từ 310 đến 340 người. Điều này cho thấy dữ liệu được thu thập tương đối đồng đều giữa các phương thức thanh toán, hỗ trợ tốt cho các phân tích tiếp theo về hành vi người dùng.
most_common_payment <- names(which.max(tanso_payment))
most_common_payment
## [1] "Mobile Payment App"
n_payment <- max(tanso_payment)
n_total <- nrow(dldt)
prop.test(n_payment, n_total, conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: n_payment out of n_total, null probability 0.5
## X-squared = 89.401, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.3205743 0.3805931
## sample estimates:
## p
## 0.35
Tỷ lệ ước lượng: Khoảng 35% sinh viên chọn phương thức thanh toán phổ biến nhất (Mobile Payment App).
Giả thuyết H₀ (H0): Tỷ lệ chọn phương thức thanh toán phổ biến nhất là 30% (p = 0.3).
Giả thuyết H₁ (H1): Tỷ lệ chọn phương thức đó lớn hơn 30% (p > 0.3).
Quy tắc quyết định:
Nếu p-value < 0.05 → bác bỏ H₀
Nếu p-value ≥ 0.05 → không bác bỏ H₀
prop.test(n_payment, n_total, p = 0.3, alternative = "greater", conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: n_payment out of n_total, null probability 0.3
## X-squared = 11.668, df = 1, p-value = 0.0003179
## alternative hypothesis: true p is greater than 0.3
## 95 percent confidence interval:
## 0.3251349 1.0000000
## sample estimates:
## p
## 0.35
→ Kết quả: p-value = 0.0003179 < 0.05 →
đủ cơ sở để bác bỏ giả thuyết H₀.
Do đó, có đủ bằng chứng thống kê để kết luận rằng tỷ lệ chọn
phương thức thanh toán phổ biến nhất lớn hơn 30%.
Tỷ lệ thực tế trong mẫu là khoảng 35%, cao hơn so với
giả định ban đầu.
Bảng tần số
GP <- table(dldt$gender, dldt$preferred_payment_method)
GP
##
## Cash Credit/Debit Card Mobile Payment App
## Female 97 106 120
## Male 111 120 125
## Non-binary 102 114 105
addmargins(table(dldt$gender, dldt$preferred_payment_method))
##
## Cash Credit/Debit Card Mobile Payment App Sum
## Female 97 106 120 323
## Male 111 120 125 356
## Non-binary 102 114 105 321
## Sum 310 340 350 1000
Biểu đồ
ggplot(
dldt %>%
group_by(gender, preferred_payment_method) %>%
summarise(count = n()) %>%
ungroup(),
aes(x = gender, y = count, fill = preferred_payment_method)
) +
geom_col(position = position_dodge()) +
geom_text(aes(label = count), position = position_dodge(width = 0.9), vjust = -0.5) +
labs(
title = "Số lượng sinh viên theo giới tính và phương thức thanh toán ưa thích",
y = "Số lượng",
x = "Giới tính",
fill = "Phương thức ưa thích"
) +
theme_minimal()
## `summarise()` has grouped output by 'gender'. You can override using the
## `.groups` argument.
Nhận xét
Trong nhóm nữ giới, có 97 sinh viên chọn Cash, 106 chọn Credit/Debit Card, và 120 chọn Mobile Payment App. Nhóm nam giới có 111 sinh viên chọn Cash, 120 chọn Credit/Debit Card, và 125 chọn Mobile Payment App. Trong khi đó, nhóm không phân biệt giới tính (Non-binary) có 102 sinh viên chọn Cash, 114 chọn Credit/Debit Card, và 105 chọn Mobile Payment App.
Nhìn chung, từ biểu đồ cho thấy sự phân bố sinh viên giữa các nhóm giới tính và phương thức thanh toán khá đồng đều, không có sự chênh lệch đáng kể, phản ánh cơ cấu mẫu cân đối và phù hợp cho các phân tích tiếp theo.
chisq.test(GP)
##
## Pearson's Chi-squared test
##
## data: GP
## X-squared = 1.4315, df = 4, p-value = 0.8387
Giả thuyết kiểm định:
Giải thích ý nghĩa kiểm định:
Kết quả kiểm định:
Kết luận thống kê: Vì p-value = 0.8387 > 0.05, ta không đủ bằng chứng để bác bỏ giả thuyết H₀. Do đó, ta kết luận rằng không có mối liên hệ có ý nghĩa thống kê giữa giới tính và năm học. Nói cách khác, phân bố giới tính của sinh viên không khác biệt đáng kể giữa các năm học trong tập dữ liệu này.
Thảo luận thêm: Kết quả kiểm định phù hợp với quan sát từ biểu đồ tần suất trước đó: tỷ lệ nam và nữ sinh được phân bố khá đồng đều qua các năm học. Điều này cho thấy yếu tố giới tính không ảnh hưởng đáng kể đến sự phân bố theo năm học, phản ánh sự cân bằng giới tính trong quá trình tuyển sinh hoặc phân bố chương trình học. Tuy nhiên, để hiểu sâu hơn về ảnh hưởng của giới tính trong môi trường học tập, có thể cần phân tích thêm các yếu tố khác như chuyên ngành, kết quả học tập, hoặc hoạt động ngoại khóa.
Giả thuyết H₀ (H0): Tỷ lệ sinh viên nữ chọn thanh toán bằng tiền mặt bằng với tỷ lệ sinh viên nam chọn thanh toán bằng tiền mặt (p₁ = p₂).
Giả thuyết H₁ (H1): Tỷ lệ sinh viên nữ chọn thanh toán bằng tiền mặt khác với tỷ lệ sinh viên nam (p₁ ≠ p₂).
Quy tắc quyết định:
Nếu p-value < 0.05 → bác bỏ H₀
Nếu p-value ≥ 0.05 → không đủ cơ sở bác bỏ H₀
# Lấy số người chọn Cash theo giới tính
n_female <- GP["Female", "Cash"]
n_male <- GP["Male", "Cash"]
# Tổng số người nam/nữ chỉ xét Cash và Mobile Payment App
total_female <- GP["Female", "Cash"] + GP["Female", "Mobile Payment App"]
total_male <- GP["Male", "Cash"] + GP["Male", "Mobile Payment App"]
# Kiểm định chênh lệch tỷ lệ
prop.test(
x = c(n_female, n_male),
n = c(total_female, total_male),
alternative = "two.sided",
conf.level = 0.95
)
##
## 2-sample test for equality of proportions with continuity correction
##
## data: c(n_female, n_male) out of c(total_female, total_male)
## X-squared = 0.16282, df = 1, p-value = 0.6866
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## -0.11957736 0.07290861
## sample estimates:
## prop 1 prop 2
## 0.4470046 0.4703390
→ Kết quả: p-value = 0.6866 > 0.05 →
không đủ cơ sở để bác bỏ giả thuyết H₀.
Do đó, chưa có đủ bằng chứng thống kê để kết luận rằng tỷ lệ
sinh viên nữ và nam chọn thanh toán bằng tiền mặt là khác
nhau.
Tỷ lệ thực tế trong mẫu là khoảng 44.7% ở nữ và 47.0% ở nam, khá tương đồng.
Trong phân tích thống kê, Relative Risk (RR) chỉ phù hợp với bảng 2x2. Do đó, ta chỉ xét hai nhóm giới tính Male và Female, cùng với hai nhóm phương thức thanh toán Cash và Mobile Payment App.
Trước tiên, lọc dữ liệu chỉ giữ lại các trường hợp liên quan:
sub_data <- subset(dldt, gender %in% c("Male", "Female") & preferred_payment_method %in% c("Cash", "Mobile Payment App"))
table(sub_data$gender, sub_data$preferred_payment_method)
##
## Cash Mobile Payment App
## Female 97 120
## Male 111 125
Sau khi lọc, ta thu được bảng chéo giữa giới tính và năm học. Tiếp theo, ta tính toán Relative Risk để so sánh xác suất là thanh toán tiền mặt giữa hai nhóm giới tính:
library(DescTools)
##
## Attaching package: 'DescTools'
## The following objects are masked from 'package:psych':
##
## AUC, ICC, SD
RelRisk(table(sub_data$gender, sub_data$preferred_payment_method))
## [1] 0.9503882
library(epitools)
riskratio(table(sub_data$gender, sub_data$preferred_payment_method))
## $data
##
## Cash Mobile Payment App Total
## Female 97 120 217
## Male 111 125 236
## Total 208 245 453
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Female 1.0000000 NA NA
## Male 0.9578037 0.8083892 1.134834
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Female NA NA NA
## Male 0.6202408 0.6378892 0.6185753
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Điều này cho thấy:
Mặc dù nam giới có vẻ ít chọn phương thức thanh toán bằng ví điện tử hơn so với nữ giới, sự khác biệt không có ý nghĩa thống kê:
Vì khoảng tin cậy 95% bao gồm giá trị 1 → không loại trừ khả năng hai nhóm có tỷ lệ chọn Cash tương đương.
P-value > 0.05 → không đủ bằng chứng để kết luận rằng giới tính là yếu tố ảnh hưởng đến lựa chọn thanh toán bằng tiền mặt.
OddsRatio(table(sub_data$gender, sub_data$preferred_payment_method))
## [1] 0.9102853
Giá trị Odds Ratio = 0.9103 được tính bằng cách lấy tỉ số lựa chọn Cash/Mobile Payment App của nữ giới chia cho tỉ số của nam giới, tức:
\[ OR = \frac{97/120}{111/125} \approx 0.9103 \]
Điều này có nghĩa là, so với nam giới, nữ giới có khả năng chọn phương thức thanh toán bằng tiền mặt (Cash) thấp hơn khoảng 9% so với chọn Mobile Payment App.
Tỷ lệ chọn Cash so với Mobile Payment App trong nhóm nam cao hơn một chút so với nhóm nữ, cho thấy nam giới có xu hướng ưu tiên chọn phương thức thanh toán bằng tiền mặt hơn so với nữ.
Tuy nhiên, mức chênh lệch này khá nhỏ và theo kết quả phân tích thống kê (với khoảng tin cậy chứa giá trị 1 và p-value > 0.05), sự khác biệt này không có ý nghĩa thống kê.
oddsratio(table(sub_data$gender, sub_data$preferred_payment_method))
## $data
##
## Cash Mobile Payment App Total
## Female 97 120 217
## Male 111 125 236
## Total 208 245 453
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Female 1.0000000 NA NA
## Male 0.9105594 0.6281319 1.319046
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Female NA NA NA
## Male 0.6202408 0.6378892 0.6185753
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Nhận xét:
Nam giới có khả năng chọn phương thức thanh toán bằng tiền mặt thấp hơn khoảng 9% so với nữ giới (OR < 1), nhưng sự khác biệt này không có ý nghĩa thống kê.
Khoảng tin cậy 95% bao gồm giá trị 1, cho thấy không thể loại trừ khả năng tỷ lệ chọn phương thức thanh toán giữa nam và nữ là tương đương.
P-value lớn hơn 0.05 (p = 0.6186) chứng tỏ không đủ bằng chứng để bác bỏ giả thuyết không, tức không có sự khác biệt có ý nghĩa giữa hai nhóm giới tính về lựa chọn phương thức thanh toán.
Do đó, giới tính không phải là yếu tố ảnh hưởng đáng kể đến việc lựa chọn phương thức thanh toán trong mẫu khảo sát này.