TIỂU LUẬN PHÂN TÍCH CÁC YẾU TỐ ẢNH HƯỞNG ĐẾN BỆNH HEN SUYỄN

Trần Thị Huỳnh Nga

2025-07-22


LỜI CAM ĐOAN

   Tôi xin cam đoan nghiên cứu với đề tài “Phân Tích Các Yếu Tố Ảnh Hưởng Đến Bệnh Hen Suyễn” do tôi thực hiện là kết quả của quá trình học tập và nghiên cứu độc lập, nghiêm túc của bản thân dưới sự hướng dẫn của Thầy Th.S Trần Mạnh Tường.
   Nội dung báo cáo được trình bày một cách trung thực, khách quan, chính xác và đầy đủ, đảm bảo tính khoa học và thực tiễn. Mọi số liệu đều được lấy từ các báo cáo công khai, tài liệu tham khảo và thông tin trích dẫn có nguồn gốc rõ ràng, đáng tin cậy. Bài nghiên cứu không vi phạm đạo đức học tập và quy định của nhà trường.
   Tôi xin chịu hoàn toàn trách nhiệm về sự cam đoan này.

LỜI CẢM ƠN

   Em xin bày tỏ lòng biết ơn và lòng kính trọng đến Trường Đại học Tài chính Marketing vì đã giới thiệu môn học Phân Tích Dữ Liệu Định Tính vào chương trình giảng dạy. Đặc biệt, em xin gửi lời cảm ơn sâu sắc và lòng tôn trọng đến Thầy Trần Mạnh Tường vì sự hướng dẫn tận tâm và sự chia sẽ kiến thức quý báu trong suốt khoảng thời gian giảng dạy. Dưới sự hướng dẫn của thầy, em đã có cơ hội tiếp xúc với một môn học thú vị, tiếp thu được kiến thức mới và các kỹ năng cần thiết trong suốt quá trình học tập và viết tiểu luận. Mặc dù còn nhiều thiếu sót trong quá trình thực hiện, nhưng mong thầy sẽ chăm chước và bỏ qua.
   Em xin chân thành cảm ơn!

CHƯƠNG 1. TỔNG QUAN NGHIÊN CỨU

1.1. Dữ liệu nghiên cứu

   Bộ dữ liệu được sử dụng trong phân tích này là “Synthetic Asthma” được lấy từ trang Kaggle. Dữ liệu bao gồm 10.000 quan sát với 10 biến cung cấp các thông tin về tình trạng lối sống, môi trường sống và một số đặc điểm khác của nhóm người được khảo sát ở các khu vực khác nhau.
   Dữ liệu bao gồm 9 biến định tính chỉ ID, giới tính, tình trạng hút thuốc, lịch sử gia đình, dị ứng, mức độ ô nhiễm không khí, mức độ hoạt động thể chất, không gian làm việc, tình trạng bệnh hen suyễn và 1 biến định lượng là chỉ số BMI của người khảo sát.

data <- read_excel("D:/RStudio/TL/data/Synthetic_Asthma1.xlsx")

library(DT)             
datatable(data,
          options = list(pageLength = 10, scrollX = TRUE, autoWidth = TRUE),
          class = 'cell-border stripe',
          rownames = FALSE)
bdt <- c("Giới tính", "Lịch sử gia đình", "Dị ứng", "Mức độ ô nhiễm không khí", "Mức độ hoạt động thể chất", "Tình trạng hút thuốc", "Không gian làm việc", "Bệnh hen suyễn")
data[bdt] <- lapply(data[bdt], as.factor)

library(knitr)
library(kableExtra)

# Tạo dữ liệu
bien <- c("Giới tính", "Lịch sử gia đình", "Dị ứng", 
          "Mức độ ô nhiễm không khí", "Mức độ hoạt động thể chất", 
          "Tình trạng hút thuốc", "Không gian làm việc")

so_nhan <- c(2, 2, 2, 3, 3, 2, 2)

ds_nhan <- c(
  "Nam, Nữ",
  "Có, Không",
  "Có, Không",
  "Cao, Thấp, Trung bình",
  "Có vận động, Không vận động, Vận động nhiều",
  "Có hút thuốc, Không hút thuốc",
  "Ngoài trời, Trong nhà"
)

y_nghia <- c(
  "Giới tính của đối tượng",
  "Tiền sử gia đình mắc hen",
  "Tiền sử dị ứng của đối tượng",
  "Mức độ tiếp xúc ô nhiễm không khí",
  "Mức độ hoạt động thể chất của đối tượng",
  "Tình trạng hút thuốc hiện tại",
  "Môi trường làm việc của đối tượng"
)

# Gộp bảng
bang_bien <- data.frame(
  "Biến" = bien,
  "Số nhãn" = so_nhan,
  "Danh sách nhãn" = ds_nhan,
  "Ý nghĩa biến" = y_nghia,
  check.names = FALSE
)
colnames(bang_bien) <- c("Biến", "Số nhãn", "Danh sách nhãn", "Ý nghĩa biến")

kable(bang_bien,
      caption = "<center><b>**Bảng: Danh sách các biến định tính và ý nghĩa**</b></center>",
      align = "lcll",
      booktabs = TRUE) %>%
  kable_styling(full_width = FALSE,
                bootstrap_options = c("striped", "hover", "condensed", "responsive"),
                position = "center") %>%
  column_spec(1, bold = FALSE) %>%      
  column_spec(2:4, bold = FALSE) %>%    
  row_spec(0, bold = TRUE) %>%          
  column_spec(4, width = "7cm") %>%
  scroll_box(height = "450px")
Bảng: Danh sách các biến định tính và ý nghĩa
Biến Số nhãn Danh sách nhãn Ý nghĩa biến
Giới tính 2 Nam, Nữ Giới tính của đối tượng
Lịch sử gia đình 2 Có, Không Tiền sử gia đình mắc hen
Dị ứng 2 Có, Không Tiền sử dị ứng của đối tượng
Mức độ ô nhiễm không khí 3 Cao, Thấp, Trung bình Mức độ tiếp xúc ô nhiễm không khí
Mức độ hoạt động thể chất 3 Có vận động, Không vận động, Vận động nhiều Mức độ hoạt động thể chất của đối tượng
Tình trạng hút thuốc 2 Có hút thuốc, Không hút thuốc Tình trạng hút thuốc hiện tại
Không gian làm việc 2 Ngoài trời, Trong nhà Môi trường làm việc của đối tượng

1.2. Bối cảnh nghiên cứu

   Bệnh hen suyễn là một trong những bệnh lý mạn tính đường hô hấp phổ biến, ảnh hưởng đến hàng triệu người trên toàn thế giới. Hen suyễn không chỉ làm giảm chất lượng cuộc sống mà còn làm tăng gánh nặng chi phí y tế cho cá nhân, gia đình và xã hội. Tại Việt Nam, cùng với quá trình đô thị hóa nhanh, tình trạng ô nhiễm không khí ngày càng nghiêm trọng, tỷ lệ mắc hen suyễn có xu hướng gia tăng, đặc biệt tại các thành phố lớn. Ngoài ra, sự thay đổi trong lối sống, mức độ hoạt động thể chất thấp và tỷ lệ hút thuốc lá cao cũng được xem là những yếu tố nguy cơ làm gia tăng tỷ lệ mắc hen suyễn trong cộng đồng. Trong bối cảnh đó, việc xác định và lượng hóa các yếu tố ảnh hưởng đến khả năng mắc hen suyễn là cần thiết, giúp các cơ quan y tế, cộng đồng và người dân chủ động phòng ngừa, kiểm soát bệnh hiệu quả hơn.

1.3. Mục tiêu nghiên cứu

   Nghiên cứu này nhằm xác định các yếu tố ảnh hưởng đến khả năng mắc bệnh hen suyễn trong cộng đồng thông qua việc phân tích mối quan hệ giữa tình trạng mắc hen suyễn và các yếu tố nhân khẩu học, hành vi lối sống, cũng như yếu tố môi trường. Cụ thể, nghiên cứu sẽ đánh giá mức độ ảnh hưởng của các yếu tố như độ tuổi, giới tính, lịch sử gia đình, mức độ ô nhiễm không khí, mức độ hoạt động thể chất, tình trạng hút thuốc và chỉ số BMI đến khả năng mắc hen suyễn. Ngoài việc phát hiện các yếu tố nguy cơ, nghiên cứu còn mong muốn xác định các yếu tố bảo vệ để từ đó đề xuất các khuyến nghị cụ thể phục vụ phòng ngừa và kiểm soát bệnh hen suyễn trong cộng đồng.

1.4. Phương pháp nghiên cứu

   Nghiên cứu thực hiện thống kê mô tả để phân tích tỷ lệ mắc hen suyễn theo từng nhóm biến độc lập, từ đó nhận diện các nhóm nguy cơ cao. Tính toán các chỉ số thống kê nhằm lượng hóa mức độ ảnh hưởng. Song song sử dụng các mô hình hồi quy nhị phân ước lượng, xác định Odds Ratio (OR) cho từng biến để tính xác suất mắc hen suyễn dựa trên các yếu tố liên quan và kiểm tra tính nhất quán của kết quả. Sau cùng là đánh giá mức độ phù hợp của mô hình được thực hiện thông qua các chỉ số, biện pháp toàn diện khác đảm bảo mô hình có độ phù hợp cao, phù hợp cho các ứng dụng dự báo trong thực tế.

1.5. Ý nghĩa nghiên cứu

   Kết quả nghiên cứu mang lại giá trị thực tiễn cao, hỗ trợ nhận diện các yếu tố nguy cơ và yếu tố bảo vệ liên quan đến bệnh hen suyễn trong cộng đồng. Từ đó hỗ trợ cơ quan y tế xây dựng các chương trình phòng ngừa, phát hiện sớm, quản lý và can thiệp phù hợp nhằm giảm tỷ lệ mắc bệnh hen suyễn, đặc biệt tại các khu vực đô thị có mức độ ô nhiễm không khí cao. Nghiên cứu cũng cung cấp bằng chứng khoa học về tác động của lối sống như hoạt động thể chất và hút thuốc lá đến nguy cơ mắc hen suyễn, khuyến khích cộng đồng thay đổi hành vi sức khỏe. Về mặt học thuật, nghiên cứu góp phần củng cố kỹ năng ứng dụng phương pháp hồi quy logistic và probit vào phân tích dữ liệu y tế, phục vụ cho đào tạo, nghiên cứu và các dự án đánh giá rủi ro sức khỏe trong cộng đồng. Ngoài ra, kết quả phân tích định lượng cũng đóng vai trò làm nền tảng cho các nghiên cứu sâu hơn trong tương lai về các cơ chế sinh học và yếu tố hành vi liên quan đến các bệnh lý hô hấp.

CHƯƠNG 2. MÔ HÌNH VÀ PHƯƠNG PHÁP NGHIÊN CỨU

2.1. Các chỉ số thống kê

   Các chỉ số thống kê được thực hiện dựa trên bảng ngẫu nhiên 2x2 thể hiện mối liên hệ giữa một yếu tố phơi nhiễm và kết quả thành công được minh họa như sau:

Bảng 2x2 minh họa
Thành công Thất bại Tổng hàng
a b a + b
Không c d c + d
Tổng cột a + c b + d a + b + c + d

2.1.1. Nguy cơ tương đối (Relative Risk - RR)

a. Định nghĩa

   Nguy cơ tương đối là tỷ số của rủi ro ở nhóm phơi nhiễm so với nguy cơ ở nhóm không phơi nhiễm. Cho biết những người phơi nhiễm có nguy cơ xảy ra kết cục cao gấp bao nhiêu lần so với những người không phơi nhiễm. Đây là một thước đo tác động tương đối (relative effect).

b. Công thức

\[ RR = \frac{R_E}{R_{NE}} = \frac{a / (a + b)}{c / (c + d)} \]

c. Diễn giải

  • RR = 1: Phơi nhiễm không ảnh hưởng đến nguy cơ..

  • RR < 1: Phơi nhiễm làm giảm nguy cơ.

  • RR > 1: Phơi nhiễm làm tăng nguy cơ.

d. Khoảng tin cậy cho RR

Vì phân phối của RR bị lệch nên khoảng tin cậy của nó phải được tính trên thang logarit.

  1. Tính log(RR)

\[ \ln(RR) \] 2. Tính sai số chuẩn của log(RR)

\[ SE(\ln(RR)) = \sqrt{\frac{1 - R_E}{a} + \frac{1 - R_{NE}}{c}} = \sqrt{\frac{b}{a(a + b)} + \frac{d}{c(c + d)}} \] 3. Tính khoảng tin cậy 95% trên thang log

\[ \ln(RR) \pm 1.96 \times SE(\ln(RR)) \] 4. Đổi về thang đo ban đầu (RR)

\[ CI = e^{\ln(RR) \pm 1.96 \times SE(\ln(RR))} \] Diễn giải CI: Nếu khoảng tin cậy chứa số 1, kết quả không có ý nghĩa thống kê.

2.1.2 Tỷ số chênh (Odds Ratio - OR)

a. Định nghĩa

  • Odds

Tỷ số chênh (Odds) là tỷ lệ giữa xác suất xảy ra một biến cố và xác suất không xảy ra biến cố đó.

  • Nếu Odds < 1 → Sự kiện xảy ra kém khả năng hơn không xảy ra.

  • Nếu Odds = 1 → Cân bằng giữa xảy ra và không xảy ra.

  • Nếu Odds > 1 → Sự kiện xảy ra nhiều khả năng hơn.

\[Odds = \frac{P}{1-P}\]

  • Odds Ratio

OR là tỷ số của odds xảy ra kết cục ở nhóm phơi nhiễm so với odds xảy ra kết cục ở nhóm không phơi nhiễm. Nhằm so sánh tỷ số chênh của việc có kết cục giữa hai nhóm.

b. Công thức

  1. Odds ở nhóm phơi nhiễm:

\[ Odds_E = \frac{a / (a + b)}{b / (a + b)} = \frac{a}{b} \]

  1. Odds ở nhóm không phơi nhiễm:

\[ Odds_{NE} = \frac{c}{d} \]

  1. Công thức OR từ bảng 2x2:

\[ OR = \frac{Odds_E}{Odds_{NE}} = \frac{a / b}{c / d} = \frac{a \times d}{b \times c} \]

c. Diễn giải

  • OR > 1: Tỷ số chênh của kết cục cao hơn ở nhóm phơi nhiễm.

  • OR < 1: Tỷ số chênh của kết cục thấp hơn ở nhóm phơi nhiễm.

  • OR = 1: Không có mối liên hệ.

