Phần 1: Tìm hiểu và Chuẩn bị Dữ liệu

1.1 Đọc bộ dữ liệu

Bộ dữ liệu này được trích xuất từ cơ sở dữ liệu điều tra dân số Hoa Kỳ năm 1994 bởi Ronny Kohavi và Barry Becker, hiện được lưu trữ tại kho dữ liệu học máy UCI. Dữ liệu bao gồm các bản ghi đã được lọc và làm sạch, với điều kiện người tham gia phải trên 16 tuổi, có thu nhập lớn hơn 100 USD/năm, trọng số dân số hợp lệ và số giờ làm việc hàng tuần lớn hơn 0. Mục tiêu của bài toán là dự đoán khả năng một người có thu nhập hàng năm vượt mức 50.000 USD, dựa trên các đặc điểm nhân khẩu học và xã hội như: tuổi, trình độ học vấn, ngành nghề, tình trạng hôn nhân, chủng tộc, giới tính, số giờ làm việc mỗi tuần, cùng với biến fnlwgt (final weight) – một trọng số dân số được tính toán để đảm bảo tính đại diện của từng cá nhân trong tổng thể dân số Mỹ theo từng bang, độ tuổi, giới tính và sắc tộc.

Bộ dữ liệu phản ánh bức tranh tổng quan về lực lượng lao động Mỹ vào thời điểm đó, rất phù hợp cho các bài toán phân tích dữ liệu, học máy và mô hình dự báo trong lĩnh vực kinh tế - xã hội.

library(xlsx)
## Warning: package 'xlsx' was built under R version 4.4.3
q <- read.xlsx(file = "C:/Users/Admin/Downloads/dulieu.xlsx", sheetIndex = 1, header = TRUE)
str(q)
## 'data.frame':    32561 obs. of  9 variables:
##  $ workclass     : chr  "State-gov" "Self-emp-not-inc" "Private" "Private" ...
##  $ education     : chr  "Bachelors" "Bachelors" "HS-grad" "11th" ...
##  $ marital.status: chr  "Never-married" "Married-civ-spouse" "Divorced" "Married-civ-spouse" ...
##  $ occupation    : chr  "Adm-clerical" "Exec-managerial" "Handlers-cleaners" "Handlers-cleaners" ...
##  $ relationship  : chr  "Not-in-family" "Husband" "Not-in-family" "Husband" ...
##  $ race          : chr  "White" "White" "White" "Black" ...
##  $ sex           : chr  "Male" "Male" "Male" "Male" ...
##  $ native.country: chr  "United-States" "United-States" "United-States" "United-States" ...
##  $ income        : chr  "<=50K" "<=50K" "<=50K" "<=50K" ...

Bộ dữ liệu đang được phân tích gồm tổng cộng 32.561 quan sát và 15 biến, phản ánh các đặc điểm nhân khẩu học, xã hội và kinh tế của từng cá nhân được điều tra trong tổng thể dân số Hoa Kỳ. Về cấu trúc, các biến trong bộ dữ liệu được chia thành hai nhóm chính: biến định lượng và biến định tính. Nhóm biến định lượng bao gồm: age (tuổi), fnlwgt (trọng số dân số – dùng để suy rộng mẫu), education.num (số năm học tương ứng với trình độ), capital.gain và capital.loss (thu nhập hoặc tổn thất vốn), và hours.per.week (số giờ làm việc mỗi tuần). Đây là các biến có giá trị số thực, phù hợp cho các phân tích mô tả, tính trung bình, kiểm định trung bình hoặc làm biến đầu vào trong các mô hình hồi quy.

Ngược lại, nhóm biến định tính bao gồm các biến dạng chuỗi (character), thể hiện phân loại hoặc thuộc tính không mang tính thứ tự số học, chẳng hạn như: workclass (loại hình công việc như tư nhân, chính phủ, tự doanh…), education (trình độ học vấn như Bachelors, HS-grad, Some-college…), marital.status (tình trạng hôn nhân như Never-married, Married, Divorced…), occupation (ngành nghề), relationship (vai trò trong gia đình như Husband, Not-in-family…), race (chủng tộc như White, Black…), sex (giới tính), native.country (quốc tịch), và income (mức thu nhập hàng năm, phân loại thành <=50K và >50K, cũng chính là biến mục tiêu trong bài toán phân loại).

Một số biến như workclass, occupation và native.country có xuất hiện giá trị “?” – biểu thị cho dữ liệu thiếu (missing values). Điều này cho thấy cần có bước xử lý dữ liệu thiếu để đảm bảo độ chính xác và độ tin cậy trong các phân tích sau đó. Nhìn chung, cấu trúc dữ liệu cân đối và rõ ràng, rất phù hợp cho các bài toán thống kê mô tả, kiểm định giả thuyết, cũng như các mô hình dự đoán như phân loại nhị phân (binary classification) nhằm xác định xác suất một cá nhân có mức thu nhập vượt ngưỡng 50.000 đô la mỗi năm.

head(q,4)
workclass education marital.status occupation relationship race sex native.country income
State-gov Bachelors Never-married Adm-clerical Not-in-family White Male United-States <=50K
Self-emp-not-inc Bachelors Married-civ-spouse Exec-managerial Husband White Male United-States <=50K
Private HS-grad Divorced Handlers-cleaners Not-in-family White Male United-States <=50K
Private 11th Married-civ-spouse Handlers-cleaners Husband Black Male United-States <=50K

Bốn quan sát đầu tiên trong bộ dữ liệu đều là nữ giới có thu nhập dưới 50.000 đô/năm, với độ tuổi dao động từ 54 đến 90 tuổi. Các cá nhân này có trình độ học vấn khác nhau, từ lớp 7–8 đến một phần chương trình đại học, và phần lớn thuộc chủng tộc White. Một số biến như workclass và occupation bị thiếu dữ liệu (ký hiệu “?”). Tất cả đều cư trú tại Hoa Kỳ, làm việc từ 18 đến 40 giờ mỗi tuần, không có thu nhập vốn nhưng có tổn thất vốn từ 3.900 đến 4.356 đô.

tail(q,4)
workclass education marital.status occupation relationship race sex native.country income
32558 Private HS-grad Married-civ-spouse Machine-op-inspct Husband White Male United-States >50K
32559 Private HS-grad Widowed Adm-clerical Unmarried White Female United-States <=50K
32560 Private HS-grad Never-married Adm-clerical Own-child White Male United-States <=50K
32561 Self-emp-inc HS-grad Married-civ-spouse Exec-managerial Wife White Female United-States >50K

