x <- read.csv("C:/Users/PHAN THANH TRONG/Downloads/Supermarket Transactions.csv")
str(x)
## 'data.frame': 14059 obs. of 16 variables:
## $ STT : int 1 2 3 4 5 6 7 8 9 10 ...
## $ PurchaseDate : chr "18/12/07" "20/12/07" "21/12/07" "21/12/07" ...
## $ CustomerID : int 7223 7841 8374 9619 1900 6696 9673 354 1293 7938 ...
## $ Gender : chr "F" "M" "F" "M" ...
## $ MaritalStatus : chr "S" "M" "M" "M" ...
## $ Homeowner : chr "Y" "Y" "N" "Y" ...
## $ Children : int 2 5 2 3 3 3 2 2 3 1 ...
## $ AnnualIncome : chr "$30K - $50K" "$70K - $90K" "$50K - $70K" "$30K - $50K" ...
## $ City : chr "Los Angeles" "Los Angeles" "Bremerton" "Portland" ...
## $ StateorProvince : chr "CA" "CA" "WA" "OR" ...
## $ Country : chr "USA" "USA" "USA" "USA" ...
## $ ProductFamily : chr "Food" "Food" "Food" "Food" ...
## $ ProductDepartment: chr "Snack Foods" "Produce" "Snack Foods" "Snacks" ...
## $ ProductCategory : chr "Snack Foods" "Vegetables" "Snack Foods" "Candy" ...
## $ UnitsSold : int 5 5 3 4 4 3 4 6 1 2 ...
## $ Revenue : num 27.38 14.9 5.52 4.44 14 ...
Dữ liệu gồm có 14059 quan sát và 16 biến
head(x)
## STT PurchaseDate CustomerID Gender MaritalStatus Homeowner Children
## 1 1 18/12/07 7223 F S Y 2
## 2 2 20/12/07 7841 M M Y 5
## 3 3 21/12/07 8374 F M N 2
## 4 4 21/12/07 9619 M M Y 3
## 5 5 22/12/07 1900 F S Y 3
## 6 6 22/12/07 6696 F M Y 3
## AnnualIncome City StateorProvince Country ProductFamily
## 1 $30K - $50K Los Angeles CA USA Food
## 2 $70K - $90K Los Angeles CA USA Food
## 3 $50K - $70K Bremerton WA USA Food
## 4 $30K - $50K Portland OR USA Food
## 5 $130K - $150K Beverly Hills CA USA Drink
## 6 $10K - $30K Beverly Hills CA USA Food
## ProductDepartment ProductCategory UnitsSold Revenue
## 1 Snack Foods Snack Foods 5 27.38
## 2 Produce Vegetables 5 14.90
## 3 Snack Foods Snack Foods 3 5.52
## 4 Snacks Candy 4 4.44
## 5 Beverages Carbonated Beverages 4 14.00
## 6 Deli Side Dishes 3 4.37
tail(x)
## STT PurchaseDate CustomerID Gender MaritalStatus Homeowner Children
## 14054 14054 29/12/09 2032 F M N 3
## 14055 14055 29/12/09 9102 F M Y 2
## 14056 14056 29/12/09 4822 F M Y 3
## 14057 14057 31/12/09 250 M S Y 1
## 14058 14058 31/12/09 6153 F S N 4
## 14059 14059 31/12/09 3656 M S N 3
## AnnualIncome City StateorProvince Country ProductFamily
## 14054 $10K - $30K Yakima WA USA Non-Consumable
## 14055 $10K - $30K Bremerton WA USA Food
## 14056 $10K - $30K Walla Walla WA USA Food
## 14057 $30K - $50K Portland OR USA Drink
## 14058 $50K - $70K Spokane WA USA Drink
## 14059 $50K - $70K Portland OR USA Non-Consumable
## ProductDepartment ProductCategory UnitsSold Revenue
## 14054 Household Paper Products 5 14.50
## 14055 Baking Goods Baking Goods 3 9.64
## 14056 Frozen Foods Vegetables 3 7.45
## 14057 Beverages Pure Juice Beverages 4 3.24
## 14058 Dairy Dairy 2 4.00
## 14059 Household Electrical 5 25.53
bien_dt <- c("Gender", "MaritalStatus", "Homeowner", "AnnualIncome" ,"City", "StateorProvince", "Country", "ProductFamily", "ProductDepartment", "ProductCategory")
dt <- x[, bien_dt]
colSums(is.na(dt))
## Gender MaritalStatus Homeowner AnnualIncome
## 0 0 0 0
## City StateorProvince Country ProductFamily
## 0 0 0 0
## ProductDepartment ProductCategory
## 0 0
Kết quả cho thấy dữ liệu không có giá trị bị thiếu
# Kiểm tra dữ liệu của từng biến
sapply(dt,class)
## Gender MaritalStatus Homeowner AnnualIncome
## "character" "character" "character" "character"
## City StateorProvince Country ProductFamily
## "character" "character" "character" "character"
## ProductDepartment ProductCategory
## "character" "character"
# Chuyển tất cả biến sang factor
dt_factor <- as.data.frame(lapply(dt, as.factor))
Bảng tần số
table(dt$Gender)
##
## F M
## 7170 6889
Bảng tần suất
table(dt$Gender)/sum(nrow(dt))
##
## F M
## 0.5099936 0.4900064
Biểu đồ
# Bảng tần suất và tỷ lệ
tan_suat <- table(dt$Gender)
ty_le <- tan_suat / nrow(dt)
labels <- paste(names(tan_suat), round(ty_le*100, 1), "%")
# Biểu đồ tròn
pie(tan_suat,
main = "Biểu đồ tròn giới tính khách hàng",
labels = labels,
col = c("blue", "red"))
Nhận xét
Vậy trong bộ dữ liệu này có 50.9993598 % nữ và 49.0006402% nam.
Bảng tần số
table(dt$MaritalStatus)
##
## M S
## 6866 7193
Bảng tần suất
table(dt$MaritalStatus)/sum(nrow(dt))
##
## M S
## 0.4883704 0.5116296
Biểu đồ
# Bảng tần suất và tỷ lệ
tan_suat1 <- table(dt$MaritalStatus)
ty_le1 <- tan_suat1 / nrow(dt)
labels <- paste(names(tan_suat1), round(ty_le1*100, 1), "%")
# Biểu đồ tròn
pie(tan_suat,
main = "Biểu đồ tròn tình trạng hôn nhân của khách hàng",
labels = labels,
col = c("blue", "red"))
Nhận xét
Vậy trong bộ dữ liệu này có 48.8370439 % đã kết hôn và 51.1629561% độc thân.
Bảng tần số
table(dt$Homeowner)
##
## N Y
## 5615 8444
Bảng tần suất
table(dt$Homeowner)/sum(nrow(dt))
##
## N Y
## 0.3993883 0.6006117
Biểu đồ
# Bảng tần suất và tỷ lệ
tan_suat2 <- table(dt$Homeowner)
ty_le2 <- tan_suat2 / nrow(dt)
labels <- paste(names(tan_suat2), round(ty_le2*100, 1), "%")
# Biểu đồ tròn
pie(tan_suat,
main = "Biểu đồ tròn tình trạng khách hàng sở hữu nhà",
labels = labels,
col = c("blue", "red"))
Nhận xét
Vậy trong bộ dữ liệu này có 39.9388292 % không có nhà và 60.0611708% có nhà.
Bảng tần số
table(dt$AnnualIncome)
##
## $10K - $30K $110K - $130K $130K - $150K $150K + $30K - $50K
## 3090 643 760 273 4601
## $50K - $70K $70K - $90K $90K - $110K
## 2370 1709 613
Bảng tần suất
table(dt$AnnualIncome)/sum(nrow(dt))
##
## $10K - $30K $110K - $130K $130K - $150K $150K + $30K - $50K
## 0.21978804 0.04573583 0.05405790 0.01941817 0.32726367
## $50K - $70K $70K - $90K $90K - $110K
## 0.16857529 0.12155914 0.04360196
Biểu đồ
library(ggplot2)
ggplot(dt, aes(x = AnnualIncome, fill = AnnualIncome)) +
geom_bar() +
theme_minimal() +
labs(title = "Biểu đồ tần số khách hàng theo mức thu nhập hằng năm", x = "Khoảng thu nhập", y = "Tần số")
Nhận xét
Bảng tần số
table(dt$City)
##
## Acapulco Bellingham Beverly Hills Bremerton Camacho
## 383 143 811 834 452
## Guadalajara Hidalgo Los Angeles Merida Mexico City
## 75 845 926 654 194
## Orizaba Portland Salem San Andres San Diego
## 464 876 1386 621 866
## San Francisco Seattle Spokane Tacoma Vancouver
## 130 922 875 1257 633
## Victoria Walla Walla Yakima
## 176 160 376
Bảng tần suất
table(dt$City)/sum(nrow(dt))
##
## Acapulco Bellingham Beverly Hills Bremerton Camacho
## 0.027242336 0.010171420 0.057685468 0.059321431 0.032150224
## Guadalajara Hidalgo Los Angeles Merida Mexico City
## 0.005334661 0.060103848 0.065865282 0.046518245 0.013798990
## Orizaba Portland Salem San Andres San Diego
## 0.033003770 0.062308841 0.098584537 0.044170994 0.061597553
## San Francisco Seattle Spokane Tacoma Vancouver
## 0.009246746 0.065580767 0.062237712 0.089408920 0.045024539
## Victoria Walla Walla Yakima
## 0.012518671 0.011380610 0.026744434
Biểu đồ
ggplot(dt, aes(x = City, fill = City)) +
geom_bar() +
coord_flip() +
labs(title = "Tần số giao dịch theo City",
x = "City", y = "Số giao dịch")
Nhận xét
##Biến StateorProvince
Bảng tần số
table(dt$StateorProvince)
##
## BC CA DF Guerrero Jalisco OR Veracruz WA
## 809 2733 815 383 75 2262 464 4567
## Yucatan Zacatecas
## 654 1297
Bảng tần suất
table(dt$StateorProvince)/sum(nrow(dt))
##
## BC CA DF Guerrero Jalisco OR
## 0.057543211 0.194395049 0.057969984 0.027242336 0.005334661 0.160893378
## Veracruz WA Yucatan Zacatecas
## 0.033003770 0.324845295 0.046518245 0.092254072
Biểu đồ
ggplot(dt, aes(x = StateorProvince, fill = StateorProvince)) +
geom_bar() +
coord_flip() +
labs(title = "Tần số giao dịch theo tiểu bang hoặc tỉnh",
x = "StateorProvince", y = "Số giao dịch")
Nhận xét
WA và CA là hai thành phố có nhiều khách hàng nhất với tổng tỷ lệ chiếm khoảng 32.48% và 19.44%. Đây có thể là các thị trường chính mà doanh nghiệp đang tập trung.
Ngược lại các thành phố như Jalisco (0.53%) và Guerrero (2.72%) chiếm tỷ lệ rất thấp.
# Số lượng khách hàng đến từ USA
n_usa <- sum(dt$Country == "USA")
# Tổng số quan sát
n_total <- nrow(dt)
# Kiểm định giả thuyết và ước lượng khoảng tin cậy 95% cho tỷ lệ khách hàng đến từ USA
prop.test(n_usa, n_total, conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: n_usa out of n_total, null probability 0.5
## X-squared = 1824, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.6723397 0.6878289
## sample estimates:
## p
## 0.6801337
Từ kết quả kiểm định tỷ lệ khách hàng đến từ USA là 0.6801 (68.01%). Khoảng tin cậy 95% của tỷ lệ này là [67.23%, 68.78%] cho thấy mức độ chính xác rất cao.
Bài toán kiểm định:
Giả thuyết không H₀: p = 0.5 (tỷ lệ khách hàng từ USA bằng 50%)
Giả thuyết đối H₁: p ≠ 0.5 (tỷ lệ khách hàng từ USA khác 50%)
Mức ý nghĩa: α = 0.05
Kết luận: Với p-value < 0.05, ta bác bỏ giả thuyết H₀.
Do đó, có bằng chứng thống kê khẳng định tỷ lệ khách hàng đến từ USA khác 50% với mức ý nghĩa 5%.
Ước lượng khoảng tin cậy 95% cho tỷ lệ “Nam”
# Số lượng khách hàng đến từ USA
n_M <- sum(dt$Gender == "M")
# Tổng số quan sát
n_total <- nrow(dt)
# Kiểm định giả thuyết và ước lượng khoảng tin cậy 95% cho tỷ lệ khách hàng là Nam
prop.test(n_M, n_total, conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: n_M out of n_total, null probability 0.5
## X-squared = 5.5765, df = 1, p-value = 0.0182
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.4817114 0.4983069
## sample estimates:
## p
## 0.4900064
Từ kết quả kiểm định tỷ lệ khách hàng Nam là 0.4900064 (49%). Khoảng tin cậy 95% của tỷ lệ này là [48.17%, 49.83%] cho thấy mức độ chính xác rất cao.
Bài toán kiểm định:
Giả thuyết không H₀: p = 0.5 (tỷ lệ khách hàng nam bằng 50%)
Giả thuyết đối H₁: p ≠ 0.5 (tỷ lệ khách hàng nam khác 50%)
Mức ý nghĩa: α = 0.05
Kết luận: Với p-value = 0.0182 < 0.05, ta bác bỏ giả thuyết H₀.
Do đó, có bằng chứng thống kê khẳng định tỷ lệ khách hàng nam khác 50% với mức ý nghĩa 5%.
# Số lượng khách hàng đến từ USA
n_mexico <- sum(dt$Country == "Mexico") # 250
n_canada <- sum(dt$Country == "Canada") # 150
# Tổng số quan sát
N_total_overall <- nrow(dt) # 1000
cat("Số khách hàng từ Mexico:", n_mexico, "\n")
## Số khách hàng từ Mexico: 3688
cat("Số khách hàng từ Canada:", n_canada, "\n")
## Số khách hàng từ Canada: 809
cat("Tổng số khách hàng:", N_total_overall, "\n\n")
## Tổng số khách hàng: 14059
test_result <- prop.test(x = c(n_mexico, n_canada),
n = c(N_total_overall, N_total_overall),
alternative = "less", # Kiểm định một phía bên trái (P_Mexico < P_Canada)
conf.level = 0.95)
print(test_result)
##
## 2-sample test for equality of proportions with continuity correction
##
## data: c(n_mexico, n_canada) out of c(N_total_overall, N_total_overall)
## X-squared = 2192.5, df = 1, p-value = 1
## alternative hypothesis: less
## 95 percent confidence interval:
## -1.0000000 0.2117558
## sample estimates:
## prop 1 prop 2
## 0.26232307 0.05754321
Ước lượng khoảng tin cậy 95% cho tỷ lệ “Độc thân”
#Số người độc thân
n_single <- sum(dt$MaritalStatus == "S")
#Tổng số quan sát
n_total <- nrow(dt)
#Tính khoảng tin cậy 95%
prop.test(n_single, n_total, correct = FALSE)
##
## 1-sample proportions test without continuity correction
##
## data: n_single out of n_total, null probability 0.5
## X-squared = 7.6057, df = 1, p-value = 0.005818
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.5033648 0.5198880
## sample estimates:
## p
## 0.5116296
Từ kết quả kiểm định tỷ lệ khách hàng chưa kết hôn là 0.5116296 (51.16%). Khoảng tin cậy 95% của tỷ lệ này là [50.33%, 51.99%] cho thấy mức độ chính xác rất cao.
Bài toán kiểm định:
Giả thuyết không H₀: p = 0.5 (tỷ lệ khách hàng chưa kết hôn bằng 50%)
Giả thuyết đối H₁: p ≠ 0.5 (tỷ lệ khách hàng chưa kết hôn khác 50%)
Mức ý nghĩa: α = 0.05
Kết luận: Với p-value = 0.005818 < 0.05, ta bác bỏ giả thuyết H₀.
Do đó, có bằng chứng thống kê khẳng định tỷ lệ khách hàng chưa kết hôn khác 50% với độ mức ý nghĩa 5%.
bts_MaritalStatus_Homeowner <- table(dt$MaritalStatus, dt$Homeowner)
prop.table(bts_MaritalStatus_Homeowner, margin = 1)
##
## N Y
## M 0.2503641 0.7496359
## S 0.5416377 0.4583623
hn_nha_o <- as.data.frame(bts_MaritalStatus_Homeowner)
colnames(hn_nha_o) <- c("MaritalStatus", "Homeowner", "Count")
# Vẽ biểu đồ
library(ggplot2)
ggplot(hn_nha_o, aes(MaritalStatus, Count, fill = Homeowner)) +
geom_bar(stat = "identity", position = "dodge") +
labs(title = "Biểu đồ cột nhóm MaritalStatus và Homeowner",
x = "Tình trạng hôn nhân", y = "Tần số", fill = "Tình trạng") +
theme_minimal()
Nhận xét:
Hai biểu đồ cho thấy mối quan hệ giữa tình trạng hôn nhân và khả năng sở hữu nhà:
Trong nhóm đã kết hôn (M) số lượng khách hàng có sở hữu nhà (4,503) vượt trội so với không sở hữu nhà (2,363).
Ngược lại nhóm độc thân (S) lại có nhiều người không sở hữu nhà (3,783) hơn có nhà (3,410).
Điều cho thấy người đã kết hôn có xu hướng sở hữu nhà nhiều hơn, phản ánh hành vi tiêu dùng và ổn định tài chính gắn với hôn nhân.
Giả thuyết kiểm định:
H₀ (Giả thuyết không): Hai biến MaritalStatus và Homeowner là độc lập với nhau.
H₁ (Giả thuyết đối): Hai biến MaritalStatus và Homeowner có mối liên hệ với nhau.
chi_test <- chisq.test(table(dt$MaritalStatus, dt$Homeowner))
chi_test
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: table(dt$MaritalStatus, dt$Homeowner)
## X-squared = 1241.2, df = 1, p-value < 2.2e-16
Kết quả kiểm định:
Chi-squared (X²): 1241.218
df: 1
p-value: < 0.05
Kết luận thống kê:
Vì p < 0.05, ta bác bỏ H₀ cho thấy có mối liên hệ có ý nghĩa thống kê giữa tình trạng hôn nhân và sở hữu nhà ở mức ý nghĩa 5%
Trong thực tế việc sở hữu nhà thường gắn liền với giai đoạn ổn định tài chính và điều đó thường diễn ra sau khi kết hôn. Người đã lập gia đình có xu hướng ưu tiên việc mua nhà để tạo nền tảng ổn định cho cuộc sống hôn nhân, nuôi con, và lập kế hoạch dài hạn.
Ngược lại ở nhóm độc thân thường - những người trẻ tuổi ưu tiên sự linh hoạt chưa cần cam kết tài chính dài hạn như mua nhà hoặc chưa đủ điều kiện để vay vốn và trả nợ thế chấp.
# Bảng tần số chéo
bts_Gender_MaritalStatus <- table(dt$Gender, dt$MaritalStatus)
# Tỷ lệ
prop.table(bts_Gender_MaritalStatus, margin = 1)
##
## M S
## F 0.5023710 0.4976290
## M 0.4737988 0.5262012
Nhận xét:
Cho thấy Nữ giới có tỷ lệ kết hôn cao hơn nam và nam giới độc thân cao hơn so với nữ.
gt_tthn <- as.data.frame(bts_Gender_MaritalStatus)
colnames(gt_tthn) <- c("Gender", "MaritalStatus", "Count")
# Vẽ biểu đồ
library(ggplot2)
ggplot(gt_tthn , aes(Gender, Count, fill = MaritalStatus)) +
geom_bar(stat = "identity", position = "dodge") +
labs(title = "Biểu đồ cột nhóm Gender và MaritalStatus",
x = "Giới tính", y = "Tần số", fill = "Tình trạng") +
theme_minimal()
Nhận xét:
Ở nhóm nữ (Gender = F): Số lượng khách hàng độc thân (3568) và đã kết hôn (3602) tương đối cân bằng cho thấy không có sự chênh lệch lớn về tình trạng hôn nhân trong nhóm nữ.
Ở nhóm nam (Gender = M): Tỷ lệ đã kết hôn cao hơn rõ rệt so với tỷ lệ độc thân (3,625 so với 3,264 đã kết hôn). Điều này có thể phản ánh một số đặc điểm về độ tuổi trung bình của nhóm nam hoặc xu hướng hôn nhân sớm hơn ở nam giới trong tập dữ liệu này.
Giả thuyết kiểm định:
H₀ (Giả thuyết không): Hai biến Gender và MaritalStatus độc lập với nhau (giới tính không ảnh hưởng đến tình trạng hôn nhân).
H₁ (Giả thuyết đối): Hai biến có mối liên hệ với nhau (giới tính ảnh hưởng đến tình trạng hôn nhân).
chi_test1 <- chisq.test(bts_Gender_MaritalStatus)
chi_test1
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: bts_Gender_MaritalStatus
## X-squared = 11.365, df = 1, p-value = 0.0007485
Kết quả kiểm định:
Chi-squared (X²): 11.365
df: 1
p-value = 0.0007485 < 0.05
Kết luận thống kê:
Vì p = 0.0007 < 0.05, ta bác bỏ giả thuyết không H₀. Cho thấy có tồn tại mối liên hệ giữa giới tính và tình trạng hôn nhân.
Trong nhóm nam giới (M): có 3,625 người độc thân và 3,264 người đã kết hôn thể hiện xu hướng độc thân nhiều hơn.
Trong nhóm nữ giới (F): có 3,568 người độc thân và 3,602 người đã kết hôn cho thấy tỷ lệ gần như cân bằng.
Mặc dù sự chênh lệch không quá lớn nhưng có thể thấy rằng giới tính có thể là một yếu tố liên quan đến tình trạng hôn nhân trong hành vi tiêu dùng hoặc hồ sơ khách hàng siêu thị.
Giới tính: Khách hàng nữ chiếm 51.0% nhỉnh hơn khách hàng nam (49.0%). Điều này cho thấy không có sự chênh lệch đáng kể giữa hai giới tính của khách hàng, cả hai đều là khách hàng tiềm năng
Tình trạng hôn nhân: Khách hàng đã kết hôn có xu hướng mua sắm nhiều hơn có thể do nhu cầu cao hơn.
Sở hữu nhà: Người sở hữu nhà có số giao dịch cao hơn → nhóm khách hàng ổn định, tiềm năng.
Thu nhập: Nhóm có mức thu nhập dưới 70K$ chiếm tỷ phần lớn tỷ lệ khách hàng (gần 73%) cho thấy phân khúc thu nhập trung bình – thấp là phổ biến trong hệ thống siêu thị từ đó mở ra nhiều gợi ý về chiến lược giá, khuyến mãi, và nhóm sản phẩm phù hợp.
Mối quan hệ giữa các biến định tính:
Gender và MaritalStatus: Nữ giới có xu hướng kết hôn cao hơn nam, trong khi nam giới độc thân chiếm ưu thế nhẹ.
MaritalStatus và Homeowner: Người đã kết hôn có xu hướng sở hữu nhà cao hơn rõ rệt – phản ánh sự ổn định tài chính gắn liền với hôn nhân.
Giới hạn về chiều sâu phân tích, các phân tích mới dừng lại ở thống kê mô tả và kiểm định giả thuyết cho các biến định tính.
Chỉ sử dụng biến định tính chưa phản ánh được giá trị giao dịch đơn hàng cụ thể.
Phân bố quốc gia không đều, với hơn 2/3 dữ liệu đến từ USA có thể gây thiên lệch khi khái quát hóa cho toàn bộ khu vực Bắc Mỹ.
Thiếu yếu tố thời gian để đánh giá xu hướng tiêu dùng.
Kết hợp thêm các biến định lượng như giá trị đơn hàng, tần suất mua.
Phân tích hành vi theo thời gian (ngày, tháng, mùa).
Phân khúc khách hàng bằng mô hình nhóm hoặc dự đoán hành vi mua sắm.
Thiếu yếu tố thời gian và hành vi lặp lại → khó nắm được xu hướng lâu dài.
Relative Risk (RR), hay còn gọi là Tỷ số nguy cơ tương đối (hoặc Tỷ suất nguy cơ - Risk Ratio), là một chỉ số quan trọng trong dịch tễ học, y học, và các lĩnh vực nghiên cứu về sức khỏe cộng đồng, cũng như trong các nghiên cứu nhân quả khác. Nó được sử dụng để định lượng mức độ ảnh hưởng của một yếu tố phơi nhiễm (exposure) đối với nguy cơ mắc một bệnh hoặc một kết cục (outcome) nhất định.
Relative Risk (RR) đo lường tỷ lệ khả năng (risk) hoặc tỷ lệ mắc mới (incidence rate) của một kết cục (ví dụ: mắc bệnh) ở nhóm tiếp xúc với một yếu tố nào đó (nhóm phơi nhiễm) so với nhóm không tiếp xúc với yếu tố đó (nhóm không phơi nhiễm).
Ý nghĩa cốt lõi: RR cho chúng ta biết một người đã tiếp xúc với một yếu tố nguy cơ có nguy cơ mắc bệnh gấp bao nhiêu lần so với một người không tiếp xúc.
RR chủ yếu được sử dụng trong các nghiên cứu tiến cứu (prospective studies) như nghiên cứu đoàn hệ (cohort studies) hoặc thử nghiệm lâm sàng ngẫu nhiên có kiểm soát (randomized controlled trials - RCTs). Trong các loại hình nghiên cứu này, chúng ta theo dõi các nhóm người (phơi nhiễm và không phơi nhiễm) theo thời gian để xem ai mắc bệnh và ai không, do đó chúng ta có thể tính toán trực tiếp nguy cơ (probability) mắc bệnh trong mỗi nhóm.
Để tính toán RR, chúng ta thường sử dụng một bảng tần số 2x2 (contingency table) như sau:
Mắc bệnh (Outcome +) | Không mắc bệnh (Outcome -) | Tổng số | |
---|---|---|---|
Phơi nhiễm | a | b | a + b |
Không phơi nhiễm | c | d | c + d |
Tổng cộng | a + c | b + d | a + b + c + d |
Trong đó: * a
: Số người phơi nhiễm và mắc bệnh. *
b
: Số người phơi nhiễm và không mắc bệnh. * c
:
Số người không phơi nhiễm và mắc bệnh. * d
: Số người không
phơi nhiễm và không mắc bệnh.
Các bước tính RR:
Tính Nguy cơ mắc bệnh ở nhóm Phơi nhiễm (\(R_E\)): \[R_E = \frac{a}{a+b}\] (Đây là tỷ lệ người mắc bệnh trong số những người đã phơi nhiễm)
Tính Nguy cơ mắc bệnh ở nhóm Không Phơi nhiễm (\(R_{NE}\)): \[R_{NE} = \frac{c}{c+d}\] (Đây là tỷ lệ người mắc bệnh trong số những người không phơi nhiễm)
Tính Relative Risk (RR): \[RR = \frac{R_E}{R_{NE}} = \frac{a/(a+b)}{c/(c+d)}\]
Giá trị của RR cho chúng ta biết mối quan hệ giữa yếu tố phơi nhiễm và kết cục:
Hãy xem xét một nghiên cứu đoàn hệ (cohort study) theo dõi 10,000 người trưởng thành trong 20 năm để xem xét mối liên hệ giữa hút thuốc lá và ung thư phổi.
Ung thư phổi (+) | Không ung thư phổi (-) | Tổng cộng | |
---|---|---|---|
Hút thuốc | 300 | 4700 | 5000 |
Không hút thuốc | 50 | 4950 | 5000 |
Tính toán:
Nguy cơ ung thư phổi ở nhóm Hút thuốc (\(R_E\)): \[R_E = \frac{300}{5000} = 0.06\]
Nguy cơ ung thư phổi ở nhóm Không hút thuốc (\(R_{NE}\)): \[R_{NE} = \frac{50}{5000} = 0.01\]
Relative Risk (RR): \[RR = \frac{0.06}{0.01} = 6\]
Diễn giải kết quả:
\(RR = 6\) cho thấy rằng những người hút thuốc lá có nguy cơ mắc ung thư phổi cao gấp 6 lần so với những người không hút thuốc lá trong quần thể nghiên cứu này.
library(epitools)
marital_homeowner <- table(dt$MaritalStatus, dt$Homeowner)
addmargins(marital_homeowner)
##
## N Y Sum
## M 1719 5147 6866
## S 3896 3297 7193
## Sum 5615 8444 14059
riskratio(marital_homeowner)
## $data
##
## N Y Total
## M 1719 5147 6866
## S 3896 3297 7193
## Total 5615 8444 14059
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## M 1.0000000 NA NA
## S 0.6114466 0.5942071 0.6291862
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## M NA NA NA
## S 0 1.822183e-277 3.663022e-272
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Gender_homeowner <- table(dt$Gender, dt$Homeowner)
addmargins(Gender_homeowner)
##
## N Y Sum
## F 2826 4344 7170
## M 2789 4100 6889
## Sum 5615 8444 14059
riskratio(Gender_homeowner)
## $data
##
## N Y Total
## F 2826 4344 7170
## M 2789 4100 6889
## Total 5615 8444 14059
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## F 1.0000000 NA NA
## M 0.9823291 0.9561812 1.009192
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## F NA NA NA
## M 0.195158 0.1964833 0.1950884
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
dt$Gender <- factor(dt$Gender, levels = c("M", "F"))
# Tạo bảng lại
Gender_homeowner <- table(dt$Gender, dt$Homeowner)
# Hiển thị bảng và tính risk ratio
addmargins(Gender_homeowner)
##
## N Y Sum
## M 2789 4100 6889
## F 2826 4344 7170
## Sum 5615 8444 14059
riskratio(Gender_homeowner)
## $data
##
## N Y Total
## M 2789 4100 6889
## F 2826 4344 7170
## Total 5615 8444 14059
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## M 1.000000 NA NA
## F 1.017989 0.9908917 1.045827
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## M NA NA NA
## F 0.195158 0.1964833 0.1950884
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"