Đặc biệt:

   Nếu OR = 2, có thể hiểu rằng nhóm phơi nhiễm có nguy cơ xảy ra kết cục cao gấp 2 lần so với nhóm không phơi nhiễm.

   OR xấp xỉ RR khi kết quả là hiếm trong quần thể nghiên cứu. Dựa trên công thức toán học của OR và RR có thể được diễn giải cho sự khác biệt này là cốt lõi nằm ở mẫu số của các tỷ lệ bên trong: RR dùng a+b (tổng số người phơi nhiễm) và c+d (tổng số người không phơi nhiễm), trong khi OR chỉ dùng b (số người phơi nhiễm không có kết cục) và d (số người không phơi nhiễm không có kết cục).

   OR có những đặc tính toán học, đặc biệt trong Hồi quy Logistic (Logistic Regression). Hồi quy logistic là một trong những mô hình thống kê mạnh mẽ và phổ biến nhất để phân tích các kết cục dạng nhị phân (có/không, bệnh/khỏe, đậu/rớt) và đầu ra trực tiếp của mô hình hồi quy logistic chính là log của Odds Ratio (log-odds).

d. Khoảng tin cậy cho OR

Tương tự như RR, tỷ số này cũng được tính trên thang logarit.

  1. Tính log(OR):
    \[ \ln(OR) \]

  2. Sai số chuẩn của log(OR):
    \[ SE(\ln(OR)) = \sqrt{ \frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d} } \]

  3. Khoảng tin cậy 95% trên thang log:
    \[ \ln(OR) \pm 1.96 \times SE(\ln(OR)) \]

  4. Đổi về thang đo ban đầu:
    \[ CI = e^{\ln(OR) \pm 1.96 \times SE(\ln(OR))} \]

2.2. Mô hình nghiên cứu

2.2.1. Mô hình Logit

   Mô hình hồi quy Logistic là mô hình hồi quy nhị phân phổ biến nhất. Thuộc họ GLM (Generalized Linear Model) với hai đặc điểm chính:

  1. Thành phần ngẫu nhiên: Biến phản hồi \(Y\) tuân theo phân phối Bernoulli (hoặc Binomial).

  2. Hàm liên kết: Sử dụng hàm liên kết logit, \(g(\pi) = \log \left( \dfrac{\pi}{1 - \pi} \right)\).

Mô hình giả định rằng logit của xác suất thành công \(\left( \pi = P(Y = 1 \mid X) \right)\) là một hàm tuyến tính của các biến độc lập:

\[ \text{logit}(\pi) = \log\left(\dfrac{\pi}{1 - \pi}\right) = \beta_0 + \beta_1 X_1 + \cdots + \beta_k X_k \]

Hàm nghịch đảo của logit, gọi là hàm logistic, cho phép tính toán xác suất:

\[ \pi = \dfrac{\exp(\beta_0 + \cdots + \beta_k X_k)}{1 + \exp(\beta_0 + \cdots + \beta_k X_k)} \]

Hàm này luôn tạo ra giá trị \(\pi\) trong khoảng (0, 1) và có dạng hình chữ S.

2.2.2. Mô hình Probit

   Dựa trên hàm phân phối tích lũy (CDF) của phân phối chuẩn tắc,
\[ g(\pi) = \Phi^{-1}(\pi) \] Trong đó, \(\Phi^{-1}\) là hàm nghịch đảo của phân phối chuẩn tắc chuẩn (standard normal).

Mô hình Probit có nền tảng lý thuyết về biến tiềm ẩn (latent variable) và thường cho kết quả rất tương đồng với Logit.

2.3. Các tiêu chí đánh giá mô hình

2.3.1. Tiêu chuẩn AIC (Akaike Information Criterion)

   Dựa trên hàm phân phối tích lũy (CDF) của phân phối chuẩn tắc,
\[ g(\pi) = \Phi^{-1}(\pi) \] Trong đó, \(\Phi^{-1}\) là hàm nghịch đảo của phân phối chuẩn tắc chuẩn (standard normal).

Mô hình Probit có nền tảng lý thuyết về biến tiềm ẩn (latent variable) và thường cho kết quả rất tương đồng với Logit.

   Akaike (1974) đề xuất tiêu chuẩn AIC là kỹ thuật dùng để lựa chọn mô hình. AIC dựa trên nền tảng lý thuyết thông tin và là một tiêu chí mà tìm kiếm một mô hình trong đó có một phù hợp với vài thông số chính xác. Mô hình này được chọn bằng cách giảm thiểu khoảng cách Kullback–Leibler giữa mô hình và độ chính xác.

   Tiêu chuẩn AIC được xác định bằng công thức sau:

\[ AIC = e^{2k/n} \sum \frac{u_i^2}{n} = e^{2k/n} \frac{RSS}{n} \]

   Trong đó:

  • \(n\) là số quan sát
  • \(k\) là tổng số các số hạng trong mô hình, kể cả số hạng là hằng số.

   Ngoài ra còn có thể biểu diễn dưới dạng:

\[ LnAIC = \frac{2k}{n} + \ln \left( \frac{RSS}{n} \right) \]

   Với \(LnAIC\) là log theo cơ số tự nhiên của AIC.

   Căn cứ vào tiêu chuẩn thông tin Akaike AIC khi so sánh hai hay nhiều mô hình,
mô hình có AIC thấp hơn sẽ được lựa chọn.

2.3.2. Chỉ số Brier Score

   Brier Score nhằm đánh giá độ chính xác của các dự đoán xác suất bằng cách tính trung bình bình phương của sai số dự đoán xác suất. Giá trị Brier càng thấp hiệu suất của mô hình càng cao.

\[ BS = \frac{1}{n} \sum_{i=1}^{n} (p_i - o_i)^2 \]

Trong đó: - \(p_i\) là xác suất dự đoán sự kiện xảy ra, - \(o_i\) bằng 1 nếu sự kiện xảy ra và bằng 0 nếu không xảy ra.

2.2.3 Ma trận nhầm lẫn (Confusion Matrix)

   Ma trận nhầm lẫn là phương pháp đo lường mức độ chính xác và sai sót của mô hình phân loại. Hay là bảng tóm tắt kết quả phân loại giữa giá trị thực tế và giá trị dự đoán sau khi đã chuyển xác suất thành nhị phân theo ngưỡng, thường là 0.5.

Nó có dạng như sau:

Thực tế = 1 Thực tế = 0
Dự đoán = 1 TP (True Positive) FP (False Positive)
Dự đoán = 0 FN (False Negative) TN (True Negative)

Với mỗi lớp phân loại, ma trận nhầm lẫn có 4 chỉ số sau:

  • True Positive (Dự đoán đúng) : Dự đoán lớp positive là positive.

  • False Positive (Dự đoán giả) : Dự đoán lớp negative là positive.

  • False Negative (Phủ định giả) : Dự đoán lớp positive là negative.

  • True Negative (Phủ định thực) : Dự đoán lớp negative là negative

   Các chỉ tiêu đánh giá từ ma trận nhầm lẫn

  • Độ chính xác (Accuracy)

\[ \text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN} \]

Là tỷ lệ tổng số dự đoán đúng trên toàn bộ quan sát.

  • Độ nhạy (Recall/Sensitivity)

\[ \text{Recall} = \frac{TP}{TP + FN} \]

Cho biết mô hình bắt đúng bao nhiêu trong số các trường hợp thực sự dương tính (có bệnh).

  • Độ đặc hiệu (Specificity)

\[ \text{Recall} = \frac{TP}{TP + FN} \]

Cho biết mô hình bắt đúng bao nhiêu trong số các trường hợp thực sự âm tính (không bệnh).

  • Độ chính xác dự đoán dương (Precision)

\[ \text{Precision} = \frac{TP}{TP + FP} \]

Là xác suất để một dự đoán dương tính là chính xác.

  • F1-Score

\[ \text{F1-score} = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} \]

Là trung bình điều hòa giữa Precision và Recall, dùng khi cần cân bằng cả hai chỉ tiêu.

CHƯƠNG 3. PHÂN TÍCH VÀ KẾT QUẢ NGHIÊN CỨU

3.1. PHÂN TÍCH TỔNG QUAN CÁC BIẾN

Dựa trên vấn đề cần phân tích:

  • Biến mục tiêu: Bệnh hen suyễn.

  • Các biến giải thích bao gồm: Giới tính, Nhóm tuổi, Tình trạng hút thuốc, Lịch sử gia đình, Dị ứng, Mức độ ô nhiễm không khí, Mức độ hoạt động thể chất, Không gian làm việc, Chỉ số BMI.

3.1.1. Phân tích biến phụ thuộc

   Biến (Bệnh hen suyễn) ghi nhận số lượng người mắc bệnh và không mắc bệnh dựa trên nhiều yếu tố trong mẫu thu thập.

a. Bảng tần số và biểu đồ tần suất

   Lập bảng tần số cho biến (Bệnh hen suyễn) nhằm có cái nhìn tổng quan về sự phấn bố số lượng người mắc bệnh và người không mắc bệnh. Đồng thời, biểu đồ tần suất hỗ trợ trực quan hóa tỷ lệ này rõ ràng hơn.

table_hs <- table(data$"Bệnh hen suyễn")
kable(
  as.data.frame(table_hs),
  col.names = c("Bệnh hen suyễn", "Số lượng"),
  caption = "<center>**Bảng: Số lượng người mắc bệnh hen suyễn**</center>"
)  %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng: Số lượng người mắc bệnh hen suyễn
Bệnh hen suyễn Số lượng
2546
Không 7454
hs <- round(table(data$"Bệnh hen suyễn")/sum(nrow(data))*100 ,1)
label <- paste(hs, "%")
pie(hs, main ="BIỂU ĐỒ TẦN SUẤT NGƯỜI MẮC BỆNH HEN SUYỄN", col = brewer.pal(2, "Set2")
, radius =1, border = NA)
legend("topright",legend = label, fill = brewer.pal(2, "Set2"), title = "Bệnh hen suyễn", cex = 0.8)

Nhận xét

   Qua bảng và biểu đồ trên, có thể thấy tỷ lệ người mắc bệnh hen suyễn trong bộ dữ liệu chiếm 2546 người (25,5%) và có 7454 người (74,5%) không mắc bệnh. Điều này cho thấy đa số người tham gia nghiên cứu không mắc hen suyễn, tuy nhiên tỷ lệ mắc bệnh vẫn chiếm gần một phần tư, là cơ sở quan trọng để phân tích các yếu tố nguy cơ liên quan đến bệnh hen suyễn trong các phân tích tiếp theo.

b. Ước lượng khoảng cho tỷ lệ

n <- nrow(data)
n_tm <- sum(data$"Bệnh hen suyễn" == "Có")
x_tm <- n_tm / n
z <- qnorm(0.975)
se_tm <- sqrt(x_tm * (1 - x_tm) / n)
lower_tm <- x_tm - z * se_tm
upper_tm <- x_tm + z * se_tm
cat("Khoảng tin cậy 95% cho tỷ lệ mắc bệnh hen suyễn là:", round(lower_tm, 4), "-", round(upper_tm, 4), "\n")
## Khoảng tin cậy 95% cho tỷ lệ mắc bệnh hen suyễn là: 0.2461 - 0.2631

   Với mức tin cậy 95%, khoảng ước lượng thu được cho biết tỷ lệ người mắc bệnh tiểu đường trong quần thể là từ 24.61% đến 26.31%.

c. kiểm định thống kê trong quần thể

Theo đó, tác giả thực hiện kiểm định giả thuyết cho rằng tỷ lệ người mắc bệnh hen suyễn là dưới 20%, ta có:

Bài toán kiểm định:

  • \(H_0\): Tỷ lệ người mắc bệnh hen suyễn \(< 0.2\)

  • \(H_1\): Tỷ lệ người mắc bệnh hen suyễn \(\geq 0.2\)

