library(xlsx)
## Warning: package 'xlsx' was built under R version 4.4.3
# Đọc sheet đầu tiên
data <- read.xlsx(file = "C:/Users/Admin/Downloads/SAP-4000.xlsx", sheetIndex = 1, header = T)
head(data)
##   Gender HoursStudied.Week Tutoring Region Attendance... Parent.Education
## 1   Male               5.5       No  Urban          72.7         Tertiary
## 2 Female               6.8       No  Urban          62.0          Primary
## 3 Female               9.7       No  Rural          95.0        Secondary
## 4   Male              13.3      Yes  Rural          52.9             None
## 5 Female               8.9       No  Urban          50.8             None
## 6 Female               7.9       No  Urban          73.7         Tertiary
##   Exam_Score
## 1       43.5
## 2       51.7
## 3       70.1
## 4       79.5
## 5       52.2
## 6       58.8
str(data)
## 'data.frame':    4000 obs. of  7 variables:
##  $ Gender           : chr  "Male" "Female" "Female" "Male" ...
##  $ HoursStudied.Week: num  5.5 6.8 9.7 13.3 8.9 7.9 7.6 12.3 10.6 9.9 ...
##  $ Tutoring         : chr  "No" "No" "No" "Yes" ...
##  $ Region           : chr  "Urban" "Urban" "Rural" "Rural" ...
##  $ Attendance...    : num  72.7 62 95 52.9 50.8 73.7 79.5 98.4 72.3 73.2 ...
##  $ Parent.Education : chr  "Tertiary" "Primary" "Secondary" "None" ...
##  $ Exam_Score       : num  43.5 51.7 70.1 79.5 52.2 58.8 64.8 100 87.8 67 ...
summary(data)
##     Gender          HoursStudied.Week   Tutoring            Region         
##  Length:4000        Min.   : 0.000    Length:4000        Length:4000       
##  Class :character   1st Qu.: 7.400    Class :character   Class :character  
##  Mode  :character   Median : 9.900    Mode  :character   Mode  :character  
##                     Mean   : 9.861                                         
##                     3rd Qu.:12.600                                         
##                     Max.   :16.000                                         
##  Attendance...    Parent.Education     Exam_Score    
##  Min.   : 50.00   Length:4000        Min.   : 16.60  
##  1st Qu.: 62.60   Class :character   1st Qu.: 59.30  
##  Median : 75.60   Mode  :character   Median : 71.55  
##  Mean   : 75.22                      Mean   : 71.11  
##  3rd Qu.: 87.70                      3rd Qu.: 83.50  
##  Max.   :100.00                      Max.   :100.00
# Bước 2: Chuyển đổi các biến phân loại thành dạng factor
data$Gender <- as.factor(data$Gender)
data$Tutoring <- as.factor(data$Tutoring)
data$Region <- as.factor(data$Region)
data$Parent.Education <- as.factor(data$Parent.Education)

Bộ dữ liệu SAP-4000 gồm 4.000 quan sát, phản ánh thông tin học tập của học sinh thông qua nhiều khía cạnh như giới tính, thời gian học, tham gia học thêm, khu vực sinh sống, tỉ lệ chuyên cần, trình độ học vấn của phụ huynh và điểm thi. Đây là một tập dữ liệu giả lập (synthetic dataset) phù hợp cho các phân tích thống kê và mô hình hồi quy trong R.

  1. Mô tả các biến trong tập dữ liệu Bộ dữ liệu gồm 7 biến chính, cụ thể như sau:

