Dữ liệu này được trích xuất từ cơ sở dữ liệu của Cục điều tra dân số năm 1994 bởi Ronny Kohavi và Barry Becker (Khai thác và trực quan hóa dữ liệu, Silicon Graphics). Bộ dữ liệu này được trích xuất từ điều tra dân số của Mỹ, dùng để dự đoán liệu thu nhập của một người có vượt mức $50K/năm hay không.
Biến phụ thuộc (target): income (<=50K hoặc >50K) → biến định tính
library(xlsx)
## Warning: package 'xlsx' was built under R version 4.3.3
npt <- read.xlsx(file = "C:/Users/PC_Dell/Downloads/adult_categorical_npt.xlsx", sheetIndex = 1, header = T)
str(npt)
## '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" ...
head(npt,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 |
Giải thích:
# Chọn các biến định tính
dldt <- c("workclass", "education", "marital.status",
"occupation", "relationship", "race",
"sex", "native.country", "income")
for (col in dldt) {
if (!is.factor(npt[[col]])) {
npt[[col]] <- as.factor(npt[[col]])
}
}
sapply(npt[dldt], is.factor)
## workclass education marital.status occupation relationship
## TRUE TRUE TRUE TRUE TRUE
## race sex native.country income
## 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.
Cấu trúc bộ dữ liệu
| Tên cột gốc | Mô tả |
|---|---|
workclass |
Loại công việc - định tính danh mục (categorical) |
education |
Trình độ học vấn - định tính danh mục (categorical) |
marital-status |
Tình trạng hôn nhân - định tính danh mục (categorical) |
occupation |
Nghề nghiệp - định tính danh mục (categorical) |
relationship |
Quan hệ trong hộ gia đình - định tính danh mục (categorical) |
race |
Chủng tộc - định tính danh mục (categorical) |
sex |
Giới tính - định tính danh mục (categorical) |
native-country |
Quốc gia - định tính danh mục (categorical) |
income |
Mức thu nhập (<=50K hoặc >50K) - Nhị phân |
Giải thích:
sapply(dat, …): áp dụng hàm cho từng cột trong dữ liệu dat.
sum(is.na(x)): đếm số lượng NA trong từng cột.
# Kiểm tra số lượng NA trong mỗi cột định tính
na_counts <- sapply(data, function(x) sum(is.na(x)))
## Warning in is.na(x): is.na() applied to non-(list or vector) of type 'symbol'
## Warning in is.na(x): is.na() applied to non-(list or vector) of type 'language'
## Warning in is.na(x): is.na() applied to non-(list or vector) of type 'language'
## Warning in is.na(x): is.na() applied to non-(list or vector) of type 'symbol'
## Warning in is.na(x): is.na() applied to non-(list or vector) of type 'language'
na_counts
## ... list package lib.loc verbose envir overwrite
## 0 0 0 0 0 0 0 0
Nhận xét - Kết quả thu được cho thấy rằng tất cả các cột định tính đều không có giá trị thiếu (NA) vì số lượng NA trong các cột đều hiển thị là 0
qq <- npt[,dldt]
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)
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.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.3 ✔ tibble 3.2.1
## ✔ purrr 1.0.2 ✔ tidyr 1.3.0
## ── 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)
##
## 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" = "yellow", "Married-civ-spouse" = "red" ,"Never-married" = "#FF6384", "Separated" = "black", "Widowed" = "green")) +
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.
qq <- npt[,dldt]
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 = "blue", color = "white") +
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.
qq <- npt[,dldt]
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.
qq <- npt[,dldt]
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ữ.
qq <- npt[,dldt]
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.
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.
“Never-married” của biến marital.status
“Husband” của biến relationship
“White” của biến race
prop.test(sum(npt$marital.status == "Never-married"), nrow(npt), conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: sum(npt$marital.status == "Never-married") out of nrow(npt), 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.
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.
prop.test(sum(npt$relationship == "Husband"), nrow(npt), conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: sum(npt$relationship == "Husband") out of nrow(npt), 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
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
prop.test(sum(npt$race == "White"), nrow(npt), conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: sum(npt$race == "White") out of nrow(npt), 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.
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.
Để 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.
library(epitools)
tab1 <- table(npt$sex, npt$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.
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.
npt$married_bin <- ifelse(npt$marital.status == "Married-civ-spouse", "Married", "Not-married")
tab2 <- table(npt$married_bin, npt$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.
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.
tab3 <- table(npt$race, npt$income)
riskratio(tab3)
## $data
##
## <=50K >50K Total
## Amer-Indian-Eskimo 275 36 311
## Asian-Pac-Islander 763 276 1039
## Black 2737 387 3124
## Other 246 25 271
## White 20699 7117 27816
## Total 24720 7841 32561
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Amer-Indian-Eskimo 1.0000000 NA NA
## Asian-Pac-Islander 2.2948348 1.6607649 3.170989
## Black 1.0701825 0.7763222 1.475277
## Other 0.7969455 0.4913800 1.292527
## White 2.2103456 1.6246994 3.007096
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Amer-Indian-Eskimo NA NA NA
## Asian-Pac-Islander 7.160403e-09 1.018627e-08 3.778142e-08
## Black 6.901951e-01 7.183199e-01 6.775650e-01
## Other 3.604882e-01 4.161314e-01 3.557905e-01
## White 1.161834e-09 1.654771e-09 1.677957e-08
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Sau khi tạo bảng chéo 2×5 giữa biến race và biến income, ta thu được bảng tần suất như sau:
Chủng tộc ≤50K >50K Tổng số Tỷ lệ >50K (%) Amer-Indian-Eskimo 275 36 311 11.57% Asian-Pac-Islander 763 276 1039 26.56% Black 2737 387 3124 12.39% Other 246 25 271 9.23% White 20699 7117 27816 25.60% Tổng 24720 7841 32561 24.08%
Giải thích: Risk Ratio (RR) là tỷ số giữa xác suất có thu nhập >50K của một nhóm so với nhóm tham chiếu.
Ở đây, nhóm tham chiếu là Amer-Indian-Eskimo, nên RR của nhóm này = 1.0.
Nếu RR > 1, nhóm đó có khả năng cao hơn có thu nhập >50K so với nhóm tham chiếu.
Nếu RR < 1, nhóm đó có khả năng thấp hơn.
Kết quả phân tích cho thấy thu nhập có sự khác biệt đáng kể giữa các nhóm chủng tộc:
Người gốc châu Á (Asian-Pac-Islander) và người da trắng (White) có khả năng đạt mức thu nhập trên 50.000 đô mỗi năm cao gấp hơn 2 lần so với nhóm bản địa (Amer-Indian-Eskimo).
Trong khi đó, người da đen (Black) và các nhóm chủng tộc khác (Other) không có sự khác biệt rõ ràng về khả năng đạt thu nhập cao so với người bản địa.
Đây là một chỉ báo quan trọng về sự bất bình đẳng trong thu nhập giữa các nhóm chủng tộc, và hoàn toàn có thể được đưa vào mô hình phân tích nhân khẩu học hoặc dự đoán thu nhập. Những nhóm có tỷ lệ thu nhập cao hơn (như Asian-Pac-Islander và White) có thể đang được tiếp cận nhiều hơn với giáo dục, nghề nghiệp chuyên môn hoặc vị trí xã hội ổn định hơn.
Người bản địa, người da đen và các nhóm “Other” có thể đang chịu thiệt thòi bởi các yếu tố lịch sử, cấu trúc xã hội, hoặc thiếu hỗ trợ chính sách trong việc nâng cao điều kiện sống và thu nhập.
oddsratio(tab3)
## $data
##
## <=50K >50K Total
## Amer-Indian-Eskimo 275 36 311
## Asian-Pac-Islander 763 276 1039
## Black 2737 387 3124
## Other 246 25 271
## White 20699 7117 27816
## Total 24720 7841 32561
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Amer-Indian-Eskimo 1.0000000 NA NA
## Asian-Pac-Islander 2.7520802 1.9162852 4.059163
## Black 1.0761774 0.7578174 1.572193
## Other 0.7780422 0.4486922 1.329747
## White 2.6160304 1.8725578 3.769743
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Amer-Indian-Eskimo NA NA NA
## Asian-Pac-Islander 7.160403e-09 1.018627e-08 3.778142e-08
## Black 6.901951e-01 7.183199e-01 6.775650e-01
## Other 3.604882e-01 4.161314e-01 3.557905e-01
## White 1.161834e-09 1.654771e-09 1.677957e-08
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
sử dụng Odds Ratio (OR) để phân tích sự khác biệt về thu nhập (>50K) giữa các chủng tộc, so với nhóm tham chiếu là người bản địa Bắc Mỹ.
Trong 311 người thuộc nhóm Amer-Indian-Eskimo, chỉ có 36 người có thu nhập >50K, tạo ra odds là 36 / 275 ≈ 0.131.
Trong 1039 người Châu Á, có 276 người có thu nhập cao, với odds là 276 / 763 ≈ 0.362. So với nhóm Amer-Indian-Eskimo, odds cao gấp 2.75 lần, có ý nghĩa thống kê cao (p-value ≈ 0).
Người Da trắng có odds thu nhập cao là 0.344, cao hơn gần 2.62 lần so với nhóm bản địa – có ý nghĩa thống kê.
Người Black có odds thu nhập là 0.141, khá gần với nhóm bản địa (0.131), với odds ratio chỉ 1.08, và không có ý nghĩa thống kê.
Nhóm Other có odds thấp hơn nhóm bản địa (0.102 vs 0.131), nhưng do cỡ mẫu nhỏ nên không đủ ý nghĩa thống kê (OR = 0.78, p = 0.36). Người Châu Á và châu Đại dương và người da trắng có odds có thu nhập >50K cao hơn ~2.6–2.75 lần so với Amer-Indian-Eskimo.
Các nhóm Black và Other không khác biệt đáng kể về odds thu nhập so với nhóm tham chiếu.
Từ những kết quả trên ta kết luận Người bản địa Bắc Mỹ có tỷ lệ thu nhập cao thấp nhất.
Đây là nhóm bản địa với lịch sử bị bóc lột, tài nguyên hạn chế, và hạ tầng giáo dục – y tế – kinh tế kém phát triể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
tab11 <- table(npt$relationship, npt$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
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)
chisq.test(tab11)
##
## Pearson's Chi-squared test
##
## data: tab11
## X-squared = 6699.1, df = 5, p-value < 2.2e-16
tab22 <- table(npt$race, npt$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
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)
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