Bốn quan sát cuối cùng trong bộ dữ liệu thể hiện sự đa dạng về tuổi (22 đến 58), giới tính, và tình trạng hôn nhân. Các cá nhân đều thuộc chủng tộc White, làm việc trong lĩnh vực kỹ thuật, hành chính hoặc sản xuất, với mức học vấn từ trung học đến cao đẳng. Trong đó, có một người có thu nhập trên 50.000 đô (nam giới, 40 tuổi, đã kết hôn), còn lại đều có thu nhập thấp hơn. Tất cả đều làm việc trong khu vực tư nhân, không có thu nhập hay tổn thất vốn, và làm việc từ 20 đến 40 giờ mỗi tuần tại Hoa Kỳ.

1.2 Kiểm tra xem có giá trị thiếu (NA) trong các cột định tính

colSums(is.na(q))
##      workclass      education marital.status     occupation   relationship 
##              0              0              0              0              0 
##           race            sex native.country         income 
##              0              0              0              0

Kết quả kiểm tra cho thấy không có giá trị thiếu (NA) trong bất kỳ biến nào của bộ dữ liệu, bao gồm cả các biến định tính như workclass, education, marital.status, occupation, relationship, race, sex, native.country, và income. Điều này đồng nghĩa với việc, xét về mặt kỹ thuật trong R, dữ liệu đã được nhập đầy đủ theo cấu trúc bảng và không có ô nào chứa giá trị NA chính thức.

Tuy nhiên, cần lưu ý rằng một số biến (như workclass, occupation, native.country) có thể chứa ký hiệu “?” để biểu diễn dữ liệu bị thiếu theo kiểu ký tự. Những giá trị này không được tính là NA trong R, nên không xuất hiện trong kết quả colSums(is.na(q)).

1.3 Chuyển đổi các biến cần thiết sang kiểu factor

qdt <- c("marital.status", "relationship", "race", "sex","education")
sapply(q[qdt], is.factor)
## marital.status   relationship           race            sex      education 
##          FALSE          FALSE          FALSE          FALSE          FALSE

Ban đầu, khi kiểm tra kiểu dữ liệu của các biến định tính như marital.status, relationship, race, sex, và education trong danh sách qdt, kết quả cho thấy tất cả đều chưa phải kiểu factor mà vẫn đang ở dạng chuỗi ký tự (character). Điều này không phù hợp nếu ta muốn thực hiện các phân tích thống kê định tính hoặc trực quan hóa dữ liệu phân loại, vì kiểu factor là cách R xử lý hiệu quả các biến phân loại.

for (col in qdt) {
  if (!is.factor(q[[col]])) {
    q[[col]] <- as.factor(q[[col]])
  }
}
sapply(q[qdt], is.factor)
## marital.status   relationship           race            sex      education 
##           TRUE           TRUE           TRUE           TRUE           TRUE

Sau đó, bằng cách dùng vòng lặp for, từng biến trong danh sách qdt được kiểm tra và chuyển đổi sang kiểu factor nếu chưa phải. Khi kiểm tra lại bằng sapply, kết quả cho thấy tất cả các biến trong qdt đều đã được chuyển thành kiểu factor. Việc chuyển đổi này giúp chuẩn hóa dữ liệu, tăng hiệu suất xử lý và đảm bảo tính tương thích với các hàm phân tích thống kê trong R như table(), prop.table(), glm(), hay các biểu đồ ggplot2. Đây là bước tiền xử lý quan trọng trước khi thực hiện các phân tích định tính trong R.

Phần 2: Phân tích Mô tả Một biến Định tính (Univariate Descriptive Analysis)

2.1 Biến marital.status

qq <-  q[,qdt]
table(qq$marital.status)
## 
##              Divorced     Married-AF-spouse    Married-civ-spouse 
##                  4443                    23                 14976 
## Married-spouse-absent         Never-married             Separated 
##                   418                 10683                  1025 
##               Widowed 
##                   993

Việc tạo bảng tần suất cho biến marital.status bằng lệnh table(qq$marital.status) giúp nhanh chóng thống kê số lượng quan sát cho từng nhóm tình trạng hôn nhân trong bộ dữ liệu. Kết quả cho thấy phần lớn cá nhân thuộc nhóm “Married-civ-spouse” (14.976 người) và “Never-married” (10.683 người), trong khi các nhóm như “Married-AF-spouse” (23 người) và “Married-spouse-absent” (418 người) có số lượng rất ít. Đây là cách đơn giản nhưng hiệu quả để có cái nhìn ban đầu về phân bố của một biến định tính.

q1 <- table(qq$marital.status)/sum(nrow(qq))
table(qq$marital.status)/sum(nrow(qq))
## 
##              Divorced     Married-AF-spouse    Married-civ-spouse 
##          0.1364515832          0.0007063665          0.4599367341 
## Married-spouse-absent         Never-married             Separated 
##          0.0128374436          0.3280918891          0.0314793772 
##               Widowed 
##          0.0304966064

Kết quả phân tích tỷ lệ các nhóm trong biến marital.status cho thấy rằng phần lớn cá nhân trong bộ dữ liệu thuộc nhóm đã kết hôn với vợ/chồng đang sống cùng (Married-civ-spouse), chiếm khoảng 45.99%. Nhóm chưa từng kết hôn (Never-married) cũng chiếm tỷ lệ khá lớn, đạt khoảng 32.81%. Trong khi đó, các nhóm còn lại có tỷ lệ thấp hơn đáng kể: nhóm ly hôn (Divorced) chiếm khoảng 13.65%, ly thân (Separated) chiếm 3.15%, góa (Widowed) chiếm 3.05%, và kết hôn nhưng vắng mặt vợ/chồng (Married-spouse-absent) chiếm 1.28%. Đặc biệt, nhóm Married-AF-spouse xuất hiện rất hiếm trong dữ liệu, chỉ chiếm 0.07%. Nhìn chung, phân bố tình trạng hôn nhân trong tập dữ liệu này cho thấy đa số người dân đã từng hoặc đang trong một mối quan hệ hôn nhân chính thức, trong khi các nhóm đặc biệt chỉ chiếm một phần rất nhỏ.

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.4.3
## Warning: package 'tibble' was built under R version 4.4.3
## Warning: package 'tidyr' was built under R version 4.4.3
## Warning: package 'readr' was built under R version 4.4.3
## Warning: package 'purrr' was built under R version 4.4.3
## Warning: package 'dplyr' was built under R version 4.4.3
## Warning: package 'stringr' was built under R version 4.4.3
## Warning: package 'forcats' was built under R version 4.4.3
## Warning: package 'lubridate' was built under R version 4.4.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ lubridate 1.9.4     ✔ tibble    3.3.0
## ✔ purrr     1.0.4     ✔ tidyr     1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(scales)
## Warning: package 'scales' was built under R version 4.4.3
## 
## Attaching package: 'scales'
## 
## The following object is masked from 'package:purrr':
## 
##     discard
## 
## The following object is masked from 'package:readr':
## 
##     col_factor
q1_df <- as.data.frame(q1)
names(q1_df) <- c("marital.status", "Tansuat")
ggplot(q1_df, aes(x = "", y = Tansuat, fill = marital.status)) +
  geom_col(width = 1, color = "white") +
  coord_polar(theta = "y") +
  scale_fill_manual(values = c("Divorced" = "#00C49A", "Married-AF-spouse" = "#1F77B4", "Married-spouse-absent" = "pink", "Married-civ-spouse" = "brown" ,"Never-married" = "#FF6384", "Separated" = "#9966FF", "Widowed" = "skyblue")) +
  labs(title = "Biểu đồ tần suất của marital.status") +
  theme_void() +  
  geom_text(aes(label = paste0(round(Tansuat,3), "%")), 
            position = position_stack(vjust = 0.5),
            color = "white", size = 4)