Tên biến Kiểu dữ liệu Mô tả ngắn gọn Gender Nhân tố (chr) Giới tính của học sinh: “Male” hoặc “Female”. HoursStudied.Week Số thực (num) Số giờ học trung bình mỗi tuần. Tutoring Nhân tố (chr) Học sinh có tham gia học thêm hay không: “Yes” hoặc “No”. Region Nhân tố (chr) Khu vực cư trú của học sinh: “Urban” (thành thị) hoặc “Rural” (nông thôn). Attendance… Số thực (num) Tỷ lệ chuyên cần (%), phản ánh số buổi có mặt trên tổng số buổi học. Parent.Education Nhân tố (chr) Trình độ học vấn cao nhất của phụ huynh: “None”, “Primary”, “Secondary”, “Tertiary”. Exam_Score Số thực (num) Điểm thi cuối kỳ của học sinh (thang điểm 100).

  1. Đặc điểm chung của dữ liệu Tính đa dạng: Dữ liệu bao gồm cả biến định tính (categorical) và định lượng (numerical), giúp cho việc áp dụng các mô hình hồi quy và kiểm định giả thuyết trở nên khả thi.

Biến phụ thuộc chính: Exam_Score là biến mục tiêu, phản ánh kết quả học tập, được dự đoán dựa trên các yếu tố khác.

Tính đại diện: Với 4.000 quan sát, bộ dữ liệu đủ lớn để đảm bảo tính đại diện và ổn định trong phân tích thống kê.

# Kiểm tra lại kiểu dữ liệu sau khi chuyển đổi
str(data)
## 'data.frame':    4000 obs. of  7 variables:
##  $ Gender           : Factor w/ 2 levels "Female","Male": 2 1 1 2 1 1 1 1 1 1 ...
##  $ HoursStudied.Week: num  5.5 6.8 9.7 13.3 8.9 7.9 7.6 12.3 10.6 9.9 ...
##  $ Tutoring         : Factor w/ 2 levels "No","Yes": 1 1 1 2 1 1 1 2 2 1 ...
##  $ Region           : Factor w/ 2 levels "Rural","Urban": 2 2 1 1 2 2 2 2 1 1 ...
##  $ Attendance...    : num  72.7 62 95 52.9 50.8 73.7 79.5 98.4 72.3 73.2 ...
##  $ Parent.Education : Factor w/ 4 levels "None","Primary",..: 4 2 3 1 1 4 3 3 2 4 ...
##  $ Exam_Score       : num  43.5 51.7 70.1 79.5 52.2 58.8 64.8 100 87.8 67 ...
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
# Biểu đồ tần số giới tính
ggplot(data, aes(x = Gender)) +
  geom_bar(fill = "steelblue") +
  labs(title = "Phân bố giới tính", x = "Giới tính", y = "Tần số")

1. Phân bố giới tính

Biểu đồ cột đầu tiên thể hiện phân bố giới tính của đối tượng khảo sát. Kết quả cho thấy số lượng nữ giới (Female) cao hơn một chút so với nam giới (Male). Cụ thể, số nữ chiếm hơn 2.000 người trong khi nam giới là gần 2.000 người. Sự chênh lệch này không lớn, cho thấy dữ liệu có tính cân bằng giới tương đối tốt và có thể đại diện khá khách quan cho cả hai nhóm giới tính.

Sự cân bằng giới tính trong dữ liệu này là một yếu tố tích cực trong nghiên cứu xã hội học, vì nó giúp giảm thiểu sai lệch do giới và đảm bảo rằng các phân tích tiếp theo có thể phản ánh đúng thực trạng chung.

# Biểu đồ tròn theo khu vực
pie(table(data$Region), labels = paste0(names(table(data$Region)), ": ", round(prop.table(table(data$Region)) * 100, 1), "%"),
    main = "Biểu đồ tròn phân bố khu vực")

2. Phân bố khu vực sinh sống

Biểu đồ tròn thứ hai cho thấy sự phân bố theo khu vực sinh sống, cụ thể giữa hai nhóm: Urban (đô thị) và Rural (nông thôn). Theo biểu đồ, khoảng 60,6% đối tượng khảo sát sống ở khu vực đô thị, trong khi 39,4% còn lại sống ở nông thôn.