prop.test(x = n_tm, n = n, p = 0.2, alternative = "greater", conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  n_tm out of n, null probability 0.2
## X-squared = 185.98, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is greater than 0.2
## 95 percent confidence interval:
##  0.2474519 1.0000000
## sample estimates:
##      p 
## 0.2546

Kết quả cho thấy:

   Với độ tin cậy 95%, p < 2.2e-16 < 0.05. Bác bỏ giả thuyết \(H_0\), tức có thể nói rằng tỷ lệ người mắc bệnh hen suyễn không thể dưới 20%. Điều này khớp với khoảng ước lượng tỷ lệ mắc bệnh trong quần thể.

3.1.2. Phân tích các biến độc lập

3.1.2.1 Biến Giới tính

   Biến (Giới tính) ghi nhận số lượng mắc bệnh và không mắc bệnh giữa nam và nữ nhằm xem xét giới tính liệu có phải là một yếu tố liên quan đến bệnh hen suyễn.

table_1 <- table(data$"Giới tính")
kable(
  as.data.frame(table_1),
  col.names = c("Giới tính", "Số lượng"),
  caption = "<center>**Bảng: Số lượng người khảo sát theo giới tính**</center>"
)  %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng: Số lượng người khảo sát theo giới tính
Giới tính Số lượng
Nam 4751
Nữ 5249
gt <- round(table(data$"Giới tính")/sum(nrow(data))*100 ,1)
label <- paste(gt, "%")
pie(gt, main ="BIỂU ĐỒ PHÂN BỔ SỐ LƯỢNG NGƯỜI KHẢO SÁT THEO GIỚI TÍNH", col = brewer.pal(2, "Set2")
, radius =1, border = NA)
legend("topright",legend = label, fill = brewer.pal(2, "Set2"), title = "Giới tính", cex = 0.8)

Nhận xét

   Qua bảng và biểu đồ trên, tỷ lệ người có giới tính nam trong bộ dữ liệu chiếm 4751 người (47.5%) và có 5249 người có giới tính nữ (52.5%) . Điều này cho thấy lượng người tham gia khảo sát không co sự chênh lệch quá lớn giữa nam và nữ.

3.1.2.2 Biến Tình trạng hút thuốc

   (Tình trạng hút thuốc) là yếu tố nguy cơ quan trọng gây hen suyễn và làm nặng tình trạng bệnh, phản ánh số lượng người chưa sử dụng thuốc lá và nhóm người đã và đang sử dụng thường xuyên.

table_3 <- table(data$"Tình trạng hút thuốc")
kable(
  as.data.frame(table_3),
  col.names = c("Tình trạng hút thuốc", "Số lượng"),
  caption = "<center>**Bảng: Số lượng người khảo sát theo tình trạng hút thuốc**</center>"
)  %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng: Số lượng người khảo sát theo tình trạng hút thuốc
Tình trạng hút thuốc Số lượng
Có hút thuốc 3104
Không hút thuốc 6896
tm <- round(table(data$"Tình trạng hút thuốc")/sum(nrow(data))*100 ,1)
labels <- paste0(tm, "%")
pie(tm,labels = labels, main ="BIỂU ĐỒ TẦN SUẤT PHÂN BỔ THEO TÌNH TRẠNG HÚT THUỐC", col = brewer.pal(2, "Set2")
, radius =1, border = NA)
legend("topright",legend = names(tm), fill = brewer.pal(2, "Set2"), title = "Tình trạng hút thuốc", cex = 0.8)

Nhận xét

   Qua bảng và biểu đồ trên, số lượng người hút thuốc chiếm 31%% và phần lớn là người không hút thuốc chiếm 69%.

3.1.2.3 Biến Lịch sử gia đình

   Biến Lịch sử gia đình ghi nhận số lượng người mà trong gia đình đã từng có người thân mắc hen suyễn. Yếu tố tiền sử gia đình mắc hen hoặc dị ứng này làm tăng nguy cơ mắc hen suyễn do yếu tố di truyền khá cao.

table_4 <- table(data$"Lịch sử gia đình")
kable(
  as.data.frame(table_4),
  col.names = c("Lịch sử gia đình", "Số lượng"),
  caption = "<center>**Bảng tần số: Tiền sử gia đình có người mắc bệnh **</center>"
)  %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng tần số: Tiền sử gia đình có người mắc bệnh
Lịch sử gia đình Số lượng
3081
Không 6919
hn <- round(table(data$"Lịch sử gia đình")/sum(nrow(data))*100 ,1)
labels <- paste0(hn, "%")
pie(hn,labels = labels, main ="BIỂU ĐỒ TẦN SUẤT TIỀN SỬ GIA ĐÌNH CÓ NGƯỜI MẮC BỆNH", col = brewer.pal(2, "Set2")
, radius =1, border = NA)
legend("topright",legend = names(hn), fill = brewer.pal(2, "Set2"), title = "Lịch sử gia đình", cex = 0.8)

Nhận xét

   Bảng và biểu đồ trực quan cho thấy số lượng người khảo sát có người thân đã từng mắc hen suyễn cũng chiếm một số lượng khá lớn, tương đương đến 30,8% trong bộ dữ liệu.

3.1.2.4 Biến Dị ứng

   Dị ứng là yếu tố khởi phát hoặc đồng mắc với hen suyễn. Đây thường là các nguy cơ hàng đầu gây mắc bệnh và ảnh hưởng nghiêm trọng đến hệ hô hấp của phần lớn người. Biến (Dị ứng) ghi nhận “có” cho nhiều trường hợp dị ứng khác nhau có ảnh hưởng đến hen suyễn.

table_5 <- table(data$"Dị ứng")
kable(
  as.data.frame(table_5),
  col.names = c("Dị ứng", "Số lượng"),
  caption = "<center>**Bảng tần số: Dị ứng **</center>"
)  %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng tần số: Dị ứng
Dị ứng Số lượng
4003
Không 5997
cv <- round(table(data$"Dị ứng")/sum(nrow(data))*100 ,1)
labels <- paste0(cv, "%")
pie(cv,labels = labels, main ="BIỂU ĐỒ TẦN SUẤT THEO CÁC YẾU TỐ DỊ ỨNG", col = brewer.pal(5, "Set2")
, radius =1, border = NA)
legend("topright",legend = names(cv), fill = brewer.pal(5, "Set2"), title = "Dị ứng", cex = 0.8)

Nhận xét

   Bảng tần số và biểu đồ trực quan cho thấy tình trạng người có dị ứng với ít nhất một yếu tố nào đó chiếm đến 40% (4003 người) trong nhóm người khảo sát.

3.1.2.5 Biến Không gian làm việc

   Không gian làm việc phản ánh bầu không khí mà người lao động tiếp xúc thường xuyên, tùy vào môi trường có bụi bẩn và nhiều độc tố gây ảnh hưởng đến mức độ bệnh và nguy cơ mắc phải do tiếp xúc lâu ngày.

table_8 <- table(data$"Không gian làm việc")
kable(
  as.data.frame(table_8),
  col.names = c("Không gian làm việc", "Số lượng"),
  caption = "<center>**Bảng tần số: Không gian làm việc**</center>"
)  %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng tần số: Không gian làm việc
Không gian làm việc Số lượng
Ngoài trời 3042
Trong nhà 6958
kg <- round(table(data$"Không gian làm việc")/sum(nrow(data))*100 ,1)
labels <- paste0(kg, "%")
pie(kg,labels = labels, main ="BIỂU ĐỒ TẦN SUẤT THEO KHÔNG GIAN LÀM VIỆC", col = brewer.pal(2, "Set2")
, radius =1, border = NA)
legend("topright",legend = names(kg), fill = brewer.pal(2, "Set2"), title = "Không gian làm việc", cex = 0.8)

Nhận xét

   Không gian làm việc trong nhà chiếm phần lớn với 6958 người (69.6%), cho thấy đây là môi trường làm việc chủ yếu trong mẫu khảo sát. Việc làm việc trong nhà có thể liên quan đến nghề nghiệp văn phòng, giáo dục, dịch vụ… nơi có điều kiện kiểm soát môi trường tốt hơn ít bụi, ít dị ứng.

   Ngoài trời gồm 3042 người (30.4%), phản ánh tỷ lệ đáng kể người làm việc trong môi trường mở, có thể là lao động phổ thông, xây dựng, hoặc làm nông… Những người này có thể có nguy cơ cao hơn với các tác nhân kích ứng như bụi, phấn hoa hoặc khí ô nhiễm.

3.1.2.6 Biến Mức độ ô nhiễm không khí

   (Mức độ ô nhiễm không khí) là yếu tố cho thấy môi trường ô nhiễm làm tăng nguy cơ mắc hen suyễn và các cơn kịch phát hen. Tại mỗi mức độ khác nhau, số lượng người mắc hen là khác nhau.

table_6 <- table(data$"Mức độ ô nhiễm không khí")
kable(
  as.data.frame(table_6),
  col.names = c("Mức độ ô nhiễm không khí", "Số lượng"),
  caption = "<center>**Bảng tần số: Mức độ ô nhiễm không khí**</center>"
)  %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng tần số: Mức độ ô nhiễm không khí
Mức độ ô nhiễm không khí Số lượng
Cao 1931
Thấp 2974
Trung bình 5095
nct <- round(table(data$"Mức độ ô nhiễm không khí")/sum(nrow(data))*100 ,1)
labels <- paste0(nct, "%")
pie(nct,labels = labels, main ="BIỂU ĐỒ TẦN SUẤT THEO MỨC ĐỘ Ô NHIỄM KHÔNG KHÍ", col = brewer.pal(3, "Set1")
, radius =1, border = NA)
legend("topright",legend = names(nct), fill = brewer.pal(3, "Set1"), title = "Mức độ ô nhiễm", cex = 0.8)

Nhận xét

   Bảng tần số và biểu đồ trực quan cho thấy mức độ ô nghiễm không khí tại thành phố đang sinh sống của từng người khảo sát, ô nhiễm không khí ở mức trung bình chiếm 50.9%, mức ô nhiễm cao chiếm 19.3% và mức thấp chiếm 29.7%.

3.1.2.7 Biến Mức độ hoạt động thể chất

   Tại mỗi mức độ hoạt động thể chất có thể là các yếu tố nâng cao sức khỏe, cải thiện chức năng của phổi, giảm thiếu số lần hen tái phát. Tuy nhiên khi quá sức, điều này cũng làm ảnh hưởng đến tình trạng tái phát bệnh. Biến này cung cấp số liệu thu thập tại 3 mức vận động khác nhau.

table_7 <- table(data$"Mức độ hoạt động thể chất")
kable(
  as.data.frame(table_7),
  col.names = c("Mức độ hoạt động thể chất", "Số lượng"),
  caption = "<center>**Bảng tần số: Mức độ hoạt động thể chất**</center>"
)  %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng tần số: Mức độ hoạt động thể chất
Mức độ hoạt động thể chất Số lượng
Có vận động 2434
Không vận động 5025
Vận động nhiều 2541
tc <- round(table(data$"Mức độ hoạt động thể chất")/sum(nrow(data))*100 ,1)
labels <- paste0(tc, "%")
pie(tc,labels = labels, main ="BIỂU ĐỒ TẦN SUẤT THEO MỨC ĐỘ HOẠT ĐỘNG THỂ CHẤT", col = brewer.pal(2, "Set1")
, radius =1, border = NA)
legend("topright",legend = names(tc), fill = brewer.pal(2, "Set1"), title = "Mức đọ hoạt động", cex = 0.8)

Nhận xét

   Bảng tần số và biểu đồ trực quan cho thấy lượng người có hoạt động nhiều và hoạt động vừa phải chênh lệch không lớn ở mức 25.4% và 24.3%. Nhóm người không vận động chiếm đến 50.2%.

3.1.2.8 Biến Chỉ số BMI

   Chỉ số BMI phản ánh chỉ số khối cơ thể, BMI càng cao thể hiện tình trạng thừa cân, béo phì. Điều này phản ánh nguy cơ mắc hen do viêm mạn tính, giảm chức năng hoạt động của phổi và thể hiện một lối sống thiếu hoạt động thể chất.

bmi <- summary(data$"Chỉ số BMI")

library(knitr)
bmi_df <- data.frame("Thống kê" = names(bmi), "Giá trị" = as.numeric(bmi), check.names = FALSE)
colnames(bmi_df) <- c("Thống kê", "Giá trị")

kable(
  bmi_df,
  caption = "<center><b>Bảng thống kê chỉ số BMI</b></center>",
  align = "cc"
)  %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng thống kê chỉ số BMI
Thống kê Giá trị
Min. 16.00000
1st Qu. 21.85025
Median 24.10692
Mean 23.97830
3rd Qu. 26.15845
Max. 33.46421
hist(data$"Chỉ số BMI",     
     main = "Biểu đồ Histogram Chỉ số BMI",
     breaks = 10, 
     xlab = "Chỉ số BMI",
     col = "skyblue",
     border = "white", 
     freq = TRUE,
    )

Nhận xét

   Theo bảng thống kê, BMI trung bình là 25, điều này cho thấy phần lớn người khảo sát đang ở mức khối lượng cơ thể bình thường. Nhóm BMI từ 22 đến 24 cũng chiếm tỷ lệ cao, tương ứng với khoảng 2000 người. Trong khi đó, những người có BMI từ 28 trở lên hoặc dưới 20 chiếm tỷ lệ rất nhỏ, cho thấy tình trạng thừa cân hay thiếu cân là không phổ biến trong tập dữ liệu này. Phản ánh một cơ cấu sức khỏe tương đối ổn định và đồng đều.

3.2. PHÂN TÍCH CÁC YẾU TỐ ẢNH HƯỞNG ĐẾN NGUY CƠ MẮC BỆNH HEN SUYỄN

3.2.1. Mối quan hệ giữa Giới tínhBệnh hen suyễn

   Lập bảng tần số và biểu đồ tần suất cho hai biến (Giới tính) và (Bệnh hen suyễn) nhằm thấy rõ sự phân bố của bệnh hen theo từng giới tính.

data$"Bệnh hen suyễn" <- factor(data$"Bệnh hen suyễn", levels = c("Có", "Không"))  
data$"Giới tính" <- factor(data$"Giới tính", levels = c("Nam", "Nữ")) 
cb1 <- table(data$"Giới tính", data$"Bệnh hen suyễn")
ppb1 <- addmargins(cb1)

kable(ppb1,
      caption = "<center>**Bảng Tần số chéo: (`Giới tính`) và (`Bệnh hen suyễn`)**</center>",
      align = "c") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng Tần số chéo: (Giới tính) và (Bệnh hen suyễn)
Không Sum
Nam 1207 3544 4751
Nữ 1339 3910 5249
Sum 2546 7454 10000
data_percent1 <- data %>%
  filter(!is.na(`Giới tính`) & !is.na(`Bệnh hen suyễn`)) %>%
  count(`Giới tính`, `Bệnh hen suyễn`) %>%
  group_by(`Giới tính`) %>%
  mutate(perc = n / sum(n) * 100)

ggplot(data_percent1, aes(x = `Giới tính`, y = perc, fill = `Bệnh hen suyễn`)) +
  geom_col(position = "stack") +
  geom_text(aes(label = paste0(round(perc, 1), "%")),
            position = position_stack(vjust = 0.5),
            color = "black", size = 4) +
  labs(
    title = "Tỷ lệ mắc bệnh hen suyễn theo giới tính",
    x = "Giới tính",
    y = "Tỷ lệ phần trăm (%)",
    fill = "Bệnh hen suyễn"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14))

   Nhìn chung, tỷ lệ mắc bệnh hen suyễn không có sự chênh lệch lớn trong mẫu dữ liệu, dao động ở mức 25.5%. Điều này cho thấy giới tính có vẻ không phải là một yếu tố thật sự ảnh hưởng đến bệnh hen.

a. Kiểm định Chi-bình phương

   Tác giả thực hiện kiểm định Chi-squared nhằm xác định mối liên hệ giữa hai biến (Giới tính) và (Bệnh hen suyễn) có ý nghĩa thống kê hay không.

Bài toán kiểm định:

  • \(H_0\): Hai biến (Giới tính) và (Bệnh hen suyễn) độc lập với nhau (không có mối liên hệ).

  • \(H_1\): Hai biến (Giới tính) và (Bệnh hen suyễn) có mối liên hệ với nhau.

chisq_test1 <- chisq.test(cb1)
print(chisq_test1)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  cb1
## X-squared = 0.009359, df = 1, p-value = 0.9229

   Với mức ý nghĩa 5%, p - value = 0.9229 > 0.05. Chấp nhận giả thuyết \(H_0\). Tức không có mối liên hệ giữa hai biến (Giới tính) và (Bệnh hen suyễn). Dựa vào kiểm định trên, tác giả sẽ loại bỏ biến giới tính khỏi mô hình hồi quy.

3.2.2. Mối quan hệ giữa Tình trạng hút thuốcBệnh hen suyễn

   Lập bảng tần số cho hai biến (Tình trạng hút thuốc) và (Bệnh hen suyễn) nhằm xem xét sự phân bổ nguy cơ mắc bệnh hen suyễn dựa trên thói quen hút thuốc của một số người khảo sát.

data$"Bệnh hen suyễn" <- factor(data$"Bệnh hen suyễn", levels = c("Có", "Không"))  
data$"Tình trạng hút thuốc" <- factor(data$"Tình trạng hút thuốc", levels = c("Có hút thuốc", "Không hút thuốc")) 
cb3 <- table(data$"Tình trạng hút thuốc", data$"Bệnh hen suyễn")
ppb3 <- addmargins(cb3)
kable(ppb3,
      caption = "<center>**Bảng Tần số chéo: (`Tình trạng hút thuốc`) và (`Bệnh hen suyễn`)**</center>",
      align = "c") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng Tần số chéo: (Tình trạng hút thuốc) và (Bệnh hen suyễn)
Không Sum
Có hút thuốc 1119 1985 3104
Không hút thuốc 1427 5469 6896
Sum 2546 7454 10000
data_percent3 <- data %>%
  filter(!is.na(`Tình trạng hút thuốc`) & !is.na(`Bệnh hen suyễn`)) %>%
  count(`Tình trạng hút thuốc`, `Bệnh hen suyễn`) %>%
  group_by(`Tình trạng hút thuốc`) %>%
  mutate(perc = n / sum(n) * 100)

