Bệnh tim mạch là một trong những nguyên nhân gây tử vong hàng đầu trên toàn cầu, chiếm tỷ lệ cao trong tổng số ca tử vong do bệnh không lây nhiễm. Theo Tổ chức Y tế Thế giới (WHO), mỗi năm có khoảng 17,9 triệu người tử vong vì các bệnh lý liên quan đến tim mạch, tương đương với 32% tổng số ca tử vong trên toàn thế giới. Trong bối cảnh đó, việc nhận diện sớm các yếu tố nguy cơ có ý nghĩa đặc biệt quan trọng trong công tác phòng ngừa và điều trị bệnh.
Tại Việt Nam, cùng với sự gia tăng của tuổi thọ, lối sống ít vận động, chế độ ăn không lành mạnh và tỷ lệ béo phì tăng cao, số lượng bệnh nhân mắc các bệnh tim mạch ngày càng có xu hướng gia tăng, đặc biệt ở nhóm dân số trưởng thành và người cao tuổi. Vì vậy, việc nghiên cứu, phân tích và xác định các yếu tố ảnh hưởng đến nguy cơ mắc bệnh tim là một yêu cầu cấp thiết, không chỉ có giá trị trong lĩnh vực y tế dự phòng mà còn góp phần hỗ trợ hoạch định chính sách y tế công cộng.
Xuất phát từ thực tiễn đó, đề tài “Phân tích các yếu tố ảnh hưởng đến nguy cơ mắc bệnh tim” được lựa chọn nhằm mục tiêu ứng dụng các phương pháp phân tích định lượng, cụ thể là mô hình hồi quy logistic nhị phân, để xác định những biến số quan trọng có ảnh hưởng đến khả năng mắc bệnh. Kết quả của nghiên cứu không chỉ góp phần làm rõ mối liên hệ giữa các yếu tố nhân khẩu học, sinh lý học và hành vi với bệnh tim, mà còn có thể cung cấp cơ sở dữ liệu tham khảo hữu ích cho các chương trình can thiệp sức khỏe cộng đồng trong tương lai.
Mục tiêu của nghiên cứu này là xác định và phân tích các yếu tố có liên quan đến nguy cơ mắc bệnh tim ở người trưởng thành, từ đó góp phần cung cấp cơ sở khoa học cho các chiến lược phòng ngừa và can thiệp sớm. Thông qua việc nhận diện các đặc điểm nhân khẩu học và lối sống có liên quan đến bệnh tim, nghiên cứu hướng đến việc nâng cao nhận thức cộng đồng và hỗ trợ quá trình ra quyết định trong lĩnh vực y tế và chăm sóc sức khỏe.
Phương pháp dữ liệu định tính và phương pháp xử lý số liệu bằng thống kê toán học: Để hiểu rõ các yếu tố có thể ảnh hưởng đến nguy cơ mắc bệnh tim, tác giả tiến hành phân tích dữ liệu bằng phương pháp thống kê toán học. Các thông tin định tính như giới tính hay tiền sử bệnh lý sẽ được tổng hợp, mã hóa và xử lý kết hợp với các biến định lượng như tuổi, chỉ số đường huyết hay BMI. Những thông số liên quan đến tần suất, phân bố, mối liên hệ và mức độ ảnh hưởng giữa các biến sẽ được phân tích. Phần mềm R – công cụ phổ biến và hiệu quả trong phân tích dữ liệu – được sử dụng để đảm bảo độ chính xác và khách quan trong quá trình xử lý và diễn giải kết quả.
Bệnh tim, hay còn gọi là bệnh tim mạch (cardiovascular disease), là một thuật ngữ chung để chỉ các rối loạn ảnh hưởng đến cấu trúc và chức năng của tim cũng như hệ mạch máu. Đây là một trong những nguyên nhân hàng đầu gây tử vong trên toàn cầu, đặc biệt tại các quốc gia có thu nhập trung bình và cao. Bệnh tim bao gồm nhiều loại bệnh lý khác nhau như bệnh mạch vành, suy tim, loạn nhịp tim, và bệnh van tim. Các yếu tố nguy cơ phổ biến dẫn đến bệnh tim bao gồm tăng huyết áp, rối loạn lipid máu, tiểu đường, béo phì, hút thuốc lá, lối sống ít vận động và chế độ ăn không lành mạnh. Việc nhận diện và kiểm soát sớm các yếu tố nguy cơ có vai trò then chốt trong việc phòng ngừa và làm chậm tiến trình phát triển của bệnh.
Relative Risk (RR), hay còn gọi là nguy cơ tương đối, là một chỉ số thống kê được sử dụng phổ biến trong các nghiên cứu dịch tễ học và y học để so sánh khả năng xảy ra một sự kiện (thường là bệnh tật hoặc kết cục bất lợi) giữa hai nhóm: nhóm phơi nhiễm và nhóm không phơi nhiễm với một yếu tố nguy cơ cụ thể.
Công thức, giả sử một nghiên cứu gồm hai nhóm:
Nhóm phơi nhiễm (exposed): số người mắc bệnh là a, số người không mắc bệnh là b
Nhóm không phơi nhiễm (non-exposed): số người mắc bệnh là c, số người không mắc bệnh là d
Ta xây dựng bảng 2x2 như sau:
| Mắc bệnh (Event = 1) | Không mắc bệnh (Event = 0) | Tổng | |
|---|---|---|---|
| Phơi nhiễm | a | b | a + b |
| Không phơi nhiễm | c | d | c + d |
Khi đó, nguy cơ mắc bệnh ở nhóm phơi nhiễm là:
\[ P_{\text{exposed}} = \frac{a}{a + b} \]
Nguy cơ mắc bệnh ở nhóm không phơi nhiễm là:
\[ P_{\text{non-exposed}} = \frac{c}{c + d} \]
Và Relative Risk (RR) được tính bằng:
\[ RR = \frac{P_{\text{exposed}}}{P_{\text{non-exposed}}} = \frac{a / (a + b)}{c / (c + d)} \]
Diễn giải
Tỷ số chênh (Odds Ratio – OR) là một chỉ số định lượng cho biết mức độ liên quan giữa một yếu tố phơi nhiễm và một kết cục quan sát được. Tỷ số chênh so sánh odds (tỷ lệ cược) của sự kiện xảy ra giữa hai nhóm: nhóm phơi nhiễm và nhóm không phơi nhiễm.
Giả sử có hai nhóm so sánh: nhóm 1 (phơi nhiễm) và nhóm 2 (không phơi nhiễm). Odds tương ứng là \(\text{odd}_1\) và \(\text{odd}_2\). Khi đó, Odds Ratio được định nghĩa là:
\[ OR = \frac{\text{odd}_1}{\text{odd}_2} = \frac{\pi_1 / (1 - \pi_1)}{\pi_2 / (1 - \pi_2)} \]
Nếu sử dụng dữ liệu đếm từ bảng 2x2 với:
| Kết cục = 1 | Kết cục = 0 | Tổng | |
|---|---|---|---|
| Phơi nhiễm (nhóm 1) | \(n_{11}\) | \(n_{12}\) | \(n_{1+}\) |
| Không phơi nhiễm (nhóm 2) | \(n_{21}\) | \(n_{22}\) | \(n_{2+}\) |
Thì odds ở mỗi nhóm lần lượt là:
\[ \text{odd}_1 = \frac{n_{11}}{n_{12}}, \quad \text{odd}_2 = \frac{n_{21}}{n_{22}} \]
Do đó, Odds Ratio là:
\[ OR = \frac{n_{11} / n_{12}}{n_{21} / n_{22}} = \frac{n_{11} \cdot n_{22}}{n_{12} \cdot n_{21}} \]
Diễn giải
Mô hình logit là một trường hợp đặc biệt của mô hình hồi quy tuyến tính tổng quát (Generalized Linear Model – GLM), được sử dụng để mô hình hóa mối quan hệ giữa một biến phụ thuộc nhị phân và một hoặc nhiều biến độc lập. Khi biến phụ thuộc \(Y\) là nhị phân (ví dụ: mắc bệnh hoặc không mắc bệnh), mô hình logistic là lựa chọn phù hợp vì nó đảm bảo xác suất dự đoán luôn nằm trong khoảng (0, 1).
Cấu trúc mô hình
Giả sử \(Y_i \in \{0,1\}\) là biến phản hồi của quan sát thứ \(i\), và \(\mathbf{x}_i = (x_{i1}, x_{i2}, \dots, x_{ip})^\top\) là vector các biến độc lập tương ứng, thì mô hình hồi quy logistic được xác định thông qua hàm liên kết logit như sau:
\[ \text{logit}(\pi_i) = \log\left( \frac{\pi_i}{1 - \pi_i} \right) = \eta_i = \beta_0 + \beta_1 x_{i1} + \beta_2 x_{i2} + \dots + \beta_p x_{ip} = {x}_i^\top{\beta} \]
Trong đó:
\(\pi_i = P(Y_i = 1 \mid \mathbf{x}_i)\): xác suất xảy ra sự kiện (thành công) với quan sát thứ \(i\).
\(\text{logit}(\pi_i)\): hàm logit, là hàm liên kết giữa xác suất và tổ hợp tuyến tính của các biến giải thích.
\(\boldsymbol{\beta} = (\beta_0, \beta_1, \dots, \beta_p)^\top\): vector hệ số hồi quy.
Suy ra công thức xác suất:
\[ \pi_i = \frac{1}{1 + \exp(-\eta_i)} = \frac{\exp({x}_i^\top{\beta})}{1 + \exp({x}_i^\top{\beta})} \]
Diễn giải hệ số hồi quy
Mỗi hệ số \(\beta_j\) (với \(j = 1, \dots, p\)) thể hiện sự thay đổi log odds (logarit tự nhiên của odds) khi biến \(x_j\) tăng thêm một đơn vị, giữ các biến khác không đổi.
Khi lấy hàm mũ, \(\exp(\beta_j)\) là tỷ số chênh (odds ratio) ước lượng cho biến \(x_j\). Nếu \(\exp(\beta_j) > 1\), biến \(x_j\) làm tăng odds xảy ra kết cục; ngược lại nếu \(\exp(\beta_j) < 1\), odds giảm.
Hàm phân phối của mô hình
Vì \(Y_i \in \{0,1\}\), phân phối xác suất của \(Y_i\) được mô hình hóa theo phân phối nhị phân (Bernoulli):
\[ Y_i \sim \text{Bernoulli}(\pi_i) \]
Và hàm phân phối xác suất là:
\[ P(Y_i = y_i \mid \mathbf{x}_i) = \pi_i^{y_i} (1 - \pi_i)^{1 - y_i}, \quad y_i \in \{0, 1\} \]
Ước lượng tham số
Các hệ số \({\beta}\) được ước lượng bằng phương pháp tối đa hóa hàm hợp lý (Maximum Likelihood Estimation – MLE). Hàm hợp lý tổng quát cho toàn bộ mẫu gồm \(n\) quan sát là:
\[ L({\beta}) = \prod_{i=1}^n \pi_i^{y_i} (1 - \pi_i)^{1 - y_i} \]
Mô hình hồi quy probit là một trường hợp đặc biệt của mô hình hồi quy tuyến tính tổng quát (Generalized Linear Model – GLM), được sử dụng khi biến phản hồi \(Y\) là nhị phân (0 hoặc 1). Giống như mô hình logistic, mô hình probit mô tả mối quan hệ giữa xác suất xảy ra sự kiện và một tổ hợp tuyến tính của các biến giải thích. Tuy nhiên, mô hình probit sử dụng hàm liên kết là hàm phân phối tích lũy chuẩn (standard normal CDF) thay vì hàm logit.
Cấu trúc mô hình
Giả sử biến phản hồi \(Y_i \in \{0,1\}\) và \({x}_i = (x_{i1}, x_{i2}, \dots, x_{ip})^\top\) là vector các biến giải thích của quan sát thứ \(i\). Khi đó, mô hình probit được mô tả như sau:
\[ \pi_i = P(Y_i = 1 \mid{x}_i) = \Phi(\eta_i) = \Phi({x}_i^\top{\beta}) \]
Trong đó:
\(\pi_i\): xác suất xảy ra sự kiện (ví dụ: \(Y_i = 1\)) tại quan sát thứ \(i\)
\(\Phi(\cdot)\): hàm phân phối tích lũy chuẩn (standard normal CDF), tức:
\[ \Phi(z) = \int_{-\infty}^{z} \frac{1}{\sqrt{2\pi}} \exp\left(-\frac{t^2}{2}\right) dt \]
\(\eta_i = {x}_i^\top{\beta}\): tổ hợp tuyến tính của các biến giải thích
\({\beta} = (\beta_0, \beta_1, \dots, \beta_p)^\top\): vector hệ số hồi quy
Mô hình dạng hàm liên kết (link function)
Trong mô hình GLM, probit sử dụng hàm liên kết chuẩn hóa là hàm nghịch đảo của phân phối tích lũy chuẩn:
\[ g(\pi_i) = \Phi^{-1}(\pi_i) = \eta_i = {x}_i^\top {\beta} \]
Phân phối và ước lượng tham số
Vì \(Y_i \sim \text{Bernoulli}(\pi_i)\), hàm hợp lý cho một mẫu gồm \(n\) quan sát là:
\[ L({\beta}) = \prod_{i=1}^n \left[\Phi({x}_i^\top {\beta})\right]^{y_i} \cdot \left[1 - \Phi({x}_i^\top {\beta})\right]^{1 - y_i} \]
Và hàm log-likelihood tương ứng:
\[ \ell({\beta}) = \sum_{i=1}^n \left[ y_i \log\left(\Phi({x}_i^\top {\beta})\right) + (1 - y_i) \log\left(1 - \Phi({x}_i^\top {\beta})\right) \right] \]
Hàm này được tối đa hóa bằng các thuật toán số như Newton-Raphson để ước lượng \({\beta}\).
Tóm tắt so sánh với logistic
| Đặc điểm | Mô hình Probit | Mô hình Logistic |
|---|---|---|
| Hàm liên kết | \(g(\pi) = \Phi^{-1}(\pi)\) | \(g(\pi) = \log\left(\frac{\pi}{1 - \pi}\right)\) |
| Hàm xác suất | \(\pi = \Phi({x}^\top {\beta})\) | \(\pi = \frac{1}{1 + e^{-{x}^\top {\beta}}}\) |
| Phân phối lỗi ngầm | Chuẩn tắc (normal) | Logistic |
| Diễn giải hệ số | Gián tiếp, thông qua tác động cận biên | Có thể trực tiếp qua odds ratio |
Mô hình hồi quy cloglog là một biến thể của mô hình hồi quy nhị phân trong khuôn khổ hồi quy tuyến tính tổng quát (Generalized Linear Model – GLM). Tương tự như mô hình logistic và probit, mô hình cloglog được sử dụng khi biến phản hồi \(Y \in \{0, 1\}\), nhưng điểm khác biệt là nó sử dụng hàm liên kết cloglog (complementary log-log) — một hàm phi đối xứng, thường thích hợp khi mô hình hóa các xác suất gần 0 hoặc gần 1 (không đối xứng quanh 0.5).
Cấu trúc mô hình
Giả sử \(Y_i \in \{0,1\}\) là biến phản hồi tại quan sát thứ \(i\), và \(\mathbf{x}_i = (x_{i1}, x_{i2}, \dots, x_{ip})^\top\) là vector biến giải thích tương ứng. Mô hình cloglog định nghĩa xác suất xảy ra sự kiện như sau:
\[ \pi_i = P(Y_i = 1 \mid {x}_i) = 1 - \exp\left(-\exp(\eta_i)\right) = 1 - \exp\left(-\exp({x}_i^\top {\beta})\right) \]
Khi đó, hàm liên kết cloglog (hàm nghịch đảo) là:
\[ g(\pi_i) = \log\left(-\log(1 - \pi_i)\right) = \eta_i = {x}_i^\top {\beta} \]
Trong đó:
\(\pi_i\): xác suất xảy ra kết cục (thành công) với quan sát thứ \(i\)
\(\eta_i\): tổ hợp tuyến tính của các biến độc lập
\({\beta} = (\beta_0, \beta_1, \dots, \beta_p)^\top\): vector hệ số hồi quy
Biến ngầm và mối liên hệ với phân phối Gumbel
Mô hình cloglog có thể được diễn giải qua mô hình biến ngầm (latent variable model), trong đó tồn tại một biến liên tục \(Y_i^*\) sao cho:
\[ Y_i^* = {x}_i^\top {\beta} + \varepsilon_i, \quad \text{với } \varepsilon_i \sim \text{Extreme Value Type I (Gumbel)} \]
Xác suất \(P(Y_i = 1)\) khi \(Y_i^* > 0\) chính là:
\[ \pi_i = P(Y_i^* > 0 \mid {x}_i) = 1 - \exp\left(-\exp({x}_i^\top {\beta})\right) \]
Ước lượng tham số
Mô hình cloglog thuộc họ mô hình GLM với:
Hàm hợp lý được viết như sau:
\[ L({\beta}) = \prod_{i=1}^n \left[1 - \exp(-\exp({x}_i^\top {\beta}))\right]^{y_i} \cdot \left[\exp(-\exp({x}_i^\top {\beta}))\right]^{1 - y_i} \]
Hàm log-likelihood tương ứng:
\[ \ell({\beta}) = \sum_{i=1}^n \left[ y_i \cdot \log\left(1 - \exp\left(-\exp({x}_i^\top {\beta})\right)\right) - (1 - y_i) \cdot \exp({x}_i^\top {\beta}) \right] \]
Tham số \({\beta}\) được ước lượng bằng phương pháp tối đa hóa log-likelihood, thường thông qua các thuật toán số như Newton-Raphson.
So sánh với các mô hình nhị phân khác
| Đặc điểm | Logistic | Probit | Cloglog |
|---|---|---|---|
| Hàm liên kết | \(\log\left(\frac{\pi}{1 - \pi}\right)\) | \(\Phi^{-1}(\pi)\) | \(\log(-\log(1 - \pi))\) |
| Phân phối lỗi ngầm | Logistic | Chuẩn chuẩn (Normal) | Gumbel (Extreme Value Type I) |
| Tính chất đối xứng | Có | Có | Không đối xứng (trái lệch) |
| Phù hợp cho sự kiện | Xác suất trung bình | Xác suất trung bình | Xác suất rất thấp hoặc rất cao (lệch phân bố) |
Bộ dữ liệu “Heart Disease Dataset” là một tập hợp dữ liệu y tế được xây dựng nhằm phục vụ nghiên cứu và phân tích các yếu tố nguy cơ dẫn đến bệnh tim – một trong những nguyên nhân hàng đầu gây tử vong trên toàn cầu được lấy từ nền tảng Kaggle. Dữ liệu này bao gồm thông tin của 1.025 bệnh nhân, được thu thập từ các trung tâm y tế tại Hoa Kỳ. Mỗi quan sát đại diện cho một cá nhân và chứa nhiều đặc trưng y học liên quan đến sức khỏe tim mạch, từ đó giúp hỗ trợ các nhà nghiên cứu xác định mối liên hệ giữa các yếu tố lâm sàng và nguy cơ mắc bệnh tim.
Biến định tính (categorical variables):
sex: Giới tính của bệnh nhân (0 = nữ, 1 = nam).
cp (chest pain type): Loại đau ngực mà bệnh nhân trải qua (0 đến 3, tương ứng với 4 loại: 0 - đau thắt ngực điển hình liên quan đến bệnh tim, 1 - đau thắt ngực không điển hình có thể là do bệnh tim hoặc không, 2 - đau thắt ngực nhẹ không liên quan đến bệnh tim, 3 - không có triệu chứng).
fbs (fasting blood sugar): Đường huyết lúc đói > 120 mg/dl (1 = cao, 0 = bình thường).
restecg (resting electrocardiographic results): Kết quả điện tâm đồ khi nghỉ ngơi (0 = bình thường, 1 = có dấu hiệu bất thường nhẹ, 2 = có dấu hiệu nghiêm trọng).
exang: Có xuất hiện cơn đau ngực khi vận động gắng sức hay không (1 = có, 0 = không).
slope: Độ dốc của đoạn ST trên điện tâm đồ trong khi vận động (0 = dốc xuống, 1 = bằng phẳng, 2 = dốc lên).
ca (biến định tính thứ bậc): Số lượng mạch máu chính được nhuộm màu khi chụp X-quang (từ 0 đến 4).
thal: Kết quả kiểm tra tình trạng máu (0 = không rõ, 1 = bình thường, 2 = thiếu máu nhẹ, 3 = thiếu máu nặng).
target: Biến phụ thuộc, cho biết tình trạng bệnh tim (1 = có bệnh tim, 0 = không có bệnh tim).
Biến định lượng (numerical variables):
age: Tuổi của bệnh nhân (tính theo năm).
trestbps (resting blood pressure): Huyết áp tâm thu khi nghỉ ngơi (tính bằng mm Hg), chỉ số này cho thấy áp lực máu lên thành động mạch khi tim co bóp.
chol: Lượng cholesterol trong máu (mg/dl), chỉ số cao có thể liên quan đến xơ vữa động mạch, gây tắc nghẽn dòng máu đến tim..
thalach: Nhịp tim tối đa đạt được khi vận động (nhịp/phút).
oldpeak: Độ suy giảm đoạn ST trên điện tâm đồ so với trạng thái nghỉ (được đánh giá theo mức độ trầm trọng của các triệu chứng thiếu máu cơ tim khi vận động).
Các biến trên thể hiện đầy đủ các khía cạnh liên quan đến nguy cơ tim mạch: từ đặc điểm nhân khẩu học (tuổi, giới), chỉ số sinh học (huyết áp, cholesterol, đường huyết), đến các dấu hiệu lâm sàng chuyên sâu (điện tâm đồ, triệu chứng đau ngực, thalassemia, v.v.). Điều này giúp bộ dữ liệu không chỉ phù hợp với các phân tích thống kê truyền thống mà còn có giá trị ứng dụng cao trong các mô hình học máy hiện đại để dự đoán nguy cơ bệnh tim.
Thông qua việc phân tích bộ dữ liệu này, người nghiên cứu có thể xác định được những yếu tố nào đóng vai trò quan trọng trong việc làm tăng nguy cơ mắc bệnh tim, từ đó đưa ra các khuyến nghị mang tính phòng ngừa, hỗ trợ cá nhân hóa chăm sóc y tế và nâng cao sức khỏe cộng đồng.
library(knitr)
library(tibble)
library(dplyr)
library(ggplot2)
library(forcats)
library(DT)
st <- read.csv("~/THAYTUONG/heart.csv", header = T)
datatable(st)
Trong bộ dữ liệu nghiên cứu, biến target đóng vai trò là biến phụ thuộc, thể hiện tình trạng bệnh tim của từng cá nhân. Cụ thể, biến này có hai giá trị: giá trị 0 biểu thị người không mắc bệnh tim, trong khi giá trị 1 biểu thị người có dấu hiệu hoặc đã được chẩn đoán mắc bệnh tim. Đây là một biến định tính nhị phân, có ý nghĩa quan trọng trong việc phân tích và dự đoán nguy cơ mắc bệnh tim dựa trên các đặc điểm sức khỏe và lối sống của người tham gia khảo sát.
table(st$target)
##
## 0 1
## 499 526
prop.table(table(st$target))
##
## 0 1
## 0.4868293 0.5131707
st %>% group_by(target) %>% summarise(n = n()) %>%
ggplot(aes(x = target, y = n)) +
geom_col(fill = "peachpuff") +
labs(x = "Nguy cơ mắc bệnh tim", y = "Số lượng", caption = "Biểu đồ thống kê nguy cơ mắc bệnh tim") +
geom_text(aes(label = n), vjust = 0, color = "black")
Kết quả bảng tần suất và tỷ lệ của biến target cho thấy trong tổng số 1025 cá nhân được khảo sát, có 526 người (chiếm khoảng 51,32%) được xác định là có dấu hiệu hoặc đã mắc bệnh tim, trong khi 499 người còn lại (chiếm khoảng 48,68%) không mắc bệnh. Tỷ lệ gần như cân bằng giữa hai nhóm phản ánh rằng nguy cơ mắc bệnh tim là một vấn đề phổ biến và có thể xảy ra với một phần đáng kể trong dân số. Điều này nhấn mạnh tầm quan trọng của việc nhận diện sớm các yếu tố nguy cơ và thực hiện các biện pháp phòng ngừa bệnh tim một cách chủ động.
Biến giới tính (sex) trong bộ dữ liệu là một biến định tính dạng nhị phân, phản ánh đặc điểm sinh học của người tham gia khảo sát. Cụ thể, biến này được mã hóa với giá trị 1 tương ứng với nam giới và giá trị 0 tương ứng với nữ giới. Giới tính là một yếu tố quan trọng trong phân tích y tế vì nhiều nghiên cứu đã chỉ ra rằng nguy cơ mắc bệnh tim có thể khác nhau giữa nam và nữ do sự khác biệt về hormone, cấu trúc sinh lý tim mạch cũng như các hành vi sức khỏe. Do đó, việc đưa biến giới tính vào mô hình phân tích giúp tăng cường khả năng phát hiện và đánh giá chính xác các yếu tố nguy cơ liên quan đến bệnh tim.
table(st$sex) # Tạo bảng tần suất
##
## 0 1
## 312 713
prop.table(table(st$sex))
##
## 0 1
## 0.3043902 0.6956098
st %>% group_by(sex) %>% summarise(n = n()) %>%
ggplot(aes(x = sex, y = n))+
geom_col(fill='lightblue')+
labs(x="Giới tính", y = "Số lượng")+
labs(caption = "Tần suất phân bổ giới tính")+
geom_text(aes(label = n), vjust = 0, color = 'black')
Kết quả bảng tần số và tần suất của biến giới tính (sex) cho thấy trong tổng số 1.025 quan sát, có 713 người là nam giới (chiếm khoảng 69,56%) và 312 người là nữ giới (chiếm khoảng 30,44%). Tỷ lệ nam giới cao gần gấp đôi so với nữ giới trong bộ dữ liệu này phản ánh một hiện tượng phổ biến trong các nghiên cứu tim mạch, khi nam giới thường có nguy cơ mắc bệnh tim cao hơn và do đó có thể được đưa vào các nghiên cứu sàng lọc với tần suất lớn hơn. Sự chênh lệch giới tính này cần được xem xét cẩn trọng trong quá trình phân tích và diễn giải kết quả, vì nó có thể ảnh hưởng đến tính đại diện và độ chính xác của các mô hình dự đoán liên quan đến bệnh tim.
Biến cp (chest pain type – loại đau ngực) phản ánh triệu chứng đau ngực mà bệnh nhân trải qua, được mã hóa từ 0 đến 3 để phân biệt bốn kiểu: giá trị 0 là đau ngực điển hình (typical angina) – cơn đau do thiếu máu cơ tim, thường xuất hiện khi gắng sức và giảm khi nghỉ; giá trị 1 là đau ngực không điển hình (atypical angina) – có biểu hiện không đặc trưng, không hoàn toàn khớp với đau thắt ngực; giá trị 2 là đau không do tim (non-anginal pain) – cơn đau không bắt nguồn từ nguyên nhân tim mạch, có thể do hệ cơ xương, thần kinh hoặc tiêu hóa; và giá trị 3 là không có triệu chứng đau ngực (asymptomatic) – bệnh nhân không cảm thấy đau dù có thể vẫn mắc bệnh tim. Việc phân loại này hỗ trợ nhận diện nguy cơ bệnh lý tim mạch và phục vụ cho các phân tích định lượng trong mô hình thống kê y sinh.
table(st$cp)
##
## 0 1 2 3
## 497 167 284 77
prop.table(table(st$cp))
##
## 0 1 2 3
## 0.48487805 0.16292683 0.27707317 0.07512195
st %>% group_by(cp) %>% summarise(n = n()) %>%
ggplot(aes(x = cp, y = n)) +
geom_col(fill = "lightpink") +
labs (x = "Loại đau ngực", y = "Số lượng", caption = "Biểu đồ phân bổ loại đau ngực") +
geom_text (aes(label = n), vjust = 0, color = "black")
Biến cp (loại đau ngực) được phân loại thành bốn nhóm với số lượng quan sát và tỷ lệ phần trăm như sau: loại 0 – đau ngực điển hình chiếm tỷ lệ cao nhất với 497 trường hợp (48,49%), cho thấy gần một nửa số bệnh nhân có triệu chứng đau ngực đặc trưng, thường liên quan rõ ràng đến bệnh tim thiếu máu cục bộ. Loại 2 – đau không do tim có 284 trường hợp (27,71%), phản ánh một bộ phận đáng kể bệnh nhân gặp đau ngực nhưng không bắt nguồn từ nguyên nhân tim mạch, có thể do căng cơ, tiêu hóa hoặc thần kinh. Loại 1 – đau không điển hình xuất hiện ở 167 bệnh nhân (16,29%), biểu hiện đau không rõ ràng, không hoàn toàn phù hợp với các triệu chứng tim mạch điển hình. Cuối cùng, loại 3 – không có triệu chứng đau ngực chỉ chiếm 7,51% (77 trường hợp), cho thấy phần lớn bệnh nhân trong bộ dữ liệu đều có ít nhiều triệu chứng đau ngực. Kết quả này phản ánh sự phổ biến của các dạng đau ngực trong dân số khảo sát và có thể hỗ trợ trong việc đánh giá sớm nguy cơ mắc bệnh tim mạch.
Biến fbs (Fasting Blood Sugar – đường huyết lúc đói) là một chỉ số lâm sàng phản ánh nồng độ glucose trong máu của bệnh nhân sau khi nhịn ăn ít nhất 8 giờ. Trong bộ dữ liệu này, biến fbs được mã hóa dưới dạng nhị phân: giá trị 1 cho biết người bệnh có mức đường huyết lúc đói lớn hơn 120 mg/dL, dấu hiệu cảnh báo nguy cơ mắc đái tháo đường hoặc rối loạn chuyển hóa; giá trị 0 cho biết mức đường huyết trong ngưỡng bình thường (≤ 120 mg/dL). Chỉ số này thường được sử dụng trong đánh giá sức khỏe tổng quát và có thể liên quan đến nguy cơ tim mạch, do đái tháo đường là một yếu tố nguy cơ phổ biến của bệnh lý tim.
table(st$fbs)
##
## 0 1
## 872 153
prop.table(table(st$fbs))
##
## 0 1
## 0.8507317 0.1492683
st %>% group_by(fbs) %>% summarise (n = n()) %>%
ggplot(aes(x = fbs, y = n)) +
geom_col(fill = "purple") +
labs(x = "Đường huyết lúc đói", y ="Số lượng", caption = "Biểu đồ tần suất người bị đường huyết cao lúc đói >120mg/dl") +
geom_text (aes(label = n), vjust = 0, color = "black")
Kết quả phân tích biến fbs cho thấy có 872 bệnh nhân (chiếm khoảng 85,07%) có mức đường huyết lúc đói trong giới hạn bình thường (≤ 120 mg/dL), trong khi chỉ có 153 bệnh nhân (tương đương 14,93%) có mức đường huyết vượt ngưỡng 120 mg/dL. Điều này cho thấy đa số bệnh nhân trong mẫu nghiên cứu không có dấu hiệu tăng đường huyết lúc đói – một yếu tố thường liên quan đến đái tháo đường và nguy cơ tim mạch. Tuy nhiên, tỷ lệ gần 15% có chỉ số đường huyết cao cũng là một tỷ lệ đáng lưu ý, phản ánh nguy cơ tiềm ẩn đối với sức khỏe tim mạch của nhóm này, đặc biệt trong bối cảnh bệnh tim thường đi kèm với rối loạn chuyển hóa.
Biến exang (exercise-induced angina) phản ánh tình trạng đau thắt ngực do vận động – tức là cơn đau ngực xuất hiện khi bệnh nhân thực hiện hoạt động thể chất hoặc gắng sức. Đây là một chỉ dấu số trọng trong đánh giá chức năng tim mạch, đặc biệt là trong chẩn đoán bệnh động mạch vành. Biến này được mã hóa dưới dạng nhị phân, với giá trị 0 biểu thị không có đau ngực khi gắng sức, và 1 biểu thị có xuất hiện đau ngực khi gắng sức. Sự xuất hiện của triệu chứng này thường gợi ý tình trạng thiếu máu cục bộ cơ tim do mạch vành bị hẹp, từ đó hỗ trợ nhận diện nguy cơ mắc bệnh tim.
table(st$exang)
##
## 0 1
## 680 345
prop.table(table(st$exang))
##
## 0 1
## 0.6634146 0.3365854
st %>% group_by(exang) %>% summarise(n = n ()) %>%
ggplot(aes(x = exang, y = n)) +
geom_col(fill = "orange") +
labs(x = "Đau thắt ngực", y = "Số lượng", caption = "Biểu đồ tần suất đau thắt ngực") +
geom_text(aes(label = n), vjust = 0, color = "black")
Kết quả phân tích bảng tần số và tần suất của biến exang cho thấy trong tổng số 1.025 quan sát, có 680 người (66,34%) không xuất hiện đau thắt ngực khi gắng sức, trong khi 345 người (33,66%) có triệu chứng này.
Tỷ lệ hơn một phần ba bệnh nhân có đau ngực do gắng sức là đáng lưu ý, vì đây là dấu hiệu phổ biến của bệnh mạch vành hoặc thiếu máu cơ tim. Điều này phản ánh rằng trong mẫu dữ liệu, một phần không nhỏ người tham gia có thể đang gặp vấn đề tim mạch tiềm ẩn hoặc đã được chẩn đoán.
Biến restecg (electrocardiographic results at rest) đại diện cho kết quả đo điện tâm đồ lúc nghỉ – một chỉ số lâm sàng quan trọng để đánh giá hoạt động điện học của tim. Trong bộ dữ liệu này, biến restecg là biến phân loại định danh gồm ba mức giá trị:
0: Không có bất thường (điện tâm đồ bình thường);
1: Có sóng ST-T bất thường (ví dụ: sóng T âm hoặc ST chênh xuống), thường liên quan đến thiếu máu cơ tim;
2: Có dấu hiệu dày thất trái rõ rệt theo tiêu chuẩn điện tâm đồ – một biểu hiện của quá tải áp lực mạn tính, thường gặp ở người tăng huyết áp lâu năm.
Biến này phản ánh tình trạng điện tim cơ bản của bệnh nhân và đóng vai trò thiết yếu trong việc hỗ trợ chẩn đoán các rối loạn tim mạch, đặc biệt khi kết hợp với các triệu chứng khác như đau ngực, khó thở, hoặc kết quả gắng sức.
table(st$restecg)
##
## 0 1 2
## 497 513 15
prop.table(table(st$restecg))
##
## 0 1 2
## 0.48487805 0.50048780 0.01463415
st %>% group_by(restecg) %>% summarise (n = n ()) %>%
ggplot(aes(x = restecg, y = n)) +
geom_col(fill = "lightgreen") +
labs(x = "kết quả điện tim", y = "Số lượng", caption = "Biểu đồ tần suất kết quả điện tim") +
geom_text(aes(label = n), vjust = 0, color = "black")
Kết quả phân tích biến restecg cho thấy phần lớn bệnh nhân có điện tâm đồ bình thường lúc nghỉ (mức 0, chiếm khoảng 48,49%) hoặc có bất thường nhẹ như sóng ST-T thay đổi (mức 1, chiếm 50,05%). Chỉ có một tỷ lệ rất nhỏ (1,46%) thể hiện dấu hiệu dày thất trái rõ rệt (mức 2), một tình trạng thường gặp ở những bệnh nhân tăng huyết áp mạn tính. Điều này cho thấy đa số người trong mẫu có tình trạng điện tim ổn định hoặc chỉ gặp rối loạn nhẹ, trong khi chỉ một số ít có biểu hiện tim mạch nghiêm trọng hơn. Tỷ lệ cao của mức 1 phản ánh sự phổ biến của các bất thường điện tim nhẹ trong cộng đồng, có thể liên quan đến yếu tố tuổi tác, lối sống hoặc bệnh lý nền như thiếu máu cơ tim.
Biến thal là một biến phân loại dùng để mô tả tình trạng hấp thụ thallium trong quá trình kiểm tra tim gắng sức, một chỉ số phản ánh chức năng tưới máu cơ tim. Biến này gồm ba mức độ:
Đây là một biến quan trọng trong đánh giá mức độ tổn thương tim và giúp bác sĩ phân loại nguy cơ bệnh tim mạch ở người bệnh một cách chính xác và kịp thời.
table(st$thal)
##
## 0 1 2 3
## 7 64 544 410
prop.table(table(st$thal))
##
## 0 1 2 3
## 0.006829268 0.062439024 0.530731707 0.400000000
st %>% group_by(thal) %>% summarise ( n = n()) %>%
ggplot(aes(x = thal, y = n)) +
geom_col(fill = "lightyellow") +
labs(x = "Tình trạng máu", y = "Số lượng", caption = "Biểu đồ tần suất tình trạng máu") +
geom_text(aes(label = n), vjust = 0, color = "black")
Kết quả thống kê mô tả cho biến thal cho thấy phân bố tần số và tần suất của bốn mức độ như sau:
Mức 0 (bình thường): chỉ có 7 người (chiếm khoảng 0.68%), phản ánh tỷ lệ rất thấp người có kết quả thallium bình thường trong mẫu khảo sát.
Mức 1 (khuyết tật cố định): 64 người (6.24%) – đây là nhóm có biểu hiện tổn thương cơ tim không hồi phục.
Mức 2 (khuyết tật có thể đảo ngược): 544 người (53.07%) – đây là nhóm phổ biến nhất, cho thấy hơn một nửa mẫu có dấu hiệu thiếu máu cơ tim có thể cải thiện, thường liên quan đến bệnh mạch vành.
Mức 3 (không xác định hoặc tình trạng nghiêm trọng hơn): 410 người (40.00%), chiếm tỷ trọng lớn thứ hai trong mẫu.
Nhìn chung, phần lớn người trong mẫu khảo sát có kết quả kiểm tra thallium cho thấy dấu hiệu bất thường ở các mức độ khác nhau, đặc biệt là khuyết tật có thể đảo ngược. Điều này cho thấy tỷ lệ người có nguy cơ mắc bệnh tim trong mẫu là khá cao và cần được theo dõi hoặc can thiệp y tế phù hợp.
Mối quan hệ giữa giới tính (sex) và nguy cơ mắc bệnh tim (target) là một chủ đề được quan tâm rộng rãi trong y học tim mạch. Trong dữ liệu nghiên cứu này, biến sex được phân loại thành hai nhóm: nam (1) và nữ (0), trong khi biến target phản ánh tình trạng bệnh tim với 1 là có bệnh và 0 là không có bệnh. Qua thống kê mô tả, cho thấy tỷ lệ mắc bệnh tim ở nam giới cao hơn đáng kể so với nữ giới, phản ánh xu hướng được ghi nhận trong thực tiễn lâm sàng rằng nam giới thường có nguy cơ mắc bệnh tim sớm hơn phụ nữ, đặc biệt là trước tuổi mãn kinh. Sự khác biệt này có thể bắt nguồn từ nhiều yếu tố như nội tiết tố, lối sống (hút thuốc, rượu bia), mức độ hoạt động thể chất và kiểm soát huyết áp hoặc cholesterol. Phân tích mối liên hệ giữa hai biến này không chỉ góp phần xác định các nhóm nguy cơ mà còn đóng vai trò quan trọng trong việc thiết kế các chương trình phòng ngừa bệnh tim phù hợp theo giới tính.
tb1 <- table(st$sex, st$target)
addmargins(tb1)
##
## 0 1 Sum
## 0 86 226 312
## 1 413 300 713
## Sum 499 526 1025
st1 <- as.data.frame(tb1)
colnames(st1) <- c("sex", "target", "Frequency")
# Vẽ biểu đồ từ bảng tần suất
ggplot(st1, aes(x = sex, y = Frequency, fill = target)) +
geom_bar(stat = "identity", position = "dodge") +
labs(
title = "Phân bố tần suất nguy cơ mắc bệnh tim theo giới tính",
x = "Tần suất nguy cơ mắc bệnh tim",
y = "Tần suất"
) +
theme_minimal()
Kết quả bảng tần số cho thấy trong tổng số 1.025 người, có 312 nữ và 713 nam. Trong nhóm nữ, 226 người (khoảng 72,4%) mắc bệnh tim và 86 người (27,6%) không mắc bệnh. Trong khi đó, nhóm nam có 300 người (42,1%) mắc bệnh tim và 413 người (57,9%) không mắc bệnh. Điều này cho thấy tỷ lệ mắc bệnh tim ở nữ cao hơn nam trong bộ dữ liệu này, mặc dù số lượng nam giới tham gia nghiên cứu nhiều hơn gần gấp đôi nữ giới. Kết quả này có thể gợi ý rằng ngoài giới tính, còn nhiều yếu tố nguy cơ khác (như tuổi tác, huyết áp, cholesterol, thói quen sinh hoạt) ảnh hưởng đến nguy cơ mắc bệnh tim, cần được phân tích sâu hơn để đưa ra kết luận chính xác.
Để đánh giá liệu có mối liên hệ thống kê giữa tình trạng tăng huyết áp và nguy cơ đột quỵ, ta thực hiện kiểm định Chi-bình phương. Giả thuyết được phát biểu như sau:
Giả thuyết không (\(H_0\)): Không có mối liên hệ giữa giới tính và nguy cơ mắc bệnh tim (hai biến độc lập).
Giả thuyết đối (\(H_1\)): Có mối liên hệ giữa giới tính và nguy cơ mắc bệnh tim (hai biến không độc lập).
chisq.test(tb1)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tb1
## X-squared = 78.863, df = 1, p-value < 2.2e-16
Kết quả kiểm định cho thấy giá trị thống kê Chi-bình phương là 78.863 với 1 bậc tự do, và p-value < 2.2e-16, tức là gần bằng 0. Vì p-value nhỏ hơn mức ý nghĩa thông thường (0.05), ta bác bỏ giả thuyết không.
Điều này cho thấy có mối liên hệ có ý nghĩa thống kê giữa giới tính và nguy cơ mắc bệnh tim. Nói cách khác, giới tính có ảnh hưởng đến nguy cơ mắc bệnh tim – sự khác biệt về tỷ lệ mắc bệnh giữa nam và nữ là không ngẫu nhiên, mà có thể do những yếu tố liên quan đến sinh học, lối sống hoặc yếu tố khác gắn liền với giới tính.
Để đánh giá mối liên quan giữa giới tính và nguy cơ mắc bệnh tim, chỉ số relative risk (RR) được sử dụng nhằm so sánh xác suất xảy ra bệnh tim giữa hai nhóm: nam và nữ.
library(epitools)
riskratio(tb1)
## $data
##
## 0 1 Total
## 0 86 226 312
## 1 413 300 713
## Total 499 526 1025
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## 0 1.0000000 NA NA
## 1 0.5808686 0.5203563 0.6484178
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## 0 NA NA NA
## 1 0 1.410579e-19 3.607035e-19
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Từ bảng kết quả, ta thấy:
Nam giới (mã là 1) có tổng cộng 713 người, trong đó 300 người mắc bệnh tim.
Nữ giới (mã là 0) có 312 người, trong đó 226 người mắc bệnh tim, chiếm 72.44%.
Kết quả Risk Ratio: Risk ratio (tỷ số rủi ro) của nam so với nữ là 0.58, với khoảng tin cậy 95% là [0.52; 0.65]. Điều này nghĩa là: nam giới có nguy cơ mắc bệnh tim bằng khoảng 58% so với nữ giới trong bộ dữ liệu này. Khoảng tin cậy không chứa giá trị 1, cho thấy sự khác biệt này có ý nghĩa thống kê, không phải do ngẫu nhiên.
Diễn giải thực tế: Kết quả trên cho thấy trong tập dữ liệu, nữ giới có nguy cơ mắc bệnh tim cao hơn đáng kể so với nam giới.
Phân tích odds (tỷ số chênh lệch) là một phương pháp thống kê thường được sử dụng trong lĩnh vực y tế để đánh giá mối liên hệ giữa một yếu tố nguy cơ và một kết cục sức khỏe. Trong nghiên cứu này, chúng tôi tập trung xem xét mối quan hệ giữa giới tính (sex) và nguy cơ mắc bệnh tim (target). Biến sex đại diện cho giới tính của người tham gia (trong đó 0 là nữ, 1 là nam), còn biến target biểu thị tình trạng bệnh tim (1 là có bệnh tim, 0 là không có).
Việc tính toán odds ratio (tỷ số chênh lệch) cho phép xác định liệu nam giới có nguy cơ mắc bệnh tim cao hơn nữ giới hay không, và nếu có thì chênh lệch cụ thể là bao nhiêu lần. Phân tích này cung cấp bằng chứng định lượng giúp nhận diện nhóm có nguy cơ cao, từ đó hỗ trợ tốt hơn cho công tác phòng ngừa và can thiệp sớm các bệnh lý tim mạch trong cộng đồng.
oddsratio(tb1)
## $data
##
## 0 1 Total
## 0 86 226 312
## 1 413 300 713
## Total 499 526 1025
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## 0 1.0000000 NA NA
## 1 0.2770283 0.2065499 0.3688931
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## 0 NA NA NA
## 1 0 1.410579e-19 3.607035e-19
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Kết quả phân tích odds ratio cho thấy rằng nam giới (sex = 1) có nguy cơ mắc bệnh tim thấp hơn đáng kể so với nữ giới (sex = 0). Tỷ số odds (odds ratio) giữa nam giới (sex = 1) so với nữ giới (sex = 0) là 0.277, với khoảng tin cậy 95% [0.2065; 0.3689]. Điều này nghĩa là nam giới có odds mắc bệnh tim thấp hơn đáng kể so với nữ giới, cụ thể nữ giới có odds mắc bệnh cao hơn khoảng 3.61 lần (1 / 0.277), và kết quả này có ý nghĩa thống kê vì khoảng tin cậy không chứa giá trị 1.
Trong phân tích này, biến cp (chest pain type – loại đau ngực) là một biến phân loại, phản ánh dạng biểu hiện của triệu chứng đau ngực ở người bệnh. Biến này gồm bốn nhóm: đau thắt ngực điển hình, đau thắt ngực không điển hình, đau không do tim, và không có triệu chứng.
Xét về mặt lâm sàng, loại đau ngực thường là một trong những dấu hiệu quan trọng giúp bác sĩ đánh giá nguy cơ tim mạch của bệnh nhân. Một số dạng đau ngực, chẳng hạn như đau thắt ngực điển hình, thường gợi ý rõ ràng hơn về khả năng tổn thương tim. Tuy nhiên, cũng có nhiều trường hợp người bệnh không biểu hiện đau ngực nhưng vẫn mang nguy cơ cao mắc bệnh tim, làm cho việc chẩn đoán trở nên khó khăn hơn.
Chính vì vậy, việc phân tích mối liên hệ giữa loại đau ngực (cp) và tình trạng bệnh tim (target) giúp làm rõ giá trị chẩn đoán của triệu chứng đau ngực, từ đó hỗ trợ nâng cao hiệu quả sàng lọc bệnh trong thực tiễn lâm sàng.
tb2 <- table(st$cp, st$target)
addmargins(tb2)
##
## 0 1 Sum
## 0 375 122 497
## 1 33 134 167
## 2 65 219 284
## 3 26 51 77
## Sum 499 526 1025
st2 <- as.data.frame(tb2)
colnames(st2) <- c("cp", "target", "Frequency")
ggplot(st2, aes(x = cp, y = Frequency, fill = target)) +
geom_bar(stat = "identity", position = "dodge") +
labs (title = "Phân bố tần số nguy cơ mắc bệnh tim theo loại đau ngực", x = "Tần suất nguy cơ mắc bệnh tim", y = "Tần suất") +
theme_minimal()
Kết quả bảng tần suất chéo giữa biến cp và target cho thấy mối liên hệ đáng chú ý giữa loại đau ngực và nguy cơ mắc bệnh tim. Trong nhóm có triệu chứng đau ngực do bệnh tim (cp = 0), phần lớn người tham gia không mắc bệnh tim (375 người không bệnh so với 122 người bệnh). Ngược lại, ở nhóm đau thắt ngực không điển hình (cp = 1) và đau ngực nhưng không có khả năng liên quan đến tim (cp = 2), số người mắc bệnh tim cao hơn đáng kể so với người không mắc bệnh. Đặc biệt, nhóm cp = 3 có 51 người mắc bệnh so với chỉ 26 người không mắc.
Để đánh giá liệu có mối liên hệ thống kê giữa tình trạng đau thắt ngực và nguy cơ mắc bệnh tim, ta thực hiện kiểm định Chi-bình phương. Giả thuyết được phát biểu như sau:
Giả thuyết không (\(H_0\)): Không có mối liên hệ giữa đau thắt ngực và nguy cơ mắc bệnh tim (hai biến độc lập).
Giả thuyết đối (\(H_1\)): Có mối liên hệ giữa đau thắt ngực và nguy cơ mắc bệnh tim (hai biến không độc lập).
chisq.test(tb2)
##
## Pearson's Chi-squared test
##
## data: tb2
## X-squared = 280.98, df = 3, p-value < 2.2e-16
Vì p-value rất nhỏ, gần bằng 0, nên bác bỏ giả thuyết \(H_0\) ở mức ý nghĩa thông thường. Điều này có nghĩa là có mối liên hệ có ý nghĩa thống kê giữa loại đau ngực và nguy cơ mắc bệnh tim. Kết quả phù hợp với thực tế lâm sàng, khi một số dạng đau ngực thường là dấu hiệu cảnh báo bệnh tim mạch, và do đó, biến cp có thể là yếu tố dự báo quan trọng cần được chú ý trong phân tích nguy cơ mắc bệnh tim.
riskratio(tb2)
## $data
##
## 0 1 Total
## 0 375 122 497
## 1 33 134 167
## 2 65 219 284
## 3 26 51 77
## Total 499 526 1025
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## 0 1.000000 NA NA
## 1 3.268774 2.753530 3.880431
## 2 3.141393 2.659173 3.711062
## 3 2.698212 2.161489 3.368209
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## 0 NA NA NA
## 1 0.000000e+00 1.354384e-37 1.799113e-37
## 2 0.000000e+00 1.781162e-47 4.601448e-46
## 3 1.923128e-12 1.743249e-12 1.190143e-13
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Kết quả phân tích relative risk cho thấy kiểu đau ngực (cp) có mối liên hệ mạnh với nguy cơ mắc bệnh tim (target). So với nhóm cp = 0 (đau ngực điển hình), nguy cơ mắc bệnh tim ở nhóm cp = 1 cao gấp 3.27 lần, nhóm cp = 2 cao gấp 3.14 lần, và nhóm cp = 3 cao gấp 2.70 lần. Như vậy, kiểu đau ngực càng không nghiêm trọng thì nguy cơ mắc bệnh tim càng cao.
oddsratio(tb2)
## $data
##
## 0 1 Total
## 0 375 122 497
## 1 33 134 167
## 2 65 219 284
## 3 26 51 77
## Total 499 526 1025
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## 0 1.000000 NA NA
## 1 12.384137 8.122823 19.35789
## 2 10.302741 7.340720 14.62775
## 3 5.989884 3.606936 10.16798
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## 0 NA NA NA
## 1 0.000000e+00 1.354384e-37 1.799113e-37
## 2 0.000000e+00 1.781162e-47 4.601448e-46
## 3 1.923128e-12 1.743249e-12 1.190143e-13
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Kết quả phân tích odds ratio cho thấy kiểu đau ngực (cp) có mối liên hệ rất mạnh với nguy cơ mắc bệnh tim (target). So với nhóm cp = 0 (kiểu đau điển hình) – được xem là nhóm tham chiếu – thì:
Nhóm cp = 1 có odds mắc bệnh tim cao gấp 12.38 lần (CI 95%: 8.12–19.36),
Nhóm cp = 2 có odds cao gấp 10.30 lần (CI 95%: 7.34–14.63),
Nhóm cp = 3 có odds cao gấp 5.99 lần (CI 95%: 3.61–10.17).
Cụ thể, những người có kiểu đau ngực không điển hình có khả năng mắc bệnh tim cao hơn nhiều so với những người có biểu hiện đau ngực điển hình.
Trong nghiên cứu này, biến fbs (fasting blood sugar) phản ánh tình trạng đường huyết lúc đói, với giá trị 1 biểu thị mức đường huyết cao (> 120 mg/dl) và 0 là bình thường. Biến target đại diện cho tình trạng mắc bệnh tim, với giá trị nhị phân (0: không mắc, 1: mắc). Xét về mặt sinh lý và lâm sàng, đường huyết cao kéo dài có thể làm tổn thương thành mạch và gây ra các rối loạn chuyển hóa, từ đó làm tăng nguy cơ phát triển bệnh tim. Do đó, việc khảo sát mối liên hệ giữa fbs và target giúp đánh giá vai trò của rối loạn đường huyết trong dự báo nguy cơ mắc bệnh tim, từ đó hỗ trợ công tác sàng lọc và can thiệp sớm.
tb3 <- table(st$fbs, st$target) #tạo bảng tần số chéo
addmargins(tb3)
##
## 0 1 Sum
## 0 417 455 872
## 1 82 71 153
## Sum 499 526 1025
st3 <- as.data.frame(tb3)
colnames(st3) <- c("fbs", "target", "Frequency")
ggplot(st3, aes(x = fbs, y = Frequency, fill = target)) +
geom_bar(stat = "identity", position = "dodge") +
labs(title = "Phân bổ tần suất nguy cơ mắc bệnh tim theo đường huyết lúc đói") +
theme_minimal()
Bảng tần suất chéo giữa biến fbs (đường huyết lúc đói, 1 = cao, 0 = bình thường) và biến target (nguy cơ mắc bệnh tim, 1 = có bệnh, 0 = không bệnh) cho thấy phần lớn bệnh nhân trong dữ liệu có đường huyết bình thường (fbs = 0), chiếm 872 người trên tổng số 1.025, trong đó có 417 người mắc bệnh tim (chiếm khoảng 47.8%). Ngược lại, chỉ có 153 người có đường huyết cao (fbs = 1), nhưng trong nhóm này có tới 82 người mắc bệnh tim (chiếm khoảng 53.6%).
Điều này cho thấy tỷ lệ mắc bệnh tim trong nhóm có đường huyết cao cao hơn so với nhóm có đường huyết bình thường, tuy nhiên sự chênh lệch không lớn. Kết quả phản ánh thực tế rằng đường huyết cao có thể là một yếu tố nguy cơ liên quan đến bệnh tim, nhưng không mang tính quyết định hoàn toàn, và cần được phân tích sâu hơn bằng các phương pháp suy diễn thống kê để xác định mức độ ảnh hưởng thực sự.
Để đánh giá liệu có mối liên hệ thống kê giữa tình trạng đường huyết lúc đói và nguy cơ mắc bệnh tim, ta thực hiện kiểm định Chi-bình phương. Giả thuyết được phát biểu như sau:
Giả thuyết không (\(H_0\)): Không có mối liên hệ giữa đường huyết lúc đói và nguy cơ mắc bệnh tim (hai biến độc lập).
Giả thuyết đối (\(H_1\)): Có mối liên hệ giữa đường huyết lúc đói và nguy cơ mắc bệnh tim (hai biến không độc lập).
chisq.test(tb3)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tb3
## X-squared = 1.5134, df = 1, p-value = 0.2186
Kết quả kiểm định Chi-bình phương cho thấy giá trị thống kê là \(X^2\) = 1.5134 với 1 bậc tự do và p-value = 0.2186. Vì giá trị p lớn hơn 0.05, ta không bác bỏ giả thuyết không, tức là không có bằng chứng thống kê đủ mạnh để khẳng định rằng có mối liên hệ giữa mức đường huyết lúc đói và tình trạng bệnh tim trong mẫu khảo sát này.
Điều này có nghĩa là, dù tỉ lệ mắc bệnh tim ở nhóm có đường huyết cao có vẻ khác biệt so với nhóm bình thường khi quan sát ban đầu, nhưng sự khác biệt đó có thể là do ngẫu nhiên. Do đó, biến fbs không cho thấy mối liên hệ có ý nghĩa thống kê với nguy cơ mắc bệnh tim trong dữ liệu hiện có. Đây là một kết quả đáng lưu ý, gợi ý rằng đường huyết lúc đói, khi xét riêng lẻ, có thể không phải là yếu tố dự báo mạnh cho bệnh tim nếu không xét đến các yếu tố khác.
riskratio(tb3)
## $data
##
## 0 1 Total
## 0 417 455 872
## 1 82 71 153
## Total 499 526 1025
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## 0 1.0000000 NA NA
## 1 0.8893486 0.7415438 1.066614
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## 0 NA NA NA
## 1 0.1892437 0.1898789 0.187545
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Kết quả phân tích chỉ ra rằng nguy cơ mắc bệnh tim ở nhóm có đường huyết khi đói cao (fbs = 1) cao hơn 1.12 lần so với nhóm có đường huyết bình thường (fbs = 0), với ước lượng Relative Risk (RR) bằng 1.1207. Tuy nhiên, khoảng tin cậy 95% của RR nằm trong khoảng từ 0.9522 đến 1.3191, bao gồm cả giá trị 1.
oddsratio(tb3)
## $data
##
## 0 1 Total
## 0 417 455 872
## 1 82 71 153
## Total 499 526 1025
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## 0 1.0000000 NA NA
## 1 0.7939348 0.5614032 1.120408
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## 0 NA NA NA
## 1 0.1892437 0.1898789 0.187545
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Kết quả phân tích cho thấy odds mắc bệnh tim ở nhóm có đường huyết khi đói cao (fbs = 1) lớn hơn 1.26 lần so với nhóm có đường huyết bình thường (fbs = 0), với odds ratio (OR) ước lượng bằng 1.26. Khoảng tin cậy 95% của OR nằm trong khoảng từ 0.89 đến 1.78, tức là có chứa giá trị 1. Điều này cho thấy rằng sự khác biệt về odds giữa hai nhóm chưa có ý nghĩa thống kê.
Trong nghiên cứu các yếu tố liên quan đến bệnh tim, biến exang – đại diện cho hiện tượng đau ngực do vận động – đóng vai trò quan trọng trong việc dự báo nguy cơ mắc bệnh tim (target). Gắng sức gây đau ngực thường phản ánh tình trạng thiếu máu cơ tim khi hoạt động thể lực, một biểu hiện lâm sàng phổ biến ở bệnh nhân tim mạch. Do đó, việc xem xét mối liên hệ giữa exang và target giúp đánh giá liệu dấu hiệu đau ngực khi gắng sức có phải là chỉ báo đáng tin cậy của bệnh tim hay không. Phân tích thống kê mối liên hệ giữa hai biến này sẽ cung cấp bằng chứng định lượng hỗ trợ cho các nhận định lâm sàng trong thực tiễn chẩn đoán và sàng lọc sớm bệnh tim.
tb4 <- table(st$exang, st$target)
addmargins(tb4)
##
## 0 1 Sum
## 0 225 455 680
## 1 274 71 345
## Sum 499 526 1025
st4 <- as.data.frame(tb4)
colnames(st4) <- c("exang", "target", "Frequency")
ggplot(st4, aes(x = exang, y = Frequency, fill = target)) +
geom_bar(stat = "identity", position = "dodge") +
labs (title = "Phân bố tần số nguy cơ mắc bệnh tim theo đau thắt ngực", x = "Tần suất nguy cơ mắc bệnh tim", y = "Tần suất") +
theme_minimal()
Có 680 người không xuất hiện đau ngực khi vận động (exang = 0), trong đó 455 người (66,9%) được chẩn đoán mắc bệnh tim (target = 1) và 225 người (33,1%) không mắc bệnh. Ngược lại, 345 người có biểu hiện đau ngực khi gắng sức (exang = 1), nhưng chỉ có 71 người (20,6%) trong số đó mắc bệnh tim và 274 người (79,4%) không mắc bệnh.
Điều này cho thấy tỷ lệ mắc bệnh tim cao hơn rõ rệt ở nhóm không xuất hiện đau ngực khi gắng sức so với nhóm có triệu chứng. Mặc dù điều này có thể gây ngạc nhiên về mặt lâm sàng – khi gắng sức gây đau ngực thường được xem là dấu hiệu của bệnh tim – nhưng kết quả thống kê lại gợi ý rằng trong bộ dữ liệu này, nhóm không đau ngực khi gắng sức lại có tỷ lệ mắc bệnh cao hơn. Kết quả này cần được phân tích sâu hơn với các chỉ số đo lường rủi ro (như odds ratio, relative risk) và kiểm định thống kê để đưa ra kết luận có ý nghĩa.
Để đánh giá liệu có mối liên hệ thống kê giữa tình trạng đau ngực khi vận động và nguy cơ mắc bệnh tim, ta thực hiện kiểm định Chi-bình phương. Giả thuyết được phát biểu như sau:
Giả thuyết không (\(H_0\)): Không có mối liên hệ giữa đau ngực khi vận động và nguy cơ mắc bệnh tim (hai biến độc lập).
Giả thuyết đối (\(H_1\)): Có mối liên hệ giữa đau ngực khi vận động và nguy cơ mắc bệnh tim (hai biến không độc lập).
chisq.test(tb4)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tb4
## X-squared = 194.82, df = 1, p-value < 2.2e-16
Vì giá trị p rất nhỏ (gần bằng 0), ta bác bỏ giả thuyết \(H_0\), tức là bác bỏ giả thuyết rằng hai biến exang và target không có mối liên hệ với nhau trong tổng thể. Nói cách khác, kết quả kiểm định chỉ ra rằng có mối liên hệ thống kê có ý nghĩa giữa triệu chứng đau ngực khi gắng sức và khả năng mắc bệnh tim. Mối liên hệ này không phải là ngẫu nhiên mà có thể phản ánh một đặc điểm lâm sàng quan trọng trong bộ dữ liệu.
riskratio(tb4)
## $data
##
## 0 1 Total
## 0 225 455 680
## 1 274 71 345
## Total 499 526 1025
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## 0 1.0000000 NA NA
## 1 0.3075649 0.2483306 0.3809283
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## 0 NA NA NA
## 1 0 1.741092e-46 1.115508e-44
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Nhóm có đau ngực khi gắng sức có nguy cơ mắc bệnh tim chỉ bằng khoảng 30.8% so với nhóm không đau ngực. Vì khoảng tin cậy không bao gồm giá trị 1 và p-value gần bằng 0, kết quả này có ý nghĩa thống kê mạnh. Tuy nhiên, kết luận này trái ngược với hiểu biết lâm sàng, vốn cho rằng đau ngực khi gắng sức là dấu hiệu tăng nguy cơ bệnh tim.
oddsratio(tb4)
## $data
##
## 0 1 Total
## 0 225 455 680
## 1 274 71 345
## Total 499 526 1025
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## 0 1.000000 NA NA
## 1 0.128607 0.09413531 0.1738232
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## 0 NA NA NA
## 1 0 1.741092e-46 1.115508e-44
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Những người trong nhóm có triệu chứng đau ngực khi gắng sức (exang = 1) có odds mắc bệnh tim chỉ bằng khoảng 12.86% so với nhóm không có triệu chứng này (exang = 0).
Để đánh giá các yếu tố ảnh hưởng đến nguy cơ mắc bệnh tim, mô hình hồi quy logit được sử dụng với biến phụ thuộc là target, đại diện cho tình trạng bệnh tim (1 = có bệnh, 0 = không bệnh). Mô hình này cho phép ước lượng xác suất xảy ra biến cố (mắc bệnh tim) dựa trên các đặc điểm cá nhân và lâm sàng của bệnh nhân.
Các biến độc lập được đưa vào mô hình bao gồm:
sex: giới tính của bệnh nhân (1 = nam, 0 = nữ).
thalach: Nhịp tim tối đa đạt được khi vận động (nhịp/phút).
exang: tình trạng đau ngực khi gắng sức (1 = có, 0 = không).
cp: kiểu đau ngực, được chia thành nhiều dạng (đau thắt ngực điển hình, không điển hình, không đau ngực…).
Việc lựa chọn các biến này dựa trên cơ sở y học và kết quả phân tích thống kê mô tả trước đó, cho thấy các yếu tố này có mối liên hệ đáng kể với nguy cơ mắc bệnh tim. Mô hình logit sẽ cho phép xác định mức độ ảnh hưởng của từng yếu tố đến xác suất mắc bệnh, đồng thời giúp dự báo nguy cơ bệnh tim ở các cá nhân mới dựa trên thông tin đầu vào.
st$sex <- as.factor(st$sex)
st$thal <- as.factor(st$thal)
st$cp <- as.factor(st$cp)
st$exang <- as.factor(st$exang)
# Chuyển đổi biến định tính
st$target <- factor(st$target, levels = c("1", "0"))
logit <- glm(factor(target) ~ sex + exang + thalach + cp, family = binomial(link = "logit"), data = st)
summary(logit)
##
## Call:
## glm(formula = factor(target) ~ sex + exang + thalach + cp, family = binomial(link = "logit"),
## data = st)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 4.378764 0.644777 6.791 1.11e-11 ***
## sex1 1.584194 0.190180 8.330 < 2e-16 ***
## exang1 0.970151 0.191341 5.070 3.97e-07 ***
## thalach -0.032756 0.004222 -7.758 8.65e-15 ***
## cp1 -1.869354 0.253230 -7.382 1.56e-13 ***
## cp2 -1.869402 0.202157 -9.247 < 2e-16 ***
## cp3 -1.510587 0.295003 -5.121 3.05e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1420.24 on 1024 degrees of freedom
## Residual deviance: 928.28 on 1018 degrees of freedom
## AIC: 942.28
##
## Number of Fisher Scoring iterations: 5
Từ kết quả hồi quy logistic, ta có phương trình ước lượng như sau:
\[ \ln\left(\frac{1 - \pi}{\pi}\right) = 4.378764 + 1.584194 \cdot \text{sex1} + 0.970151 \cdot \text{exang1} - 0.032756 \cdot \text{thalach} - 1.869354 \cdot \text{cp1} - 1.869402 \cdot \text{cp2} - 1.510587 \cdot \text{cp3} \]
Giới tính (sex1): Hệ số dương (1.584194) cho thấy nam giới có xác suất mắc bệnh tim cao hơn nữ giới. Hệ số này có ý nghĩa thống kê và thể hiện rằng khi giới tính là nam (sex1 = 1), xác suất mắc bệnh tim tăng lên. Nếu quy đổi sang Odds Ratio từ mô hình Logit tương đương, tỷ lệ mắc bệnh tim ở nam giới cao hơn 2.46 lần so với nữ giới.
Đau thắt ngực khi gắng sức (exang1): Hệ số 0.970151 cho thấy những người có biểu hiện đau thắt ngực khi gắng sức (exang1 = 1) có xác suất mắc bệnh tim cao hơn. Theo Odds Ratio từ mô hình Logit, nhóm này có nguy cơ cao hơn 1.75 lần so với nhóm không bị đau thắt ngực khi gắng sức.
Nhịp tim tối đa (thalach): Hệ số âm (-0.032756) thể hiện rằng khi nhịp tim tối đa tăng thêm 1 đơn vị, xác suất mắc bệnh tim giảm nhẹ, điều này phù hợp với thực tế lâm sàng rằng người có thể đạt nhịp tim cao hơn thường có tim khỏe hơn.
Kiểu đau ngực (cp1, cp2, cp3): So với nhóm tham chiếu là kiểu đau ngực loại 4 (typical angina), các nhóm cp1 (không đau ngực), cp2 (đau ngực không điển hình), cp3 (không có triệu chứng) đều có hệ số âm lớn, lần lượt là -1.869354, -1.869402 và -1.510587. Điều này cho thấy các nhóm này có xác suất mắc bệnh tim thấp hơn nhóm tham chiếu. Nếu quy đổi từ mô hình Logit, Odds Ratio của nhóm cp1, cp2, cp3 lần lượt là khoảng 0.34, 0.32, và 0.40, nghĩa là các nhóm này có nguy cơ mắc bệnh tim chỉ bằng khoảng 30–40% so với nhóm đau ngực điển hình.
Trong nghiên cứu này, mô hình hồi quy Probit được sử dụng nhằm phân tích xác suất mắc bệnh tim (target) dựa trên một số yếu tố nguy cơ, bao gồm giới tính (sex), tình trạng đau thắt ngực do gắng sức (exang), nhịp tim tối đa đạt được khi vận động (thalach) và loại cơn đau ngực (cp).
# Chuyển đổi biến định tính
st$target <- factor(st$target, levels = c("1","0"))
probit <- glm(factor(target) ~ sex+ exang + thalach + cp,
family = binomial(link = "probit"), data = st)
summary(probit)
##
## Call:
## glm(formula = factor(target) ~ sex + exang + thalach + cp, family = binomial(link = "probit"),
## data = st)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.458872 0.367135 6.697 2.12e-11 ***
## sex1 0.899068 0.106304 8.458 < 2e-16 ***
## exang1 0.560620 0.111361 5.034 4.80e-07 ***
## thalach -0.018355 0.002389 -7.683 1.55e-14 ***
## cp1 -1.066360 0.144238 -7.393 1.44e-13 ***
## cp2 -1.127022 0.117102 -9.624 < 2e-16 ***
## cp3 -0.904847 0.174678 -5.180 2.22e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1420.24 on 1024 degrees of freedom
## Residual deviance: 929.56 on 1018 degrees of freedom
## AIC: 943.56
##
## Number of Fisher Scoring iterations: 5
Mô hình Probit ước lượng xác suất xảy ra sự kiện target = 1 (có bệnh tim) như sau:
\[ \phi^{-1}(P(\text{target} = 1)) = 2.458872 + 0.899068 \cdot \text{sex1} + 0.560620 \cdot \text{exang1} - 0.018355 \cdot \text{thalach} - 1.066360 \cdot \text{cp1} - 1.127022 \cdot \text{cp2} - 0.904847 \cdot \text{cp3} \]
Giới tính (sex1): Hệ số dương (0.899068) cho thấy nam giới có xác suất mắc bệnh tim cao hơn nữ giới. Hệ số này có ý nghĩa thống kê và thể hiện rằng khi giới tính là nam (sex1 = 1), xác suất mắc bệnh tim tăng lên.
7emsp; Đau thắt ngực khi gắng sức (exang1): Hệ số 0.560620 cho thấy những người có biểu hiện đau thắt ngực khi gắng sức (exang1 = 1) có xác suất mắc bệnh tim cao hơn.
Nhịp tim tối đa (thalach): Hệ số âm (-0.018355) thể hiện rằng khi nhịp tim tối đa tăng thêm 1 đơn vị, xác suất mắc bệnh tim giảm nhẹ, điều này phù hợp với thực tế lâm sàng rằng người có thể đạt nhịp tim cao hơn thường có tim khỏe hơn.
Kiểu đau ngực (cp1, cp2, cp3): So với nhóm tham chiếu là kiểu đau ngực loại 4 (typical angina), các nhóm cp1 (không đau ngực), cp2 (đau ngực không điển hình), cp3 (đau không do tim) đều có hệ số âm lớn, lần lượt là -1.066360, -1.127022 và -0.904847. Điều này cho thấy các nhóm này có xác suất mắc bệnh tim thấp hơn nhóm tham chiếu.
Trong nghiên cứu này, để phân tích các yếu tố ảnh hưởng đến nguy cơ mắc bệnh tim, chúng tôi sử dụng mô hình hồi quy tuyến tính tổng quát với hàm liên kết complementary log-log (cloglog). Mô hình này đặc biệt phù hợp trong các trường hợp biến phụ thuộc dạng nhị phân mà xác suất xảy ra sự kiện (ở đây là khả năng mắc bệnh tim) có xu hướng thấp hoặc phân bố bất đối xứng, không tuân theo giả định cân bằng của các mô hình logit hoặc probit thông thường.
cloglog <- glm(factor(target) ~ sex + exang + thalach + cp,
family = binomial(link = "cloglog"), data = st)
summary(cloglog)
##
## Call:
## glm(formula = factor(target) ~ sex + exang + thalach + cp, family = binomial(link = "cloglog"),
## data = st)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.80978 0.39571 4.573 4.80e-06 ***
## sex1 0.89870 0.12373 7.263 3.77e-13 ***
## exang1 0.56329 0.11339 4.968 6.77e-07 ***
## thalach -0.01690 0.00258 -6.551 5.71e-11 ***
## cp1 -1.32352 0.19278 -6.865 6.63e-12 ***
## cp2 -1.24151 0.14372 -8.639 < 2e-16 ***
## cp3 -0.99591 0.21637 -4.603 4.17e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1420.24 on 1024 degrees of freedom
## Residual deviance: 947.88 on 1018 degrees of freedom
## AIC: 961.88
##
## Number of Fisher Scoring iterations: 5
\[ \log\left(-\log(1 - P(\text{target} = 1 \mid X))\right) = 1.80978 + 0.89870 \cdot \text{sex}1 + 0.56329 \cdot \text{exang}1 - 0.01690 \cdot \text{thalach} - 1.32352 \cdot \text{cp}1 - 1.24151 \cdot \text{cp}2 - 0.99591 \cdot \text{cp}3 \]
Hệ số sex1 = 0.89870: Trong cùng điều kiện, giới tính nam có xác suất mắc bệnh tim cao hơn giới tính nữ.
Hệ số exang1 = 0.56329: Người có biểu hiện đau thắt ngực khi gắng sức có xác suất mắc bệnh tim cao hơn người không có biểu hiện này.
Hệ số thalach = -0.01690: Nhịp tim tối đa có quan hệ nghịch với nguy cơ mắc bệnh tim. Cụ thể, mỗi nhịp tim tăng thêm 1 đơn vị, xác suất mắc bệnh tim giảm nhẹ.
Các hệ số cp1, cp2, cp3 đều âm và có giá trị lớn tuyệt đối: cho thấy các kiểu đau ngực không điển hình (cp1, cp2, cp3) có xác suất mắc bệnh tim thấp hơn đáng kể so với kiểu đau ngực điển hình (cp0 – nhóm tham chiếu).
AIC(logit)
## [1] 942.2818
AIC(probit)
## [1] 943.5639
AIC(cloglog)
## [1] 961.8841
Kết quả cho thấy mô hình logit có AIC thấp nhất (942.2818.), tiếp theo là mô hình probit (9435639.), và cuối cùng là mô hình cloglog với AIC cao hơn đáng kể (961.8841). Như vậy, mô hình logit có giá trị AIC thấp nhất, cho thấy đây là mô hình phù hợp nhất với dữ liệu so với hai mô hình còn lại. Vì vậy, mô hình logit được ưu tiên lựa chọn để phân tích và dự đoán nguy cơ mắc bệnh tim trong nghiên cứu này.
library(DescTools)
## Warning: package 'DescTools' was built under R version 4.3.3
BrierScore(logit)
## [1] 0.1467126
BrierScore(probit)
## [1] 0.1468047
BrierScore(cloglog)
## [1] 0.1482888
Chỉ số Brier Score đo lường độ chính xác của các dự đoán xác suất trong mô hình phân loại nhị phân, được tính bằng bình phương sai giữa xác suất dự đoán và giá trị thực tế. Giá trị Brier Score dao động từ 0 đến 1, trong đó giá trị càng thấp cho thấy mô hình dự đoán càng chính xác.
Kết quả tính toán cho thấy mô hình logit có Brier Score thấp nhất (0.1467126), tiếp theo là probit (0.1468047), và cao nhất là cloglog (0.1482888). Mặc dù sự khác biệt giữa ba mô hình là không lớn về mặt tuyệt đối, nhưng mô hình logit tiếp tục thể hiện hiệu quả dự báo xác suất tốt nhất, phản ánh qua sai số dự đoán nhỏ hơn so với hai mô hình còn lại.
Conf(table(predict(logit, type="response") >=0.5,logit$data$target == '0'))
##
## Confusion Matrix and Statistics
##
## Reference
## Prediction FALSE TRUE
## FALSE 413 123
## TRUE 113 376
##
## Total n : 1'025
## Accuracy : 0.7698
## 95% CI : (0.7430, 0.7945)
## No Information Rate : 0.5132
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.5390
## Mcnemar's Test P-Value : 0.5580
##
## Sensitivity : 0.7852
## Specificity : 0.7535
## Pos Pred Value : 0.7705
## Neg Pred Value : 0.7689
## Prevalence : 0.5132
## Detection Rate : 0.5229
## Detection Prevalence : 0.4029
## Balanced Accuracy : 0.7693
## F-val Accuracy : 0.7778
## Matthews Cor.-Coef : 0.5391
##
## 'Positive' Class : FALSE
Conf(table(predict(probit, type="response") >=0.5,probit$data$target == '0'))
##
## Confusion Matrix and Statistics
##
## Reference
## Prediction FALSE TRUE
## FALSE 423 123
## TRUE 103 376
##
## Total n : 1'025
## Accuracy : 0.7795
## 95% CI : (0.7531, 0.8038)
## No Information Rate : 0.5132
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.5583
## Mcnemar's Test P-Value : 0.2063
##
## Sensitivity : 0.8042
## Specificity : 0.7535
## Pos Pred Value : 0.7747
## Neg Pred Value : 0.7850
## Prevalence : 0.5132
## Detection Rate : 0.5327
## Detection Prevalence : 0.4127
## Balanced Accuracy : 0.7788
## F-val Accuracy : 0.7892
## Matthews Cor.-Coef : 0.5587
##
## 'Positive' Class : FALSE
Conf(table(predict(cloglog, type="response") >=0.5,cloglog$data$target == '0'))
##
## Confusion Matrix and Statistics
##
## Reference
## Prediction FALSE TRUE
## FALSE 440 136
## TRUE 86 363
##
## Total n : 1'025
## Accuracy : 0.7834
## 95% CI : (0.7572, 0.8075)
## No Information Rate : 0.5132
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.5654
## Mcnemar's Test P-Value : 0.0010
##
## Sensitivity : 0.8365
## Specificity : 0.7275
## Pos Pred Value : 0.7639
## Neg Pred Value : 0.8085
## Prevalence : 0.5132
## Detection Rate : 0.5620
## Detection Prevalence : 0.4293
## Balanced Accuracy : 0.7820
## F-val Accuracy : 0.7985
## Matthews Cor.-Coef : 0.5681
##
## 'Positive' Class : FALSE
Cloglog là mô hình có độ chính xác (accuracy) và F1-score cao nhất, đồng thời cho Sensitivity vượt trội, cho thấy mô hình này rất phù hợp trong trường hợp mục tiêu là tối ưu hóa khả năng phát hiện ca mắc bệnh (target = 0).
Tuy nhiên, AIC của cloglog lại cao nhất, cho thấy mô hình này phù hợp kém hơn về mặt lý thuyết thống kê.
Trong khi đó, logit có AIC thấp nhất, nên nếu chú trọng đến độ phù hợp mô hình tổng thể (theoretical fit), logit là lựa chọn hợp lý.
Trong nghiên cứu này, các mô hình hồi quy nhị phân bao gồm logit, probit và cloglog đã được sử dụng để phân tích mối liên hệ giữa một số đặc điểm lâm sàng và nguy cơ mắc bệnh tim. Các biến được đưa vào mô hình gồm: giới tính (sex), tình trạng đau ngực khi gắng sức (exang), nhịp tim tối đa đạt được khi vận động (thalach), và kiểu đau ngực (cp).
Kết quả phân tích cho thấy các biến giới tính, đau ngực khi gắng sức, nhịp tim tối đa và kiểu đau ngực đều có ý nghĩa thống kê trong việc dự đoán xác suất mắc bệnh tim, trong đó:
Giới tính nam, có đau ngực khi gắng sức, và các kiểu đau ngực không điển hình đều làm tăng nguy cơ mắc bệnh tim.
Ngược lại, nhịp tim tối đa cao hơn lại cho thấy khả năng mắc bệnh tim giảm, phù hợp với giả định lâm sàng rằng người có khả năng đạt nhịp tim cao thường có tim khỏe mạnh hơn.
Mặc dù thống kê mô tả ban đầu cho thấy nữ giới có tỷ lệ mắc bệnh tim cao hơn nam giới trong bộ dữ liệu, kết quả hồi quy lại chỉ ra rằng giới tính nam là yếu tố làm tăng xác suất mắc bệnh tim khi đã kiểm soát các yếu tố khác. Điều này cho thấy sự cần thiết phải xem xét các ảnh hưởng đồng thời (tương tác hoặc nhiễu) giữa các biến trong mô hình hồi quy, thay vì chỉ dựa vào thống kê đơn biến.
Ngoài ra, một điểm đáng chú ý là biến exang (đau ngực khi gắng sức) có chiều ảnh hưởng ngược với kỳ vọng lâm sàng trong thống kê mô tả. Cụ thể, nhóm không đau lại có tỷ lệ mắc bệnh cao hơn. Tuy nhiên, kết quả hồi quy lại phù hợp với kiến thức y học khi cho thấy có đau khi gắng sức làm tăng nguy cơ mắc bệnh. Hiện tượng này có thể do sai lệch trong mã hóa biến, đặc điểm mẫu nghiên cứu hoặc ảnh hưởng từ các biến nhiễu chưa được xem xét đầy đủ.
Về hiệu năng mô hình, logit được lựa chọn là mô hình phù hợp nhất khi so sánh các chỉ số đánh giá, với AIC thấp nhất và Brier Score nhỏ nhất, cho thấy sự phù hợp và khả năng dự đoán xác suất tốt. Trong khi đó, mô hình cloglog có độ chính xác (Accuracy) và độ nhạy (Sensitivity) cao hơn, cho thấy khả năng phát hiện ca mắc bệnh tốt hơn về mặt phân loại. Tuy nhiên, do sự khác biệt về lý thuyết nền tảng và mục tiêu phân tích, mô hình logit vẫn được ưu tiên sử dụng trong nghiên cứu này.
Tổng thể, kết quả nghiên cứu góp phần làm sáng tỏ mối quan hệ giữa các yếu tố lâm sàng và nguy cơ mắc bệnh tim, đồng thời nhấn mạnh tầm quan trọng của việc sử dụng mô hình hồi quy đa biến để đưa ra kết luận chính xác, thay vì chỉ dựa vào các quan sát thống kê đơn thuần. Những phát hiện này có thể hỗ trợ các bác sĩ và chuyên gia y tế trong việc đánh giá nguy cơ và thiết lập chiến lược sàng lọc bệnh tim hiệu quả hơn trong thực hành lâm sàng.
Mặc dù nghiên cứu đã xác định được một số yếu tố có ảnh hưởng đến nguy cơ mắc bệnh tim, vẫn tồn tại một số hạn chế nhất định. Thứ nhất, dữ liệu mang tính cắt ngang, không phản ánh mối quan hệ nhân quả theo thời gian. Thứ hai, nghiên cứu chưa kiểm định hiện tượng đa cộng tuyến giữa các biến độc lập – điều này có thể ảnh hưởng đến tính ổn định của ước lượng. Thứ ba, mặc dù đã ước lượng cả ba mô hình logit, probit và cloglog, nhưng việc đánh giá mô hình chủ yếu dựa trên độ chính xác và ma trận nhầm lẫn mà chưa xem xét các chỉ số bổ sung như AUC, ROC hay kiểm định tốt mức độ phù hợp (goodness-of-fit), khiến cho sự so sánh giữa các mô hình còn hạn chế. Ngoài ra, dữ liệu đầu vào có thể tồn tại sai lệch đo lường hoặc thiếu giá trị tiềm ẩn chưa được xử lý kỹ lưỡng, làm ảnh hưởng đến độ tin cậy của mô hình.