Biểu đồ tần suất của biến marital.status cho thấy sự phân bố không đồng đều rõ rệt giữa các nhóm tình trạng hôn nhân trong bộ dữ liệu. Cụ thể, nhóm “Married-civ-spouse” (đã kết hôn, sống cùng vợ/chồng) chiếm tỷ lệ cao nhất với khoảng 45.99%, tiếp theo là nhóm “Never-married” (chưa từng kết hôn) với 32.81%. Hai nhóm này cộng lại đã chiếm gần 79% tổng số quan sát, cho thấy đây là hai tình trạng phổ biến áp đảo trong dữ liệu. Các nhóm còn lại có tỷ lệ thấp hơn đáng kể, như “Divorced” (ly hôn) chiếm 13.65%, “Separated” (ly thân) chiếm 3.15%, “Widowed” (góa) chiếm 3.05%, và “Married-spouse-absent” chỉ chiếm 1.28%. Đặc biệt, nhóm “Married-AF-spouse” hầu như không xuất hiện, chỉ chiếm 0.07%. Sự mất cân đối này có ý nghĩa quan trọng trong quá trình mô hình hóa, vì các nhóm có tỷ lệ quá nhỏ có thể gây sai lệch hoặc giảm hiệu quả dự báo nếu không được xử lý thích hợp, chẳng hạn như gộp nhóm, tái phân loại hoặc áp dụng kỹ thuật cân bằng mẫu.

2.2 Biến relationship

qq <-  q[,qdt]
table(qq$relationship)
## 
##        Husband  Not-in-family Other-relative      Own-child      Unmarried 
##          13193           8305            981           5068           3446 
##           Wife 
##           1568
q2 <- table(qq$relationship)/sum(nrow(qq))
table(qq$relationship)/sum(nrow(qq))
## 
##        Husband  Not-in-family Other-relative      Own-child      Unmarried 
##     0.40517797     0.25505973     0.03012807     0.15564633     0.10583213 
##           Wife 
##     0.04815577

Kết quả phân tích tỷ lệ của biến relationship cho thấy nhóm Husband (người chồng trong hộ gia đình) chiếm tỷ lệ cao nhất, với khoảng 40.52% tổng số quan sát. Tiếp theo là nhóm Not-in-family (không thuộc gia đình hạt nhân) chiếm 25.51%, và nhóm Own-child (con ruột hoặc con nuôi trong hộ gia đình) chiếm khoảng 15.56%. Các nhóm còn lại có tỷ lệ thấp hơn: Unmarried (chưa kết hôn hoặc độc thân) chiếm 10.58%, Wife (người vợ) chiếm 4.82%, và thấp nhất là nhóm Other-relative (thành viên gia đình khác như anh chị em, ông bà…) với chỉ 3.01%. Phân bố này phản ánh rõ vai trò phổ biến của người chồng trong hộ gia đình thời điểm khảo sát, đồng thời cho thấy tỷ lệ nữ giới giữ vai trò “vợ” thấp hơn đáng kể, có thể do định nghĩa phân loại trong dữ liệu hoặc xu hướng nhân khẩu học đặc thù.

ggplot(qq, aes(x = relationship)) +
  geom_bar(fill = "pink", color = "black") +
  labs(x = "Mối quan hệ", y = "Tần số", title = "Biểu đồ tần số của biến relationship") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Biểu đồ tần số của biến relationship thể hiện rõ sự phân bố vai trò trong hộ gia đình của các cá nhân trong bộ dữ liệu. Nhóm chiếm tỷ lệ cao nhất là Husband (người chồng), với hơn 12.000 quan sát, cho thấy số lượng lớn người lao động trong mẫu khảo sát đóng vai trò trụ cột nam trong gia đình. Theo sau là nhóm Not-in-family (không thuộc gia đình hạt nhân), với gần 9.000 trường hợp – đây có thể là những người sống độc thân, ở trọ hoặc sống ngoài hộ gia đình truyền thống.

Các nhóm Own-child (con ruột hoặc con nuôi) và Unmarried (chưa kết hôn) chiếm tỷ lệ trung bình, lần lượt khoảng 5.000 và 4.000 quan sát. Ngược lại, nhóm Wife (người vợ) có số lượng thấp hơn đáng kể so với “Husband”, và nhóm Other-relative (thành viên gia đình khác) là nhóm ít xuất hiện nhất.

Phân bố này cho thấy một đặc điểm đáng chú ý về cấu trúc hộ gia đình trong dữ liệu – trong đó nam giới trong vai trò “chồng” được ghi nhận nhiều hơn so với nữ giới trong vai trò “vợ”, và có một tỷ lệ lớn cá nhân không sống trong hộ gia đình truyền thống. Đây là cơ sở quan trọng để phân tích sâu hơn về nhân khẩu học và xây dựng các mô hình liên quan đến thu nhập, nghề nghiệp hoặc cấu trúc hộ gia đình.

2.3 Biến race

qq <-  q[,qdt]
table(qq$race)
## 
## Amer-Indian-Eskimo Asian-Pac-Islander              Black              Other 
##                311               1039               3124                271 
##              White 
##              27816
q3 <- table(qq$race)/sum(nrow(qq))
table(qq$race)/sum(nrow(qq))
## 
## Amer-Indian-Eskimo Asian-Pac-Islander              Black              Other 
##        0.009551304        0.031909339        0.095942999        0.008322840 
##              White 
##        0.854273517