ggplot(data_percent3, aes(x = `Tình trạng hút thuốc`, y = perc, fill = `Bệnh hen suyễn`)) +
  geom_col(position = "stack") +
  geom_text(aes(label = paste0(round(perc, 1), "%")),
            position = position_stack(vjust = 0.5),
            color = "black", size = 4) +
  labs(
    title = "Tỷ lệ mắc bệnh hen suyễn theo tình trạng hút thuốc",
    x = "Tình trạng hút thuốc",
    y = "Tỷ lệ phần trăm (%)",
    fill = "Bệnh hen suyễn"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14))

   Nhìn chung, tỷ lệ mắc bệnh hen suyễn ở nhóm có hút thuốc (36.1%) cao hơn so với nhóm không hút thuốc (20.7%). Đồng thời, tỷ lệ không mắc bệnh ở nhóm không hút thuốc cao hơn đáng kể (79.3%), điều này cho thấy tình trạng sử dụng thuốc lá có thể là một yếu tố tăng nguy cơ mắc bệnh hen suyễn.

a. Kiểm định Chi-bình phương

   Thực hiện kiểm định Chi-squared nhằm xác định mối liên hệ giữa hai biến (Tình trạng hút thuốc) và (Bệnh hen suyễn) có ý nghĩa thống kê hay không.

Bài toán kiểm định:

  • \(H_0\): Hai biến (Tình trạng hút thuốc) và (Bệnh hen suyễn) độc lập với nhau (không có mối liên hệ).

  • \(H_1\): Hai biến (Tình trạng hút thuốc) và (Bệnh hen suyễn) có mối liên hệ với nhau.

chisq_test3 <- chisq.test(cb3)
print(chisq_test3)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  cb3
## X-squared = 265.2, df = 1, p-value < 2.2e-16

   Với mức ý nghĩa 5%, p - value < 2.2e-16 < 0.05. Bác bỏ giả thuyết \(H_0\). Tức có mối liên hệ giữa hai biến (Tình trạng hút thuốc) và (Bệnh hen suyễn).

b. Tỷ lệ tương đối (Relative Risk - RR) và khoảng tin cậy 95%

   Nhằm đo lường mức độ liên quan giữa hai biến (Tình trạng hút thuốc) và (Bệnh hen suyễn), tác giả thực hiện tính toán tỷ lệ tương đối và khoảng tin cậy 95%.

a <- 1119  
b <- 1985  
c <- 1427  
d <- 5469  

p1_3 <- a / (a + b)
p0_3 <- c / (c + d)

RR3 <- p1_3 / p0_3

SE_logRR3 <- sqrt( (b / (a * (a + b))) + (d / (c * (c + d))) )
logRR3 <- log(RR3)

z <- 1.96
lower_log3 <- logRR3 - z * SE_logRR3
upper_log3 <- logRR3 + z * SE_logRR3

lower_RR3 <- exp(lower_log3)
upper_RR3 <- exp(upper_log3)

library(knitr)

ktc_rr3 <- data.frame(
  c("Relative risk", "lwr.ci", "upr.ci"),
  c(round(RR3, 3), round(lower_RR3, 3), round(upper_RR3, 3))
)

kable(ktc_rr3,
      col.names = NULL,      
      align = "lc",        
      caption = "<center>**Bảng ước lượng Relative risk và KTC 95%**</center>\n")  %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng ước lượng Relative risk và KTC 95%
Relative risk 1.742
lwr.ci 1.631
upr.ci 1.861

Nhận xét:

   Kết quả RR = 1.742 cho biết rằng tỷ lệ người hút thuốc có nguy cơ mắc bệnh hen suyễn cao hon khoảng 1.7 lần so với người không hút thuốc.

   Kết quả với CL 95%: 1.631 - 1.861, khoảng tin cậy không chứa giá trị 1 nên kết quả có ý nghĩa thống kê. Mức tăng rủi ro có thể dao động từ 1.631 đến 1.861 lần.

c. Tỷ lệ chênh (Odds Ratio - OR) và Khoảng tin cậy 95%

Odds3_1 <- round((1119/1985) ,4)
Odds3_2 <- round((1427/5469) ,4)
OR_3 <- round(Odds3_1/Odds3_2)

ktc_3 <- OddsRatio(cb3,conf.level = .95)
kable(ktc_3,
      caption = "<center>**Bảng ước lượng Odds Ratio và KTC 95%**</center>",
      align = "c")  %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng ước lượng Odds Ratio và KTC 95%
x
odds ratio 2.160496
lwr.ci 1.967432
upr.ci 2.372505

Nhận xét:

   Kết quả OR = 2.16 cho biết rằng odds mắc bệnh hen suyễn ở người hút thuốc cao hơn khoảng 2 lần so với những người không sử dụng thuốc lá.

   Kết quả với CL 95%: 1.967432 - 2.372505, khoảng tin cậy không chứa giá trị 1 nên kết quả có ý nghĩa thống kê. Nhìn chung, odds mắc bệnh hen suyễn của nhóm người sử dụng thuốc lá khá cao so với nhóm người không sử dụng, mức dao động từ 1.967 đến 2.375 lần.

3.2.3. Mối quan hệ giữa Lịch sử gia đìnhBệnh hen suyễn

   Lập bảng tần số và biểu đồ tần suất cho hai biến (Lịch sử gia đình) và (Bệnh hen suyễn) nhằm xem xét sự phân bổ nguy cơ mắc bệnh hen suyễn của mỗi cá nhân dựa trên tiền sử người thân trong gia đình đã từng mắc bệnh.

data$"Bệnh hen suyễn" <- factor(data$"Bệnh hen suyễn", levels = c("Có", "Không"))  
data$"Lịch sử gia đình" <- factor(data$"Lịch sử gia đình", levels = c("Có", "Không"))
cb4 <- table(data$"Lịch sử gia đình", data$"Bệnh hen suyễn")
ppb4 <- addmargins(cb4)
kable(ppb4,
      caption = "<center>**Bảng Tần số chéo: (`Lịch sử gia đình`) và (`Bệnh hen suyễn`)**</center>",
      align = "c") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng Tần số chéo: (Lịch sử gia đình) và (Bệnh hen suyễn)
Không Sum
972 2109 3081
Không 1574 5345 6919
Sum 2546 7454 10000
data_percent4 <- data %>%
  filter(!is.na(`Lịch sử gia đình`) & !is.na(`Bệnh hen suyễn`)) %>%
  count(`Lịch sử gia đình`, `Bệnh hen suyễn`) %>%
  group_by(`Lịch sử gia đình`) %>%
  mutate(perc = n / sum(n) * 100)

ggplot(data_percent4, aes(x = `Lịch sử gia đình`, y = perc, fill = `Bệnh hen suyễn`)) +
  geom_col(position = "stack") +
  geom_text(aes(label = paste0(round(perc, 1), "%")),
            position = position_stack(vjust = 0.5),
            color = "black", size = 4) +
  labs(
    title = "Tỷ lệ mắc bệnh hen suyễn theo tiền sử gia đình",
    x = "Lịch sử gia đình",
    y = "Tỷ lệ phần trăm (%)",
    fill = "Bệnh hen suyễn"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14))

Nhận xét

   Nhìn chung, tỷ lệ mắc bệnh hen suyễn ở người có tiền sử người thân mắc bệnh trước đó chiếm đến 31.5%, cùng với đó tỷ lệ ở nhóm người không có tiền sử gia đình mắc bệnh chỉ chiểm 22.7%. Điều này phản ánh phần nào yếu tố trên có ảnh hưởng đến nguy cơ mắc bệnh hen khá cao.

a. Kiểm định Chi-bình phương

   Thực hiện kiểm định Chi-squared nhằm xác định mối liên hệ giữa hai biến (Lịch sử gia đình) và (Bệnh hen suyễn) có ý nghĩa thống kê hay không.

Bài toán kiểm định:

  • \(H_0\): Hai biến (Lịch sử gia đình) và (Bệnh hen suyễn) độc lập với nhau (không có mối liên hệ).

  • \(H_1\): Hai biến (Lịch sử gia đình) và (Bệnh hen suyễn) có mối liên hệ với nhau.

chisq_test4 <- chisq.test(cb4)
print(chisq_test4)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  cb4
## X-squared = 86.509, df = 1, p-value < 2.2e-16

   Với mức ý nghĩa 5%, p - value < 2.2e-16 < 0.05. Bác bỏ giả thuyết \(H_0\). Tức có mối liên hệ giữa hai biến (Lịch sử gia đình) và (Bệnh hen suyễn).

b. Tỷ lệ tương đối (Relative Risk - RR) và khoảng tin cậy 95%

   Nhằm đo lường mức độ liên quan giữa hai biến (Lịch sử gia đình) và (Bệnh hen suyễn), tác giả thực hiện tính toán tỷ lệ tương đối và khoảng tin cậy 95%.

a1 <- 972
b1 <- 2109  
c1 <- 1574  
d1 <- 5345  

p1_4 <- a1 / (a1 + b1)
p0_4 <- c1 / (c1 + d1)

RR4 <- p1_4 / p0_4

SE_logRR4 <- sqrt( (b1 / (a1 * (a1 + b1))) + (d1 / (c1 * (c1 + d1))) )
logRR4 <- log(RR4)

z <- 1.96
lower_log4 <- logRR4 - z * SE_logRR4
upper_log4 <- logRR4 + z * SE_logRR4

lower_RR4 <- exp(lower_log4)
upper_RR4 <- exp(upper_log4)

library(knitr)

ktc_rr4 <- data.frame(
  c("Relative risk", "lwr.ci", "upr.ci"),
  c(round(RR4, 3), round(lower_RR4, 3), round(upper_RR4, 3))
)

kable(ktc_rr4,
      col.names = NULL,      
      align = "lc",        
      caption = "<center>**Bảng ước lượng Relative risk và KTC 95%**</center>\n")  %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng ước lượng Relative risk và KTC 95%
Relative risk 1.387
lwr.ci 1.296
upr.ci 1.484

Nhận xét:

   Kết quả RR = 1.387 cho biết rằng tỷ lệ người có người thân đã từng mắc hen suyễn có nguy cơ mắc bệnh cao gấp 1.4 lần so với người khác.

   Kết quả với CL 95%: 1.296 - 1.484, khoảng tin cậy không chứa giá trị 1 nên kết quả có ý nghĩa thống kê. Mức tăng rủi ro có thể dao động từ 1.296 đến 1.484 lần.

c. Tỷ lệ chênh (Odds Ratio - OR) và Khoảng tin cậy 95%

Odds4_1 <- round((972/2109) ,4)
Odds4_2 <- round((1574/5345) ,4)
OR_4 <- round(Odds3_1/Odds3_2)

ktc_4 <- OddsRatio(cb4,conf.level = .95)
kable(ktc_4,
      caption = "<center>**Bảng ước lượng Odds Ratio và KTC 95%**</center>",
      align = "c")  %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng ước lượng Odds Ratio và KTC 95%
x
odds ratio 1.565066
lwr.ci 1.423921
upr.ci 1.720202

Nhận xét:

   Kết quả OR = 1.565 cho biết rằng odds mắc bệnh hen suyễn ở người có người thân mắc bệnh cao hơn khoảng 1.6 lần so với những người còn lại.

   Kết quả với CL 95%: 1.423921 - 1.720202, khoảng tin cậy không chứa giá trị 1 nên kết quả có ý nghĩa thống kê.

   Tóm lại, khả năng mắc bênh hen suyễn của nhóm người có yếu tố tiền sử gia đình cũng khá cao so với nhóm người khác, mức dao động từ 1.424 đến 1.720 lần. Điều này tương đối khớp với thực tế vì đây là bệnh có yếu tố di truyền, mức độ tùy vào việc cả cha hoặc mẹ đều mắc hen suyễn.

3.2.4. Mối quan hệ giữa Dị ứngBệnh hen suyễn

   Lập bảng tần số và biểu đồ tần suất cho hai biến (Dị ứng) và (Bệnh hen suyễn) nhằm xem xét sự phân bổ nguy cơ mắc bệnh hen suyễn của mỗi cá nhân dựa trên việc có ít nhất một dị ứng với các yếu tố liên quan.

data$"Bệnh hen suyễn" <- factor(data$"Bệnh hen suyễn", levels = c("Có", "Không"))  
data$"Dị ứng" <- factor(data$"Dị ứng") 
cb5 <- table(data$"Dị ứng", data$"Bệnh hen suyễn")
ppb5 <- addmargins(cb5)
kable(ppb5,
      caption = "<center>**Bảng Tần suất chéo: (`Dị ứng`) và (`Bệnh hen suyễn`)**</center>",
      align = "c") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng Tần suất chéo: (Dị ứng) và (Bệnh hen suyễn)
Không Sum
1265 2738 4003
Không 1281 4716 5997
Sum 2546 7454 10000
data_percent5 <- data %>%
  filter(!is.na(`Dị ứng`) & !is.na(`Bệnh hen suyễn`)) %>%
  count(`Dị ứng`, `Bệnh hen suyễn`) %>%
  group_by(`Dị ứng`) %>%
  mutate(perc = n / sum(n) * 100)

ggplot(data_percent5, aes(x = `Dị ứng`, y = perc, fill = `Bệnh hen suyễn`)) +
  geom_col(position = "stack") +
  geom_text(aes(label = paste0(round(perc, 1), "%")),
            position = position_stack(vjust = 0.5),
            color = "black", size = 4) +
  labs(
    title = "Tỷ lệ mắc bệnh hen suyễn theo dị ứng",
    x = "Dị ứng",
    y = "Tỷ lệ phần trăm (%)",
    fill = "Bệnh hen suyễn"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14))

   Nhìn chung, tỷ lệ mắc bệnh hen suyễn ở nhóm có dị ứng chiếm đến 31.6%, ngược lại tỷ lệ hen suyễn ở nhóm người không dị ứng chỉ chiếm 21.4%. Tỷ lệ này phản ánh yếu tố dị ứng có thể là một trong các yếu tố có nguy cơ mắc hen suyễn hàng đầu.

a. Kiểm định Chi-bình phương

   Thực hiện kiểm định Chi-squared nhằm xác định mối liên hệ giữa hai biến (Tình trạng hút thuốc) và (Bệnh hen suyễn) có ý nghĩa thống kê hay không.

Bài toán kiểm định:

  • \(H_0\): Hai biến (Dị ứng) và (Bệnh hen suyễn) độc lập với nhau (không có mối liên hệ).

  • \(H_1\): Hai biến (Dị ứng) và (Bệnh hen suyễn) có mối liên hệ với nhau.

