df <- read.csv("caffeine_intake_tracker.csv")
LỜI CẢM ƠN
Lời đầu tiên, em xin gửi lời cảm ơn chân thành đến Giảng viên - ThS. Trần Mạnh Tường. Trong quá trình học tập và tìm hiểu môn “Phân tích dữ liệu định tính”, em đã nhận được sự quan tâm giúp đỡ, hướng dẫn và chỉ bảo tận tình của thầy. Thầy đã giúp em tích lũy thêm nhiều kiến thức để có cái nhìn khái quát và hiểu hơn về môn học này. Từ những kiến thức được thầy truyền tải, em dần hiểu được tầm quan trọng của môn học mà bấy lâu nay còn nhiều thắc mắc. Thông qua bài tiểu luận này, em xin trình bày những gì em đã tìm hiểu về môn học, và cụ thể là em lựa chọn đề tài “Phân tích những yếu tố ảnh hưởng đến mức độ tiêu thụ rượu của sinh viên”.
Kiến thức là vô hạn nhưng sự tiếp nhận kiến thức của bản thân em luôn có những hạn chế nhất định. Do đó, trong quá trình hoàn thành bài tiểu luận, chắc chắn em không tránh khỏi những thiếu sót, vậy nên em rất mong nhận được những góp ý từ thầy để bài tiểu luận được hoàn thiện hơn.
Em kính chúc thầy sức khỏe, hạnh phúc và thành công trên con đường sự nghiệp của mình.
Trong nhịp sống hiện đại, các sản phẩm chứa caffeine như cà phê, trà, nước tăng lực hay socola đang trở nên phổ biến và gần như không thể thiếu với nhiều người, đặc biệt là sinh viên và người lao động trí óc. Tuy nhiên, bên cạnh những lợi ích như giúp tỉnh táo và cải thiện hiệu suất làm việc tạm thời, caffeine cũng tiềm ẩn nhiều ảnh hưởng tiêu cực đến sức khỏe, đặc biệt là chất lượng giấc ngủ. Mất ngủ, ngủ chập chờn hay khó đi vào giấc ngủ là những hệ quả dễ gặp nhưng thường bị xem nhẹ. Với mong muốn tìm hiểu rõ hơn mối quan hệ giữa việc tiêu thụ caffeine và các rối loạn giấc ngủ, từ đó đưa ra những khuyến nghị khoa học và thiết thực, em quyết định chọn đề tài “Phân tích các yếu tố ảnh hưởng đến giấc ngủ khi tiêu thụ các chất có chứa caffeine” làm nội dung nghiên cứu tiểu luận của mình.
Đề tài nhằm phân tích và đánh giá mối liên hệ giữa việc tiêu thụ các chất chứa caffeine và chất lượng giấc ngủ của người sử dụng. Cụ thể, nghiên cứu tập trung xác định mức độ ảnh hưởng của lượng caffeine tiêu thụ đến chất lượng giấc ngủ và khả năng bị rối loạn giấc ngủ. Đồng thời, đề tài cũng xem xét sự khác biệt về tác động của caffeine tùy theo loại đồ uống như cà phê, trà hoặc nước tăng lực, cũng như thời điểm tiêu thụ trong ngày (sáng, chiều hoặc tối). Ngoài ra, nghiên cứu còn làm rõ vai trò của các yếu tố nhân khẩu học như độ tuổi và giới tính trong việc điều chỉnh khả năng dung nạp caffeine và phản ứng giấc ngủ. Trên cơ sở kết quả phân tích, đề tài kỳ vọng sẽ đưa ra các khuyến nghị khoa học và thực tiễn về liều lượng, loại thức uống và thời điểm sử dụng caffeine phù hợp nhằm nâng cao chất lượng giấc ngủ và sức khỏe tổng thể.
Bộ dữ liệu nghiên cứu gồm 500 quan sát trong lĩnh vực Khoa học Dữ liệu.
Nghiên cứu này tập trung phân tích mối quan hệ giữa việc tiêu thụ caffeine và chất lượng giấc ngủ trên mẫu dữ liệu gồm 500 cá nhân đang hoạt động trong lĩnh vực Khoa học Dữ liệu.Thông tin được thu thập thông qua các biến định lượng và định tính như: lượng caffeine tiêu thụ (mg), loại đồ uống sử dụng (cà phê, trà, nước tăng lực), thời điểm tiêu thụ trong ngày (sáng, chiều, tối), mức độ tập trung, chất lượng giấc ngủ.
Bài nghiên cứu sử dụng phương pháp thống kê và các mô hình hồi quy để phân tích dữ liệu, nhằm làm rõ tác động của các yếu tố ảnh hưởng đến giấc ngủ như lượng tiêu thụ cà phê , trà , nước tăng lực .
Bộ dữ liệu bao gồm 500 quan sát, bao gồm 13 biến, với cả các biến định tính và định lượng. Ta có 9 biến định tính và 4 biến định lượng
d <-read.csv(file.choose(), header=T)
str(d)
## 'data.frame': 500 obs. of 13 variables:
## $ caffeine_mg : num 0.4545 0.2864 0.5318 0.0682 0.4091 ...
## $ age : num 1 0.8333 0.4762 0.6429 0.0476 ...
## $ focus_level : num 0.715 0.846 0.666 0.751 0.808 ...
## $ sleep_quality : num 0.75 0.73 0.277 0.654 0.71 ...
## $ sleep_impacted : int 1 0 1 0 1 1 0 1 1 1 ...
## $ beverage_coffee : chr "True" "True" "False" "False" ...
## $ beverage_energy_drink: chr "False" "False" "True" "False" ...
## $ beverage_tea : chr "False" "False" "False" "True" ...
## $ time_of_day_afternoon: chr "False" "False" "False" "False" ...
## $ time_of_day_evening : chr "True" "False" "False" "False" ...
## $ time_of_day_morning : chr "False" "True" "True" "True" ...
## $ gender_female : chr "True" "True" "False" "True" ...
## $ gender_male : chr "False" "False" "True" "False" ...
sum(is.na(d))
## [1] 0
Không có giá trị NA trong bộ dữ liệu
# Load thư viện
library(knitr)
## Warning: package 'knitr' was built under R version 4.4.3
# Tạo bảng mô tả biến
variable_explain <- data.frame(
Ten_Bien = c(
"caffeine_mg",
"age",
"focus_level",
"sleep_quality",
"sleep_impacted",
"beverage_coffee",
"beverage_energy_drink",
"beverage_tea",
"time_of_day_afternoon",
"time_of_day_evening",
"time_of_day_morning",
"gender_female",
"gender_male"
),
Y_Nghia = c(
"Lượng caffeine tiêu thụ (chuẩn hóa giữa 0 và 1)",
"Tuổi người tham gia (chuẩn hóa giữa 0 và 1)",
"Mức độ tập trung sau khi tiêu thụ caffeine (chuẩn hóa)",
"Chất lượng giấc ngủ được đánh giá (chuẩn hóa)",
"Giấc ngủ có bị ảnh hưởng bởi caffeine hay không (1: Có, 0: Không)",
"Loại đồ uống: Có uống cà phê hay không (TRUE/FALSE)",
"Loại đồ uống: Có uống nước tăng lực hay không (TRUE/FALSE)",
"Loại đồ uống: Có uống trà hay không (TRUE/FALSE)",
"Thời gian tiêu thụ: Buổi chiều (TRUE/FALSE)",
"Thời gian tiêu thụ: Buổi tối (TRUE/FALSE)",
"Thời gian tiêu thụ: Buổi sáng (TRUE/FALSE)",
"Giới tính: Nữ (TRUE/FALSE)",
"Giới tính: Nam (TRUE/FALSE)"
)
)
# Hiển thị bảng với caption
kable(variable_explain, caption = "Giải thích các biến trong bộ dữ liệu caffeine_intake_tracker.csv")
Ten_Bien | Y_Nghia |
---|---|
caffeine_mg | Lượng caffeine tiêu thụ (chuẩn hóa giữa 0 và 1) |
age | Tuổi người tham gia (chuẩn hóa giữa 0 và 1) |
focus_level | Mức độ tập trung sau khi tiêu thụ caffeine (chuẩn hóa) |
sleep_quality | Chất lượng giấc ngủ được đánh giá (chuẩn hóa) |
sleep_impacted | Giấc ngủ có bị ảnh hưởng bởi caffeine hay không (1: Có, 0: Không) |
beverage_coffee | Loại đồ uống: Có uống cà phê hay không (TRUE/FALSE) |
beverage_energy_drink | Loại đồ uống: Có uống nước tăng lực hay không (TRUE/FALSE) |
beverage_tea | Loại đồ uống: Có uống trà hay không (TRUE/FALSE) |
time_of_day_afternoon | Thời gian tiêu thụ: Buổi chiều (TRUE/FALSE) |
time_of_day_evening | Thời gian tiêu thụ: Buổi tối (TRUE/FALSE) |
time_of_day_morning | Thời gian tiêu thụ: Buổi sáng (TRUE/FALSE) |
gender_female | Giới tính: Nữ (TRUE/FALSE) |
gender_male | Giới tính: Nam (TRUE/FALSE) |
Giải thích biến
# Load thư viện
library(knitr)
# 1. Bảng giải thích các mức của biến sleep_impacted (biến phụ thuộc)
sleep_impacted_levels <- data.frame(
Gia_tri = c(0, 1),
Y_nghia = c(
"Không bị ảnh hưởng bởi caffeine",
"Bị ảnh hưởng bởi caffeine"
)
)
# Hiển thị bảng với chú thích
kable(sleep_impacted_levels, caption = "Giải thích các mức độ trong biến sleep_impacted")
Gia_tri | Y_nghia |
---|---|
0 | Không bị ảnh hưởng bởi caffeine |
1 | Bị ảnh hưởng bởi caffeine |
Lập bản tần số và tần suất
# Tạo bảng tần suất cho biến sleep_impacted (giữ nguyên mức gốc)
ts_sleep_impacted <- table(d$sleep_impacted)
# Tạo bảng dữ liệu
ts_sleep_impacted_df <- data.frame(
Gia_tri = names(ts_sleep_impacted),
Tan_so = as.vector(ts_sleep_impacted),
Ty_le = round((as.vector(ts_sleep_impacted) / sum(ts_sleep_impacted)) * 100, 2)
)
# Hiển thị kết quả
ts_sleep_impacted_df
## Gia_tri Tan_so Ty_le
## 1 0 297 59.4
## 2 1 203 40.6
Biểu đồ
# Tạo bảng tần suất cho biến sleep_impacted
ts_sleep_impacted <- table(d$sleep_impacted)
# Tính tỷ lệ phần trăm
percent_sleep_impacted <- round((ts_sleep_impacted / sum(ts_sleep_impacted)) * 100, 2)
# Tạo nhãn có tên mức + tỷ lệ
labels_sleep_impacted <- paste(names(ts_sleep_impacted), "(", percent_sleep_impacted, "%)", sep = "")
# Vẽ biểu đồ tròn
pie(ts_sleep_impacted,
labels = labels_sleep_impacted,
main = "Biểu đồ tròn: Mức ảnh hưởng của caffeine tới giấc ngủ (sleep_impacted)",
col = rainbow(length(ts_sleep_impacted)))
Nhận xét
Biểu đồ cho thấy có 40,6% người tham gia bị ảnh hưởng đến giấc ngủ khi tiêu thụ caffeine, trong khi 59,4% không bị ảnh hưởng. Tỷ lệ này cho thấy caffeine có thể gây tác động đáng kể đến giấc ngủ ở một bộ phận lớn người dùng. Điều này cho thấy cần thiết phải phân tích sâu hơn để hiểu rõ các yếu tố làm tăng nguy cơ mất ngủ khi sử dụng caffeine.
Giải thích biến
# Load thư viện
library(knitr)
# 1. Bảng giải thích các mức của biến beverage_coffee (biến nhị phân)
beverage_coffee_levels <- data.frame(
Gia_tri = c("TRUE", "FALSE"),
Y_nghia = c(
"Người tham gia có uống cà phê",
"Người tham gia không uống cà phê"
)
)
# Hiển thị bảng
kable(beverage_coffee_levels, caption = "Giải thích các mức độ trong biến beverage_coffee")
Gia_tri | Y_nghia |
---|---|
TRUE | Người tham gia có uống cà phê |
FALSE | Người tham gia không uống cà phê |
Lập bảng tần số và tần suất
# Tạo bảng tần suất cho biến beverage_coffee (giữ nguyên mức gốc)
ts_beverage_coffee <- table(d$beverage_coffee)
# Tạo bảng dữ liệu
ts_beverage_coffee_df <- data.frame(
Gia_tri = names(ts_beverage_coffee),
Tan_so = as.vector(ts_beverage_coffee),
Ty_le = round((as.vector(ts_beverage_coffee) / sum(ts_beverage_coffee)) * 100, 2)
)
# Hiển thị kết quả
ts_beverage_coffee_df
## Gia_tri Tan_so Ty_le
## 1 False 235 47
## 2 True 265 53
Biểu đồ
# Tạo bảng tần suất cho biến beverage_coffee
ts_beverage_coffee <- table(d$beverage_coffee)
# Tính tỷ lệ phần trăm
percent_beverage_coffee <- round((ts_beverage_coffee / sum(ts_beverage_coffee)) * 100, 2)
# Tạo nhãn có tên mức + tỷ lệ
labels_beverage_coffee <- paste(names(ts_beverage_coffee), "(", percent_beverage_coffee, "%)", sep = "")
# Vẽ biểu đồ tròn
pie(ts_beverage_coffee,
labels = labels_beverage_coffee,
main = "Biểu đồ tròn: Tỷ lệ người uống cà phê (beverage_coffee)",
col = rainbow(length(ts_beverage_coffee)))
Nhận xét
Biểu đồ cho thấy có 53% người tham gia khảo sát có uống cà phê, trong khi 47% không sử dụng loại đồ uống này. Tỷ lệ tương đối cân bằng này cho thấy cà phê là loại thức uống chứa caffeine phổ biến nhất trong mẫu khảo sát, đồng thời cũng là yếu tố đáng chú ý khi phân tích ảnh hưởng của caffeine đến giấc ngủ.
Giải thích biến
# Load thư viện
library(knitr)
# Bảng giải thích các mức của biến beverage_energy_drink (biến nhị phân)
beverage_energy_drink_levels <- data.frame(
Gia_tri = c("TRUE", "FALSE"),
Y_nghia = c(
"Người tham gia có uống nước tăng lực",
"Người tham gia không uống nước tăng lực"
)
)
# Hiển thị bảng
kable(beverage_energy_drink_levels, caption = "Giải thích các mức độ trong biến beverage_energy_drink")
Gia_tri | Y_nghia |
---|---|
TRUE | Người tham gia có uống nước tăng lực |
FALSE | Người tham gia không uống nước tăng lực |
Lập bảng tần số và tần suất
# Tạo bảng tần suất cho biến beverage_energy_drink
ts_beverage_energy <- table(d$beverage_energy_drink)
# Tính tỷ lệ phần trăm
percent_beverage_energy <- round((ts_beverage_energy / sum(ts_beverage_energy)) * 100, 2)
# Tạo bảng dữ liệu
ts_beverage_energy_df <- data.frame(
Gia_tri = names(ts_beverage_energy),
Tan_so = as.vector(ts_beverage_energy),
Ty_le = percent_beverage_energy
)
# Hiển thị bảng kết quả
ts_beverage_energy_df
## Gia_tri Tan_so Ty_le.Var1 Ty_le.Freq
## 1 False 453 False 90.6
## 2 True 47 True 9.4
Biểu đồ
# Tạo bảng tần suất
ts_beverage_energy <- table(d$beverage_energy_drink)
# Tính tỷ lệ phần trăm
percent_beverage_energy <- round((ts_beverage_energy / sum(ts_beverage_energy)) * 100, 2)
# (Tuỳ chọn) Gắn nhãn tiếng Việt thay cho TRUE/FALSE
names(ts_beverage_energy) <- c("Không uống nước tăng lực", "Có uống nước tăng lực")
# Tạo nhãn hiển thị: tên mức + tỷ lệ %
labels_beverage_energy <- paste(
names(ts_beverage_energy),
"(", percent_beverage_energy, "%)",
sep = ""
)
# Vẽ biểu đồ tròn
pie(ts_beverage_energy,
labels = labels_beverage_energy,
main = "Biểu đồ tròn: Tỷ lệ người uống nước tăng lực (beverage_energy_drink)",
col = rainbow(length(ts_beverage_energy)))
Nhận xét
Biểu đồ cho thấy chỉ có 9,4% người tham gia khảo sát sử dụng nước tăng lực, trong khi 90,6% không sử dụng loại đồ uống này. Điều này cho thấy nước tăng lực không phải là nguồn caffeine phổ biến trong cộng đồng khảo sát, đồng thời cho thấy mức độ ảnh hưởng của loại đồ uống này đến giấc ngủ có thể sẽ không chiếm ưu thế trong phân tích tổng thể.
Giải thích biến
# Load thư viện
library(knitr)
# Bảng giải thích các mức của biến beverage_tea (biến nhị phân)
beverage_tea_levels <- data.frame(
Gia_tri = c("TRUE", "FALSE"),
Y_nghia = c(
"Người tham gia có uống trà",
"Người tham gia không uống trà"
)
)
# Hiển thị bảng
kable(beverage_tea_levels, caption = "Giải thích các mức độ trong biến beverage_tea")
Gia_tri | Y_nghia |
---|---|
TRUE | Người tham gia có uống trà |
FALSE | Người tham gia không uống trà |
Lập bảng tần số và tần suất
# Tạo bảng tần suất cho biến beverage_tea
ts_beverage_tea <- table(d$beverage_tea)
# Tính tỷ lệ phần trăm
percent_beverage_tea <- round((ts_beverage_tea / sum(ts_beverage_tea)) * 100, 2)
# Tạo bảng dữ liệu
ts_beverage_tea_df <- data.frame(
Gia_tri = names(ts_beverage_tea),
Tan_so = as.vector(ts_beverage_tea),
Ty_le = percent_beverage_tea
)
# Hiển thị bảng kết quả
ts_beverage_tea_df
## Gia_tri Tan_so Ty_le.Var1 Ty_le.Freq
## 1 False 312 False 62.4
## 2 True 188 True 37.6
Biểu đồ
# Tạo bảng tần suất
ts_beverage_tea <- table(d$beverage_tea)
# Tính tỷ lệ phần trăm
percent_beverage_tea <- round((ts_beverage_tea / sum(ts_beverage_tea)) * 100, 2)
# (Tùy chọn) Gắn nhãn tiếng Việt thay cho TRUE/FALSE
names(ts_beverage_tea) <- c("Không uống trà", "Có uống trà")
# Tạo nhãn: tên mức + tỷ lệ %
labels_beverage_tea <- paste(
names(ts_beverage_tea),
"(", percent_beverage_tea, "%)",
sep = ""
)
# Vẽ biểu đồ tròn
pie(ts_beverage_tea,
labels = labels_beverage_tea,
main = "Biểu đồ tròn: Tỷ lệ người uống trà (beverage_tea)",
col = rainbow(length(ts_beverage_tea)))
Nhận xét
Biểu đồ cho thấy có 37,6% người tham gia khảo sát có uống trà, trong khi 62,4% không sử dụng loại đồ uống này. Mặc dù không phổ biến bằng cà phê, trà vẫn là nguồn caffeine tương đối phổ biến trong cộng đồng khảo sát và có thể đóng vai trò nhất định trong việc ảnh hưởng đến chất lượng giấc ngủ.
Giải thích biến
# Load thư viện
library(knitr)
# Bảng giải thích các mức của biến time_of_day_evening (biến nhị phân)
time_of_day_evening_levels <- data.frame(
Gia_tri = c("TRUE", "FALSE"),
Y_nghia = c(
"Thời gian khảo sát diễn ra vào buổi tối",
"Thời gian khảo sát không diễn ra vào buổi tối"
)
)
# Hiển thị bảng
kable(time_of_day_evening_levels, caption = "Giải thích các mức độ trong biến time_of_day_evening")
Gia_tri | Y_nghia |
---|---|
TRUE | Thời gian khảo sát diễn ra vào buổi tối |
FALSE | Thời gian khảo sát không diễn ra vào buổi tối |
Lập bảng tần số và tần suất
# Tạo bảng tần suất cho biến time_of_day_evening
ts_time_evening <- table(d$time_of_day_evening)
# Tính tỷ lệ phần trăm
percent_time_evening <- round((ts_time_evening / sum(ts_time_evening)) * 100, 2)
# Tạo bảng dữ liệu
ts_time_evening_df <- data.frame(
Gia_tri = names(ts_time_evening),
Tan_so = as.vector(ts_time_evening),
Ty_le = percent_time_evening
)
# Hiển thị bảng kết quả
ts_time_evening_df
## Gia_tri Tan_so Ty_le.Var1 Ty_le.Freq
## 1 False 406 False 81.2
## 2 True 94 True 18.8
Biểu đồ
# Tạo bảng tần suất
ts_time_evening <- table(d$time_of_day_evening)
# Tính tỷ lệ phần trăm
percent_time_evening <- round((ts_time_evening / sum(ts_time_evening)) * 100, 2)
# Gắn nhãn tiếng Việt thay cho FALSE/TRUE
names(ts_time_evening) <- c("Không buổi tối", "Buổi tối")
# Tạo nhãn: tên mức + tỷ lệ %
labels_time_evening <- paste(
names(ts_time_evening),
"(", percent_time_evening, "%)",
sep = ""
)
# Vẽ biểu đồ tròn
pie(ts_time_evening,
labels = labels_time_evening,
main = "Biểu đồ tròn: Tỷ lệ thời gian sử dụng vào buổi tối (time_of_day_evening)",
col = rainbow(length(ts_time_evening)))
Nhận xét
Biểu đồ cho thấy rằng phần lớn người tham gia khảo sát không sử dụng caffeine vào buổi tối, chiếm tỷ lệ 81.2%. Ngược lại, chỉ có 18.8% người tham gia có hành vi sử dụng caffeine vào khung thời gian buổi tối.
# Tạo bảng tần số chéo giữa sleep_impacted và beverage_coffee
tbl_sleep_bevcoffee <- table(d$sleep_impacted, d$beverage_coffee)
# Thực hiện kiểm định Chi-bình-phương
test_sleep_bevcoffee <- chisq.test(tbl_sleep_bevcoffee)
# Hiển thị kết quả
print(test_sleep_bevcoffee)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tbl_sleep_bevcoffee
## X-squared = 36.058, df = 1, p-value = 1.915e-09
Nhận xét
Kết quả kiểm định Chi-squared cho thấy p-value rất nhỏ (p ≈ 0.0000000019), chứng tỏ có mối liên hệ thống kê có ý nghĩa giữa việc uống cà phê và việc bị ảnh hưởng giấc ngủ do caffeine. Điều này cho thấy những người uống cà phê có xu hướng bị ảnh hưởng đến giấc ngủ nhiều hơn so với những người không uống, và mối quan hệ này không xảy ra một cách ngẫu nhiên.
# Tạo bảng tần số chéo giữa sleep_impacted và beverage_energy_drink
tbl_sleep_energy <- table(d$sleep_impacted, d$beverage_energy_drink)
# Thực hiện kiểm định Chi-bình-phương
test_sleep_energy <- chisq.test(tbl_sleep_energy)
# Hiển thị kết quả
print(test_sleep_energy)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tbl_sleep_energy
## X-squared = 10.569, df = 1, p-value = 0.00115
Nhận xét
Kết quả kiểm định Chi-squared giữa việc uống nước tăng lực và ảnh hưởng đến giấc ngủ cho thấy p-value = 0.00115, nhỏ hơn mức ý nghĩa 0.05. Điều này cho thấy có mối liên hệ thống kê có ý nghĩa giữa hai biến, tức là việc uống nước tăng lực có liên quan đến khả năng bị ảnh hưởng giấc ngủ. Dù tỷ lệ người uống nước tăng lực không cao, kết quả vẫn cho thấy nhóm này có xu hướng bị ảnh hưởng đến giấc ngủ nhiều hơn so với nhóm không sử dụng.
# Tạo bảng tần số chéo giữa sleep_impacted và beverage_tea
tbl_sleep_tea <- table(d$sleep_impacted, d$beverage_tea)
# Thực hiện kiểm định Chi-bình-phương
test_sleep_tea <- chisq.test(tbl_sleep_tea)
# Hiển thị kết quả
print(test_sleep_tea)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tbl_sleep_tea
## X-squared = 67.897, df = 1, p-value < 2.2e-16
Nhận xét
Kết quả kiểm định Chi-squared cho thấy p-value < 2.2e-16, cực kỳ nhỏ, chứng tỏ mối liên hệ giữa việc uống trà và ảnh hưởng đến giấc ngủ là rất có ý nghĩa thống kê.Ta có thể kết luận rằng việc uống trà không độc lập với khả năng bị ảnh hưởng giấc ngủ. Nói cách khác, những người có thói quen uống trà có xu hướng bị tác động đến giấc ngủ rõ rệt hơn so với những người không uống.
# Tạo bảng tần số chéo giữa sleep_impacted và time_of_day_evening
tbl_sleep_evening <- table(d$sleep_impacted, d$time_of_day_evening)
# Thực hiện kiểm định Chi-bình-phương
test_sleep_evening <- chisq.test(tbl_sleep_evening)
# Hiển thị kết quả
print(test_sleep_evening)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tbl_sleep_evening
## X-squared = 3.775, df = 1, p-value = 0.05202
Nhận xét
Nếu sử dụng mức ý nghĩa α = 0.05, ta chưa đủ bằng chứng thống kê để bác bỏ giả thuyết H₀ (giả thuyết rằng không có mối liên hệ giữa hai biến).Tuy nhiên, giá trị p chỉ nhỉnh hơn 0.05 một chút, điều này cho thấy có dấu hiệu của một mối liên hệ yếu giữa việc sử dụng caffeine vào buổi tối và việc bị ảnh hưởng giấc ngủ, nhưng chưa đạt mức ý nghĩa thống kê chặt chẽ.
# Kiểm tra các giá trị gốc của biến sleep_impacted
unique(d$sleep_impacted)
## [1] 1 0
# Kiểm tra các giá trị gốc của biến beverage_coffee
unique(d$beverage_coffee)
## [1] "True" "False"
# Nếu sleep_impacted đã là 0 và 1 → gán nhãn rõ ràng
if (all(unique(d$sleep_impacted) %in% c(0, 1))) {
d$SleepClear <- factor(d$sleep_impacted,
levels = c(0, 1),
labels = c("Không bị ảnh hưởng", "Bị ảnh hưởng"))
} else {
d$SleepClear <- factor(d$sleep_impacted)
}
# Nếu beverage_coffee là TRUE/FALSE → gán nhãn rõ ràng
if (all(unique(d$beverage_coffee) %in% c(TRUE, FALSE))) {
d$CoffeeClear <- factor(d$beverage_coffee,
levels = c(FALSE, TRUE),
labels = c("Không uống cà phê", "Có uống cà phê"))
} else {
d$CoffeeClear <- factor(d$beverage_coffee)
}
# Tạo bảng tần số chéo
table_sleep_coffee <- table(d$SleepClear, d$CoffeeClear)
# Hiển thị bảng
print(table_sleep_coffee)
##
## False True
## Không bị ảnh hưởng 173 124
## Bị ảnh hưởng 62 141
# Tạo bảng tần số chéo (nếu chưa có)
table_sleep_coffee <- table(d$SleepClear, d$CoffeeClear)
# Tính tỷ lệ phần trăm theo hàng (row-wise)
prop_table_sleep_coffee <- prop.table(table_sleep_coffee, margin = 1) * 100
# Làm tròn kết quả
round(prop_table_sleep_coffee, 2)
##
## False True
## Không bị ảnh hưởng 58.25 41.75
## Bị ảnh hưởng 30.54 69.46
BIểu đồ
# Load ggplot2
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
# Vẽ biểu đồ cột nhóm
ggplot(d, aes(x = SleepClear, fill = CoffeeClear)) +
geom_bar(position = "dodge") +
geom_text(stat = "count", aes(label = ..count..),
position = position_dodge(width = 0.9), vjust = -0.3, color = "black", size = 4) +
labs(title = "Biểu đồ cột nhóm: Ảnh hưởng giấc ngủ và thói quen uống cà phê",
x = "Giấc ngủ bị ảnh hưởng bởi caffeine",
y = "Số lượng người tham gia",
fill = "Uống cà phê") +
theme_minimal()
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Nhận xét
Biểu đồ cho thấy trong nhóm không uống cà phê, phần lớn người tham gia không bị ảnh hưởng bởi caffeine đến giấc ngủ (173 người), chỉ có 62 người bị ảnh hưởng. Ngược lại, trong nhóm có uống cà phê, số người bị ảnh hưởng giấc ngủ (141) cao hơn số người không bị ảnh hưởng (124). Điều này cho thấy xu hướng rõ rệt: người uống cà phê có khả năng bị ảnh hưởng đến giấc ngủ cao hơn so với người không uống.
Lập bảng tần số và tần suất
# Kiểm tra các giá trị gốc của biến sleep_impacted
unique(d$sleep_impacted)
## [1] 1 0
# Kiểm tra các giá trị gốc của biến beverage_energy_drink
unique(d$beverage_energy_drink)
## [1] "False" "True"
# Nếu sleep_impacted đã là 0 và 1 → gán nhãn rõ ràng
if (all(unique(d$sleep_impacted) %in% c(0, 1))) {
d$SleepClear <- factor(d$sleep_impacted,
levels = c(0, 1),
labels = c("Không bị ảnh hưởng", "Bị ảnh hưởng"))
} else {
d$SleepClear <- factor(d$sleep_impacted)
}
# Nếu beverage_energy_drink là TRUE/FALSE → gán nhãn rõ ràng
if (all(unique(d$beverage_energy_drink) %in% c(TRUE, FALSE))) {
d$EnergyClear <- factor(d$beverage_energy_drink,
levels = c(FALSE, TRUE),
labels = c("Không uống năng lượng", "Có uống năng lượng"))
} else {
d$EnergyClear <- factor(d$beverage_energy_drink)
}
# Tạo bảng tần số chéo
table_sleep_energy <- table(d$SleepClear, d$EnergyClear)
# Hiển thị bảng
print(table_sleep_energy)
##
## False True
## Không bị ảnh hưởng 280 17
## Bị ảnh hưởng 173 30
Biểu đồ
# Load ggplot2
library(ggplot2)
# Vẽ biểu đồ cột nhóm
ggplot(d, aes(x = SleepClear, fill = EnergyClear)) +
geom_bar(position = "dodge") +
geom_text(stat = "count", aes(label = ..count..),
position = position_dodge(width = 0.9),
vjust = -0.3, color = "black", size = 4) +
labs(title = "Biểu đồ cột nhóm: Ảnh hưởng giấc ngủ và thói quen uống nước tăng lực",
x = "Giấc ngủ bị ảnh hưởng bởi caffeine",
y = "Số lượng người tham gia",
fill = "Uống nước tăng lực") +
theme_minimal()
Nhận xét
Biểu đồ cho thấy trong nhóm có uống nước tăng lực, số người bị ảnh hưởng đến giấc ngủ (30 người) cao hơn đáng kể so với số người không bị ảnh hưởng (17 người). Ngược lại, ở nhóm không uống nước tăng lực, phần lớn người tham gia không bị ảnh hưởng giấc ngủ. Mặc dù tỷ lệ người sử dụng nước tăng lực thấp, nhưng kết quả cho thấy họ có nguy cơ bị rối loạn giấc ngủ cao hơn, phản ánh mối liên hệ đáng chú ý giữa thói quen sử dụng nước tăng lực và chất lượng giấc ngủ.
Lập bảng tần số và tần suất
# Kiểm tra các giá trị gốc của biến sleep_impacted
unique(d$sleep_impacted)
## [1] 1 0
# Kiểm tra các giá trị gốc của biến beverage_tea
unique(d$beverage_tea)
## [1] "False" "True"
# Nếu sleep_impacted đã là 0 và 1 → gán nhãn rõ ràng
if (all(unique(d$sleep_impacted) %in% c(0, 1))) {
d$SleepClear <- factor(d$sleep_impacted,
levels = c(0, 1),
labels = c("Không bị ảnh hưởng", "Bị ảnh hưởng"))
} else {
d$SleepClear <- factor(d$sleep_impacted)
}
# Nếu beverage_tea là TRUE/FALSE → gán nhãn rõ ràng
if (all(unique(d$beverage_tea) %in% c(TRUE, FALSE))) {
d$TeaClear <- factor(d$beverage_tea,
levels = c(FALSE, TRUE),
labels = c("Không uống trà", "Có uống trà"))
} else {
d$TeaClear <- factor(d$beverage_tea)
}
# Tạo bảng tần số chéo
table_sleep_tea <- table(d$SleepClear, d$TeaClear)
# Hiển thị bảng
print(table_sleep_tea)
##
## False True
## Không bị ảnh hưởng 141 156
## Bị ảnh hưởng 171 32
Biểu đồ
# Load ggplot2
library(ggplot2)
# Vẽ biểu đồ cột nhóm
ggplot(d, aes(x = SleepClear, fill = TeaClear)) +
geom_bar(position = "dodge") +
geom_text(stat = "count", aes(label = ..count..),
position = position_dodge(width = 0.9),
vjust = -0.3, color = "black", size = 4) +
labs(title = "Biểu đồ cột nhóm: Ảnh hưởng giấc ngủ và thói quen uống trà",
x = "Giấc ngủ bị ảnh hưởng bởi caffeine",
y = "Số lượng người tham gia",
fill = "Uống trà") +
theme_minimal()
Nhận xét
Biểu đồ cho thấy trong nhóm uống trà, phần lớn người tham gia không bị ảnh hưởng đến giấc ngủ (156 người), chỉ có 32 người bị ảnh hưởng. Ngược lại, ở nhóm không uống trà, số người bị ảnh hưởng giấc ngủ (171 người) lại cao hơn số người không bị ảnh hưởng (141 người). Điều này cho thấy những người có thói quen uống trà dường như ít bị ảnh hưởng đến giấc ngủ hơn, so với những người không uống.
Lập bảng tần số và tần suất
# Kiểm tra các giá trị gốc của biến sleep_impacted
unique(d$sleep_impacted)
## [1] 1 0
# Kiểm tra các giá trị gốc của biến time_of_day_evening
unique(d$time_of_day_evening)
## [1] "True" "False"
# Gán nhãn rõ ràng cho biến sleep_impacted
if (all(unique(d$sleep_impacted) %in% c(0, 1))) {
d$SleepClear <- factor(d$sleep_impacted,
levels = c(0, 1),
labels = c("Không bị ảnh hưởng", "Bị ảnh hưởng"))
} else {
d$SleepClear <- factor(d$sleep_impacted)
}
# Gán nhãn rõ ràng cho biến time_of_day_evening
if (all(unique(d$time_of_day_evening) %in% c(TRUE, FALSE))) {
d$EveningClear <- factor(d$time_of_day_evening,
levels = c(FALSE, TRUE),
labels = c("Không buổi tối", "Buổi tối"))
} else {
d$EveningClear <- factor(d$time_of_day_evening)
}
# Tạo bảng tần số chéo
table_sleep_evening <- table(d$SleepClear, d$EveningClear)
# Hiển thị bảng
print(table_sleep_evening)
##
## False True
## Không bị ảnh hưởng 250 47
## Bị ảnh hưởng 156 47
Biểu đồ
# Load ggplot2
library(ggplot2)
# Vẽ biểu đồ cột nhóm: sleep_impacted vs. time_of_day_evening
ggplot(d, aes(x = SleepClear, fill = EveningClear)) +
geom_bar(position = "dodge") +
geom_text(stat = "count", aes(label = ..count..),
position = position_dodge(width = 0.9),
vjust = -0.3, color = "black", size = 4) +
labs(title = "Biểu đồ cột nhóm: Ảnh hưởng giấc ngủ và thời điểm sử dụng buổi tối",
x = "Giấc ngủ bị ảnh hưởng bởi caffeine",
y = "Số lượng người tham gia",
fill = "Thời điểm sử dụng (buổi tối)") +
theme_minimal()
Nhận xét
Biểu đồ cột nhóm cho thấy số lượng người không sử dụng caffeine vào buổi tối chiếm ưu thế trong cả hai nhóm giấc ngủ: 250 người không bị ảnh hưởng và 156 người bị ảnh hưởng. Ngược lại, số người sử dụng vào buổi tối là tương đương ở cả hai nhóm (cùng 47 người). Điều này cho thấy thời điểm sử dụng caffeine vào buổi tối không khác biệt rõ rệt giữa những người bị ảnh hưởng và không bị ảnh hưởng đến giấc ngủ. Tuy nhiên, việc có ít người sử dụng caffeine vào buổi tối trong nhóm không bị ảnh hưởng có thể gợi ý rằng sử dụng caffeine vào buổi tối có khả năng góp phần làm tăng nguy cơ rối loạn giấc ngủ. Nhận định này cần được kiểm định thêm bằng các phân tích thống kê để xác định mức độ ý nghĩa.
Trong phân tích này, chúng tôi muốn phân tích giữa chất lượng giấc ngủ (sleep_impacted) và Đồ uống cà phê (beverage_coffee).
Biến phụ thuộc: sleep_impacted
Impacted (Bị ảnh hưởng): Giá trị 1 – caffeine có ảnh hưởng đến giấc ngủ.
Not impacted (Không bị ảnh hưởng): Giá trị 0 – caffeine không ảnh hưởng đến giấc ngủ.
Đây là biến đầu ra để phân tích xem các yếu tố khác (đặc biệt là loại đồ uống) có ảnh hưởng đến giấc ngủ không.
Biến độc lập: beverage_coffee
Coffee drinker (Có uống cà phê): Giá trị 1
Non-coffee drinker (Không uống cà phê): Giá trị 0
Đây là yếu tố đầu vào, để xem liệu việc uống cà phê có liên quan đến việc bị ảnh hưởng giấc ngủ hay không.
Bài toán kiểm định
H₀ (Null Hypothesis): Risk Ratio = 1 → Không có sự khác biệt về tỷ lệ bị ảnh hưởng giấc ngủ giữa người uống cà phê và không uống cà phê.
H₁ (Alternative Hypothesis): Risk Ratio ≠ 1 → Có sự khác biệt về tỷ lệ bị ảnh hưởng giấc ngủ giữa người uống cà phê và không uống cà phê.
# Cài gói nếu chưa có
# install.packages("epitools")
library(epitools)
# Đọc dữ liệu
data <- read.csv("caffeine_intake_tracker.csv")
# Tạo bảng chéo giữa sleep_impacted và beverage_coffee
tbl_sleep_coffee <- table(
SleepImpacted = data$sleep_impacted,
Coffee = data$beverage_coffee
)
# Hiển thị bảng chéo để kiểm tra
print(tbl_sleep_coffee)
## Coffee
## SleepImpacted False True
## 0 173 124
## 1 62 141
# Tính Risk Ratio
riskratio(tbl_sleep_coffee)
## $data
## Coffee
## SleepImpacted False True Total
## 0 173 124 297
## 1 62 141 203
## Total 235 265 500
##
## $measure
## risk ratio with 95% C.I.
## SleepImpacted estimate lower upper
## 0 1.000000 NA NA
## 1 1.663634 1.41429 1.956939
##
## $p.value
## two-sided
## SleepImpacted midp.exact fisher.exact chi.square
## 0 NA NA NA
## 1 8.876673e-10 1.329803e-09 1.087229e-09
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Nhận xét
Kết quả phân tích cho thấy tỷ số nguy cơ (risk ratio) giữa việc uống cà phê và khả năng bị ảnh hưởng giấc ngủ là 1.66, và p_value < 0,05 ta có thể kết luận rằng sự khác biệt là có ý nghĩa thống kê. Điều này đồng nghĩa với việc những người uống cà phê có nguy cơ bị ảnh hưởng giấc ngủ cao hơn 66% so với những người không uống.
Trong phân tích này, chúng tôi muốn phân tích giữa chất lượng giấc ngủ (sleep_impacted) và Đồ uống tăng lực (beverage_energy_drink).
Biến phụ thuộc: sleep_impacted
Impacted (Bị ảnh hưởng): Giá trị 1 – caffeine có ảnh hưởng đến giấc ngủ.
Not impacted (Không bị ảnh hưởng): Giá trị 0 – caffeine không ảnh hưởng đến giấc ngủ.
Đây là biến đầu ra để phân tích xem các yếu tố khác (đặc biệt là loại đồ uống) có ảnh hưởng đến giấc ngủ không.
Biến độc lập
Biến độc lập: beverage_energy_drink Energy Drink Consumer (Có uống): Giá trị 1
Non-Consumer (Không uống): Giá trị 0
Đây là yếu tố đầu vào. Mục tiêu là kiểm tra xem nhóm uống nước tăng lực có tỉ lệ bị ảnh hưởng giấc ngủ khác biệt đáng kể so với nhóm không uống hay không.
Bài toán kiểm định
H₀ (Null Hypothesis): Risk Ratio = 1 → Không có sự khác biệt về tỷ lệ bị ảnh hưởng giấc ngủ giữa người uống nước tăng lực và người không uống nước tăng lực.
H₁ (Alternative Hypothesis): Risk Ratio ≠ 1 → Có sự khác biệt về tỷ lệ bị ảnh hưởng giấc ngủ giữa người uống nước tăng lực và người không uống nước tăng lực.
# Cài đặt gói nếu chưa có
# install.packages("epitools")
library(epitools)
# Đọc dữ liệu từ file CSV
data <- read.csv("caffeine_intake_tracker.csv")
# Tạo bảng chéo giữa sleep_impacted và beverage_energy_drink
tbl_sleep_energy <- table(
SleepImpacted = data$sleep_impacted,
EnergyDrink = data$beverage_energy_drink
)
# In bảng chéo để kiểm tra
print(tbl_sleep_energy)
## EnergyDrink
## SleepImpacted False True
## 0 280 17
## 1 173 30
# Tính Risk Ratio
riskratio(tbl_sleep_energy)
## $data
## EnergyDrink
## SleepImpacted False True Total
## 0 280 17 297
## 1 173 30 203
## Total 453 47 500
##
## $measure
## risk ratio with 95% C.I.
## SleepImpacted estimate lower upper
## 0 1.00000 NA NA
## 1 2.58186 1.46363 4.554432
##
## $p.value
## two-sided
## SleepImpacted midp.exact fisher.exact chi.square
## 0 NA NA NA
## 1 0.0008450139 0.000916514 0.0006567794
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Nhận xét
Kết quả phân tích cho thấy tỷ số nguy cơ (risk ratio) giữa việc uống cà phê và khả năng bị ảnh hưởng giấc ngủ là 2,56 và p_value < 0,05 ta có thể kết luận rằng sự khác biệt là có ý nghĩa thống kê. Điều này đồng nghĩa với việc những người uống nước tăng lực có nguy cơ bị ảnh hưởng giấc ngủ cao hơn khoảng 2,6 lần so với những người không uống.
Trong phân tích này, chúng tôi muốn phân tích giữa chất lượng giấc ngủ (sleep_impacted) và Đồ uống trà (beverage_tea).
Biến phụ thuộc: sleep_impacted
Impacted (Bị ảnh hưởng): Giá trị 1 – caffeine có ảnh hưởng đến giấc ngủ.
Not impacted (Không bị ảnh hưởng): Giá trị 0 – caffeine không ảnh hưởng đến giấc ngủ.
Đây là biến đầu ra để phân tích xem các yếu tố khác (đặc biệt là loại đồ uống) có ảnh hưởng đến giấc ngủ không.
Biến độc lập
Tea Consumer (Có uống trà): Giá trị 1
Non-Consumer (Không uống trà): Giá trị 0
Đây là biến đầu vào. Mục tiêu là kiểm tra xem nhóm uống trà có tỷ lệ bị ảnh hưởng giấc ngủ cao hơn hoặc thấp hơn so với nhóm không uống trà hay không.
Bài toán kiểm định
H₀ (Null Hypothesis): Risk Ratio = 1 → Không có sự khác biệt về tỷ lệ bị ảnh hưởng giấc ngủ giữa người uống trà và người không uống trà.
H₁ (Alternative Hypothesis): Risk Ratio ≠ 1 → Có sự khác biệt về tỷ lệ bị ảnh hưởng giấc ngủ giữa người uống trà và người không uống trà.
# install.packages("epitools") # Chạy nếu bạn chưa cài thư viện
library(epitools)
# Bảng chéo 2x2: sleep_impacted (Yes / No) vs beverage_tea (Yes / No)
tbl_sleep_tea <- matrix(c(
32, 171, # sleep_impacted = 1: Có ảnh hưởng
156, 141 # sleep_impacted = 0: Không ảnh hưởng
),
nrow = 2,
byrow = TRUE,
dimnames = list(
SleepImpacted = c("Yes", "No"),
Tea = c("Yes", "No")
))
# Tính Risk Ratio
riskratio(tbl_sleep_tea)
## $data
## Tea
## SleepImpacted Yes No Total
## Yes 32 171 203
## No 156 141 297
## Total 188 312 500
##
## $measure
## risk ratio with 95% C.I.
## SleepImpacted estimate lower upper
## Yes 1.0000000 NA NA
## No 0.5635891 0.4931021 0.6441519
##
## $p.value
## two-sided
## SleepImpacted midp.exact fisher.exact chi.square
## Yes NA NA NA
## No 0 1.654401e-17 7.819165e-17
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Nhận xét
Kết quả phân tích cho thấy tỷ số nguy cơ (risk ratio) giữa việc uống trà và khả năng bị ảnh hưởng giấc ngủ là 0.56, với khoảng tin cậy 95% từ 0.49 đến 0.64. Khoảng này nằm hoàn toàn dưới 1 và các p-value đều gần bằng 0, cho thấy sự khác biệt là có ý nghĩa thống kê rất cao. Điều này đồng nghĩa với việc người uống trà có nguy cơ bị ảnh hưởng giấc ngủ thấp hơn khoảng 44% so với người không uống, cho thấy trà không những không gây hại mà còn có thể liên quan đến giấc ngủ tốt hơn
Bài toán kiểm định
H₀ (Giả thuyết không – Null Hypothesis): Risk Ratio = 1 → Không có sự khác biệt về tỷ lệ giấc ngủ bị ảnh hưởng giữa những người sử dụng caffeine vào buổi tối và những người không sử dụng.
H₁ (Giả thuyết đối – Alternative Hypothesis): Risk Ratio ≠ 1 → Có sự khác biệt về tỷ lệ giấc ngủ bị ảnh hưởng giữa những người sử dụng caffeine vào buổi tối và những người không sử dụng.
# install.packages("epitools") # Chạy nếu bạn chưa cài thư viện
library(epitools)
# Bảng chéo 2x2: sleep_impacted (Yes / No) vs time_of_day_evening (Yes / No)
tbl_sleep_evening <- matrix(c(
47, 156, # sleep_impacted = 1: Có ảnh hưởng
47, 250 # sleep_impacted = 0: Không ảnh hưởng
),
nrow = 2,
byrow = TRUE,
dimnames = list(
SleepImpacted = c("Yes", "No"),
Evening = c("Yes", "No")
))
# Tính Risk Ratio
riskratio(tbl_sleep_evening)
## $data
## Evening
## SleepImpacted Yes No Total
## Yes 47 156 203
## No 47 250 297
## Total 94 406 500
##
## $measure
## risk ratio with 95% C.I.
## SleepImpacted estimate lower upper
## Yes 1.000000 NA NA
## No 1.095355 1.000896 1.198729
##
## $p.value
## two-sided
## SleepImpacted midp.exact fisher.exact chi.square
## Yes NA NA NA
## No 0.0418002 0.04734846 0.0394483
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Nhận xét
Phân tích Risk Ratio cho thấy người dùng caffeine vào buổi tối có nguy cơ bị ảnh hưởng giấc ngủ cao hơn 9.5% so với người không dùng (RR = 1.095; p = 0.0418). Sự khác biệt này có ý nghĩa thống kê, cho thấy thời điểm sử dụng caffeine (buổi tối) có liên quan đến tình trạng mất ngủ.
Giả thuyết kiểm định
H₀ (Null Hypothesis): OR = 1 → Không có sự khác biệt về khả năng bị ảnh hưởng giấc ngủ giữa người uống cà phê và người không uống cà phê.
H₁ (Alternative Hypothesis): OR ≠ 1 → Có sự khác biệt về khả năng bị ảnh hưởng giấc ngủ giữa người uống cà phê và người không uống cà phê.
# Cài gói nếu cần
# install.packages("epitools")
library(epitools)
# Bước 1: Đọc dữ liệu
data <- read.csv("caffeine_intake_tracker.csv")
# Bước 2: Tạo bảng chéo 2x2
tab <- table(data$sleep_impacted, data$beverage_coffee)
# Đặt nhãn cho bảng
colnames(tab) <- c("No_Coffee", "Coffee")
rownames(tab) <- c("Not_Impacted", "Impacted")
# Bước 3: Tính Odds Ratio với khoảng tin cậy 95%
odds_result <- oddsratio(tab, conf.level = 0.95)
# Hiển thị kết quả
print(odds_result)
## $data
##
## No_Coffee Coffee Total
## Not_Impacted 173 124 297
## Impacted 62 141 203
## Total 235 265 500
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Not_Impacted 1.000000 NA NA
## Impacted 3.161851 2.175002 4.63531
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Not_Impacted NA NA NA
## Impacted 8.876673e-10 1.329803e-09 1.087229e-09
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Nhận xét
Kết quả phân tích cho thấy odds ratio (tỷ số odds) giữa việc uống cà phê và khả năng bị ảnh hưởng giấc ngủ là 3.16 và các p-value đều rất nhỏ (p < 0.000001), có thể kết luận rằng mối liên hệ này có ý nghĩa thống kê cao. Nói cách khác, người uống cà phê có nguy cơ bị ảnh hưởng giấc ngủ cao gấp hơn 3 lần so với người không uống cà phê. Đây là bằng chứng mạnh mẽ cho thấy cà phê là một yếu tố đáng kể trong việc làm suy giảm chất lượng giấc ngủ của người dùng trong bộ dữ liệu khảo sát.
Giả thuyết kiểm định
H₀ (Giả thuyết không có sự khác biệt – Null Hypothesis): OR = 1 → Không có sự khác biệt về tỷ lệ bị ảnh hưởng giấc ngủ giữa người uống nước tăng lực và người không uống nước tăng lực.
H₁ (Giả thuyết có sự khác biệt – Alternative Hypothesis): OR ≠ 1 → Có sự khác biệt về tỷ lệ bị ảnh hưởng giấc ngủ giữa người uống nước tăng lực và người không uống nước tăng lực.
# Cài gói nếu chưa có
# install.packages("epitools")
library(epitools)
# Bước 1: Đọc dữ liệu
data <- read.csv("caffeine_intake_tracker.csv")
# Bước 2: Tạo bảng chéo 2x2
tab <- table(data$sleep_impacted, data$beverage_energy_drink)
# Đặt tên rõ ràng cho bảng
colnames(tab) <- c("No_EnergyDrink", "EnergyDrink")
rownames(tab) <- c("Not_Impacted", "Impacted")
# Bước 3: Tính Odds Ratio với khoảng tin cậy 95%
odds_result <- oddsratio(tab, conf.level = 0.95)
# Hiển thị kết quả
print(odds_result)
## $data
##
## No_EnergyDrink EnergyDrink Total
## Not_Impacted 280 17 297
## Impacted 173 30 203
## Total 453 47 500
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Not_Impacted 1.000000 NA NA
## Impacted 2.839138 1.532705 5.424677
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Not_Impacted NA NA NA
## Impacted 0.0008450139 0.000916514 0.0006567794
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Nhận xét
Kết quả phân tích cho thấy odds ratio giữa việc uống nước tăng lực và khả năng bị ảnh hưởng giấc ngủ là 2.84 và các giá trị p đều nhỏ hơn 0.001, cho thấy mối liên hệ có ý nghĩa thống kê rõ rệt. Điều này đồng nghĩa với việc người uống nước tăng lực có nguy cơ bị ảnh hưởng giấc ngủ cao gấp gần 3 lần so với người không uống. Đây là bằng chứng đáng tin cậy cho thấy nước tăng lực là một yếu tố liên quan đáng kể đến tình trạng rối loạn giấc ngủ trong nhóm khảo sát.
Giả thuyết kiểm định
H₀ (Giả thuyết không có sự khác biệt – Null Hypothesis): OR = 1 → Không có sự khác biệt về tỷ lệ bị ảnh hưởng giấc ngủ giữa người uống trà và người không uống trà.
H₁ (Giả thuyết có sự khác biệt – Alternative Hypothesis): OR ≠ 1 → Có sự khác biệt về tỷ lệ bị ảnh hưởng giấc ngủ giữa người uống trà và người không uống trà.
# Cài gói nếu chưa có
# install.packages("epitools")
library(epitools)
# Bước 1: Đọc dữ liệu
data <- read.csv("caffeine_intake_tracker.csv")
# Bước 2: Tạo bảng chéo 2x2 giữa sleep_impacted và beverage_tea
tab <- table(data$sleep_impacted, data$beverage_tea)
# Bước 3: Gắn tên dễ đọc cho bảng
colnames(tab) <- c("No_Tea", "Tea")
rownames(tab) <- c("Not_Impacted", "Impacted")
# Bước 4: Tính Odds Ratio với khoảng tin cậy 95%
odds_result <- oddsratio(tab, conf.level = 0.95)
# Bước 5: In kết quả
print(odds_result)
## $data
##
## No_Tea Tea Total
## Not_Impacted 141 156 297
## Impacted 171 32 203
## Total 312 188 500
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Not_Impacted 1.0000000 NA NA
## Impacted 0.1702697 0.108017 0.2619499
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Not_Impacted NA NA NA
## Impacted 0 1.654401e-17 7.819165e-17
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Nhận xét
Kết quả phân tích cho thấy odds ratio giữa việc uống trà và khả năng bị ảnh hưởng giấc ngủ là 0.17 và các p-value gần bằng 0, ta có thể kết luận rằng mối liên hệ có ý nghĩa thống kê rất cao. Điều này cho thấy người uống trà có nguy cơ bị ảnh hưởng giấc ngủ thấp hơn đáng kể so với người không uống, cụ thể là thấp hơn khoảng 83%. Kết quả này phản ánh rằng trà có thể ít gây ảnh hưởng tiêu cực đến giấc ngủ, thậm chí có thể liên quan đến giấc ngủ tốt hơn trong nhóm khảo sát.
Giả thuyết kiểm định
H₀ (Giả thuyết không): Odds Ratio (OR) = 1 → Không có sự khác biệt về khả năng bị ảnh hưởng giấc ngủ giữa người uống cà phê và người không uống cà phê.
H₁ (Giả thuyết đối): Odds Ratio (OR) ≠ 1 → Có sự khác biệt về khả năng bị ảnh hưởng giấc ngủ giữa người uống cà phê và người không uống cà phê.
# Cài gói nếu cần
# install.packages("epitools")
library(epitools)
# Bước 1: Đọc dữ liệu
data <- read.csv("caffeine_intake_tracker.csv")
# Bước 2: Tạo bảng chéo 2x2 cho sleep_impacted và time_of_day_evening
tab <- table(data$sleep_impacted, data$time_of_day_evening)
# Đặt nhãn cho bảng
colnames(tab) <- c("Not_Evening", "Evening")
rownames(tab) <- c("Not_Impacted", "Impacted")
# Bước 3: Tính Odds Ratio với khoảng tin cậy 95%
odds_result <- oddsratio(tab, conf.level = 0.95)
# Hiển thị kết quả
print(odds_result)
## $data
##
## Not_Evening Evening Total
## Not_Impacted 250 47 297
## Impacted 156 47 203
## Total 406 94 500
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Not_Impacted 1.000000 NA NA
## Impacted 1.600873 1.017705 2.519623
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Not_Impacted NA NA NA
## Impacted 0.0418002 0.04734846 0.0394483
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Nhận xét
Kết quả cho thấy những người sử dụng caffeine vào buổi tối có khả năng bị ảnh hưởng đến giấc ngủ cao hơn so với người không sử dụng vào buổi tối, với odds ratio là 1.60 (CI 95%: 1.02–2.52). Mối liên hệ này có ý nghĩa thống kê với giá trị p là 0.0418.
# Bước 3: Mô hình hồi quy logit bội
model_logit_multi <- glm(
sleep_impacted ~ beverage_coffee + beverage_energy_drink + time_of_day_evening,
data = d,
family = binomial(link = "logit")
)
# Bước 4: Xem kết quả
summary(model_logit_multi)
##
## Call:
## glm(formula = sleep_impacted ~ beverage_coffee + beverage_energy_drink +
## time_of_day_evening, family = binomial(link = "logit"), data = d)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.6703 0.2013 -8.296 < 2e-16 ***
## beverage_coffeeTrue 1.7029 0.2305 7.387 1.50e-13 ***
## beverage_energy_drinkTrue 2.1736 0.3618 6.008 1.88e-09 ***
## time_of_day_eveningTrue 0.4627 0.2493 1.856 0.0635 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 675.37 on 499 degrees of freedom
## Residual deviance: 595.88 on 496 degrees of freedom
## AIC: 603.88
##
## Number of Fisher Scoring iterations: 4
# Bước 5: Chuyển hệ số sang Odds Ratio để dễ diễn giải
exp(coef(model_logit_multi))
## (Intercept) beverage_coffeeTrue beverage_energy_drinkTrue
## 0.1881895 5.4899718 8.7902368
## time_of_day_eveningTrue
## 1.5883384
Nhận xét
Kết quả các hệ số (Coefficients) Biến Estimate Ý nghĩa p-value Diễn giải (Intercept) -1.6703 Hệ số chặn < 2e-16 Khi không uống cà phê, không uống nước tăng lực và không dùng vào buổi tối → log odds bị ảnh hưởng là -1.67 beverage_coffeeTRUE 1.7029 Tích cực 1.50e-13 Có uống cà phê làm tăng log odds bị ảnh hưởng giấc ngủ (rất có ý nghĩa thống kê) beverage_energy_drinkTRUE 2.1736 Tích cực 1.88e-09 Có uống nước tăng lực làm tăng mạnh log odds bị ảnh hưởng giấc ngủ (cực kỳ có ý nghĩa) time_of_day_eveningTRUE 0.4627 Tích cực nhẹ 0.0635 Sử dụng vào buổi tối có xu hướng làm tăng log odds bị ảnh hưởng, nhưng chưa đạt mức ý nghĩa 0.05 (chỉ borderline)
Kết luận
Kết quả hồi quy logistic bội cho thấy việc sử dụng cà phê và nước tăng lực có ảnh hưởng rõ rệt đến khả năng bị ảnh hưởng giấc ngủ. Cụ thể, người uống cà phê có nguy cơ bị ảnh hưởng giấc ngủ cao gấp khoảng 5,5 lần so với người không uống, trong khi người uống nước tăng lực có nguy cơ cao gần gấp 9 lần. Ngoài ra, việc sử dụng caffeine vào buổi tối cũng có xu hướng làm tăng nguy cơ mất ngủ, tuy nhiên mối liên hệ này chưa đạt mức ý nghĩa thống kê (p = 0.0635). Nhìn chung, mô hình cho thấy các yếu tố tiêu thụ caffeine, đặc biệt là cà phê và nước tăng lực, là những yếu tố quan trọng liên quan đến chất lượng giấc ngủ.
# Bước 3: Mô hình hồi quy probit bội
model_probit_multi <- glm(
sleep_impacted ~ beverage_coffee + beverage_energy_drink + time_of_day_evening,
data = d,
family = binomial(link = "probit")
)
# Bước 4: Xem kết quả
summary(model_probit_multi)
##
## Call:
## glm(formula = sleep_impacted ~ beverage_coffee + beverage_energy_drink +
## time_of_day_evening, family = binomial(link = "probit"),
## data = d)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.9960 0.1120 -8.892 < 2e-16 ***
## beverage_coffeeTrue 1.0213 0.1330 7.677 1.63e-14 ***
## beverage_energy_drinkTrue 1.3137 0.2166 6.066 1.31e-09 ***
## time_of_day_eveningTrue 0.2674 0.1508 1.773 0.0762 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 675.37 on 499 degrees of freedom
## Residual deviance: 596.30 on 496 degrees of freedom
## AIC: 604.3
##
## Number of Fisher Scoring iterations: 4
# Bước 5 (probit): Ước lượng tương đối (OR từ hệ số probit)
exp(coef(model_probit_multi))
## (Intercept) beverage_coffeeTrue beverage_energy_drinkTrue
## 0.3693503 2.7767164 3.7199178
## time_of_day_eveningTrue
## 1.3066200
Nhận xét
Intercept = -0.9960, p < 2e-16: Hằng số ước lượng xác suất bị ảnh hưởng giấc ngủ khi các biến độc lập đều ở mức tham chiếu (không uống cà phê, không uống nước tăng lực, không dùng buổi tối) là thấp, và có ý nghĩa thống kê rất cao.
beverage_coffeeTrue = 1.0213, p = 1.63e-14: Uống cà phê làm tăng xác suất bị ảnh hưởng giấc ngủ một cách đáng kể. Hệ số này mang ý nghĩa có mối quan hệ mạnh và rất có ý nghĩa thống kê với biến phụ thuộc.
beverage_energy_drinkTrue = 1.3137, p = 1.31e-09: Người uống nước tăng lực cũng có xác suất cao hơn bị mất ngủ. Đây cũng là một biến có ảnh hưởng mạnh và ý nghĩa thống kê rất rõ ràng.
time_of_day_eveningTrue = 0.2674, p = 0.0762: Uống vào buổi tối có xu hướng làm tăng nguy cơ mất ngủ, nhưng chưa đạt mức ý nghĩa thống kê (p > 0.05), tuy gần sát mức cận trên (0.1). Đây có thể là biến cần cân nhắc thêm trong nghiên cứu sâu hơn.
Kết luận
Mô hình hồi quy Probit bội cho thấy rằng việc uống cà phê và nước tăng lực đều làm tăng đáng kể khả năng bị ảnh hưởng giấc ngủ, với mức độ ảnh hưởng rõ ràng và có ý nghĩa thống kê cao. Việc sử dụng vào buổi tối có xu hướng làm tăng nguy cơ mất ngủ, tuy nhiên chưa đủ mạnh để kết luận chắc chắn về mặt thống kê.
# Bước 3: Mô hình cloglog bội
reg_cloglog_multi <- glm(
sleep_impacted ~ beverage_coffee + beverage_energy_drink + time_of_day_evening,
data = d,
family = binomial(link = "cloglog")
)
# Bước 4: Hiển thị kết quả
summary(reg_cloglog_multi)
##
## Call:
## glm(formula = sleep_impacted ~ beverage_coffee + beverage_energy_drink +
## time_of_day_evening, family = binomial(link = "cloglog"),
## data = d)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.7610 0.1816 -9.699 < 2e-16 ***
## beverage_coffeeTrue 1.4040 0.1976 7.107 1.19e-12 ***
## beverage_energy_drinkTrue 1.7277 0.2609 6.623 3.53e-11 ***
## time_of_day_eveningTrue 0.3984 0.1711 2.328 0.0199 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 675.37 on 499 degrees of freedom
## Residual deviance: 594.40 on 496 degrees of freedom
## AIC: 602.4
##
## Number of Fisher Scoring iterations: 5
Nhận xét
Intercept = -1.7610, p < 2e-16: Khi người tham gia không uống cà phê, không uống nước tăng lực và không dùng buổi tối, xác suất bị ảnh hưởng giấc ngủ là rất thấp. Kết quả này có ý nghĩa thống kê cao.
beverage_coffeeTrue = 1.4040, p = 1.19e-12: Người uống cà phê có xác suất bị ảnh hưởng giấc ngủ cao hơn rõ rệt so với người không uống cà phê. Hệ số này rất có ý nghĩa thống kê, khẳng định mối liên hệ mạnh mẽ và đáng tin cậy.
beverage_energy_drinkTrue = 1.7277, p = 3.53e-11: Tác động của nước tăng lực thậm chí còn mạnh hơn cà phê. Việc uống nước tăng lực làm tăng đáng kể nguy cơ mất ngủ và có ý nghĩa thống kê rất cao.
time_of_day_eveningTrue = 0.3984, p = 0.0199: Uống vào buổi tối làm tăng xác suất mất ngủ so với các thời điểm khác trong ngày. Biến này có ý nghĩa thống kê ở mức 5%, cho thấy yếu tố thời điểm sử dụng cũng là một yếu tố có ảnh hưởng rõ rệt.
Kết luận
Mô hình cloglog bội cho thấy cả cà phê, nước tăng lực và thời gian sử dụng vào buổi tối đều làm tăng đáng kể khả năng bị ảnh hưởng giấc ngủ do caffeine. Trong đó, nước tăng lực có tác động mạnh nhất, tiếp theo là cà phê, và uống vào buổi tối cũng là một yếu tố quan trọng. Mô hình phù hợp tốt với dữ liệu và cho thấy sự khác biệt thống kê có ý nghĩa ở cả ba yếu tố.
# Tạo các mô hình hồi quy nhị phân với 3 biến độc lập
model_logit_multi <- glm(
sleep_impacted ~ beverage_coffee + beverage_energy_drink + time_of_day_evening,
data = df,
family = binomial(link = "logit")
)
model_probit_multi <- glm(
sleep_impacted ~ beverage_coffee + beverage_energy_drink + time_of_day_evening,
data = df,
family = binomial(link = "probit")
)
model_cloglog_multi <- glm(
sleep_impacted ~ beverage_coffee + beverage_energy_drink + time_of_day_evening,
data = df,
family = binomial(link = "cloglog")
)
# Tính AIC và BIC cho từng mô hình
results <- data.frame(
Mô_hình = c("Logit", "Probit", "Cloglog"),
AIC = c(
AIC(model_logit_multi),
AIC(model_probit_multi),
AIC(model_cloglog_multi)
),
BIC = c(
BIC(model_logit_multi),
BIC(model_probit_multi),
BIC(model_cloglog_multi)
)
)
# Làm tròn
results$AIC <- round(results$AIC, 3)
results$BIC <- round(results$BIC, 3)
# Hiển thị bảng
library(knitr)
kable(results, caption = "So sánh AIC, BIC giữa 3 mô hình hồi quy nhị phân với 3 biến độc lập")
Mô_hình | AIC | BIC |
---|---|---|
Logit | 603.876 | 620.734 |
Probit | 604.302 | 621.160 |
Cloglog | 602.396 | 619.255 |
Nhận xét
AIC (Akaike Information Criterion):
Mô hình cloglog có AIC thấp nhất (602.396), cho thấy đây là mô hình phù hợp tốt nhất với dữ liệu trong 3 mô hình được so sánh.
Mô hình logit và probit có AIC cao hơn, nên kém phù hợp hơn một chút.
BIC (Bayesian Information Criterion):
Tương tự như AIC, cloglog có BIC thấp nhất (619.255), tiếp theo là logit (620.734) và cuối cùng là probit (621.160).
Vì BIC phạt nặng hơn khi số lượng biến tăng, nên kết luận từ BIC cũng củng cố rằng cloglog là mô hình tốt nhất trong số ba mô hình, tính theo độ phù hợp và độ phức tạp.
Kết luận
Cả hai tiêu chí AIC và BIC đều cho thấy mô hình cloglog là tối ưu nhất trong 3 mô hình hồi quy nhị phân với cùng tập biến độc lập. Do đó, nếu mục tiêu là chọn mô hình phù hợp tốt nhất với dữ liệu, cloglog nên được ưu tiên.