Tìm một dataset có dữ liệu định tính, dữ liệu định lượng, có trên 5 biến và nhiều hơn 300 quan sát.
Dữ liệu thu thập được gồm 1000 quan sát có 7 biến bao gồm 4 biến định
tính (gender, classify, parental level of education, test preparation
course) và 3 biến định lượng (math score, reading score, writing score).
Thông tin nguồn dữ liệu được lấy từ kaggle nguồn: https://www.kaggle.com/datasets/spscientist/students-performance-in-exams
- Gender: giới tính (Nam_Male/Nữ_Female)
- Classify: phân loại sinh
viên theo khoa (A: Khoa tài chính ngân hàng, B: Khoa hệ thống thông tin,
C: Khoa kinh tế, D: Khoa kinh tế đối ngoại)
- ploe (Parental level
of education): học vấn của cha mẹ
+ Bachelor’s degree: Bằng cử
nhân
+ Master’s degree: Bằng thạc sĩ
+ Associate’s degree: Bằng
chương trình học liên kết
+ High school: Trung học phổ thông
+
Some high school: Chưa học hoàn thành bậc THPT
+ Some college: Chưa
hoàn thành xong bậc đại học/cao đẳng
- tpc (Test preparation
course): Đánh giá mức độ hoàn thành khóa luyện thi của sinh viên.
+
None: không làm bài
+ Completed: đã hoàn thành 100% bài kiểm tra
- ms (Math score), rs (reading score), ws (writing score) lần lượt là
điểm toán, điểm đọc, điểm viết của sinh viên trong bài thi cuối kì.
setwd("D:/HỌC TẬP/Phân tích dữ liệu định tính")
library(xlsx)
library(readxl)
## Warning: package 'readxl' was built under R version 4.2.3
library(data.table)
## Warning: package 'data.table' was built under R version 4.2.3
cpp <- read.xlsx("DATA.xlsx",1)
data.table(cpp)
## gender classify ploe tpc ms rs ws NA.
## 1: female group B bachelor's degree none 72 72 74 NA
## 2: female group C some college completed 69 90 88 NA
## 3: female group B master's degree none 90 95 93 NA
## 4: male group A associate's degree none 47 57 44 NA
## 5: male group C some college none 76 78 75 NA
## ---
## 997: male group C high school none 62 55 55 NA
## 998: female group C high school completed 59 71 65 NA
## 999: female group D some college completed 68 78 77 NA
## 1000: female group D some college none 77 86 86 NA
## 1001: <NA> <NA> <NA> <NA> NA NA NA NA
Chọn 1 hoặc 2 biến định tính và 1 biến định lượng làm biến phụ thuộc để phân tích, giải thích lý do.
Xem biến Test preparation course là biến phụ thuộc nhằm mục đích đo lường hiệu quả khóa luyện thi thông qua các yếu tố như gender, classify, parental level of education, math score, reading score, writing score. Xác suất những người có học khóa luyện đối với nữ là bao nhiêu, đối với nam là bao nhiêu? Tỷ lệ nữ thuộc Khoa TCNH có học khóa luyện so với tỷ lệ nam Khoa TCNH có học khóa luyện? Dựa trên học vấn của cha mẹ sinh viên thuộc các khoa khác nhau thì những người có học khóa luyện chênh lệch như thế nào?
Xem Math score là biến phụ thuộc nhằm mục đích xem xét mối quan hệ giữa điểm toán trung bình với các biến độc lập như Test preparation course, gender, classify, parental level of education, reading score, writing score.
Giả sử Math score (Y) là biến phụ thuộc, biến độc lập định lượng reading score (X).
Biến định tính có 2 phạm trù None và Completed.
Đặt D = 1 nếu là Completed, D = 0 nếu là None.
Mô hình: \(Y = \beta_1 + \beta_2D + \beta_3X + u\)
Nếu là Yes (D = 1) - > \(Y = (\beta_1 + \beta_2) + \beta_3X + u\)
Nếu là No (D = 0) - > \(Y = \beta_1 + \beta_3X + u\)
Ý nghĩa
Giá trị trung bình của Y là \(\beta_1\) (đơn vị) khi \(X = 0\) và biến định tính là None.
X không đổi, giá trị trung bình của Y khi biến định tính là Completed cao hơn giá trị trung bình của Y khi biến định tính là None \(\beta_2\) (đơn vị).
Khi X tăng 1 đơn vị thì giá trị trung bình của Y tăng \(\beta_3\) (đơn vị) trong cả 2 trường hợp biến định tính là Completed hoặc None.
Làm thống kê mô tả để phân tích cho ít nhất 5 biến (vừa định tính định lượng và có 2 biến đã chọn ở câu 2), nhận xét về kết quả phân tích này.
table(cpp$gender)/sum(table(cpp$gender))
##
## female male
## 0.518 0.482
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.2.3
cpp |> ggplot(aes(x = gender, y = after_stat(count))) +
geom_bar(fill = 'pink') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
theme_classic() +
labs(x = 'Giới tính', y = 'Số người')
Nhận xét: Trong tổng số 1000 người khảo sát thì có 51.8% người giới tính nữ và 48.2% người giới tính nam.
table(cpp$classify)/sum(table(cpp$classify))
##
## group A group B group C group D group E
## 0.089 0.190 0.319 0.262 0.140
library(ggplot2)
cpp |> ggplot(aes(x = classify, y = after_stat(count))) +
geom_bar(fill = 'pink') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
theme_classic() +
labs(x = 'Phân loại', y = 'Số người')
Nhận xét: Trong tổng số 1000 người khảo sát thì có 8.9% người thuộc group A, 19% người thuộc group B, 31.9% người thuộc group C, 26.2% người thuộc group D và 14% người thuộc group E.
table(cpp$ploe)/sum(table(cpp$ploe))
##
## associate's degree bachelor's degree high school master's degree
## 0.222 0.118 0.196 0.059
## some college some high school
## 0.226 0.179
library(ggplot2)
cpp |> ggplot(aes(x = ploe, y = after_stat(count))) +
geom_bar(fill = 'pink') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
theme_classic() +
labs(x = 'Phân loại', y = 'Số người')
Nhận xét: Trong tổng số 1000 người khảo sát thì có 22.2% cha mẹ sinh viên có , 19% người thuộc group B, 31.9% người thuộc group C, 26.2% người thuộc group D và 14% người thuộc group E.*
22.2% cha mẹ sinh viên có Bằng chương trình học liên kết (Associate’s degree)
11.8% cha mẹ sinh viên có Bằng cử nhân (Bachelor’s degree)
19.6% cha mẹ sinh viên đã học Trung học phổ thông (High school)
5.9% cha mẹ sinh viên có Bằng thạc sĩ (Master’s degree)
22.6% cha mẹ sinh viên chưa hoàn thành xong bậc đại học/cao đẳng (Some college)
17.9% cha mẹ sinh viên chưa học hoàn thành bậc THPT (Some high school)
table(cpp$tpc)/sum(table(cpp$tpc))
##
## completed none
## 0.358 0.642
library(ggplot2)
cpp |> ggplot(aes(x = tpc, y = after_stat(count))) +
geom_bar(fill = 'pink') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
theme_classic() +
labs(x = 'Hoàn thành khóa luyện', y = 'Số người')
Nhận xét: Trong tổng số 1000 người khảo sát thì có 64% người đã hoàn thành khóa luyện và 34% người chưa hoàn thành khóa luyện.
summary(cpp$ms)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.00 57.00 66.00 66.09 77.00 100.00 1
Điểm toán nhỏ nhất là 0; lớn nhất là 100; điểm toán trung bình là 66.09; 25% dữ liệu nhỏ hơn 57 điểm (giá trị tứ phân vị thứ nhất); 50% dữ liệu nhỏ hơn 66 điểm (giá trị trung vị); 75% dữ liệu nhỏ hơn 77 (giá trị tứ phân vị thứ ba).
math <- cut(cpp$ms, breaks= c(0 , 50 , 100), labels= c('khongdat', 'dat'))
table(math)
## math
## khongdat dat
## 149 850
table(math)/sum(table(math))
## math
## khongdat dat
## 0.1491491 0.8508509
library(ggplot2)
d <- data.frame(math)
d |> ggplot(aes(x = math, y = after_stat(count))) +
geom_bar(fill = 'pink') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
theme_classic() +
labs(x = 'Điểm toán', y = 'Số người')
pie(table(math), col = rainbow(2), main = "Biểu đồ điểm toán")
Nhận xét: Trong tổng số 1000 người khảo sát thì có 15% người không đạt (có điểm toán thấp hơn 50), 85% người đạt (điểm toán trên 50).
ph <- table(cpp$gender, cpp$tpc)
ph <- prop.table(ph)
addmargins(ph)
##
## completed none Sum
## female 0.184 0.334 0.518
## male 0.174 0.308 0.482
## Sum 0.358 0.642 1.000
cpp |> ggplot(aes(x = tpc, y = after_stat(count))) +
geom_bar(fill = 'pink') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
facet_grid(. ~ gender) +
# theme_classic() +
labs(x = 'Hoàn thành khóa luyện', y = 'Số người')
Nhận xét: Trong tổng số 1000 người khảo sát được
51.8% người thuộc giới tính nữ, trong đó:
18.4% người đã hoàn thành khóa luyện
33.4% người chưa hoàn thành khóa luyện
48.2% người thuộc giới tính nam, trong đó:
17.4% người đã hoàn thành khóa luyện
30.8% người chưa hoàn thành khóa luyện
library(DescTools)
## Warning: package 'DescTools' was built under R version 4.2.3
##
## Attaching package: 'DescTools'
## The following object is masked from 'package:data.table':
##
## %like%
ph <- table(cpp$gender, cpp$tpc)
addmargins(ph)
##
## completed none Sum
## female 184 334 518
## male 174 308 482
## Sum 358 642 1000
RelRisk(ph)
## [1] 0.9839791
Tỷ lệ người nữ hoàn thành khóa luyện thấp hơn gần 0.98 lần tỷ lệ người nam đã hoàn thành khóa luyện. Hay nói cách khác tỷ lệ người nam hoàn thành khóa luyện thấp cao hơn gấp 1.02 lần (1/0.9839791) tỷ lệ người nữ đã hoàn thành khóa luyện.
ph <- table(cpp$gender, cpp$tpc)
library(epitools)
riskratio(ph, rev = 'c')
## $data
##
## none completed Total
## female 334 184 518
## male 308 174 482
## Total 642 358 1000
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## female 1.000000 NA NA
## male 1.016282 0.8608038 1.199842
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## female NA NA NA
## male 0.8489948 0.8949914 0.8488229
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Tỷ lệ người nam hoàn thành khóa luyện thấp cao hơn gấp 1.02 lần tỷ lệ người nữ đã hoàn thành khóa luyện.
ph <- table(cpp$gender, cpp$tpc)
ph
##
## completed none
## female 184 334
## male 174 308
OddsRatio(ph)
## [1] 0.9751531
Tỷ lệ người đã hoàn thành khóa học so với người chưa hoàn thành khóa học mà là nữ thấp hơn gần 0.98 lần tỷ lệ người đã hoàn thành khóa học so với người tài chính chưa hoàn thành khóa học mà là nam. Hay nói cách khác tỷ lệ người đã hoàn thành khóa học so với người chưa hoàn thành khóa học mà là nam cao hơn gần 1.03 lần tỷ lệ người đã hoàn thành khóa học so với người chưa hoàn thành khóa học mà là nữ.
ph <- table(cpp$gender, cpp$tpc)
ph
##
## completed none
## female 184 334
## male 174 308
oddsratio(ph, rev = 'r')
## $data
##
## completed none Total
## male 174 308 482
## female 184 334 518
## Total 358 642 1000
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## male 1.000000 NA NA
## female 1.025472 0.791399 1.328618
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## male NA NA NA
## female 0.8489948 0.8949914 0.8488229
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Tỷ lệ người đã hoàn thành khóa học so với người chưa hoàn thành khóa học mà là nam cao hơn gần 1.03 lần tỷ lệ người đã hoàn thành khóa học so với người chưa hoàn thành khóa học mà là nữ.