chisq_test5 <- chisq.test(cb5)
print(chisq_test5)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  cb5
## X-squared = 132.12, df = 1, p-value < 2.2e-16

   Với mức ý nghĩa 5%, p - value < 2.2e-16 < 0.05. Bác bỏ giả thuyết \(H_0\). Tức có mối liên hệ giữa hai biến (Dị ứng) và (Bệnh hen suyễn).

b. Tỷ lệ tương đối (Relative Risk - RR) và khoảng tin cậy 95%

   Nhằm đo lường mức độ liên quan giữa hai biến (Lịch sử gia đình) và (Bệnh hen suyễn), tác giả thực hiện tính toán tỷ lệ tương đối và khoảng tin cậy 95%.

a3 <- 1265  
b3 <- 2738    
c3 <- 1281  
d3 <- 4716  

p1_5 <- a3 / (a3 + b3)
p0_5 <- c3 / (c3 + d3)

RR5 <- p1_5 / p0_5

SE_logRR5 <- sqrt( (b3 / (a3 * (a3 + b3))) + (d3 / (c3 * (c3 + d3))) )
logRR5 <- log(RR5)

z <- 1.96
lower_log5 <- logRR5 - z * SE_logRR5
upper_log5 <- logRR5 + z * SE_logRR5

lower_RR5 <- exp(lower_log5)
upper_RR5 <- exp(upper_log5)

library(knitr)

ktc_rr5 <- data.frame(
  c("Relative risk", "lwr.ci", "upr.ci"),
  c(round(RR5, 3), round(lower_RR5, 3), round(upper_RR5, 3))
)

kable(ktc_rr5,
      col.names = NULL,      
      align = "lc",        
      caption = "<center>**Bảng ước lượng Relative risk và KTC 95%**</center>\n")  %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng ước lượng Relative risk và KTC 95%
Relative risk 1.479
lwr.ci 1.384
upr.ci 1.581

Nhận xét:

   Kết quả RR = 1.479 cho biết rằng tỷ lệ người bị dị ứng có nguy cơ mắc bệnh cao gấp 1.5 lần so với nhóm người không có dị ứng .

   Kết quả với CL 95%: 1.384 - 1.581, khoảng tin cậy không chứa giá trị 1 nên kết quả có ý nghĩa thống kê. Mức tăng rủi ro có thể dao động từ 4.351 đến 5.794 lần.

c. Tỷ lệ chênh (Odds Ratio - OR) và Khoảng tin cậy 95%

Odds5_1 <- round((1265/2738) ,4)
Odds5_2 <- round((1281/4716) ,4)
OR_5 <- round(Odds5_1/Odds5_2)

ktc_5 <- OddsRatio(cb5,conf.level = .95)
kable(ktc_5,
      caption = "<center>**Bảng ước lượng Odds Ratio và KTC 95%**</center>",
      align = "c")  %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng ước lượng Odds Ratio và KTC 95%
x
odds ratio 1.700912
lwr.ci 1.553201
upr.ci 1.862670

Nhận xét:

   Kết quả OR = 1.71 cho biết rằng odds mắc bệnh hen suyễn ở người có dị ứng cao hơn khoảng gần 1.8 lần so với những người không mắc dị ứng.

   Kết quả với CL 95%: 1.553201 - 1.862670, khoảng tin cậy không chứa giá trị 1 nên kết quả có ý nghĩa thống kê.

3.2.5. Mối quan hệ giữa Không gian làm việcBệnh hen suyễn

   Lập bảng tần số và biểu đồ tần suất cho hai biến Không gian làm việcBệnh hen suyễn nhằm xem xét sự phân bổ nguy cơ mắc bệnh hen suyễn của mỗi cá nhân dựa theo không gian làm việc mỗi ngày.

data$"Bệnh hen suyễn" <- factor(data$"Bệnh hen suyễn", levels = c("Có", "Không"))  
data$"Không gian làm việc" <- factor(data$"Không gian làm việc", levels = c("Ngoài trời", "Trong nhà")) 
cb8 <- table(data$"Không gian làm việc", data$"Bệnh hen suyễn")
ppb8 <- addmargins(cb8)
kable(ppb8,
      caption = "<center>**Bảng Tần suất chéo: (`Không gian làm việc`) và (`Bệnh hen suyễn`)**</center>",
      align = "c") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng Tần suất chéo: (Không gian làm việc) và (Bệnh hen suyễn)
Không Sum
Ngoài trời 749 2293 3042
Trong nhà 1797 5161 6958
Sum 2546 7454 10000
data_percent8 <- data %>%
  filter(!is.na(`Không gian làm việc`) & !is.na(`Bệnh hen suyễn`)) %>%
  count(`Không gian làm việc`, `Bệnh hen suyễn`) %>%
  group_by(`Không gian làm việc`) %>%
  mutate(perc = n / sum(n) * 100)

ggplot(data_percent8, aes(x = `Không gian làm việc`, y = perc, fill = `Bệnh hen suyễn`)) +
  geom_col(position = "stack") +
  geom_text(aes(label = paste0(round(perc, 1), "%")),
            position = position_stack(vjust = 0.5),
            color = "black", size = 4) +
  labs(
    title = "Tỷ lệ mắc bệnh hen suyễn theo không gian làm việc",
    x = "Không gian làm việc",
    y = "Tỷ lệ phần trăm (%)",
    fill = "Bệnh hen suyễn"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14))

   Nhìn chung, tỷ lệ mắc bệnh hen suyễn giữa những người làm việc trong nhà và làm việc ngoài trời của dữ liệu mẫu không có sự chênh lệch, xấp xỉ ở mức ~25%.

a. Kiểm định Chi-bình phương

   Thực hiện kiểm định Chi-squared nhằm xác định mối liên hệ giữa hai biến (Không gian làm việc) và (Bệnh hen suyễn) có ý nghĩa thống kê hay không.

Bài toán kiểm định:

  • \(H_0\): Hai biến (Không gian làm việc) và (Bệnh hen suyễn) độc lập với nhau (không có mối liên hệ).

  • \(H_1\): Hai biến (Không gian làm việc) và (Bệnh hen suyễn) có mối liên hệ với nhau.

chisq_test8 <- chisq.test(cb8)
print(chisq_test8)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  cb8
## X-squared = 1.5551, df = 1, p-value = 0.2124

   Với mức ý nghĩa 5%, p - value = 0.2124 > 0.05. Chưa có cơ sở bác bỏ giả thuyết \(H_0\). Tức không có mối liên hệ giữa hai biến (Không gian làm việc) và (Bệnh tiểu đường). Tuy nhiên trong thực tế, môi trường làm việc cũng có thể là một yếu tố nguy cơ vì môi trường ngoài trời thường tiếp xúc nhiều bụi bẩn và các khí thải độc hại hơn so với môi trường làm việc trong nhà.

3.2.6. Mối quan hệ giữa Mức độ ô nhiễm không khíBệnh hen suyễn

   Lập bảng tần số và biểu đồ tần suất cho hai biến (Mức độ ô nhiễm không khí) và (Bệnh hen suyễn) nhằm xem xét sự phân bổ nguy cơ mắc bệnh hen suyễn của mỗi cá nhân dựa trên các mức ô nhiễm không khí tại khu vục sống.

data$"Bệnh hen suyễn" <- factor(data$"Bệnh hen suyễn", levels = c("Có", "Không"))  
data$"Mức độ ô nhiễm không khí" <- factor(data$"Mức độ ô nhiễm không khí", levels = c("Cao", "Trung bình", "Thấp")) 
cb6 <- table(data$"Mức độ ô nhiễm không khí", data$"Bệnh hen suyễn")
ppb6 <- addmargins(cb6)
kable(ppb6,
      caption = "<center>**Bảng Tần số chéo: (`Mức độ ô nhiễm không khí`) và (`Bệnh hen suyễn`)**</center>",
      align = "c") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng Tần số chéo: (Mức độ ô nhiễm không khí) và (Bệnh hen suyễn)
Không Sum
Cao 586 1345 1931
Trung bình 1367 3728 5095
Thấp 593 2381 2974
Sum 2546 7454 10000
data_percent6 <- data %>%
  filter(!is.na(`Mức độ ô nhiễm không khí`) & !is.na(`Bệnh hen suyễn`)) %>%
  count(`Mức độ ô nhiễm không khí`, `Bệnh hen suyễn`) %>%
  group_by(`Mức độ ô nhiễm không khí`) %>%
  mutate(perc = n / sum(n) * 100)

ggplot(data_percent6, aes(x = `Mức độ ô nhiễm không khí`, y = perc, fill = `Bệnh hen suyễn`)) +
  geom_col(position = "stack") +
  geom_text(aes(label = paste0(round(perc, 1), "%")),
            position = position_stack(vjust = 0.5),
            color = "black", size = 4) +
  labs(
    title = "Tỷ lệ mắc bệnh hen suyễn theo mức độ ô nhiễm không khí",
    x = "Mức độ ô nhiễm không khí",
    y = "Tỷ lệ phần trăm (%)",
    fill = "Bệnh hen suyễn"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14))

   Mức ô nhiễm cao có tỷ lệ mắc hen suyễn lên đến 30.3%, chênh lệch tương đối so với mức ô nhiễm thấp (19.9%). Điều này gợi ý rằng ô nhiễm không khí cao là yếu tố nguy cơ đối với bệnh hen. Nhìn chung, có mối liên hệ rõ ràng giữa mức độ ô nhiễm và tỷ lệ hen suyễn. Không khí càng ô nhiễm, nguy cơ hen càng cao.

a. Kiểm định Chi-bình phương

   Thực hiện kiểm định Chi-squared nhằm xác định mối liên hệ giữa hai biến (Mức độ ô nhiễm không khí) và (Bệnh hen suyễn) có ý nghĩa thống kê hay không.

Bài toán kiểm định:

  • \(H_0\): Hai biến (Mức độ ô nhiễm không khí) và (Bệnh hen suyễn) độc lập với nhau (không có mối liên hệ).

  • \(H_1\): Hai biến (Mức độ ô nhiễm không khí) và (Bệnh hen suyễn) có mối liên hệ với nhau.

chisq_test6 <- chisq.test(cb6)
print(chisq_test6)
## 
##  Pearson's Chi-squared test
## 
## data:  cb6
## X-squared = 77.1, df = 2, p-value < 2.2e-16

   Với mức ý nghĩa 5%, p - value < 2.2e-16 < 0.05. Bác bỏ giả thuyết \(H_0\). Tức có mối liên hệ giữa hai biến (Mức độ ô nhiễm không khí) và (Bệnh hen suyễn).

b. Tỷ lệ tương đối (Relative Risk - RR) và khoảng tin cậy 95%

   Nhằm đo lường mức độ liên quan giữa hai biến (Mức độ ô nhiễm không khí) và (Bệnh hen suyễn), tác giả thực hiện tính toán tỷ lệ tương đối và khoảng tin cậy 95% đối với từng mức độ ô nhiễm không khí.

p <- data.frame(
  level = c("Thấp", "Trung bình", "Cao"),
  yes = c(593, 1367, 586),   
  no = c(2381, 3728, 1345)     
)

p$total <- p$yes + p$no

# Tính tỷ lệ mắc hen suyễn ở mỗi mức độ 
p$rate <- p$yes / p$total

# Tính RR so với nhóm tham chiếu  
ref_rate <- p$rate[p$level == "Thấp"]

p$RR <- p$rate / ref_rate

# Tính KTC 95% cho RR 
calc_CI <- function(a, b, c, d) {
  rr <- (a / (a + b)) / (c / (c + d))
  se_log_rr <- sqrt((1 / a) - (1 / (a + b)) + (1 / c) - (1 / (c + d)))
  lower <- exp(log(rr) - 1.96 * se_log_rr)
  upper <- exp(log(rr) + 1.96 * se_log_rr)
  return(c(RR = rr, lower = lower, upper = upper))
}

ci_medium <- calc_CI(
  a = p$yes[p$level == "Trung bình"],
  b = p$no[p$level == "Trung bình"],
  c = p$yes[p$level == "Thấp"],
  d = p$no[p$level == "Thấp"]
)

ci_high <- calc_CI(
  a = p$yes[p$level == "Cao"],
  b = p$no[p$level == "Cao"],
  c = p$yes[p$level == "Thấp"],
  d = p$no[p$level == "Thấp"]
)

result_rr <- data.frame(
  Level = c("Thấp (tham chiếu)", "Trung bình", "Cao"),
  RR = c(1, round(ci_medium["RR"], 2), round(ci_high["RR"], 2)),
  "Lower CI" = c(NA, round(ci_medium["lower"], 2), round(ci_high["lower"], 2)),
  "Upper CI" = c(NA, round(ci_medium["upper"], 2), round(ci_high["upper"], 2))
, check.names = FALSE)

library(knitr)
kable(result_rr, caption = "<center>**Bảng ước lượng RR và KTC 95%**</center>", align = "lccc") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng ước lượng RR và KTC 95%
Level RR Lower CI Upper CI
Thấp (tham chiếu) 1.00 NA NA
Trung bình 1.35 1.24 1.47
Cao 1.52 1.38 1.68

Nhận xét

   Trong ba mức độ ô nhiễm không khí, tác giả lựa chọn mức “Thấp” làm mức cơ sở tham chiếu để so sánh nguy cơ mắc hen suyễn của hai nhóm còn lại. Kết quả thu được:

   Mức độ ô nhiễm trung bình có RR = 1.35 cho biết rằng những người sống trong khu vực này có khả năng mắc hen suyễn cao gấp 1.3 lần người sống ở khu vực có mức ô nhiễm thấp hơn. Khoảng tin cậy 95% dao động từ 1.24 đến 1.47 không chứa 1, cho thấy kết quả thực sự có ý nghĩa thống kê.

   Mức độ ô nhiễm cao có RR = 1.52, điều này cho biết những người sống trong khu vực ô nhiễm không khí cao có nguy cơ mắc hen suyễn gấp 1.5 lần so với nhóm ô nhiễm thấp. Ngoài ra, khoảng tin cậy 95% dao động từ 1.38 đến 1.68, không chứa 1, cho thấy kết quả có ý nghĩa thống kê.

   Tóm lại, việc sống trong môi trường ô nhiễm không khí lâu ngày luôn là nguy cơ tiềm ẩn cao dẫn đến mắc bệnh hen suyễn.

c. Tỷ lệ chênh (Odds Ratio - OR) và Khoảng tin cậy 95%

   Tương tự trên, tính toán tỷ lệ chênh OR, tác giả lựa chọn mức “Thấp” làm mức cơ sở tham chiếu để so sánh nguy cơ mắc hen suyễn của hai nhóm còn lại.

# Hàm tính OR và CI 95%
calc_or_ci <- function(a, b, c, d) {
  OR <- (a * d) / (b * c)
  SE_logOR <- sqrt(1/a + 1/b + 1/c + 1/d)
  lower <- exp(log(OR) - 1.96 * SE_logOR)
  upper <- exp(log(OR) + 1.96 * SE_logOR)
  return(c(OR=OR, Lower_95CI=lower, Upper_95CI=upper))
}