Kết quả phân tích biến race cho thấy đa số cá nhân trong bộ dữ liệu thuộc nhóm White, chiếm tới 85.43% tổng số quan sát. Nhóm Black đứng thứ hai với tỷ lệ 9.59%, theo sau là nhóm Asian-Pac-Islander với 3.19%. Các nhóm còn lại chiếm tỷ lệ rất nhỏ: Amer-Indian-Eskimo (người da đỏ hoặc Eskimo bản địa) chỉ chiếm khoảng 0.96%, và nhóm Other (chủng tộc khác) chiếm khoảng 0.83%. Phân bố này cho thấy sự mất cân đối rõ rệt về chủng tộc trong bộ dữ liệu, với sự áp đảo tuyệt đối của nhóm người da trắng, điều này cần được cân nhắc cẩn thận khi xây dựng các mô hình phân tích hoặc dự báo nhằm tránh thiên lệch và đảm bảo tính đại diện.

q3_df <- as.data.frame(q3)
names(q3_df) <- c("race", "Tansuat")
ggplot(q3_df, aes(x = race, y = Tansuat, fill = race)) +
  geom_col(width = 0.6) +
  geom_text(aes(label = round(Tansuat, 3)), vjust = -0.2, size = 5) +  
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +  
  labs(
    title = "Biểu đồ tỷ lệ chủng tộc ",
    x = "Chủng tộc",
    y = "Tần suất (%)"
  ) +
  theme_minimal(base_size = 14)

Biểu đồ tỷ lệ của biến race cho thấy sự mất cân đối rõ rệt về chủng tộc trong bộ dữ liệu. Nhóm White chiếm tỷ lệ áp đảo với khoảng 85.4%, vượt xa tất cả các nhóm còn lại. Nhóm Black đứng thứ hai nhưng chỉ chiếm khoảng 9.6%, trong khi Asian-Pac-Islander chiếm 3.2%, Amer-Indian-Eskimo khoảng 1%, và nhóm Other (các chủng tộc khác) chỉ chiếm khoảng 0.8%.

Sự chênh lệch lớn giữa các nhóm thể hiện rằng tập dữ liệu có sự thiên lệch nghiêng hẳn về một nhóm chủng tộc, điều này cần được lưu ý khi đưa biến race vào các mô hình phân tích hoặc học máy. Việc nhóm White chiếm tỷ lệ quá lớn có thể khiến mô hình học lệch nếu không có biện pháp xử lý như cân bằng mẫu, gộp nhóm ít thành phần, hoặc dùng trọng số theo nhóm. Đồng thời, điều này cũng phản ánh thực trạng cơ cấu dân số Mỹ trong dữ liệu điều tra dân số giai đoạn 1994.

2.4 Biến sex

qq <-  q[,qdt]
table(qq$sex)
## 
## Female   Male 
##  10771  21790
q4 <- table(qq$sex)/sum(nrow(qq))
table(qq$sex)/sum(nrow(qq))
## 
##    Female      Male 
## 0.3307945 0.6692055

Phân tích biến sex cho thấy sự chênh lệch đáng kể giữa hai giới tính trong bộ dữ liệu. Cụ thể, nam giới chiếm khoảng 66.92%, trong khi nữ giới chỉ chiếm khoảng 33.08% tổng số quan sát. Tỷ lệ này cho thấy nam giới chiếm ưu thế rõ rệt trong tập dữ liệu, gần gấp đôi so với nữ giới. Điều này có thể phản ánh đặc điểm của mẫu điều tra dân số tại thời điểm thu thập dữ liệu hoặc có thể do cách chọn mẫu nghiêng về nhóm lao động nam. Sự mất cân đối này cũng là yếu tố cần lưu ý trong các phân tích tiếp theo để tránh sai lệch trong đánh giá và mô hình hóa.

q4_df <- as.data.frame(q4)
names(q4_df) <- c("sex", "Tansuat")
ggplot(q4_df, aes(x = sex, y = Tansuat, fill = sex)) +
  geom_col(width = 0.6) +
  geom_text(aes(label = round(Tansuat, 3)), vjust = -0.2, size = 5) +  
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +  
  scale_fill_manual(values = c("Female" = "#9966FF", "Male" = "#4BC0C0")) +  
  labs(
    title = "Biểu đồ tỷ lệ giới tính ",
    x = "Giới tính",
    y = "Tần suất (%)"
  ) +
  theme_minimal(base_size = 14)

Biểu đồ tỷ lệ giới tính cho thấy sự mất cân đối đáng kể giữa hai nhóm trong bộ dữ liệu. Cụ thể, nam giới chiếm khoảng 66.9%, trong khi nữ giới chỉ chiếm khoảng 33.1% tổng số quan sát. Tỷ lệ này cho thấy số lượng nam giới trong tập dữ liệu gấp đôi số lượng nữ giới, phản ánh một sự thiên lệch giới rõ rệt.

Điều này có thể xuất phát từ đặc điểm của mẫu khảo sát hoặc do mục tiêu điều tra tập trung vào nhóm dân số đang trong độ tuổi lao động, mà trong nhiều ngành nghề tại thời điểm đó nam giới chiếm ưu thế. Khi đưa biến sex vào mô hình phân tích, cần chú ý đến sự lệch phân phối này để tránh hiện tượng mô hình bị học thiên lệch theo nhóm chiếm số đông (male), ảnh hưởng đến khả năng dự đoán cho nhóm nữ.

2.5 Biến education

qq <-  q[,qdt]
table(qq$education)
## 
##         10th         11th         12th      1st-4th      5th-6th      7th-8th 
##          933         1175          433          168          333          646 
##          9th   Assoc-acdm    Assoc-voc    Bachelors    Doctorate      HS-grad 
##          514         1067         1382         5355          413        10501 
##      Masters    Preschool  Prof-school Some-college 
##         1723           51          576         7291
q5 <- table(qq$education)/sum(nrow(qq))
table(qq$education)/sum(nrow(qq))
## 
##         10th         11th         12th      1st-4th      5th-6th      7th-8th 
##  0.028653911  0.036086115  0.013298117  0.005159547  0.010226959  0.019839686 
##          9th   Assoc-acdm    Assoc-voc    Bachelors    Doctorate      HS-grad 
##  0.015785756  0.032769264  0.042443414  0.164460551  0.012683886  0.322502380 
##      Masters    Preschool  Prof-school Some-college 
##  0.052916065  0.001566291  0.017689874  0.223918184