Điều này phản ánh một thực trạng phổ biến ở nhiều quốc gia đang phát triển: quá trình đô thị hóa nhanh chóng đã khiến dân số đô thị chiếm tỷ trọng lớn hơn. Tuy nhiên, tỷ lệ gần 40% ở nông thôn cũng cho thấy khu vực này vẫn đóng vai trò đáng kể và cần được chú trọng trong chính sách xã hội, đặc biệt trong giáo dục và phát triển cộng đồng.

# Biểu đồ cột trình độ học vấn của phụ huynh
ggplot(data, aes(x = Parent.Education)) +
  geom_bar(fill = "coral") +
  labs(title = "Trình độ học vấn của phụ huynh", x = "Trình độ", y = "Tần số")

3. Trình độ học vấn của phụ huynh

Biểu đồ cột thứ ba thể hiện trình độ học vấn của phụ huynh. Các mức trình độ được chia thành bốn nhóm: None (không học), Primary (tiểu học), Secondary (trung học) và Tertiary (cao đẳng/đại học trở lên). Kết quả cho thấy:

Trình độ Secondary chiếm tỷ lệ cao nhất, với hơn 1.600 người.

Theo sau là trình độ Tertiary, với khoảng 1.200 người.

Trình độ Primary thấp hơn, khoảng 800 người.

Nhóm None có số lượng ít nhất, dưới 500 người.

Điều này cho thấy đa số phụ huynh có ít nhất trình độ trung học trở lên, điều này có thể liên quan mật thiết đến khả năng hỗ trợ con cái trong học tập cũng như tác động đến nhận thức giáo dục trong gia đình. Tuy nhiên, vẫn còn một bộ phận không nhỏ phụ huynh có trình độ học vấn thấp, điều này đặt ra yêu cầu cho các chương trình giáo dục cộng đồng và hỗ trợ phụ huynh trong việc đồng hành cùng con cái.

# Biểu đồ cột trình độ học vấn của phụ huynh
ggplot(data, aes(x = Tutoring)) +
  geom_bar(fill = "blue") +
  labs(title = "bieu do", x = "Hoc them", y = "Tần số")

Biểu đồ thể hiện sự phân bố số lượng học sinh theo hai nhóm: có học thêm (Yes) và không học thêm (No). Quan sát biểu đồ cho thấy:

Số lượng học sinh không học thêm chiếm tỷ lệ lớn hơn đáng kể, với khoảng gần 3.000 học sinh.

Trong khi đó, nhóm học sinh có học thêm chỉ chiếm khoảng hơn 1.000 học sinh.

Sự chênh lệch này cho thấy phần lớn học sinh trong tập dữ liệu không tham gia các lớp học thêm. Nhóm học thêm chỉ chiếm khoảng một phần ba so với nhóm không học thêm.

Dữ liệu này cho thấy một xu hướng rõ ràng về lựa chọn học thêm của học sinh trong phạm vi khảo sát.

ES <- table(data$Gender, data$Exam_Score)
chisq.test(ES)
## Warning in chisq.test(ES): Chi-squared approximation may be incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  ES
## X-squared = 653.92, df = 679, p-value = 0.7489

Nhận xét kết quả kiểm định Chi bình phương giữa giới tính và thu nhập Kết quả kiểm định Chi bình phương cho thấy:

Giá trị thống kê Chi-squared = 653.92

Bậc tự do (df) = 679

Giá trị p (p-value) = 0.7489

Với p-value = 0.7489, lớn hơn mức ý nghĩa thường dùng (ví dụ: 0.05), chúng ta không có đủ bằng chứng để bác bỏ giả thuyết H₀.

👉 Kết luận: Không có mối liên hệ có ý nghĩa thống kê giữa giới tính và thu nhập trong bộ dữ liệu này. Nói cách khác, thu nhập không có sự khác biệt đáng kể theo giới tính.

4. HOC THEM VA DIEM SO

ET <- table(data$Tutoring, data$Exam_Score)
chisq.test(ET)
## Warning in chisq.test(ET): Chi-squared approximation may be incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  ET
## X-squared = 1211.9, df = 679, p-value < 2.2e-16