# Tham chiếu: Thấp (474, 2510)
a_ref <- 593
b_ref <- 2381

# Tính OR cho Cao
a <- 586
b <- 1345
or_cao <- calc_or_ci(a, b, a_ref, b_ref)

# Tính OR cho Trung bình
a <- 1367
b <- 3728
or_tb <- calc_or_ci(a, b, a_ref, b_ref)

OR_table <- data.frame(
  Level = c("Thấp (tham chiếu)", "Trung bình", "Cao"),
  OR = c(1, round(or_tb[1], 2), round(or_cao[1], 2)),
  "Lower CI" = c(NA, round(or_tb[2], 2), round(or_cao[2], 2)),
  "Upper CI" = c(NA, round(or_tb[3], 2), round(or_cao[3], 2))
, check.names = FALSE)

library(knitr)
kable(OR_table, caption = "<center>**Bảng ước lượng OR và KTC 95%**</center>", align = "lccc") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng ước lượng OR và KTC 95%
Level OR Lower CI Upper CI
Thấp (tham chiếu) 1.00 NA NA
Trung bình 1.47 1.32 1.64
Cao 1.75 1.53 2.00

Nhận xét:

   Mức độ ô nhiễm trung bình có OR = 1.47, (CL 95%: 1.32 - 1.64) cho biết Odds mắc bệnh hen suyễn của nhóm người sống trong khu vực ô nhiễm trung bình cao hơn những người sống trong môi trường ít ô nhiễm hơn là 1.5 lần, khoảng tin cậy 95% không chứa giá trị 1 nên điều này là có ý nghĩa thống kê.

   Mức độ ô nhiễm cao có OR = 1.75, điều này cho biết những người sống trong khu vực ô nhiễm không khí cao có Odds mắc hen cao hơn đến gần 1.8 lần so với khu vực ô nhiễm thấp. CL 95%: 1.53 - 2.00 và kết quả này cũng mang ý nghĩa thống kê.

3.2.7. Mối quan hệ giữa Mức độ hoạt động thể chấtBệnh hen suyễn

   Lập bảng tần số và bn suiểu đồ tầất cho hai biến (Mức độ hoạt động thể chất) và (Bệnh hen suyễn) nhằm xem xét sự phân bổ nguy cơ mắc bệnh hen suyễn của mỗi cá nhân dựa trên các mức hoạt động thể chất khác nhau.

data$"Bệnh hen suyễn" <- factor(data$"Bệnh hen suyễn", levels = c("Có", "Không"))  
data$"Mức độ hoạt động thể chất" <- factor(data$"Mức độ hoạt động thể chất", levels = c("Không vận động", "Có vận động", "Vận động nhiều")) 
cb7 <- table(data$"Mức độ hoạt động thể chất", data$"Bệnh hen suyễn")
ppb7 <- addmargins(cb7)
kable(ppb7,
      caption = "<center>**Bảng Tần số chéo: (`Mức độ hoạt động thể chất`) và (`Bệnh hen suyễn`)**</center>",
      align = "c") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng Tần số chéo: (Mức độ hoạt động thể chất) và (Bệnh hen suyễn)
Không Sum
Không vận động 1381 3644 5025
Có vận động 573 1861 2434
Vận động nhiều 592 1949 2541
Sum 2546 7454 10000
data_percent7 <- data %>%
  filter(!is.na(`Mức độ hoạt động thể chất`) & !is.na(`Bệnh hen suyễn`)) %>%
  count(`Mức độ hoạt động thể chất`, `Bệnh hen suyễn`) %>%
  group_by(`Mức độ hoạt động thể chất`) %>%
  mutate(perc = n / sum(n) * 100)

ggplot(data_percent7, aes(x = `Mức độ hoạt động thể chất`, y = perc, fill = `Bệnh hen suyễn`)) +
  geom_col(position = "stack") +
  geom_text(aes(label = paste0(round(perc, 1), "%")),
            position = position_stack(vjust = 0.5),
            color = "black", size = 4) +
  labs(
    title = "Tỷ lệ mắc bệnh hen suyễn theo mức độ hoạt động thể chất",
    x = "Mức độ hoạt động thể chất",
    y = "Tỷ lệ phần trăm (%)",
    fill = "Bệnh hen suyễn"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14))

   Những người không vận động có tỷ lệ mắc hen suyễn cao nhất (27.5%), cho thấy lối sống ít vận động có thể liên quan đến việc giảm chức năng hô hấp và tăng nguy cơ mắc hen.

   Các nhóm có hoạt động thể chất (nhẹ và nhiều) đều có tỷ lệ mắc hen thấp hơn những cũng không chênh lệch quá nhiều, phản ánh phần nào vai trò tích cực của vận động trong bảo vệ hệ hô hấp và miễn dịch. Tuy nhiên, vận động nhiều, quá sức cũng là nguyên nhân gây ra cơn hen suyễn do gắng sức, nhưng tập thể dục thường xuyên, vừa sức lại có thể giúp kiểm soát bệnh hen suyễn tốt hơn và giảm nguy cơ nhập viện.

a. Kiểm định Chi-bình phương

   Thực hiện kiểm định Chi-squared nhằm xác định mối liên hệ giữa hai biến (Mức độ hoạt động thể chất) và (Bệnh hen suyễn) có ý nghĩa thống kê hay không.

Bài toán kiểm định:

  • \(H_0\): Hai biến (Mức độ hoạt động thể chất) và (Bệnh hen suyễn) độc lập với nhau (không có mối liên hệ).

  • \(H_1\): Hai biến (Mức độ hoạt động thể chất) và (Bệnh hen suyễn) có mối liên hệ với nhau.

chisq_test7 <- chisq.test(cb7)
print(chisq_test7)
## 
##  Pearson's Chi-squared test
## 
## data:  cb7
## X-squared = 21.811, df = 2, p-value = 1.835e-05

   Với mức ý nghĩa 5%, p - value = 1.835e-05 < 0.05. Bác bỏ giả thuyết \(H_0\). Tức có mối liên hệ giữa hai biến (Mức độ hoạt động thể chất) và (Bệnh hen suyễn).

b. Tỷ lệ tương đối (Relative Risk - RR) và khoảng tin cậy 95%

   Nhằm đo lường mức độ liên quan giữa hai biến (Mức độ hoạt động thể chất) và (Bệnh hen suyễn), tác giả thực hiện tính toán tỷ lệ tương đối và khoảng tin cậy 95% đối với từng mức độ vận động.

p1 <- data.frame(
  level = c("Không vận động", "Có vận động", "Vận động nhiều"),
  yes = c(1381, 573, 592),    
  no = c(3644, 1861, 1949)     
)

p1$total <- p1$yes + p1$no

p1$rate <- p1$yes / p1$total

ref_rate1 <- p1$rate[p1$level == "Không vận động"]

p$RR1 <- p1$rate / ref_rate1

calc_CI1 <- function(a1, b1, c1, d1) {
  rr01 <- (a1 / (a1 + b1)) / (c1 / (c1 + d1))
  se_log_rr1 <- sqrt((1 / a1) - (1 / (a1 + b1)) + (1 / c1) - (1 / (c1 + d1)))
  lower1 <- exp(log(rr01) - 1.96 * se_log_rr1)
  upper1 <- exp(log(rr01) + 1.96 * se_log_rr1)
  return(c(RR = rr01, lower = lower1, upper = upper1))
}

ci_medium1 <- calc_CI1(
  a1 = p1$yes[p1$level == "Có vận động"],
  b1 = p1$no[p1$level == "Có vận động"],
  c1 = p1$yes[p1$level == "Không vận động"],
  d1 = p1$no[p1$level == "Không vận động"]
)

ci_high1 <- calc_CI1(
  a1 = p1$yes[p1$level == "Vận động nhiều"],
  b1 = p1$no[p1$level == "Vận động nhiều"],
  c1 = p1$yes[p1$level == "Không vận động"],
  d1 = p1$no[p1$level == "Không vận động"]
)

result_rr1 <- data.frame(
  Level = c("Không vận động (tham chiếu)", "Có vận động", "Vận động nhiều"),
  RR = c(1, round(ci_medium1["RR"], 2), round(ci_high1["RR"], 2)),
  "Lower CI" = c(NA, round(ci_medium1["lower"], 2), round(ci_high1["lower"], 2)),
  "Upper CI" = c(NA, round(ci_medium1["upper"], 2), round(ci_high1["upper"], 2)), check.names = FALSE
)

library(knitr)
kable(result_rr1, caption = "<center>**Bảng ước lượng RR và KTC 95**</center>", align = "lccc") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
                full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng ước lượng RR và KTC 95
Level RR Lower CI Upper CI
Không vận động (tham chiếu) 1.00 NA NA
Có vận động 0.86 0.79 0.93
Vận động nhiều 0.85 0.78 0.92

Nhận xét

   Nhóm “có vận động” và “vận động nhiều” đều có RR < 1, cho thấy vận động thể chất giúp giảm nguy cơ bị hen suyễn so với nhóm người không có hoạt động thể chất.

   Khoảng tin cậy 95% không chứa giá trị 1. Kết quả có ý nghĩa thống kê, và qua đó có thể thấy, vận động thể chất, ngay cả ở mức trung bình, cũng có thể giúp giảm đáng kể nguy cơ mắc bệnh hen suyễn. Việc duy trì thói quen vận động là một yếu tố bảo vệ sức khỏe hô hấp hiệu quả.

c. Tỷ lệ chênh (Odds Ratio - OR) và Khoảng tin cậy 95%

   Tương tự trên, tính toán tỷ lệ chênh OR, tác giả lựa chọn mức “Không vận động” làm mức cơ sở tham chiếu để so sánh nguy cơ mắc hen suyễn của hai nhóm còn lại.

calc_or <- function(a2, b2, c2, d2) {
  OR2 <- (a2 * d2) / (b2 * c2)
  SE_logOR2 <- sqrt(1/a2 + 1/b2 + 1/c2 + 1/d2)
  lower2 <- exp(log(OR2) - 1.96 * SE_logOR2)
  upper2 <- exp(log(OR2) + 1.96 * SE_logOR2)
  return(c(OR=OR2, Lower_95CI=lower2, Upper_95CI=upper2))
}

a_ref2 <- 1381
b_ref2 <- 3644

a2 <- 573
b2 <- 1861
or_cao2 <- calc_or(a2, b2, a_ref2, b_ref2)

a2 <- 592
b2 <- 1949
or_tb2 <- calc_or(a2, b2, a_ref2, b_ref2)

OR_table2 <- data.frame(
  Level = c("Không vận động (tham chiếu)", "Có vận động", "Vận động nhiều"),
  OR = c(1, round(or_tb2[1], 2), round(or_cao2[1], 2)),
  "Lower CI" = c(NA, round(or_tb2[2], 2), round(or_cao2[2], 2)),
  "Upper CI" = c(NA, round(or_tb2[3], 2), round(or_cao2[3], 2)), check.names = FALSE
)

library(knitr)
kable(OR_table2, caption = "<center>**Bảng ước lượng OR và KTC 95%**</center>", align = "lccc") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
                full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng ước lượng OR và KTC 95%
Level OR Lower CI Upper CI
Không vận động (tham chiếu) 1.00 NA NA
Có vận động 0.80 0.72 0.90
Vận động nhiều 0.81 0.73 0.91

Nhận xét:

   Nhóm “Có vận động” có OR = 0.80 , (CL 95%: 0.72 - 0.90) cho biết Odds mắc bệnh hen suyễn của người có vận động thấp hơn Odds của người không vận động và kết quả này có ý nghĩa về mặt thống kê dao động trong khoảng 0.72 đến 0.90. Tương tự, nhóm vận động nhiều ở mức ý nghĩa 5% cũng có odds mắc hen suyễn thấp hơn đến 0.21 lần so với nhóm không vận động.

3.3. CÁC MÔ HÌNH HỒI QUY DỮ LIỆU NHỊ PHÂN

   Dựa vào phân tích mối quan hệ giữa các biến độc lập có nguy cơ ảnh hưởng đến bệnh hen suyễn và có ý nghĩa thống kê, tác giả lựa chọn đưa các biến độc lập phù hợp đưa vào mô hình bao gồm 6 biến định tính: Tình trạng hút thuốc, Lịch sử gia đình, Dị ứng, Mức độ ô nhiễm không khí, Mức độ hoạt động thể chất và 1 biến định lượng: Chỉ số BMIđể thực hiện các hàm hồi quy ước lượng tham số, đánh giá và lựa chọn mô hình phù hợp.

3.3.1 Mô hình hồi quy Logistic

   Mô hình hồi quy logistic được sử dụng nhằm phân tích xác suất Bệnh hen suyễn(Có = 1, Không = 0).

data$"Tình trạng hút thuốc" <- relevel(data$"Tình trạng hút thuốc", ref = "Không hút thuốc") 
data$"Lịch sử gia đình" <- relevel(data$"Lịch sử gia đình", ref = "Không")
data$"Dị ứng" <- relevel(data$"Dị ứng", ref = "Không")

data$"Mức độ ô nhiễm không khí" <- factor(data$"Mức độ ô nhiễm không khí",
                                  levels = c("Thấp", "Trung bình", "Cao"))
data$"Mức độ hoạt động thể chất" <- factor(data$"Mức độ hoạt động thể chất",
                                  levels = c("Có vận động", "Không vận động", "Vận động nhiều"))


data$"Bệnh hen suyễn" <- factor(data$"Bệnh hen suyễn", levels = c('Không','Có'))

reglogit <- glm(`Bệnh hen suyễn` ~ `Tình trạng hút thuốc` + `Lịch sử gia đình` + `Dị ứng` + `Chỉ số BMI` + `Mức độ ô nhiễm không khí` + `Mức độ hoạt động thể chất`, data = data, family = binomial(link = 'logit')) 
summary(reglogit)
## 
## Call:
## glm(formula = `Bệnh hen suyễn` ~ `Tình trạng hút thuốc` + 
##     `Lịch sử gia đình` + `Dị ứng` + `Chỉ số BMI` + 
##     `Mức độ ô nhiễm không khí` + `Mức độ hoạt động thể chất`, 
##     family = binomial(link = "logit"), data = data)
## 
## Coefficients:
##                                           Estimate Std. Error z value Pr(>|z|)
## (Intercept)                               -1.81056    0.28137  -6.435 1.24e-10
## `Tình trạng hút thuốc`Có hút thuốc         0.78739    0.04872  16.163  < 2e-16
## `Lịch sử gia đình`Có                       0.45360    0.04959   9.147  < 2e-16
## `Dị ứng`Có                                 0.55406    0.04754  11.654  < 2e-16
## `Chỉ số BMI`                              -0.01560    0.01189  -1.312 0.189482
## `Mức độ ô nhiễm không khí`Trung bình       0.41101    0.05715   7.192 6.39e-13
## `Mức độ ô nhiễm không khí`Cao              0.57617    0.06935   8.308  < 2e-16
## `Mức độ hoạt động thể chất`Không vận động  0.24535    0.06937   3.537 0.000405
## `Mức độ hoạt động thể chất`Vận động nhiều -0.04774    0.07260  -0.658 0.510830
##                                              
## (Intercept)                               ***
## `Tình trạng hút thuốc`Có hút thuốc        ***
## `Lịch sử gia đình`Có                      ***
## `Dị ứng`Có                                ***
## `Chỉ số BMI`                                 
## `Mức độ ô nhiễm không khí`Trung bình      ***
## `Mức độ ô nhiễm không khí`Cao             ***
## `Mức độ hoạt động thể chất`Không vận động ***
## `Mức độ hoạt động thể chất`Vận động nhiều    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 11347  on 9999  degrees of freedom
## Residual deviance: 10770  on 9991  degrees of freedom
## AIC: 10788
## 
## Number of Fisher Scoring iterations: 4
or_reglogit <- exp(coef(reglogit))

