library(ggplot2)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(caret)
## Warning: package 'caret' was built under R version 4.4.3
## Loading required package: lattice
# Đọc dữ liệu
df <- read.csv("C:/Users/Student/Downloads/subset_12.csv")
continuous_vars <- df[, sapply(df, is.numeric)]
summary_continuous <- data.frame(
Variable = names(continuous_vars),
Mean = sapply(continuous_vars, mean, na.rm = TRUE),
Std = sapply(continuous_vars, sd, na.rm = TRUE),
Min = sapply(continuous_vars, min, na.rm = TRUE),
Median = sapply(continuous_vars, median, na.rm = TRUE),
Max = sapply(continuous_vars, max, na.rm = TRUE)
)
print(summary_continuous)
## Variable Mean Std Min Median Max
## Age Age 54.13813 21.30758 18 55 90
## QoL QoL 49.75266 29.13534 0 50 100
## Cholesterol Cholesterol 201.08619 28.98829 150 202 250
categorical_vars <- df[, sapply(df, is.character) | sapply(df, is.factor)]
frequency_table <- function(var) {
freq <- table(var, useNA = "ifany")
percent <- prop.table(freq) * 100
return(data.frame(Category = names(freq), Frequency = as.vector(freq), Percentage = round(as.vector(percent), 2)))
}
categorical_summary <- lapply(categorical_vars, frequency_table)
categorical_summary
## $Gender
## Category Frequency Percentage
## 1 Khac 556 32.82
## 2 Nam 569 33.59
## 3 Nu 569 33.59
##
## $Home
## Category Frequency Percentage
## 1 Nong thon 845 49.88
## 2 Thanh thi 849 50.12
##
## $Alco
## Category Frequency Percentage
## 1 Da tung uong 510 30.11
## 2 Dang uong 565 33.35
## 3 Khong uong 619 36.54
##
## $Meds
## Category Frequency Percentage
## 1 Co 841 49.65
## 2 Khong 853 50.35
##
## $Activity
## Category Frequency Percentage
## 1 Cao 555 32.76
## 2 Rat it 554 32.70
## 3 Trung binh 585 34.53
##
## $SES
## Category Frequency Percentage
## 1 Cao 580 34.24
## 2 Thap 534 31.52
## 3 Trung binh 580 34.24
ggplot(df, aes(x = Cholesterol)) +
geom_histogram(binwidth = 10, fill = "steelblue", color = "black", alpha = 0.7) +
labs(title = "Phân phối Cholesterol", x = "Cholesterol", y = "Tần số") +
theme_minimal()
ggplot(df, aes(x = Gender, y = QoL, fill = Gender)) +
geom_boxplot(alpha = 0.7) +
labs(title = "So sánh Chất lượng cuộc sống theo Giới tính", x = "Giới tính", y = "QoL") +
theme_minimal()
ggplot(df, aes(x = Gender, fill = factor(QoL > 50))) +
geom_bar(position = "fill") +
labs(title = "Tỷ lệ QoL > 50 theo Giới tính", x = "Giới tính", y = "Tỷ lệ", fill = "QoL > 50") +
theme_minimal()
table(df$Gender, useNA = "always")
##
## Khac Nam Nu <NA>
## 556 569 569 0
df_clean <- df[df$Gender %in% c("Nam", "Nu"), ]
df_clean$Gender <- as.factor(df_clean$Gender)
df_clean$Gender <- droplevels(df_clean$Gender)
t_test_result <- t.test(QoL ~ Gender, data = df_clean, var.equal = TRUE)
print(t_test_result)
##
## Two Sample t-test
##
## data: QoL by Gender
## t = -0.82372, df = 1136, p-value = 0.4103
## alternative hypothesis: true difference in means between group Nam and group Nu is not equal to 0
## 95 percent confidence interval:
## -4.802471 1.962401
## sample estimates:
## mean in group Nam mean in group Nu
## 48.80141 50.22144
Nhận xét:
Giá trị p-value = 0.4103 (lớn hơn 0.05) → Không có đủ bằng chứng thống kê để kết luận rằng có sự khác biệt về QoL giữa hai nhóm Nam và Nữ.
T-statistic = -0.82372 → Giá trị này thể hiện mức độ khác biệt giữa hai nhóm, nhưng vì p-value cao, khác biệt này không có ý nghĩa thống kê.
Khoảng tin cậy 95% (-4.80 đến 1.96) → Khoảng này chứa giá trị 0, nghĩa là có thể không có sự khác biệt thực sự giữa hai nhóm.
Trung bình QoL theo giới tính: Nam: 48.80 Nữ: 50.22 → Nhóm Nữ có trung bình QoL cao hơn một chút, nhưng sự khác biệt này có thể do ngẫu nhiên.
Kết luận: Không có sự khác biệt có ý nghĩa thống kê giữa QoL của nam và nữ (p-value > 0.05). Có thể cần xem xét thêm các biến khác để giải thích sự biến động của QoL.
model <- lm(QoL ~ Age + Gender + Home + Cholesterol + Alco + Meds + Activity + SES, data = df)
summary(model)
##
## Call:
## lm(formula = QoL ~ Age + Gender + Home + Cholesterol + Alco +
## Meds + Activity + SES, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -54.070 -25.639 0.153 25.042 54.963
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 54.952775 5.828190 9.429 < 2e-16 ***
## Age -0.011113 0.033358 -0.333 0.73906
## GenderNam -1.839041 1.744345 -1.054 0.29190
## GenderNu -0.201776 1.743983 -0.116 0.90791
## HomeThanh thi 0.993877 1.420392 0.700 0.48420
## Cholesterol -0.007683 0.024526 -0.313 0.75411
## AlcoDang uong -1.375596 1.786374 -0.770 0.44138
## AlcoKhong uong -4.854016 1.749609 -2.774 0.00559 **
## MedsKhong -0.698792 1.420409 -0.492 0.62281
## ActivityRat it -0.495002 1.755960 -0.282 0.77806
## ActivityTrung binh -1.821560 1.736980 -1.049 0.29447
## SESThap 0.416671 1.755542 0.237 0.81242
## SESTrung binh 1.103789 1.716243 0.643 0.52022
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 29.14 on 1681 degrees of freedom
## Multiple R-squared: 0.006739, Adjusted R-squared: -0.0003518
## F-statistic: 0.9504 on 12 and 1681 DF, p-value: 0.495
Age (-0.0111, p = 0.739): Tuổi không ảnh hưởng đáng kể đến QoL.
Gender (Nam -1.84, p = 0.292): Không có sự khác biệt đáng kể về QoL giữa nam và nữ.
Home (Thành thị 0.99, p = 0.484): Sống ở thành thị hay nông thôn không ảnh hưởng đáng kể đến QoL.
Cholesterol (-0.0077, p = 0.754): Không có tác động đáng kể.
Meds, Activity, SES → Không ảnh hưởng đáng kể đến QoL
Alco (Không uống rượu) (-4.85, p = 0.0056): Những người không uống rượu có QoL giảm trung bình 4.85 đơn vị so với nhóm tham chiếu
Các biến số liên tục như Cholesterol, QoL được mô tả bằng trung bình, độ lệch chuẩn, min-max.
Các biến phân loại như Giới tính, SES, Alco được tổng hợp tần số và tỷ lệ phần trăm.
Biểu đồ histogram cho thấy phân phối Cholesterol có xu hướng chuẩn.
Boxplot so sánh QoL theo giới tính cho thấy không có sự khác biệt rõ ràng.
Biểu đồ tỷ lệ QoL > 50 theo giới tính không có sự chênh lệch lớn.
T-test cho thấy p-value = 0.4103 → Không có sự khác biệt có ý nghĩa thống kê giữa QoL của Nam và Nữ.
Trung bình QoL:
Nam: 48.80
Nữ: 50.22
Mặc dù nhóm nữ có QoL trung bình cao hơn một chút, nhưng sự khác biệt này có thể do ngẫu nhiên.
Mô hình hồi quy tuyến tính không giải thích tốt sự biến thiên của QoL (R² = 0.67%, p-value = 0.495).
Hầu hết các biến độc lập (Age, Gender, Home, Cholesterol, Meds, Activity, SES) đều không có ý nghĩa thống kê.
Biến duy nhất có ý nghĩa thống kê:
Alco (Không uống rượu): QoL giảm 4.85 đơn vị so với nhóm tham chiếu (p = 0.0056).
Không tìm thấy sự khác biệt đáng kể về QoL theo giới tính.
Mô hình hồi quy tuyến tính chưa giải thích tốt QoL, có thể cần thêm biến quan trọng khác.
Cần khám phá thêm các yếu tố khác (chế độ ăn uống, bệnh lý nền, yếu tố xã hội) để có mô hình phù hợp hơn.