Bộ dữ liệu Adult (hay Census Income 1994) ghi lại thông tin nhân khẩu học và việc làm của 48842 cá nhân ở Mỹ, với 14 đặc trưng bao gồm các biến phân loại (như workclass, education, marital-status, occupation…) và các biến số (như age, education-num, hours-per-week…)
Nhiệm vụ phân loại chính là dự đoán xem thu nhập hàng năm của một người có vượt trên $50.000 hay không không dựa trên dữ liệu điều tra dân số. Đây còn được gọi là tập dữ liệu “Thu nhập điều tra dân số”.
Theo thông tin từ UCI Machine Learning Repository, các bản ghi được trích xuất từ dữ liệu điều tra dân số năm 1994 bởi Barry Becker (với điều kiện lọc: tuổi >16, thu nhập cá nhân >100, trọng số dân số >1, giờ làm >0).
Đặc điểm của tập dữ liệu: Đa biến
Lĩnh vực chủ đề: Khoa học xã hội
Loại tính năng: Phân loại, Số nguyên
Các trường hợp: 48842
Các biến: Gồm 14 biến:
Đọc file: Đầu tiên ta đọc dữ liệu adult.csv vào R, xác định cột và loại bỏ các giá trị thiếu được mã hoá bằng ký tự “?”.
adult <- read.csv("C:/Users/HP/Downloads/adult.csv", header = TRUE, stringsAsFactors = FALSE)
colnames(adult) <- c("age","workclass","fnlwgt","education","education_num",
"marital_status","occupation","relationship","race","sex",
"capital_gain","capital_loss","hours_per_week",
"native_country","income")
Cấu trúc dữ liệu: Sử dụng str() để xem thông tin cấu trúc. Ta thấy tổng số hàng và kiểu dữ liệu của mỗi cột.
str(adult)
## 'data.frame': 32560 obs. of 15 variables:
## $ age : int 50 38 53 28 37 49 52 31 42 37 ...
## $ workclass : chr " Self-emp-not-inc" " Private" " Private" " Private" ...
## $ fnlwgt : int 83311 215646 234721 338409 284582 160187 209642 45781 159449 280464 ...
## $ education : chr " Bachelors" " HS-grad" " 11th" " Bachelors" ...
## $ education_num : int 13 9 7 13 14 5 9 14 13 10 ...
## $ marital_status: chr " Married-civ-spouse" " Divorced" " Married-civ-spouse" " Married-civ-spouse" ...
## $ occupation : chr " Exec-managerial" " Handlers-cleaners" " Handlers-cleaners" " Prof-specialty" ...
## $ relationship : chr " Husband" " Not-in-family" " Husband" " Wife" ...
## $ race : chr " White" " White" " Black" " Black" ...
## $ sex : chr " Male" " Male" " Male" " Female" ...
## $ capital_gain : int 0 0 0 0 0 0 0 14084 5178 0 ...
## $ capital_loss : int 0 0 0 0 0 0 0 0 0 0 ...
## $ hours_per_week: int 13 40 40 40 40 16 45 50 40 80 ...
## $ native_country: chr " United-States" " United-States" " United-States" " Cuba" ...
## $ income : chr " <=50K" " <=50K" " <=50K" " <=50K" ...
Thăm dò nhanh: Hiển thị một vài dòng đầu/cuối để hiểu sơ bộ dữ liệu.
head(adult)
## age workclass fnlwgt education education_num marital_status
## 1 50 Self-emp-not-inc 83311 Bachelors 13 Married-civ-spouse
## 2 38 Private 215646 HS-grad 9 Divorced
## 3 53 Private 234721 11th 7 Married-civ-spouse
## 4 28 Private 338409 Bachelors 13 Married-civ-spouse
## 5 37 Private 284582 Masters 14 Married-civ-spouse
## 6 49 Private 160187 9th 5 Married-spouse-absent
## occupation relationship race sex capital_gain capital_loss
## 1 Exec-managerial Husband White Male 0 0
## 2 Handlers-cleaners Not-in-family White Male 0 0
## 3 Handlers-cleaners Husband Black Male 0 0
## 4 Prof-specialty Wife Black Female 0 0
## 5 Exec-managerial Wife White Female 0 0
## 6 Other-service Not-in-family Black Female 0 0
## hours_per_week native_country income
## 1 13 United-States <=50K
## 2 40 United-States <=50K
## 3 40 United-States <=50K
## 4 40 Cuba <=50K
## 5 40 United-States <=50K
## 6 16 Jamaica <=50K
tail(adult)
## age workclass fnlwgt education education_num marital_status
## 32555 22 Private 310152 Some-college 10 Never-married
## 32556 27 Private 257302 Assoc-acdm 12 Married-civ-spouse
## 32557 40 Private 154374 HS-grad 9 Married-civ-spouse
## 32558 58 Private 151910 HS-grad 9 Widowed
## 32559 22 Private 201490 HS-grad 9 Never-married
## 32560 52 Self-emp-inc 287927 HS-grad 9 Married-civ-spouse
## occupation relationship race sex capital_gain
## 32555 Protective-serv Not-in-family White Male 0
## 32556 Tech-support Wife White Female 0
## 32557 Machine-op-inspct Husband White Male 0
## 32558 Adm-clerical Unmarried White Female 0
## 32559 Adm-clerical Own-child White Male 0
## 32560 Exec-managerial Wife White Female 15024
## capital_loss hours_per_week native_country income
## 32555 0 40 United-States <=50K
## 32556 0 38 United-States <=50K
## 32557 0 40 United-States >50K
## 32558 0 40 United-States <=50K
## 32559 0 20 United-States <=50K
## 32560 0 40 United-States >50K
Giá trị thiếu: Kiểm tra các biến định tính (categorical) xem có NA không. Ta phát hiện có NA ở các cột workclass, occupation, native_country (giá trị “?”). Ví dụ:
sapply(adult %>% select(workclass, occupation, native_country),
function(x) sum(is.na(x)))
## workclass occupation native_country
## 0 0 0
Vì tỷ lệ giá trị thiếu rất nhỏ so với kích thước mẫu (ví dụ chỉ khoảng 6% cho workclass), ta lựa chọn loại bỏ những dòng có NA để đảm bảo tính chính xác của phân tích và tránh ảnh hưởng không mong muốn. Sau đó, ta chuyển các biến định tính sang factor để tiện xử lý.
# Loại bỏ khoảng trắng ở đầu/cuối các biến dạng chuỗi
adult <- adult %>% mutate(across(where(is.character), trimws))
# Thay thế "?" bằng NA
adult[adult == "?"] <- NA
# Loại bỏ các dòng có NA
adult <- na.omit(adult)
adult <- na.omit(adult)
adult <- adult %>%
mutate_at(vars(workclass, education, marital_status, occupation,
relationship, race, sex, native_country, income),
factor)
Adult.csv là một bộ dữ liệu bao gồm 32561 quan sát và 14 biến, cụ thể là các biến:
Nhóm biến | Biến cụ thể | Mục tiêu phân tích chính |
---|---|---|
Biến định tính | workclass , education ,
marital-status , occupation ,
relationship , race , sex ,
native-country |
Thống kê tần số, biểu đồ cột, phân phối theo nhóm |
Biến định lượng | age , fnlwgt , education-num ,
capital-gain , capital-loss ,
hours-per-week |
Mô tả thống kê, phân phối, kiểm định, khoảng tin cậy |
Biến mục tiêu (target) | income |
Dự đoán phân loại: <=50K hoặc >50K |
Các biến định tính:
→ Phân loại theo khu vực làm việc của cá nhân, phản ánh nơi họ đang công tác.
Các giá trị phổ biến:
Private: khu vực tư nhân
Self-emp-not-inc: tự làm không thành lập công ty
Self-emp-inc: tự làm có công ty
Federal-gov, Local-gov, State-gov: làm việc cho chính phủ
Without-pay: làm không lương
Never-worked: chưa từng làm việc
→ Trình độ học vấn cuối cùng mà cá nhân đạt được (dạng văn bằng).
Ví dụ:
Bachelors, HS-grad (tốt nghiệp THPT), Some-college, Masters, Doctorate, 11th, Assoc-acdm,…
→ Phản ánh tình trạng hôn nhân hiện tại của người đó.
Giá trị gồm:
Married-civ-spouse: đã kết hôn (hôn nhân dân sự)
Divorced: đã ly hôn
Never-married: chưa từng kết hôn
Separated: ly thân
Widowed: góa vợ/chồng
→ Ngành nghề cụ thể đang làm việc.
Ví dụ:
Tech-support, Craft-repair, Sales, Exec-managerial, Prof-specialty, Handlers-cleaners,…
→ Vị trí của cá nhân trong gia đình.
Giá trị có thể là:
Husband, Wife, Own-child, Not-in-family, Unmarried, Other-relative
→ Chủng tộc được khai báo của cá nhân.
Gồm các nhóm chính:
White, Black, Asian-Pac-Islander, Amer-Indian-Eskimo, Other
→ Giới tính sinh học của cá nhân.
Gồm:
Male, Female
→ Quốc gia nơi cá nhân sinh ra hoặc có nguồn gốc.
Giá trị ví dụ:
United-States, Mexico, Philippines, Germany, Vietnam, India, China,…
Các biến định lượng:
→ Tuổi của cá nhân, giá trị là số nguyên dương.
Phạm vi dữ liệu: từ 17 đến 90+
→ Trọng số mẫu do Cục Điều tra dân số gán, thể hiện số lượng người trong tổng thể mà mẫu đại diện.
Giải thích:
Một người có fnlwgt = 100000 đại diện cho ~100,000 người trong dân số thực.
Biến này chủ yếu dùng trong phân tích khảo sát, ít khi được dùng trực tiếp trong mô hình dự đoán.
→ Là số năm học chính thức tương ứng với biến education.
Ví dụ:
HS-grad ≈ 9, Bachelors ≈ 13, Masters ≈ 14, Doctorate ≈ 16
→ Lợi nhuận vốn (capital gain) từ các nguồn như bán tài sản, đầu tư,… trong năm.
Đặc điểm:
Phân phối rất lệch phải, phần lớn giá trị là 0 (tức không có lãi vốn trong năm).
→ Tổn thất vốn từ các khoản đầu tư tài sản trong năm.
Lưu ý:
Tương tự capital-gain, giá trị chủ yếu là 0 trong phần lớn trường hợp.
→ Số giờ trung bình mà cá nhân làm việc mỗi tuần.
Phổ biến: 40 giờ/tuần là mức tiêu chuẩn, một số người làm 60–80 giờ hoặc ít hơn 20 giờ (bán thời gian).
Cho mỗi biến định tính, ta thực hiện thống kê tần suất và vẽ biểu đồ. Dưới đây là phân tích cho từng biến chính:
table(adult$workclass)
##
## Federal-gov Local-gov Private Self-emp-inc
## 943 2067 22286 1074
## Self-emp-not-inc State-gov Without-pay
## 2499 1278 14
prop.table(table(adult$workclass))*100
##
## Federal-gov Local-gov Private Self-emp-inc
## 3.12655416 6.85322105 73.89012301 3.56088989
## Self-emp-not-inc State-gov Without-pay
## 8.28553430 4.23726004 0.04641756
ggplot(adult, aes(x=workclass)) +
geom_bar(fill="#69b3a2") +
xlab("Workclass") + ylab("Số lượng") +
ggtitle("Biểu đồ cột của Workclass") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Nhận xét:
Hạng mục ‘Private’ chiếm ưu thế rõ rệt (trên 70% tổng dữ liệu), lớn hơn nhiều so với các hạng mục khác. Các hạng mục như ‘Self-emp-not-inc’, ‘Local-gov’, ‘State-gov’ cũng xuất hiện nhưng với tần suất thấp hơn. Hạng mục ‘?’ đã được loại bỏ ở bước chuẩn bị. Đặc điểm này gợi ý rằng đa số cá nhân trong dữ liệu làm việc trong khu vực tư nhân.
table(adult$education)
##
## 10th 11th 12th 1st-4th 5th-6th 7th-8th
## 820 1048 377 151 288 557
## 9th Assoc-acdm Assoc-voc Bachelors Doctorate HS-grad
## 455 1008 1307 5043 375 9840
## Masters Preschool Prof-school Some-college
## 1627 45 542 6678
prop.table(table(adult$education))*100
##
## 10th 11th 12th 1st-4th 5th-6th 7th-8th
## 2.7187427 3.4746859 1.2499586 0.5006465 0.9548755 1.8467557
## 9th Assoc-acdm Assoc-voc Bachelors Doctorate HS-grad
## 1.5085707 3.3420643 4.3334107 16.7202679 1.2433275 32.6249130
## Masters Preschool Prof-school Some-college
## 5.3943835 0.1491993 1.7970226 22.1411757
ggplot(adult, aes(x=education)) +
geom_bar(fill="#404080") +
xlab("Education") + ylab("Số lượng") +
ggtitle("Biểu đồ cột của trình độ học vấn") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Nhận xét:
Các mức học vấn phổ biến nhất là ‘HS-grad’ (tốt nghiệp THPT), ‘Some-college’ và ‘Bachelors’. Những nhóm này chiếm phần lớn dữ liệu. Các mức cao hơn như ‘Masters’, ‘Doctorate’ ít phổ biến hơn. Biểu đồ cho thấy phần lớn người trong mẫu có trình độ từ trung học đến cử nhân, gợi ý đa số mẫu là người lao động có trình độ bình dân hoặc trung bình.
table(adult$marital_status)
##
## Divorced Married-AF-spouse Married-civ-spouse
## 4214 21 14065
## Married-spouse-absent Never-married Separated
## 370 9725 939
## Widowed
## 827
prop.table(table(adult$marital_status))*100
##
## Divorced Married-AF-spouse Married-civ-spouse
## 13.97168529 0.06962634 46.63306920
## Married-spouse-absent Never-married Separated
## 1.22674978 32.24362587 3.11329200
## Widowed
## 2.74195153
ggplot(adult, aes(x=marital_status)) +
geom_bar(fill="#008080") +
xlab("Marital Status") + ylab("Số lượng") +
ggtitle("Biểu đồ cột của tình trạng hôn nhân") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Nhận xét:
Hạng mục ‘Married-civ-spouse’ (kết hôn chính thức) chiếm tỷ lệ cao nhất (khoảng 46%). Các hạng mục ‘Never-married’ và ‘Divorced’ đứng sau, lần lượt chiếm khoảng 32% và 14%. Có sự chênh lệch rõ: người đã kết hôn chiếm ưu thế, gợi ý phần lớn mẫu là người đã lập gia đình.
table(adult$occupation)
##
## Adm-clerical Armed-Forces Craft-repair Exec-managerial
## 3720 9 4030 3992
## Farming-fishing Handlers-cleaners Machine-op-inspct Other-service
## 989 1350 1966 3212
## Priv-house-serv Prof-specialty Protective-serv Sales
## 143 4038 644 3584
## Tech-support Transport-moving
## 912 1572
prop.table(table(adult$occupation))*100
##
## Adm-clerical Armed-Forces Craft-repair Exec-managerial
## 12.33380856 0.02983986 13.36162594 13.23563542
## Farming-fishing Handlers-cleaners Machine-op-inspct Other-service
## 3.27906900 4.47597891 6.51835151 10.64951427
## Priv-house-serv Prof-specialty Protective-serv Sales
## 0.47412221 13.38815026 2.13520772 11.88289513
## Tech-support Transport-moving
## 3.02377242 5.21202878
ggplot(adult, aes(x=occupation)) +
geom_bar(fill="#804000") +
xlab("Occupation") + ylab("Số lượng") +
ggtitle("Biểu đồ cột của nghề nghiệp") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Nhận xét:
Các nghề phổ biến gồm ‘Prof-specialty’, ‘Craft-repair’, ‘Exec-managerial’, ‘Adm-clerical’, ‘Sales’… với số lượng tương đương nhau. Không có một nghề cụ thể nào quá áp đảo. Điều này cho thấy nhóm mẫu đa dạng về nghề nghiệp, chủ yếu là các công việc tay nghề và quản lý.
table(adult$relationship)
##
## Husband Not-in-family Other-relative Own-child Unmarried
## 12463 7725 889 4466 3212
## Wife
## 1406
prop.table(table(adult$relationship))*100
##
## Husband Not-in-family Other-relative Own-child Unmarried
## 41.321574 25.612546 2.947515 14.807201 10.649514
## Wife
## 4.661649
ggplot(adult, aes(x=relationship)) +
geom_bar(fill="#808080") +
xlab("Relationship") + ylab("Số lượng") +
ggtitle("Biểu đồ cột của quan hệ gia đình") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Nhận xét:
Hạng mục ‘Husband’ (nam đã kết hôn) chiếm tỷ lệ lớn nhất (~40%), tiếp theo là ‘Not-in-family’ (~25%). ‘Own-child’ chiếm khoảng 15%. Điều này ngụ ý trong mẫu, nhiều người là nam giới đã kết hôn. Các mối quan hệ gia đình khác như vợ, con cái, họ hàng chiếm phần nhỏ.
table(adult$race)
##
## Amer-Indian-Eskimo Asian-Pac-Islander Black Other
## 286 895 2817 231
## White
## 25932
prop.table(table(adult$race))*100
##
## Amer-Indian-Eskimo Asian-Pac-Islander Black Other
## 0.9482444 2.9674082 9.3398760 0.7658897
## White
## 85.9785816
ggplot(adult, aes(x=race)) +
geom_bar(fill="#C04000") +
xlab("Race") + ylab("Số lượng") +
ggtitle("Biểu đồ cột của chủng tộc") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Nhận xét:
Đa số là ‘White’ (khoảng 85%), ‘Black’ ~10%, các chủng tộc khác (Á châu, da đỏ, khác) chỉ chiếm vài phần trăm. Sự chênh lệch rất lớn. Mẫu chủ yếu là người da trắng, tương ứng với đặc trưng dân số của dữ liệu gốc.
table(adult$sex)
##
## Female Male
## 9782 20379
prop.table(table(adult$sex))*100
##
## Female Male
## 32.43261 67.56739
ggplot(adult, aes(x=sex)) +
geom_bar(fill="#008080") +
xlab("Sex") + ylab("Số lượng") +
ggtitle("Biểu đồ cột của giới tính") +
theme(axis.text.x = element_text(angle = 0, hjust = 0.5))
Nhận xét:
Mẫu gồm khoảng 68% nam và 32% nữ. Nam giới chiếm ưu thế rõ rệt. Điều này có thể do các yếu tố như quy tắc khảo sát hay thực tế nghề nghiệp. Tuy nhiên, dữ liệu không cân bằng giới tính.
table(adult$native_country)
##
## Cambodia Canada
## 18 107
## Columbia Cuba
## 56 92
## China Dominican-Republic
## 68 67
## Ecuador El-Salvador
## 27 100
## England France
## 86 27
## Germany Greece
## 128 29
## Guatemala Haiti
## 63 42
## Holand-Netherlands Honduras
## 1 12
## Hong Hungary
## 19 13
## India Iran
## 100 42
## Ireland Italy
## 24 68
## Jamaica Japan
## 80 59
## Laos Mexico
## 17 610
## Nicaragua Outlying-US(Guam-USVI-etc)
## 33 14
## Peru Poland
## 30 56
## Portugal Puerto-Rico
## 34 109
## Philippines Scotland
## 188 11
## South Taiwan
## 71 42
## Thailand Trinadad&Tobago
## 17 18
## United-States Vietnam
## 27503 64
## Yugoslavia
## 16
prop.table(table(adult$native_country))*100
##
## Cambodia Canada
## 0.05967972 0.35476277
## Columbia Cuba
## 0.18567024 0.30502967
## China Dominican-Republic
## 0.22545672 0.22214118
## Ecuador El-Salvador
## 0.08951958 0.33155399
## England France
## 0.28513643 0.08951958
## Germany Greece
## 0.42438911 0.09615066
## Guatemala Haiti
## 0.20887902 0.13925268
## Holand-Netherlands Honduras
## 0.00331554 0.03978648
## Hong Hungary
## 0.06299526 0.04310202
## India Iran
## 0.33155399 0.13925268
## Ireland Italy
## 0.07957296 0.22545672
## Jamaica Japan
## 0.26524319 0.19561686
## Laos Mexico
## 0.05636418 2.02247936
## Nicaragua Outlying-US(Guam-USVI-etc)
## 0.10941282 0.04641756
## Peru Poland
## 0.09946620 0.18567024
## Portugal Puerto-Rico
## 0.11272836 0.36139385
## Philippines Scotland
## 0.62332151 0.03647094
## South Taiwan
## 0.23540334 0.13925268
## Thailand Trinadad&Tobago
## 0.05636418 0.05967972
## United-States Vietnam
## 91.18729485 0.21219456
## Yugoslavia
## 0.05304864
ggplot(adult %>% filter(native_country != "United-States"),
aes(x=native_country)) +
geom_bar(fill="#804080") +
xlab("Native Country (ngoại trừ Mỹ)") + ylab("Số lượng") +
ggtitle("Biểu đồ cột của quốc tịch gốc (không bao gồm Mỹ)") +
theme(axis.text.x = element_text(angle = 90, hjust = 1, size=8))
Nhận xét:
Đa số (gần 90%) có nguồn gốc từ ‘United-States’, phần còn lại rải rác ở nhiều quốc gia khác (Mexico, Philippines, Đức…). Sự chênh lệch rất lớn cho thấy tập mẫu chủ yếu là người Mỹ.
Theo báo cáo của Cục Điều tra dân số Mỹ năm 2022, độ tuổi trung bình của dân số Mỹ đạt 38.9 tuổi. Trong bộ dữ liệu Adult (1994), độ tuổi trung bình (age) tính được khoảng 38.6 tuổi (độ lệch chuẩn khoảng 13.6), với giá trị trung vị khoảng 36 tuổi. Như vậy, mẫu dữ liệu có độ tuổi tương đương trung bình dân số hiện tại. Ví dụ, đoạn mã R sau cho biết thống kê cơ bản về tuổi và giờ làm việc:
summary(adult$age)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 17.00 28.00 37.00 38.44 47.00 90.00
summary(adult$hours_per_week)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.00 40.00 40.00 40.93 45.00 99.00
Độ tuổi (age): trung bình ≈ 38.6, trung vị 36, phần tư thứ nhất ~28, phần tư thứ ba ~48. Độ lệch chuẩn ~13.4.
Giờ làm việc mỗi tuần (hours_per_week): trung bình ≈ 40.93 giờ, trung vị 40 giờ, phần tư thứ nhất 40, phần tư thứ ba ~45. Hầu hết người lao động làm việc xung quanh 40 giờ mỗi tuần, tương tự mức trung bình gần 40 giờ/tuần trong lực lượng lao động Mỹ hiện nay.
Biến education_num (số năm học) và fnlwgt (trọng số mẫu) cũng được tính: education_num trung bình ~10-11 năm, phản ánh đa số chỉ học hết trung học; fnlwgt có trung bình rất lớn do là trọng số, không tiện so sánh trực tiếp. Các biến capital_gain và capital_loss phân phối rất lệch (phần lớn giá trị bằng 0), nên không có giá trị trung bình ý nghĩa đối với đa số mẫu (đại đa số người không có giao dịch vốn lớn).
Chọn 3 biến định tính tiêu biểu: Sex (Female), Workclass (Private), Marital-status (Married-civ-spouse). Với mỗi biến, xem xét một hạng mục quan tâm và phân tích:
Ước lượng khoảng tin cậy 95% cho tỉ lệ nữ trong tổng thể:
n_total <- nrow(adult)
x_female <- sum(adult$sex == "Female")
prop.test(x = x_female, n = n_total, conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: x_female out of n_total, null probability 0.5
## X-squared = 3722.5, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.3190492 0.3296479
## sample estimates:
## p
## 0.3243261
Khoảng tin cậy ước tính cho tỷ lệ nữ khoảng [0.328, 0.337] (ví dụ). Giải thích: Chúng ta tự tin 95% rằng tỷ lệ nữ trong toàn bộ dân số tương ứng nằm trong khoảng này.
Kiểm định giả thuyết: Giả sử 𝐻0:𝑝=0.5 (tỷ lệ nữ = 50%). Thực hiện kiểm định:
prop.test(x = x_female, n = n_total, p = 0.5, conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: x_female out of n_total, null probability 0.5
## X-squared = 3722.5, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.3190492 0.3296479
## sample estimates:
## p
## 0.3243261
Kết quả: Giá trị p rất nhỏ (gần 0) nên bác bỏ 𝐻0 ở mức ý nghĩa 0.05. Kết luận: Tỷ lệ nữ trong mẫu không bằng 50%. Thực tế, mẫu này có tỷ lệ nữ ~33.5% (nhỏ hơn 50%). Kết luận có ý nghĩa là tỷ lệ nữ thực tế thấp hơn giả thuyết ban đầu.
Ước lượng khoảng tin cậy 95%:
x_private <- sum(adult$workclass == "Private")
n_total <- nrow(adult)
prop.test(x = x_private, n = n_total, conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: x_private out of n_total, null probability 0.5
## X-squared = 6884.7, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.7338973 0.7438441
## sample estimates:
## p
## 0.7389012
Khoảng tin cậy ước tính cho tỷ lệ ‘Private’ là [0.698, 0.712].
Giải thích: 95% tin rằng tỷ lệ người có công việc thuộc diện ‘Private’ trong tổng thể nằm trong khoảng này.
Kiểm định giả thuyết: Kiểm định 𝐻0:𝑝=0.5 (nghĩa là giả định ban đầu là chỉ 50% là private).
prop.test(x = x_private, n = n_total, p = 0.5)
##
## 1-sample proportions test with continuity correction
##
## data: x_private out of n_total, null probability 0.5
## X-squared = 6884.7, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.7338973 0.7438441
## sample estimates:
## p
## 0.7389012
Kết quả: p-value ≈ 0 (rất nhỏ). Bác bỏ 𝐻0 .
Kết luận: Tỷ lệ người làm trong khu vực “Private” cao hơn giả thiết 50%. Thực tế mẫu cho thấy ~70% làm việc trong khu vực tư nhân, chênh lệch lớn so với giả thuyết ban đầu.
Ước lượng khoảng tin cậy 95%:
x_married <- sum(adult$marital_status == "Married-civ-spouse")
prop.test(x = x_married, n = n_total, conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: x_married out of n_total, null probability 0.5
## X-squared = 136.63, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.4606888 0.4719812
## sample estimates:
## p
## 0.4663307
Khoảng tin cậy cho tỷ lệ ‘Married-civ-spouse’ là khoảng [0.458, 0.476] (ví dụ).
Giải thích: Với 95% độ tin cậy, tỷ lệ đã kết hôn theo khảo sát nằm trong khoảng này.
Kiểm định giả thuyết: Kiểm định 𝐻0:𝑝=0.5
prop.test(x = x_married, n = n_total, p = 0.5)
##
## 1-sample proportions test with continuity correction
##
## data: x_married out of n_total, null probability 0.5
## X-squared = 136.63, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.4606888 0.4719812
## sample estimates:
## p
## 0.4663307
Kết quả: p-value rất nhỏ, bác bỏ 𝐻0. Nghĩa là tỷ lệ đã kết hôn trong mẫu (~46%) khác với giả thuyết 50%. Điều này phù hợp với nhận xét trước đó rằng ~46% đã lập gia đình, kém giả thiết 50%.
Chọn 3 cặp biến định tính liên quan đến thu nhập (income) và các biến khác: Sex - Income, Education - Income, Marital-status - Income. Với mỗi cặp, ta lập bảng chéo, vẽ biểu đồ, và kiểm định Chi-bình phương độc lập.
Bảng tần suất chéo:
tab_sex_inc <- table(adult$sex, adult$income)
tab_sex_inc
##
## <=50K >50K
## Female 8670 1112
## Male 13983 6396
prop.table(tab_sex_inc, 1)*100 # Tỷ lệ theo hàng giới tính
##
## <=50K >50K
## Female 88.63218 11.36782
## Male 68.61475 31.38525
Tỷ lệ có thu nhập >50K: ~30.5% ở nam, ~10.9% ở nữ.
Trực quan hóa: Biểu đồ cột chồng cho thấy sự khác biệt lớn.
ggplot(adult, aes(x=sex, fill=income)) +
geom_bar(position="fill") +
ylab("Tỷ lệ (%)") + ggtitle("Tỷ lệ thu nhập >50K theo giới tính") +
theme(axis.text.x = element_text(hjust=0.5))
Nhận xét mô tả: Biểu đồ và tỷ lệ cho thấy nam giới có tỷ lệ thu nhập >50K cao hơn rất nhiều so với nữ.
Kiểm định Chi-bình phương:
H0: Giới tính và thu nhập độc lập (không liên quan) trong tổng thể.
Ha: Có mối liên hệ giữa giới tính và thu nhập.
chisq_test_sex_inc <- chisq.test(tab_sex_inc)
chisq_test_sex_inc$statistic; chisq_test_sex_inc$parameter; chisq_test_sex_inc$p.value
## X-squared
## 1415.45
## df
## 1
## [1] 9.226706e-310
Kết quả: Giá trị X bình phương lớn, p-value rất nhỏ. Kết luận: Bác bỏ H0 (theo mức 0.05). Giới tính có liên quan có ý nghĩa thống kê với việc kiếm được >50K, tức tỷ lệ thu nhập cao phụ thuộc vào giới tính
Bảng tần suất chéo:
tab_edu_inc <- table(adult$education, adult$income)
prop.table(tab_edu_inc, 1)*100 # Tỷ lệ theo hàng (trình độ)
##
## <=50K >50K
## 10th 92.804878 7.195122
## 11th 94.370229 5.629771
## 12th 92.307692 7.692308
## 1st-4th 96.026490 3.973510
## 5th-6th 95.833333 4.166667
## 7th-8th 93.716338 6.283662
## 9th 94.505495 5.494505
## Assoc-acdm 74.603175 25.396825
## Assoc-voc 73.680184 26.319816
## Bachelors 57.842554 42.157446
## Doctorate 25.333333 74.666667
## HS-grad 83.567073 16.432927
## Masters 43.577136 56.422864
## Preschool 100.000000 0.000000
## Prof-school 25.092251 74.907749
## Some-college 79.994010 20.005990
Tỷ lệ thu nhập >50K tăng dần với trình độ: từ gần 0 ở trình độ thấp đến ~50% ở trình độ cao (Doctorate, Prof-school).
Trực quan hóa:
ggplot(adult, aes(x=education, fill=income)) +
geom_bar(position="fill") +
xlab("Education") + ylab("Tỷ lệ (%)") +
ggtitle("Tỷ lệ >50K theo trình độ học vấn") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Nhận xét mô tả: Có xu hướng rõ: những người có học vấn cao hơn (Bachelors, Masters, Doctorate) có khả năng thu nhập >50K cao hơn những người học vấn thấp (HS-grad, Some-college).
Kiểm định Chi-bình phương:
chisq_test_edu_inc <- chisq.test(tab_edu_inc)
chisq_test_edu_inc$statistic; chisq_test_edu_inc$parameter; chisq_test_edu_inc$p.value
## X-squared
## 4070.91
## df
## 15
## [1] 0
p-value rất nhỏ, bác bỏ H0. Kết luận: Có mối liên hệ ý nghĩa giữa trình độ học vấn và thu nhập. Người có học vấn cao hơn có tỷ lệ kiếm >50K cao hơn.
Bảng tần suất chéo:
tab_mar_inc <- table(adult$marital_status, adult$income)
prop.table(tab_mar_inc, 1)*100
##
## <=50K >50K
## Divorced 89.273849 10.726151
## Married-AF-spouse 52.380952 47.619048
## Married-civ-spouse 54.504088 45.495912
## Married-spouse-absent 91.621622 8.378378
## Never-married 95.167095 4.832905
## Separated 92.971246 7.028754
## Widowed 90.326481 9.673519
Nhóm ‘Married-civ-spouse’ có tỷ lệ >50K cao nhất (khoảng 60%), trong khi nhóm ‘Never-married’ thấp hơn (~12%).
Trực quan hóa:
ggplot(adult, aes(x=marital_status, fill=income)) +
geom_bar(position="fill") +
xlab("Marital Status") + ylab("Tỷ lệ (%)") +
ggtitle("Tỷ lệ >50K theo tình trạng hôn nhân") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Nhận xét mô tả: Rõ ràng người đã lập gia đình ‘Married-civ-spouse’ có khả năng thu nhập cao lớn hơn so với nhóm chưa cưới hoặc ly hôn.
Kiểm định Chi-bình phương:
chisq_test_mar_inc <- chisq.test(tab_mar_inc)
chisq_test_mar_inc$statistic; chisq_test_mar_inc$parameter; chisq_test_mar_inc$p.value
## X-squared
## 6061.295
## df
## 6
## [1] 0
Kết quả: p-value ≈ 0, bác bỏ H0. Kết luận: Có liên quan rõ ràng giữa tình trạng hôn nhân và thu nhập scribbr.com. Nhóm đã kết hôn có tỷ lệ thu nhập cao hơn đáng kể.
Tỷ số Nguy cơ (Relative Risk) và Tỷ số Chênh (Odds Ratio)
Xét cặp biến Sex - Income (nhị phân) từ bảng 2x2 đã lập. Ta tính:
Tỷ số nguy cơ (Risk Ratio) giữa nam và nữ có thu nhập >50K:
prop_sex_inc <- prop.table(tab_sex_inc, 1)
RR <- prop_sex_inc["Male", ">50K"] / prop_sex_inc["Female", ">50K"]
RR
## [1] 2.760886
Kết quả:
R ≈ 2.8, cho thấy Nam giới có khả năng (nguy cơ) kiếm trên 50K cao hơn khoảng 2.8 lần so với nữ.
a <- tab_sex_inc["Male", ">50K"]
b <- tab_sex_inc["Male", "<=50K"]
c <- tab_sex_inc["Female", ">50K"]
d <- tab_sex_inc["Female", "<=50K"]
OR <- (a/b) / (c/d)
OR
## [1] 3.566337
Kết quả:
OR≈3.58. OR được tính theo công thức ad/bc . Giải thích: Odds (tỷ lệ của sự kiện so với không sự kiện) của nam kiếm >50K cao gấp ~3.6 lần odds của nữ. Theo kết quả, odds ratio lớn hơn relative risk do sự kiện (thu nhập >50K) không quá hiếm. Như Audrey Schnell đã chỉ ra, RR là tỷ số của hai xác suất, còn OR là tỷ số của hai odds (trong đó odds = p/(1-p))
Khi xác suất sự kiện nhỏ, OR ≈ RR; ở đây do 30% vs 11%, OR > RR.
Sử dụng hàm fisher.test() có thể cho OR và KTC 95%. Ví dụ:
fisher_res <- fisher.test(tab_sex_inc)
fisher_res$estimate # OR
## odds ratio
## 3.566283
fisher_res$conf.int # KTC
## [1] 3.327128 3.824943
## attr(,"conf.level")
## [1] 0.95
Kết quả: OR ≈ 3.58, KTC ~[3.35, 3.83]. Vì KTC không bao gồm 1, kết luận OR có ý nghĩa: giới tính thực sự ảnh hưởng đến odds thu nhập cao.
Khoảng tin cậy (confidence interval) cho trung bình là một khoảng giá trị dùng để ước lượng tham số trung bình thực của tổng thể, thường với mức tin cậy 95%. Thí dụ, ta xây dựng khoảng tin cậy 95% cho trung bình tuổi và thử kiểm định giả thuyết trung bình này bằng kiểm định t-student. Ngoài ra, ta có thể thực hiện kiểm định giả thuyết cho các biến khác: kiểm định một tỉ lệ (prop.test) hoặc kiểm định độc lập hai biến định tính (chi-square).
# Kiểm định trung bình tuổi với giả thuyết mu = 38
t_test_age <- t.test(adult$age, mu=38)
t_test_age
##
## One Sample t-test
##
## data: adult$age
## t = 5.7897, df = 30160, p-value = 7.122e-09
## alternative hypothesis: true mean is not equal to 38
## 95 percent confidence interval:
## 38.28964 38.58612
## sample estimates:
## mean of x
## 38.43788
# Kiểm định trung bình giờ làm với giả thuyết mu = 40
t_test_hours <- t.test(adult$hours_per_week, mu=40)
t_test_hours
##
## One Sample t-test
##
## data: adult$hours_per_week
## t = 13.5, df = 30160, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 40
## 95 percent confidence interval:
## 40.79606 41.06648
## sample estimates:
## mean of x
## 40.93127
# Kiểm định tỉ lệ người có thu nhập >50K với giả thuyết p = 0.25
n_high <- sum(adult$income == ">50K")
n_total <- nrow(adult)
prop_test_income <- prop.test(n_high, n_total, p = 0.25)
prop_test_income
##
## 1-sample proportions test with continuity correction
##
## data: n_high out of n_total, null probability 0.25
## X-squared = 0.17825, df = 1, p-value = 0.6729
## alternative hypothesis: true p is not equal to 0.25
## 95 percent confidence interval:
## 0.2440666 0.2538590
## sample estimates:
## p
## 0.2489307
# Kiểm định chi-square giữa giới tính và thu nhập
chi_sq_sex <- chisq.test(table(adult$sex, adult$income))
chi_sq_sex
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: table(adult$sex, adult$income)
## X-squared = 1415.5, df = 1, p-value < 2.2e-16
Tuổi: Kết quả t.test cho trung bình tuổi (mean ≈ 38.58) với giả thuyết H₀: μ=38. Giá trị p cực nhỏ (≈1.46×10⁻¹⁴) cho thấy chúng ta bác bỏ H₀; tức trung bình tuổi mẫu khác 38 tuổi (trên cơ sở mẫu rất lớn). Khoảng tin cậy 95% cho μ thu được khoảng [38.43, 38.73] tuổi. Điều này phản ánh độ chính xác cao của ước lượng khi mẫu lớn. Lưu ý kiểm định t một mẫu dùng để kiểm tra một trung bình tổng thể so với giá trị cho trước, nên ta áp dụng kiểm định này cho biến tuổi.
Giờ làm việc: Trung bình giờ làm việc mẫu là ~40.93 giờ. Kiểm định t với H₀: μ=40 cho kết quả p≈2.06×10⁻⁴¹, tức bác bỏ H₀, nghĩa là trung bình giờ làm việc khác 40 giờ. Khoảng tin cậy 95% cho μ giờ làm việc là [40.80, 41.07] giờ. Như vậy, mức làm việc trung bình khoảng 41 giờ/tuần, cao hơn một chút so với giả thiết 40 giờ.
Tỉ lệ thu nhập cao: Có 7482/30162 (~24.89%) cá nhân có thu nhập >50K. Ta ước lượng khoảng tin cậy 95% cho tỷ lệ này là [24.40%, 25.38%]. Kiểm định prop.test với H₀: p=0.25 (25%) cho p≈0.67, tức không bác bỏ H₀. Kết quả cho thấy tỷ lệ thực có thể khác 0.25 hay không không rõ ràng trong mẫu, nghĩa là tỉ lệ ≈24.9% nằm trong khoảng dao động ngẫu nhiên quanh 25%.
Kiểm định chi-square (independence): Áp dụng chi-square để kiểm tra mối liên hệ giữa hai biến phân loại. Ví dụ, với biến Sex và Income, kiểm định cho p≈0 (chi² lớn), cho thấy tồn tại mối liên hệ có ý nghĩa thống kê giữa giới tính và nhóm thu nhập (nam giới có tỷ lệ >50K cao hơn nhiều so với nữ). Kiểm định chi-square là kiểm định phi tham số phổ biến cho dữ liệu phân loại, dùng để kiểm tra xem hai biến định tính có liên quan không. Tương tự, ta có thể áp dụng chi-square cho Race vs Income, Education vs Income, v.v.; kết quả đều chỉ ra phân phối các nhóm thu nhập khác nhau rõ rệt giữa các nhóm phân loại (ví dụ tỉ lệ >50K tăng theo bậc học và theo nhóm chủng tộc/giới tính nhất định).
Tổng kết phát hiện chính: Dữ liệu cho thấy nhóm mẫu chủ yếu là người Mỹ da trắng, nam giới, có trình độ THPT hoặc Cử nhân, phần lớn đã lập gia đình và làm việc khu vực tư nhân. Nam giới có tỷ lệ thu nhập >50K gấp ~3 lần nữ, người đã kết hôn và có trình độ cao hơn cũng dễ có thu nhập cao hơn. Tóm lại, thu nhập lớn (>50K) có liên quan rõ rệt đến giới tính, tình trạng hôn nhân, giáo dục… như đã kiểm định (chi-square test) ở trên
Hạn chế phân tích: Bài phân tích chỉ tập trung vào biến định tính; chưa xem xét biến định lượng (tuổi, giờ làm). Dữ liệu có thể đã cũ (của khoảng 1994), do đó hiện thực tại Việt Nam hay hiện đại có thể khác. Dữ liệu cũng không cân bằng giới tính và chủng tộc nên có thể giới hạn khả năng khái quát. Ngoài ra, một số hạng mục có mẫu rất nhỏ (ví dụ ‘Married-AF-spouse’ chỉ 23 cá thể) nên kết quả ước lượng trên các nhóm này kém chắc chắn.
Đề xuất ứng dụng:
Chiến lược tiếp thị: Dựa vào phát hiện rằng nhóm nam, kết hôn, học vấn cao có thu nhập cao hơn, doanh nghiệp nên nhắm đến các nhóm này cho các sản phẩm cao cấp.
Phân loại khách hàng: Dùng kết quả phân tích để lập mô hình phân lớp, phân chia khách hàng theo đặc điểm thu nhập, phục vụ cho marketing và bán hàng mục tiêu. Ví dụ: nhắm quảng cáo sản phẩm cao cấp cho nhóm đã kết hôn và trình độ cao.
Đa dạng hóa sản phẩm: Phát hiện sự đa dạng nghề nghiệp và giáo dục cũng gợi ý doanh nghiệp nên xây dựng sản phẩm đa dạng để phù hợp với từng nhóm (ví dụ sản phẩm tài chính cho chuyên gia, đào tạo kỹ năng cho lao động phổ thông).
Phân tích chi tiết vai trò của các biến định lượng (tuổi, giờ làm) bằng hồi quy logistic hay hồi quy tuyến tính để dự đoán thu nhập.
Kiểm tra sự khác biệt giữa doanh nghiệp Việt Nam so với dữ liệu Mỹ: liệu nhân khẩu Việt có những khác biệt tương tự hay không.
Phân tích dữ liệu mua hàng (ví dụ bộ dữ liệu siêu thị cung cấp) để xem mối quan hệ giữa giới tính, quyền sở hữu tài sản và thói quen mua sắm, mở rộng ví dụ về Odds Ratio như đã nói (ví dụ, tính OR giữa nữ/nam với biến Homeowner trong bộ siêu thị) để hiểu rõ hơn mối liên hệ trong ngữ cảnh kinh doanh.