library(knitr)
library(dplyr)

or_table <- data.frame(
  Biến = names(or_reglogit),
  "Odds Ratio" = round(as.numeric(or_reglogit), 3), check.names = FALSE
)

kable(or_table, caption = "<center>**Bảng Odds Ratio từ mô hình**</center>", align = 'lc') %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
                full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng Odds Ratio từ mô hình
Biến Odds Ratio
(Intercept) 0.164
Tình trạng hút thuốcCó hút thuốc 2.198
Lịch sử gia đình 1.574
Dị ứng 1.740
Chỉ số BMI 0.985
Mức độ ô nhiễm không khíTrung bình 1.508
Mức độ ô nhiễm không khíCao 1.779
Mức độ hoạt động thể chấtKhông vận động 1.278
Mức độ hoạt động thể chấtVận động nhiều 0.953

Mô hình Logit có dạng:

\(logit(\pi)\) = -1.81056 + 0.78739Tình trạng hút thuốc + 0.45360Lịch sử gia đình + 0.55406Dị ứng - 0.01560Chỉ số BMI + 0.41101Mức độ ô nhiễm trung bình + 0.57617Mức độ ô nhiễm cao + 0.24535Không vận động - 0.04774Vận động nhiều.

   Để đảm bảo ước lượng hệ số có độ chính xác, phương sai nhỏ. Tác giả thực hiện kiểm định đa cộng tuyến đối với các biến độc lập trong mô hình nhằm xác định mối tương quan tuyến tính của chúng.

  • Kiểm định đa cộng tuyến
library(knitr)

vif_table <- data.frame(
  Variable = c("Tình trạng hút thuốc", "Lịch sử gia đình", "Dị ứng", 
               "Chỉ số BMI", "Mức độ ô nhiễm không khí", "Mức độ hoạt động thể chất"),
  GVIF = c(1.254150, 3.895524, 2.367237, 1.175053, 3.312194, 3.303778),
  Df = c(1, 1, 1, 1, 2, 2),
  `GVIF^(1/(2*Df))` = c(1.119888, 1.973708, 1.538583, 1.083999, 1.349053, 1.348195), check.names = FALSE
)

names(vif_table)[4] <- "$GVIF^{1/(2 \\cdot df)}$"

kable(vif_table,
      align = "lc",
      caption = "<center><b>Bảng: Kiểm định đa cộng tuyến trong mô hình Logit</b></center>") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
                full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng: Kiểm định đa cộng tuyến trong mô hình Logit
Variable GVIF Df \(GVIF^{1/(2 \cdot df)}\)
Tình trạng hút thuốc 1.254150 1 1.119888
Lịch sử gia đình 3.895524 1 1.973708
Dị ứng 2.367237 1 1.538583
Chỉ số BMI 1.175053 1 1.083999
Mức độ ô nhiễm không khí 3.312194 2 1.349053
Mức độ hoạt động thể chất 3.303778 2 1.348195

   Dựa trên bảng kiểm định đa cộng tuyến, tất cả các biến độc lập trong mô hình đều có chỉ số vif nhỏ hơn 2. Giá trị này cho thấy không có hiện tượng đa cộng tuyến nghiêm trọng giữa các biến giải thích. Vì vậy, mô hình hồi quy logistic được xây dựng là ổn định về mặt tuyến tính giữa các biến độc lập. Tác giả giữ lại toàn bộ các biến trong mô hình và giải thích các ước lượng tham số như sau:

Nhận xét:

   Hệ số của biến Tình trạng hút thuốc = 0.787, tức OR = 2.198 cho thấy người sử dụng thuốc lá làm tăng tỷ lệ mắc bệnh hen. Khi các yếu tố khác không đổi, những hút thuốc có odds bị hen suyễn cao gấp khoảng 2 lần so với những người không hút thuốc. Mối liên hệ này có ý nghĩa thống kê vì p-value < 2e-16 < 0.05.

   Hệ số của biến Lịch sử gia đình = 0.454, tức OR = 1.5741 cho thấy việc có người thân từng mắc hen suyễn sẽ làm tăng tỷ lệ mắc bệnh hen. Khi các yếu tố khác không đổi, những người này có odds mắc hen suyễn cao gấp khoảng 1.5 lần so với nhóm còn lại. Đây là một yếu tố nguy cơ mạnh mẽ trong mẫu nghiên cứu này và có ý nghĩa thống kê bởi p-value = 1.24e-10 < 0.05.

   Hệ số của biến Dị ứng = 6.011, tức OR = 408.02 cho thấy việc dị ứng làm tăng tỷ lệ mắc hen suyễn. Khi các yếu tố khác không đổi, những người có ít nhất một dị ứng liên quan có odds mắc hen suyễn cao gấp 408.2 lần so với những người bình thường. Tương tự, mối liên hệ này có ý nghĩa thống kê vì p-value < 2e-16 < 0.05 và là một yếu tố nguy cơ mạnh mẽ trong mẫu nghiên cứu này.

   Hệ số của biến Mức độ ô nhiễm không khí: Trung bình = 0.41101, tức OR = 1.508. Giữ nguyên các yếu tố khác, những người sống ở khu vực có mức độ ô nhiễm không khí trung bình có odds bị hen suyễn cao gấp khoảng 1.5 lần so với những người sống ở khu vực có mức độ ô nhiễm không khí thấp. Tương tự điều này có ý nghĩa thống kê rất cao khi p-value = 6.39e-13 < 0.05.

   Hệ số của biến Mức độ ô nhiễm không khí: Cao = 0.57617, tức OR = 1.779. Giữ nguyên các yếu tố khác, những người sống ở khu vực có mức độ ô nhiễm không khí cao có odds bị hen suyễn cao gấp khoảng 1.8 lần so với những người sống ở khu vực có mức độ ô nhiễm không khí thấp. Tương tự điều này có ý nghĩa thống kê rất cao khi p-value < 2e-16 < 0.05.

   Hệ số của biến Mức hoạt động thể chất: Không vận động = 0.24535, tức OR = 1.278. Khi các yếu tố khác không đổi, những người không vận động thể chất có odđs bị hen suyễn cao gấp khoảng 1.3 lần so với những người có mức độ hoạt động thể chất vừa phải. Mối quan hệ này có ý nghĩa thống kê vì p-value = 0.0004 < 0.05.

   Sau khi thực hiện hàm hồi quy logit, kết quả nhận được phản ánh biến giả đưa vào mô hình nhằm giải thích, so sánh với mức tham chiếu của biến Mức hoạt động thể chất và biến Chỉ số BMI không có ý nghĩa thống kê vì p- value > 0.05.

3.3.2 Mô hình hồi quy Probit

   Tương tự, nhằm phân tích xác suất Bệnh hen suyễn(Có = 1, Không = 0) dựa trên các biến độc lập, nhưng dựa trên hồi quy probit.

data$"Tình trạng hút thuốc" <- relevel(data$"Tình trạng hút thuốc", ref = "Không hút thuốc") 
data$"Lịch sử gia đình" <- relevel(data$"Lịch sử gia đình", ref = "Không")
data$"Dị ứng" <- relevel(data$"Dị ứng", ref = "Không")

data$"Mức độ ô nhiễm không khí" <- factor(data$"Mức độ ô nhiễm không khí",
                                  levels = c("Thấp", "Trung bình", "Cao"))
data$"Mức độ hoạt động thể chất" <- factor(data$"Mức độ hoạt động thể chất",
                                  levels = c("Có vận động", "Không vận động", "Vận động nhiều"))


data$"Bệnh hen suyễn" <- factor(data$"Bệnh hen suyễn", levels = c('Không','Có'))

regprobit <- glm(`Bệnh hen suyễn` ~ `Tình trạng hút thuốc` + `Lịch sử gia đình` + `Dị ứng` + `Chỉ số BMI` + `Mức độ ô nhiễm không khí` + `Mức độ hoạt động thể chất`, data = data, family = binomial(link = 'probit')) 
summary(regprobit)
## 
## Call:
## glm(formula = `Bệnh hen suyễn` ~ `Tình trạng hút thuốc` + 
##     `Lịch sử gia đình` + `Dị ứng` + `Chỉ số BMI` + 
##     `Mức độ ô nhiễm không khí` + `Mức độ hoạt động thể chất`, 
##     family = binomial(link = "probit"), data = data)
## 
## Coefficients:
##                                            Estimate Std. Error z value Pr(>|z|)
## (Intercept)                               -1.097764   0.165074  -6.650 2.93e-11
## `Tình trạng hút thuốc`Có hút thuốc         0.471098   0.029066  16.208  < 2e-16
## `Lịch sử gia đình`Có                       0.270631   0.029459   9.187  < 2e-16
## `Dị ứng`Có                                 0.329216   0.028047  11.738  < 2e-16
## `Chỉ số BMI`                              -0.008939   0.006985  -1.280 0.200590
## `Mức độ ô nhiễm không khí`Trung bình       0.244860   0.033027   7.414 1.23e-13
## `Mức độ ô nhiễm không khí`Cao              0.342482   0.040668   8.421  < 2e-16
## `Mức độ hoạt động thể chất`Không vận động  0.143862   0.040619   3.542 0.000397
## `Mức độ hoạt động thể chất`Vận động nhiều -0.033198   0.042331  -0.784 0.432900
##                                              
## (Intercept)                               ***
## `Tình trạng hút thuốc`Có hút thuốc        ***
## `Lịch sử gia đình`Có                      ***
## `Dị ứng`Có                                ***
## `Chỉ số BMI`                                 
## `Mức độ ô nhiễm không khí`Trung bình      ***
## `Mức độ ô nhiễm không khí`Cao             ***
## `Mức độ hoạt động thể chất`Không vận động ***
## `Mức độ hoạt động thể chất`Vận động nhiều    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 11347  on 9999  degrees of freedom
## Residual deviance: 10765  on 9991  degrees of freedom
## AIC: 10783
## 
## Number of Fisher Scoring iterations: 4

Mô hình Probit có dạng:

\(\hat\pi\) = \(\phi\)( -1.097764 + 0.471098 Tình trạng hút thuốc + 0.270631Lịch sử gia đình + 0.329216 - 0.008939BMI + 0.244860TB + 0.342482Cao + 0.143862KVĐ - 0.033198VĐN)

  • Kiểm định đa cộng tuyến
library(knitr)

vif_probit <- data.frame(
  Biến = c("Tình trạng hút thuốc", "Lịch sử gia đình", "Dị ứng",
           "Chỉ số BMI", "Mức độ ô nhiễm không khí", "Mức độ hoạt động thể chất"),
  GVIF = c(1.275644, 2.927756, 1.914315, 1.168671, 2.554191, 2.423961),
  Df = c(1, 1, 1, 1, 2, 2),
  `GVIF^(1/(2*Df))` = c(1.129444, 1.711069, 1.383588, 1.081051, 1.264193, 1.247761), check.names = FALSE
)

names(vif_probit)[4] <- "$GVIF^{1/(2 \\cdot df)}$"

kable(vif_probit,
      align = "lc",
      caption = "<center><b>Bảng: Kiểm định đa cộng tuyến trong mô hình Probit</b></center>") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
                full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng: Kiểm định đa cộng tuyến trong mô hình Probit
Biến GVIF Df \(GVIF^{1/(2 \cdot df)}\)
Tình trạng hút thuốc 1.275644 1 1.129444
Lịch sử gia đình 2.927756 1 1.711069
Dị ứng 1.914315 1 1.383588
Chỉ số BMI 1.168671 1 1.081051
Mức độ ô nhiễm không khí 2.554191 2 1.264193
Mức độ hoạt động thể chất 2.423961 2 1.247761

   Mô hình Probit không có dấu hiệu đa cộng tuyến, các biến độc lập đều thể hiện mức độ tương quan thấp với nhau. Vì vậy, tác giả giữ lại toàn bộ các biến trong mô hình và giải thích các ước lượng tham số như sau:

Nhận xét:

   Hệ số của biến Tình trạng hút thuốc= 0.471. Khi các yếu tố khác không đổi, việc sử dụng thuốc lá làm tăng khả năng mắc bệnh hen suyễn.

   Hệ số của biến Lịch sử gia đình = 0.271, khi các yếu tố khác không đổi thì người có tiền sử người thân từng mắc hen suyễn sẽ làm tăng khả năng mắc bệnh hen suyễn.

   Hệ số của biến Dị ứng = 0.329, khi các yếu tố khác không đổi, người bị dị ứng với ít nhất một yếu tố liên quan sẽ làm tăng khả năng mắc hen.

   Hệ số của biến Mức độ ô nhiễm không khí: Trung bình = 0.245, khi các yếu tố khác không đổi, khả năng mắc hen của người tiếp xúc môi trường không khí ô nhiễm trung bình cao hơn so với người tiếp xúc môi trường ô nhiễm không khí thấp.

   Hệ số của biến Mức độ ô nhiễm không khí: Cao = 0.342, khi các yếu tố khác không đổi, khả năng mắc hen của người tiếp xúc môi trường không khí ô nhiễm cao cao hơn so với người tiếp xúc môi trường ô nhiễm không khí thấp.

   Hệ số của biến Mức hoạt động thể chất: Không vận động = 0.144, khi các yếu tố khác không đổi, khả năng mắc hen của người không vận động sẽ cao hơn so với người có vận động thể chất vừa phải.

   Tương tự kết quả hồi quy logit, sau khi thực hiện hàm hồi quy Probit, kết quả nhận được cho thấy biến giả đưa vào mô hình nhằm giải thích, so sánh với mức tham chiếu của biến Mức hoạt động thể chấtChỉ số BMI không có ý nghĩa thống kê vì p- value > 0.05 và tất cả các biến còn lại đều có ý nghĩa thống kê ở mức 5% đối với khả năng mắc bệnh hen suyễn.