Kết quả phân tích tỷ lệ biến education cho thấy sự phân bố khá rõ ràng giữa các bậc học. Nhóm chiếm tỷ lệ cao nhất là HS-grad (tốt nghiệp trung học phổ thông) với khoảng 32.25%, tiếp theo là Some-college (đã học đại học nhưng chưa tốt nghiệp) chiếm 22.39%, và Bachelors (tốt nghiệp đại học) chiếm 16.45%.

Các nhóm có tỷ lệ thấp hơn gồm Masters (cao học) chiếm 5.29%, Assoc-voc và Assoc-acdm (trình độ cao đẳng nghề hoặc học thuật) lần lượt chiếm 4.24% và 3.28%. Các bậc học thấp như 9th, 10th, 11th, và 7th-8th đều có tỷ lệ dưới 4%. Đặc biệt, các nhóm như Preschool (mẫu giáo – 0.16%) và 1st-4th (lớp 1 đến lớp 4 – 0.52%) chiếm tỷ lệ rất nhỏ, gần như không đáng kể.

Tóm lại, phần lớn người trong bộ dữ liệu có trình độ học vấn từ trung học trở lên, trong đó gần 3/4 đã hoàn tất ít nhất chương trình phổ thông hoặc từng học đại học. Khi mô hình hóa biến education, có thể cân nhắc gộp các nhóm có tỷ lệ rất thấp để giảm nhiễu và tăng hiệu quả dự đoán.

ggplot(qq, aes(x = education)) +
  geom_bar(fill = "#FF6384", color = "black") +
  labs(x = "Trình độ học vấn ", y = "Tần suất", title = "Biểu đồ tần số trình độ học vấn") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  coord_flip()

Biểu đồ tần suất giáo dục cho thấy sự phân bố trình độ học vấn trong bộ dữ liệu có xu hướng tập trung mạnh vào một số bậc phổ biến. Trong đó, HS-grad (tốt nghiệp trung học) là nhóm chiếm tỷ lệ cao nhất với hơn 10.000 người, theo sau là Some-college (đã học đại học nhưng chưa tốt nghiệp) với khoảng 7.000 người, và Bachelors (tốt nghiệp đại học) với khoảng 5.000 người.

Các bậc học sau đại học như Masters, Doctorate, và Prof-school chiếm tỷ lệ nhỏ hơn đáng kể. Ngoài ra, một số bậc học dưới trung học như 9th, 7th-8th, hay 5th-6th cũng xuất hiện nhưng số lượng rất thấp. Nhóm có trình độ học vấn thấp nhất – Preschool – gần như không đáng kể.

Phân bố này phản ánh xu hướng học vấn phổ biến trong dân số lao động Mỹ thời điểm khảo sát, với phần lớn dân cư đạt trình độ từ trung học trở lên. Khi đưa biến education vào phân tích hoặc mô hình hóa, có thể cân nhắc gộp các nhóm có tần suất rất thấp để đảm bảo tính ổn định và giảm nhiễu trong mô hình.

Phần 3: Ước lượng Khoảng và Kiểm định Giả thuyết cho Tỷ lệ (Một biến)

Trong phần này, ta tiến hành phân tích tỷ lệ của một hạng mục cụ thể thuộc 5 biến định tính trong bộ dữ liệu: tình trạng hôn nhân (marital.status), quan hệ gia đình (relationship), chủng tộc (race), giới tính (sex), và trình độ học vấn (education). Mỗi biến sẽ được phân tích qua 2 bước: (1) ước lượng khoảng tin cậy 95% cho tỷ lệ của hạng mục quan tâm trong tổng thể, và (2) kiểm định giả thuyết thống kê cho một giả định cụ thể về tỷ lệ đó. Mức ý nghĩa là α = 0.05.

3.1 Xác định hạng mục Quan tâm

“Never-married” của biến marital.status

“Husband” của biến relationship

“White” của biến race

3.2 Ước lượng Khoảng Tin cậy và Kiểm định Giả thuyết của từng hạng mục

3.2.1 Hạng mục “Never-married” của biến marital.status