Kết quả kiểm định Chi bình phương cho thấy:

Giá trị thống kê Chi-squared = 1211.9

Bậc tự do (df) = 679

Giá trị p (p-value) < 2.2e-16

Với p-value rất nhỏ (gần bằng 0), nhỏ hơn rất nhiều so với mức ý nghĩa thường dùng (ví dụ: 0.05), chúng ta có đủ bằng chứng để bác bỏ giả thuyết H₀.

👉 Kết luận: Có mối liên hệ có ý nghĩa thống kê giữa việc học thêm và điểm số. Điều này cho thấy điểm số của học sinh có sự khác biệt rõ rệt giữa các nhóm học thêm và không học thêm.

# ước lượng khoảng tin cậy cho so gio hoc trung binh
gio_conf <- t.test(data$HoursStudied.Week, conf.level = 0.95)
gio_conf
## 
##  One Sample t-test
## 
## data:  data$HoursStudied.Week
## t = 167.93, df = 3999, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  9.74590 9.97615
## sample estimates:
## mean of x 
##  9.861025

Giá trị trung bình mẫu: 9.861 giờ/tuần

Khoảng tin cậy 95% cho trung bình: từ 9.74590 đến 9.97615 giờ/tuần

Số quan sát (df = 3999) → cỡ mẫu là 4.000 học sinh

Giá trị t = 167.93 (rất lớn)

p-value < 2.2e-16 (rất nhỏ)

Trung bình số giờ học mỗi tuần của học sinh là khoảng 9.86 giờ. Với mức tin cậy 95%, chúng ta có thể nói rằng trung bình thực sự của toàn bộ quần thể học sinh nằm trong khoảng từ 9.75 đến 9.98 giờ mỗi tuần. Do p-value < 0.05, ta bác bỏ giả thuyết H₀ (mean = 0).

Như vậy, số giờ học trung bình mỗi tuần khác khác 0 một cách có ý nghĩa thống kê, điều hiển nhiên nhưng được xác nhận bằng kiểm định.

5. Kiểm định giả thuyết thống kê

data$HoursStudied.Week <- as.numeric(data$HoursStudied.Week)
hours_test <- t.test(HoursStudied.Week ~ Gender, data = data)
hours_test
## 
##  Welch Two Sample t-test
## 
## data:  HoursStudied.Week by Gender
## t = -1.4366, df = 3973.3, p-value = 0.1509
## alternative hypothesis: true difference in means between group Female and group Male is not equal to 0
## 95 percent confidence interval:
##  -0.39930265  0.06158556
## sample estimates:
## mean in group Female   mean in group Male 
##             9.778284             9.947143

6. Thông tin từ kiểm định t (Welch Two Sample t-test)

Trung bình giờ học/tuần:

Nữ (Female): 9.778 giờ

Nam (Male): 9.947 giờ

Hiệu số trung bình: khoảng -0.17 giờ, tức nữ học ít hơn nam.

Khoảng tin cậy 95% cho hiệu số trung bình: Từ -0.3993 đến 0.0616 giờ

Giá trị t = -1.4366, bậc tự do ≈ 3973.3

p-value = 0.1509

7. Diễn giải kết quả

Do p-value = 0.1509 > 0.05, ta không có đủ bằng chứng để bác bỏ giả thuyết H₀ (rằng không có sự khác biệt trung bình giữa hai nhóm).

Khoảng tin cậy cho hiệu số trung bình bao gồm giá trị 0, điều này càng củng cố kết luận rằng sự khác biệt giữa nam và nữ là không có ý nghĩa thống kê.

Kết luận

👉 Không có sự khác biệt có ý nghĩa thống kê về số giờ học trung bình mỗi tuần giữa nam và nữ trong tập dữ liệu này. Mặc dù nam học trung bình cao hơn nữ khoảng 0.17 giờ, nhưng sự chênh lệch này không đủ lớn để được xem là đáng kể về mặt thống kê.