3.3.4 Đánh giá mô hình

  • Tiêu chuẩn AIC và Brier Score

   Tác giả so sánh các mô hình qua chỉ số AIC và Brier Score nhằm xác định mô hình phù hợp nhất với dữ liệu.

aic_vl <- c(Logit = AIC(reglogit),
         Probit = AIC(regprobit))

library(DescTools)
brierS <- c(Logit = BrierScore(reglogit),
            Probit = BrierScore(regprobit))

comparison_df <- data.frame(
  Model       = c("Logistic", "Probit"),
  AIC         = round(aic_vl, 2),
  "Brier Score" = round(brierS, 4), check.names = FALSE
)

kable(comparison_df,
      caption = "<center><b>Bảng so sánh chỉ số AIC và Brier Score giữa mô hình Logistic và Probit</b></center>",
      align = "c") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Bảng so sánh chỉ số AIC và Brier Score giữa mô hình Logistic và Probit
Model AIC Brier Score
Logit Logistic 10787.95 0.1791
Probit Probit 10782.61 0.1790

Nhận xét

   Mô hình Probit có giá trị AIC là 10782.61, thấp hơn so với mô hình Logistic với AIC là 10787.95. Điều này cho thấy mô hình Probit có mức độ phù hợp với dữ liệu tốt hơn. Bên cạnh đó, chỉ số Brier Score đo lường độ chính xác của dự báo xác suất của mô hình Probit là 0.1790, cũng thấp hơn so với 0.1791 của mô hình Logistic. Tuy nhiên, sự chênh lệch này không đáng kể, hai mô hình đếu xấp xỉ rất ít.

  • Ma trận nhằm lẫn
library(dplyr)
library(knitr)
library(kableExtra)
library(scales)  # để dùng comma()

# Hàm tính ma trận nhầm lẫn
get_confusion_matrix <- function(model, data, threshold = 0.5) {
  predicted_probs <- predict(model, newdata = data, type = "response")
  predicted_class <- ifelse(predicted_probs >= threshold, 1, 0)
  actual_class <- as.numeric(data$`Bệnh hen suyễn`) - 1
  table(Predicted = predicted_class, Actual = actual_class)
}

# Ma trận cho từng mô hình
cm_logit <- get_confusion_matrix(reglogit, data)
cm_probit <- get_confusion_matrix(regprobit, data)

# Thành data frame
cm_logit_df <- as.data.frame.matrix(cm_logit)
cm_logit_df$`Dự đoán` <- rownames(cm_logit_df)
cm_logit_df$`Mô hình` <- "Logistic"

cm_probit_df <- as.data.frame.matrix(cm_probit)
cm_probit_df$`Dự đoán` <- rownames(cm_probit_df)
cm_probit_df$`Mô hình` <- "Probit"

# Gộp và chỉnh thứ tự
cm_combined <- bind_rows(cm_logit_df, cm_probit_df)
colnames(cm_combined)[1:2] <- c("Thực tế: 0", "Thực tế: 1")
cm_combined <- cm_combined[, c("Mô hình", "Dự đoán", "Thực tế: 0", "Thực tế: 1")]

# Format số có dấu phẩy
cm_combined <- cm_combined %>%
  mutate(
    `Thực tế: 0` = comma(`Thực tế: 0`),
    `Thực tế: 1` = comma(`Thực tế: 1`)
  )

# Hiển thị bảng
kable(cm_combined,
      caption = "<center><b>So sánh ma trận nhầm lẫn của mô hình Logistic và Probit</b></center>",
      align = "c", format = "html") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = T, position = "center") %>%
  row_spec(0, bold = TRUE)
So sánh ma trận nhầm lẫn của mô hình Logistic và Probit
Mô hình Dự đoán Thực tế: 0 Thực tế: 1
0…1 Logistic 0 7,322 2,411
1…2 Logistic 1 132 135
0…3 Probit 0 7,335 2,419
1…4 Probit 1 119 127
# Hàm tính toán các chỉ số từ ma trận nhầm lẫn (dạng table)
calculate_metrics_from_cm <- function(cm_table) {
  # Đảm bảo ma trận là 2x2
  if (nrow(cm_table) != 2 || ncol(cm_table) != 2) {
    stop("Ma trận nhầm lẫn phải là 2x2 với Predicted và Actual.")
  }

  TN <- cm_table["0", "0"] # True Negative: Thực tế 0, Dự đoán 0
  FP <- cm_table["0", "1"] # False Positive: Thực tế 0, Dự đoán 1
  FN <- cm_table["1", "0"] # False Negative: Thực tế 1, Dự đoán 0
  TP <- cm_table["1", "1"] # True Positive: Thực tế 1, Dự đoán 1

  # Tính toán các chỉ số đánh giá
  accuracy <- (TP + TN) / sum(cm_table)
  sensitivity <- TP / (TP + FN) 
  specificity <- TN / (TN + FP) 
  precision <- TP / (TP + FP)   
  neg_pred_value <- TN / (TN + FN) 

  # Xử lý trường hợp Precision + Recall = 0 để tránh NaN
  f1_score <- if (is.nan(2 * (precision * sensitivity) / (precision + sensitivity))) {
    0
  } else {
    2 * (precision * sensitivity) / (precision + sensitivity)
  }

  data.frame(
    Accuracy = round(accuracy, 4),
    Sensitivity = round(sensitivity, 4),
    Specificity = round(specificity, 4),
    Precision = round(precision, 4),
    Neg_Pred_Value = round(neg_pred_value, 4),
    F1_Score = round(f1_score, 4)
  )
}

# Áp dụng hàm cho ma trận nhầm lẫn của mô hình Logistic và Probit
metrics_logit <- calculate_metrics_from_cm(cm_logit)
metrics_probit <- calculate_metrics_from_cm(cm_probit)

# Thêm cột tên mô hình để dễ dàng so sánh
metrics_logit$Model <- "Logistic"
metrics_probit$Model <- "Probit"

# Gộp kết quả của hai mô hình vào một bảng duy nhất
metrics_combined <- rbind(metrics_logit, metrics_probit)

# Sắp xếp lại các cột để tên mô hình hiển thị ở đầu bảng
metrics_combined <- metrics_combined %>%
  dplyr::select(Model, everything())


kable(metrics_combined,
      caption = "<center><b>**Bảng 2: Các chỉ số đánh giá hiệu suất của mô hình Logistic và Probit**</b></center>",
      align = "c") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), 
                full_width = TRUE,                         
                position = "center") %>%                     
  row_spec(0, bold = TRUE)                                
Bảng 2: Các chỉ số đánh giá hiệu suất của mô hình Logistic và Probit
Model Accuracy Sensitivity Specificity Precision Neg_Pred_Value F1_Score
Logistic 0.7457 0.5056 0.7523 0.0530 0.9823 0.096
Probit 0.7462 0.5163 0.7520 0.0499 0.9840 0.091

Nhận xét

   Bảng ma trận nhầm lẫn so sánh hiệu quả của hai mô hình dự đoán bệnh hen suyễn là Logistic và Probit dựa trên khả năng phân loại đúng hoặc sai giữa người mắc và không mắc bệnh. Với mô hình Logistic, số lượng người không mắc bệnh được dự đoán đúng là 7.322 trường hợp, trong khi số ca mắc bệnh được dự đoán đúng là 135. Tuy nhiên, mô hình này cũng nhầm lẫn tới 2.411 người mắc bệnh thành không mắc. Trong khi đó, mô hình Probit có số ca không mắc được dự đoán đúng là 7.335 và ca mắc được dự đoán đúng là 127, cho thấy độ chính xác khá tương đương. Probit nhầm lẫn nhiều hơn với 2.419 người mắc nhưng bị đoán sai thành không mắc. Nhìn chung, Logistic tỏ ra nhỉnh hơn một chút trong việc phát hiện đúng người mắc bệnh, tuy nhiên cả hai mô hình đều mắc nhiều lỗi khi phân loại người bệnh,

   Bảng 2 trình bày các chỉ số đánh giá hiệu suất của hai mô hình hồi quy nhị phân Logistic và Probit trong việc dự đoán bệnh hen suyễn. Cả hai mô hình đều có độ chính xác tổng thể khá cao với Accuracy xấp xỉ 74.6%, cho thấy khả năng phân loại khá tốt. Về khả năng phát hiện đúng ca mắc bệnh (Sensitivity), Probit nhỉnh hơn một chút với 51.63% so với 50.56% của Logistic. Tuy nhiên, Logistic lại có độ chính xác trong dự đoán ca mắc bệnh (Precision) cao hơn, đạt 5.30% so với 4.99% của Probit. Chỉ số đặc hiệu (Specificity) giữa hai mô hình là tương đương, ở mức khoảng 75.2%, cho thấy cả hai đều giỏi trong việc xác định người không mắc bệnh. Với Negative Predictive Value lên đến 98%, cả hai mô hình có độ tin cậy cao khi dự đoán người không mắc bệnh. Mặc dù chỉ số F1-Score của cả hai đều thấp, Logistic (9.6%) vẫn nhỉnh hơn Probit (9.1%), phản ánh sự cân bằng tốt hơn giữa độ nhạy và độ chính xác trong phân loại ca mắc. Nhìn chung, mô hình Logistic có ưu thế nhẹ về độ chính xác trong dự đoán ca bệnh, trong khi Probit lại nhạy hơn một chút trong việc phát hiện người bệnh.

CHƯƠNG 4. KẾT LUẬN VÀ HẦM Ý CHÍNH SÁCH

4.1. Kết luận

   Nghiên cứu đã xác định rõ mối quan hệ có ý nghĩa thống kê giữa nhiều yếu tố nhân khẩu học, hành vi sức khỏe và môi trường với nguy cơ mắc bệnh hen suyễn. Cụ thể, các yếu tố như dị ứng, lịch sử gia đình từng mắc bệnh, tình trạng hút thuốc lá, mức độ ô nhiễm không khí cao và lối sống ít vận động đều có ảnh hưởng đáng kể. Qua so sánh hiệu suất giữa mô hình hồi quy logistic và probit, mô hình Probit cho thấy khả năng phù hợp hơn đối với bộ dữ liệu này.

   Bệnh hen suyễn là một bệnh hô hấp mãn tính có ảnh hưởng lâu dài đến sức khỏe cá nhân và cộng đồng. Dựa trên bộ dữ liệu gồm 10.000 quan sát từ nguồn mô phỏng “Synthetic Asthma” và các phương pháp phân tích định lượng như thống kê mô tả, kiểm định Chi bình phương, tỷ lệ tương đối (RR), tỷ lệ chênh (OR), và mô hình hồi quy nhị phân, nghiên cứu đã đưa ra những phát hiện quan trọng.

   Tỷ lệ mắc bệnh hen suyễn trong mẫu nghiên cứu là 25.5%, phản ánh mức độ phổ biến của bệnh trong cộng đồng và cho thấy đây là vấn đề y tế cần được ưu tiên quan tâm. Qua các phân tích kiểm định, nghiên cứu xác định được rằng các yếu tố có ảnh hưởng rõ rệt và mang ý nghĩa thống kê đến nguy cơ mắc bệnh gồm: tiền sử dị ứng, lịch sử gia đình mắc hen suyễn, tình trạng hút thuốc, mức độ ô nhiễm không khí và mức độ hoạt động thể chất.

   So sánh giữa mô hình hồi quy logistic và probit cho thấy mô hình Probit có hiệu suất dự báo tốt hơn với giá trị AIC và Brier Score thấp hơn những mức chênh lệch giữa hai mô hình ganf như rất nhỏ. Ma trận nhầm lẫn cũng cho thấy mô hình Probit có độ chính xác tốt hơn, với tỷ lệ phân loại đúng các trường hợp ở khía cạnh không mắc bệnh hen là khá cao. Nhìn chung, nghiên cứu đã đạt được mục tiêu đề ra: xác định, đo lường và lượng hóa mức độ ảnh hưởng của các yếu tố cá nhân, hành vi, và môi trường đến bệnh hen suyễn.

4.2. Hàm ý chính sách

   Từ các kết quả phân tích, nghiên cứu đưa ra một số khuyến nghị chính sách nhằm giảm thiểu nguy cơ mắc bệnh hen suyễn và nâng cao chất lượng sống cho người dân.

   Thứ nhất, cần tăng cường tuyên truyền thay đổi hành vi sức khỏe như hạn chế thuốc lá và thúc đẩy vận động thể chất thường xuyên.

   Thứ hai, các cơ quan chức năng nên đẩy mạnh kiểm soát ô nhiễm môi trường, đặc biệt là không khí, thông qua các quy định về giao thông, công nghiệp và phát triển đô thị xanh.

   Thứ ba, hệ thống y tế cần triển khai các chương trình sàng lọc nguy cơ cho nhóm người có tiền sử dị ứng hoặc gia đình có người mắc hen suyễn, từ đó can thiệp sớm và giảm thiểu rủi ro.

   Cuối cùng, việc ứng dụng phân tích dữ liệu vào hệ thống giám sát bệnh hô hấp sẽ là nền tảng quan trọng phục vụ dự báo, kiểm soát và phân bổ nguồn lực y tế hợp lý hơn.

4.3. Hạn chế

   Mặc dù mô hình được lựa chọn có độ phù hợp và chính xác, tuy nhiên nghiên cứu vẫn còn một số hạn chế nhất định.

   Trước hết, dữ liệu chưa có độ tin cậy cao mặc dù được lấy trên các trang web lớn, có thể đây chỉ là một bộ dữ liệu mô phỏng hoặc khảo sát cắt ngang, không phản ánh đầy đủ đặc điểm thực tế của các nhóm khảo sát cụ thể, do đó hạn chế tính khái quát.

   Kế đến, nghiên cứu chưa khai thác các biến định lượng bổ sung như tần suất cơn hen, thời gian tiếp xúc với chất dị ứng hoặc mức độ tiếp cận y tế và kể cả chưa có yếu tố can thiệp điều trị hoặc dữ liệu lâm sàng được đưa vào mô hình, trong khi đây là những thành phần quan trọng trong nghiên cứu bệnh lý hô hấp mạn tính. Do đó, các kết quả cần được xác nhận thêm qua các nghiên cứu thực nghiệm hoặc dữ liệu thực tế từ cộng đồng.

   Ngoài ra, mô hình chỉ dự đoán đúng những người không mắc bệnh, nhưng lại nhầm lẫn lượng lớn người mắc thành không mắc. Để cải thiện khả năng xử lý ca mắc bệnh, cần xem xét điều chỉnh ngưỡng phân loại, cân bằng dữ liệu, hoặc áp dụng các mô hình nâng cao hơn.

   Cuối cùng, bài nghiên cứu chỉ mới sử dụng một phần các kiểm định, chỉ số đánh giá mô hình, chưa hoàn toàn đáp ứng tất cả các phương pháp có thể áp dụng cho dữ liệu có biến phụ thuộc là nhị phân như bệnh hen suyễn.