prop.test(sum(q$marital.status == "Never-married"), nrow(q), conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  sum(q$marital.status == "Never-married") out of nrow(q), null probability 0.5
## X-squared = 3848.3, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.3229973 0.3332271
## sample estimates:
##         p 
## 0.3280919

Trong phân tích tỷ lệ nhóm người chưa từng kết hôn (hạng mục “Never-married”) thuộc biến định tính marital.status, ta tiến hành ước lượng khoảng tin cậy 95% và kiểm định giả thuyết thống kê với giả định rằng tỷ lệ người chưa từng kết hôn trong tổng thể là 50%. Kết quả từ phép kiểm định tỷ lệ một mẫu cho thấy rằng tỷ lệ mẫu của nhóm “Never-married” trong tập dữ liệu là khoảng 32.81%, với khoảng tin cậy 95% nằm trong khoảng từ 32.30% đến 33.32%. Đây là một khoảng tương đối hẹp, cho thấy độ chính xác cao của ước lượng, phần lớn nhờ vào kích thước mẫu rất lớn của bộ dữ liệu.

Kiểm định Giả thuyết

Ta đặt giả thuyết như sau:

  • H₀ (Giả thuyết không):Tỷ lệ người chưa từng kết hôn = 0.5

  • H₁ (Giả thuyết đối): Tỷ lệ người chưa từng kết hôn5 ≠ 0.5

Kiểm định giả thuyết được thực hiện với giả thuyết không H₀: tỷ lệ = 0.5 và giả thuyết đối H₁: tỷ lệ ≠ 0.5. Kết quả kiểm định trả về thống kê kiểm định X-squared = 3848.3 và p-value < 2.2e-16, cho thấy giá trị p gần như bằng 0. Với p-value nhỏ hơn rất nhiều so với mức ý nghĩa 0.05, ta bác bỏ giả thuyết H₀, nghĩa là có bằng chứng thống kê cực kỳ mạnh để khẳng định rằng tỷ lệ người chưa từng kết hôn trong dân số thực sự khác 50%, và cụ thể là thấp hơn nhiều.

Kết quả này không chỉ có ý nghĩa về mặt thống kê mà còn mang ý nghĩa thực tiễn quan trọng. Việc chỉ khoảng 1/3 dân số trong độ tuổi lao động chưa kết hôn (tính tại thời điểm điều tra) có thể phản ánh nhiều đặc điểm xã hội như độ tuổi kết hôn trung bình thấp, tỷ lệ kết hôn cao trong dân cư Mỹ giai đoạn đầu thập niên 90, hay các yếu tố kinh tế và văn hóa ảnh hưởng đến việc lập gia đình. Trong bối cảnh nghiên cứu thị trường hoặc hoạch định chính sách xã hội, kết quả này gợi ý rằng các chiến lược tiếp cận cộng đồng hoặc phân khúc người tiêu dùng nên cân nhắc đặc điểm nhân khẩu học này, thay vì giả định một phân bố cân bằng giữa người đã và chưa lập gia đình.

3.2.2 Hạng mục “Husband” của biến relationship

prop.test(sum(q$relationship == "Husband"), nrow(q), conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  sum(q$relationship == "Husband") out of nrow(q), null probability 0.5
## X-squared = 1170.7, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.3998418 0.4105366
## sample estimates:
##        p 
## 0.405178

Kiểm định Giả thuyết

Ta đặt giả thuyết như sau:

  • H₀ (Giả thuyết không):Tỷ lệ người đóng vai trò là chồng trong hộ gia đình = 0.5

  • H₁ (Giả thuyết đối): Tỷ lệ người đóng vai trò là chồng trong hộ gia đình ≠ 0.5

3.2.3 Hạng mục “White” của biến race

prop.test(sum(q$race == "White"), nrow(q), conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  sum(q$race == "White") out of nrow(q), null probability 0.5
## X-squared = 16345, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.8503838 0.8580793
## sample estimates:
##         p 
## 0.8542735

Phân tích tỷ lệ của nhóm người được phân loại là “White” trong biến race – một trong những biến định tính quan trọng phản ánh đặc điểm nhân khẩu học trong bộ dữ liệu. Dữ liệu cho thấy tỷ lệ mẫu của nhóm “White” chiếm khoảng 85.43% dân số, với khoảng tin cậy 95% cho tỷ lệ thực tế nằm trong khoảng từ 85.04% đến 85.81%. Đây là một khoảng tin cậy rất hẹp, phản ánh tính ổn định và độ chính xác cao của ước lượng, nhờ vào quy mô mẫu rất lớn. Khoảng này nằm hoàn toàn trên mốc 50%, cho thấy sự áp đảo của nhóm người da trắng trong bộ dữ liệu.

Kiểm định Giả thuyết

Ta đặt giả thuyết như sau:

  • H₀ (Giả thuyết không):Tỷ lệ người da trắng = 0.5

  • H₁ (Giả thuyết đối):Tỷ lệ người da trắng ≠ 0.5

Về mặt kiểm định giả thuyết, ta kiểm tra xem tỷ lệ người da trắng trong dân số có khác biệt đáng kể so với giả định trung lập là 0.5 hay không. Giả thuyết không (H₀) được đặt ra là tỷ lệ = 0.5, trong khi giả thuyết đối (H₁) là tỷ lệ ≠ 0.5. Kết quả kiểm định cho thấy thống kê kiểm định X-squared = 16,345, với p-value < 2.2e-16, tức là gần như bằng 0. Do đó, ta bác bỏ giả thuyết H₀ một cách rất chắc chắn ở mức ý nghĩa 5%. Điều này chứng tỏ có bằng chứng thống kê mạnh mẽ cho thấy tỷ lệ người “White” trong tổng thể khác biệt rõ rệt so với mức 50%, và cụ thể là cao hơn rất nhiều.

Xét về ý nghĩa thực tiễn, kết quả này phản ánh cơ cấu chủng tộc trong bộ dữ liệu dân số Mỹ năm 1994, khi nhóm người da trắng vẫn chiếm phần lớn dân cư. Việc tỷ lệ này vượt quá 85% cũng cho thấy bộ dữ liệu có thể mang đặc trưng nghiêng về nhóm đa số, và điều này cần được cân nhắc khi xây dựng mô hình dự báo hoặc khi phân tích các yếu tố liên quan đến bình đẳng chủng tộc, cơ hội kinh tế, và tiếp cận thị trường. Ngoài ra, nếu dữ liệu này được dùng để đào tạo các mô hình học máy, cần đặc biệt chú ý đến vấn đề mất cân bằng trong tập dữ liệu – vì sự chi phối của một nhóm chủng tộc có thể ảnh hưởng đến độ chính xác và công bằng của các thuật toán phân tích sau này.

Phần 4: Relative risk và Odd Ratio

Để tiếp tục phân tích mối quan hệ giữa các biến định tính, ta lựa chọn hai cặp biến có ý nghĩa thực tiễn cao để tính Relative Risk (nguy cơ tương đối) và Odds Ratio (tỷ số chênh). Hai cặp biến được chọn gồm:

Cặp 1: sex (giới tính: Male/Female) và income (thu nhập: >50K / <=50K) → nhằm so sánh khả năng đạt thu nhập cao giữa nam và nữ.

Cặp 2: marital.status (được rút gọn thành: Married-civ-spouse / Other) và income → để xem liệu tình trạng hôn nhân có ảnh hưởng đến xác suất có thu nhập trên 50.000 đô/năm.

Với mỗi cặp biến, ta tiến hành lập bảng tần suất chéo 2×2, sau đó tính tỷ số chênh (Odds Ratio) bằng hàm oddsratio() từ gói epitools, đồng thời tính nguy cơ tương đối (Relative Risk) thủ công hoặc từ cùng kết quả trả về của hàm. Kết quả sẽ giúp đánh giá xem một nhóm có khả năng (risk) hoặc cơ hội (odds) có thu nhập cao nhiều hơn nhóm còn lại hay không, và mức độ khác biệt đó có ý nghĩa thống kê hay không.

4.1 Sex (giới tính: Male/Female) và income (thu nhập: >50K / <=50K)

4.1.1 Relative risk

library(epitools)
tab1 <- table(q$sex, q$income)
riskratio(tab1)
## $data
##         
##          <=50K >50K Total
##   Female  9592 1179 10771
##   Male   15128 6662 21790
##   Total  24720 7841 32561
## 
## $measure
##         risk ratio with 95% C.I.
##          estimate    lower   upper
##   Female  1.00000       NA      NA
##   Male    2.79312 2.637145 2.95832
## 
## $p.value
##         two-sided
##          midp.exact fisher.exact chi.square
##   Female         NA           NA         NA
##   Male            0            0          0
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Kết quả phân tích risk ratio (tỷ lệ nguy cơ tương đối) cho cặp biến sex và income cho thấy sự khác biệt rất rõ rệt giữa nam và nữ về khả năng có thu nhập trên 50.000 đô la mỗi năm.

Cụ thể, trong tổng số 10.771 nữ giới, chỉ có 1.179 người (tương đương 10.95%) có thu nhập trên 50K, trong khi ở nam giới, có tới 6.662 trên tổng số 21.790 người (tương đương 30.57%) đạt mức thu nhập này. Khi so sánh nguy cơ có thu nhập cao giữa hai nhóm, ta thu được risk ratio (RR) = 2.79, nghĩa là nam giới có khả năng đạt thu nhập trên 50K cao gấp khoảng 2.79 lần so với nữ giới.

Khoảng tin cậy 95% cho risk ratio nằm trong khoảng [2.64; 2.96], cho thấy kết quả này rất ổn định và tin cậy. Đồng thời, giá trị p-value = 0 theo cả ba phương pháp kiểm định (mid-p exact, Fisher exact và chi-square) khẳng định sự khác biệt này là có ý nghĩa thống kê với độ tin cậy rất cao (p < 0.001).

Tóm lại, kết quả cho thấy giới tính là một yếu tố ảnh hưởng mạnh đến khả năng có thu nhập cao trong bộ dữ liệu này, với ưu thế rõ ràng nghiêng về nam giới. Phát hiện này phản ánh một thực trạng chênh lệch thu nhập theo giới trong thị trường lao động, và hoàn toàn có thể được đưa vào phân tích sâu hơn trong các mô hình dự đoán hoặc nghiên cứu chính sách.

4.1.2 Ratio odd

oddsratio(tab1)
## $data
##         
##          <=50K >50K Total
##   Female  9592 1179 10771
##   Male   15128 6662 21790
##   Total  24720 7841 32561
## 
## $measure
##         odds ratio with 95% C.I.
##          estimate    lower    upper
##   Female  1.00000       NA       NA
##   Male    3.58229 3.351369 3.832223
## 
## $p.value
##         two-sided
##          midp.exact fisher.exact chi.square
##   Female         NA           NA         NA
##   Male            0            0          0
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Kết quả phân tích tỷ số chênh (Odds Ratio) giữa giới tính (sex) và thu nhập (income) cho thấy sự khác biệt rõ rệt về khả năng đạt mức thu nhập cao giữa nam và nữ trong bộ dữ liệu. Dựa trên bảng tần suất, trong tổng số 10.771 nữ giới, chỉ có 1.179 người có thu nhập trên 50.000 đô/năm, trong khi con số này ở nam giới là 6.662 trên tổng số 21.790 người. Khi tính toán odds (tỷ số giữa số người có và không có thu nhập cao), odds của nữ giới là khoảng 0.123, còn ở nam giới là khoảng 0.44.

Từ đó, tỷ số chênh (Odds Ratio) được tính là 3.58, với khoảng tin cậy 95% nằm trong khoảng [3.35; 3.83]. Điều này có nghĩa là nam giới có khả năng đạt thu nhập trên 50.000 đô cao hơn nữ giới khoảng 3.58 lần, nếu xét theo tỷ lệ odds. Giá trị p-value bằng 0 theo tất cả các phương pháp kiểm định (mid-p exact, Fisher exact, chi-square), khẳng định sự khác biệt này là có ý nghĩa thống kê rất mạnh.

Kết quả này phản ánh một thực tế đáng lưu ý về chênh lệch thu nhập theo giới tính trong dữ liệu, đồng thời củng cố vai trò của giới tính như một biến giải thích quan trọng trong các mô hình phân tích và dự báo thu nhập.

**Cặp 2: marital.status (Married-civ-spouse / Others) và income (>50K / <=50K*)**

4.2.1 Relative risk

q$married_bin <- ifelse(q$marital.status == "Married-civ-spouse", "Married", "Not-married")

tab2 <- table(q$married_bin, q$income)

riskratio(tab2)
## $data
##              
##               <=50K >50K Total
##   Married      8284 6692 14976
##   Not-married 16436 1149 17585
##   Total       24720 7841 32561
## 
## $measure
##              risk ratio with 95% C.I.
##                estimate     lower     upper
##   Married     1.0000000        NA        NA
##   Not-married 0.1462236 0.1378912 0.1550595
## 
## $p.value
##              two-sided
##               midp.exact fisher.exact chi.square
##   Married             NA           NA         NA
##   Not-married          0            0          0
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Kết quả phân tích tỷ lệ nguy cơ tương đối (Relative Risk) giữa tình trạng hôn nhân (marital.status) và mức thu nhập (income) tiếp tục cho thấy sự khác biệt rất lớn giữa hai nhóm: đã kết hôn (Married-civ-spouse) và không kết hôn (bao gồm chưa kết hôn, ly hôn, góa, ly thân…). Sau khi mã hóa lại biến marital.status thành hai nhóm “Married” và “Not-married”, bảng tần suất 2×2 cho thấy trong số 14.976 người đã kết hôn, có tới 6.692 người (≈44.7%) có thu nhập trên 50.000 đô/năm. Trong khi đó, trong 17.585 người chưa kết hôn hoặc không còn kết hôn, chỉ có 1.149 người (≈6.53%) đạt mức thu nhập tương tự.

Khi sử dụng hàm riskratio() để tính tỷ lệ nguy cơ, nhóm “Married” được dùng làm nhóm tham chiếu với risk ratio bằng 1. Nhóm “Not-married” có risk ratio = 0.146, với khoảng tin cậy 95% nằm trong khoảng [0.138; 0.155]. Điều này có nghĩa là người không kết hôn có khả năng đạt thu nhập trên 50K thấp hơn gần 7 lần so với người đã kết hôn. Tất cả các kiểm định p-value đều bằng 0 (p < 0.001), khẳng định sự khác biệt này là có ý nghĩa thống kê cực kỳ mạnh.

Kết quả trên cho thấy tình trạng hôn nhân có mối liên hệ rõ rệt với mức thu nhập, và người đã lập gia đình trong bộ dữ liệu có xác suất đạt thu nhập cao hơn một cách đáng kể. Điều này có thể phản ánh sự ổn định trong cuộc sống, khả năng gánh vác tài chính hoặc đặc điểm nghề nghiệp của những người đã kết hôn. Vì vậy, biến marital.status hoàn toàn xứng đáng được đưa vào các mô hình dự đoán thu nhập hoặc phân tích nhân khẩu học sâu hơn.

4.2.2 Ratio odd

oddsratio(tab2)
## $data
##              
##               <=50K >50K Total
##   Married      8284 6692 14976
##   Not-married 16436 1149 17585
##   Total       24720 7841 32561
## 
## $measure
##              odds ratio with 95% C.I.
##                 estimate      lower      upper
##   Married     1.00000000         NA         NA
##   Not-married 0.08652376 0.08081946 0.09260231
## 
## $p.value
##              two-sided
##               midp.exact fisher.exact chi.square
##   Married             NA           NA         NA
##   Not-married          0            0          0
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Kết quả phân tích Odds Ratio (tỷ số chênh) giữa tình trạng hôn nhân (marital.status, rút gọn thành “Married” và “Not-married”) và thu nhập (income) cho thấy mối liên hệ rất mạnh giữa việc kết hôn và khả năng đạt thu nhập cao.

Cụ thể, trong số 14.976 người đã kết hôn, có 6.692 người có thu nhập trên 50.000 đô/năm, trong khi chỉ có 1.149 người trong tổng số 17.585 người không kết hôn đạt được mức thu nhập này. Khi xét theo odds – tức là tỷ lệ giữa số người có và không có thu nhập cao – nhóm đã kết hôn có odds là 6692 / 8284 ≈ 0.81, còn nhóm chưa kết hôn có odds là 1149 / 16436 ≈ 0.07.

Từ đó, Odds Ratio = 0.07 / 0.81 ≈ 0.0865, với khoảng tin cậy 95% là [0.081; 0.093]. Giá trị odds ratio dưới 1 thể hiện rằng người không kết hôn có khả năng đạt thu nhập trên 50K thấp hơn rất nhiều so với người đã kết hôn — cụ thể là odds chỉ bằng khoảng 8.65% so với nhóm đã kết hôn. Tất cả các kiểm định p-value đều bằng 0, cho thấy sự khác biệt này có ý nghĩa thống kê cực kỳ cao.

Tóm lại, phân tích Odds Ratio cho thấy tình trạng hôn nhân là một yếu tố có ảnh hưởng rất lớn đến khả năng đạt thu nhập cao trong bộ dữ liệu. Người đã kết hôn có odds đạt thu nhập cao vượt trội so với người không kết hôn, điều này củng cố vai trò của marital.status như một biến giải thích quan trọng trong các mô hình phân tích thu nhập cá nhân.

Phần 5: Phân tích Mối quan hệ giữa Hai biến Định tính (Bivariate Analysis)

Ta chọn 2 cặp biến định tính như sau:

  • Relationship và Income

  • Race và Marital.status

5.1 Cặp biến Relationship và Income

5.1.1 Tạo bảng tần suất chéo và tính tỷ lệ

tab11 <- table(q$relationship, q$income)
tab11
##                 
##                  <=50K >50K
##   Husband         7275 5918
##   Not-in-family   7449  856
##   Other-relative   944   37
##   Own-child       5001   67
##   Unmarried       3228  218
##   Wife             823  745
# Tính tỷ lệ theo hàng
prop1 <- prop.table(tab11, margin = 1) * 100

# Hiển thị bảng
round(prop1, 2)
##                 
##                  <=50K  >50K
##   Husband        55.14 44.86
##   Not-in-family  89.69 10.31
##   Other-relative 96.23  3.77
##   Own-child      98.68  1.32
##   Unmarried      93.67  6.33
##   Wife           52.49 47.51

5.1.2 Trực quan hóa

df_tab11 <- as.data.frame(tab11)
colnames(df_tab11) <- c("relationship", "income", "Freq")
ggplot(df_tab11, aes(x = relationship, y = Freq, fill = income)) +
  geom_bar(stat = "identity", position = "fill") +
  labs(title = "Tỷ lệ thu nhập theo vai trò trong hộ gia đình",
       y = "Tỷ lệ", x = "Mối quan hệ") +
  scale_y_continuous(labels = scales::percent)

5.1.3 Kiểm định Thống kê (Kiểm định Chi-bình phương)

chisq.test(tab11)
## 
##  Pearson's Chi-squared test
## 
## data:  tab11
## X-squared = 6699.1, df = 5, p-value < 2.2e-16

5.2 Cặp biến Race và Marital.status

5.2.1 Tạo bảng tần suất chéo và tính tỷ lệ

tab22 <- table(q$race, q$marital.status)
tab22
##                     
##                      Divorced Married-AF-spouse Married-civ-spouse
##   Amer-Indian-Eskimo       60                 0                116
##   Asian-Pac-Islander       75                 0                508
##   Black                   485                 1                837
##   Other                    26                 0                105
##   White                  3797                22              13410
##                     
##                      Married-spouse-absent Never-married Separated Widowed
##   Amer-Indian-Eskimo                     9           103        11      12
##   Asian-Pac-Islander                    41           372        19      24
##   Black                                 62          1346       265     128
##   Other                                 15           105        13       7
##   White                                291          8757       717     822
prop2 <- prop.table(tab22, margin = 1) * 100

round(prop2, 2)
##                     
##                      Divorced Married-AF-spouse Married-civ-spouse
##   Amer-Indian-Eskimo    19.29              0.00              37.30
##   Asian-Pac-Islander     7.22              0.00              48.89
##   Black                 15.52              0.03              26.79
##   Other                  9.59              0.00              38.75
##   White                 13.65              0.08              48.21
##                     
##                      Married-spouse-absent Never-married Separated Widowed
##   Amer-Indian-Eskimo                  2.89         33.12      3.54    3.86
##   Asian-Pac-Islander                  3.95         35.80      1.83    2.31
##   Black                               1.98         43.09      8.48    4.10
##   Other                               5.54         38.75      4.80    2.58
##   White                               1.05         31.48      2.58    2.96

5.1.2 Trực quan hóa

df_tab22 <- as.data.frame(tab22)
colnames(df_tab22) <- c("race", "marital.status", "Freq")
ggplot(df_tab22, aes(x = race, y = Freq, fill = marital.status)) +
  geom_bar(stat = "identity", position = "fill") +
  labs(title = "Tỷ lệ thu nhập theo vai trò trong hộ gia đình",
       y = "Tỷ lệ", x = "Mối quan hệ") +
  scale_y_continuous(labels = scales::percent)

5.1.3 Kiểm định Thống kê (Kiểm định Chi-bình phương)

chisq.test(tab22)
## Warning in chisq.test(tab22): Chi-squared approximation may be incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  tab22
## X-squared = 923.81, df = 24, p-value < 2.2e-16

Phần 5:Tổng kết và Thảo luận

5.1 Tóm tắt những phát hiện chính

5.2 Hạn chế của phân tích

5.3 Đề xuất

5.4 Câu hỏi mở/Hướng nghiên cứu tiếp theo