Nguyễn Mai Hà Quyên
2221000322
Bệnh tim mạch hiện đang là một trong những nguyên nhân gây tử vong hàng đầu trên toàn thế giới và có xu hướng ngày càng gia tăng tại các quốc gia đang phát triển, trong đó có Việt Nam. Việc phát hiện sớm các yếu tố nguy cơ đóng vai trò thiết yếu trong phòng ngừa và kiểm soát hiệu quả bệnh. Trong các yếu tố ảnh hưởng đến nguy cơ mắc bệnh tim mạch, bên cạnh các chỉ số sinh hóa hoặc dấu hiệu lâm sàng định lượng, những yếu tố định tính như giới tính, dạng đau ngực, hoặc kết quả điện tâm đồ cũng cho thấy giá trị thông tin quan trọng trong thực hành y tế. Tuy nhiên, do đặc điểm phân loại của các biến định tính, việc đánh giá ảnh hưởng của chúng đòi hỏi phải sử dụng những mô hình thống kê phù hợp, đặc biệt là các mô hình hồi quy cho biến phụ thuộc nhị phân. Trong đó, hồi quy Logistic và hồi quy Probit là hai phương pháp phổ biến, cho phép định lượng xác suất xảy ra biến cố (có hoặc không mắc bệnh tim) dựa trên các biến giải thích định tính. Việc áp dụng đồng thời cả hai mô hình không chỉ giúp so sánh mức độ phù hợp và hiệu quả giải thích của từng phương pháp, mà còn tăng độ tin cậy cho các kết luận rút ra từ nghiên cứu. Chính vì vậy, đề tài Phân tích các yếu tố định tính ảnh hưởng đến nguy cơ mắc bệnh tim mạch được lựa chọn nhằm khai thác vai trò của các biến phân loại trong dự báo nguy cơ mắc bệnh, thông qua việc xây dựng và so sánh mô hình hồi quy Logistic và Probit. Kết quả nghiên cứu kỳ vọng có thể đóng góp vào việc hỗ trợ nhận diện sớm nhóm đối tượng có nguy cơ, đồng thời góp phần cung cấp cơ sở cho các can thiệp y tế dựa trên bằng chứng định lượng.
Đối tượng nghiên cứu trong đề tài này là các cá nhân có hồ sơ bệnh án được ghi nhận trong bộ dữ liệu Heart Disease UCI. Những cá nhân này bao gồm cả người mắc và không mắc bệnh tim mạch, với thông tin định tính như giới tính, loại cơn đau ngực, kết quả điện tâm đồ, tình trạng thalassemia, cùng các yếu tố sinh lý và tiền sử y tế khác. Nghiên cứu không đi sâu vào đặc điểm bệnh lý mà tập trung vào phân tích các yếu tố định tính có khả năng ảnh hưởng đến nguy cơ mắc bệnh tim mạch. Phạm vi nghiên cứu: bộ dữ liệu gồm 920 quan sát, được thu thập từ nhiều nguồn khác nhau, phản ánh sự đa dạng về đặc điểm nhân khẩu học và lâm sàng. Các biến được chọn lọc từ dữ liệu sẽ được phân tích bằng mô hình hồi quy logistic và hồi quy probit nhằm đánh giá mức độ ảnh hưởng của từng yếu tố định tính đến xác suất mắc bệnh tim. Nghiên cứu được thực hiện trên dữ liệu thứ cấp, không có can thiệp thực nghiệm, và mang tính chất phân tích, khám phá mối quan hệ giữa các đặc điểm nhân khẩu học và y tế với kết quả sức khỏe tim mạch.
Nghiên cứu được thực hiện theo phương pháp định lượng, dựa trên dữ liệu thứ cấp từ bộ dữ liệu Heart Disease UCI. Các thao tác xử lý, trực quan hóa và phân tích dữ liệu được thực hiện trên phần mềm RStudio. Ở bước đầu, thống kê mô tả sẽ được sử dụng nhằm khám phá và tổng quan hóa các đặc điểm cơ bản của tập dữ liệu, bao gồm cả các biến định tính và định lượng. Các bảng tần suất, biểu đồ cột và biểu đồ phân phối sẽ hỗ trợ việc hiểu rõ hơn về cấu trúc dữ liệu và xu hướng phân bố giữa các nhóm bệnh nhân. Tiếp theo, nhằm xác định các yếu tố có ảnh hưởng đáng kể đến khả năng mắc bệnh tim (biến phụ thuộc nhị phân), nghiên cứu sẽ áp dụng hai mô hình hồi quy nhị phân là hồi quy logistic và hồi quy probit. Cả hai mô hình sẽ giúp ước lượng xác suất xảy ra biến cố (bệnh tim) dựa trên các biến độc lập định tính được chọn lọc. Cuối cùng, hiệu quả dự báo của các mô hình sẽ được đánh giá thông qua các chỉ số như ma trận nhầm lẫn (confusion matrix), độ chính xác (Accuracy), độ nhạy (Sensitivity), và độ đặc hiệu (Specificity). Việc so sánh hai mô hình logistic và probit sẽ cung cấp thêm góc nhìn về mức độ phù hợp và khả năng ứng dụng thực tiễn của từng mô hình trong dự báo nguy cơ bệnh tim.
Bệnh tim mạch (Cardiovascular Diseases - CVDs) là nhóm bệnh liên quan đến tim và hệ thống mạch máu, bao gồm các bệnh như bệnh mạch vành, bệnh tim bẩm sinh, bệnh mạch máu não, bệnh tim do tăng huyết áp và suy tim. Theo Tổ chức Y tế Thế giới (WHO), năm 2019 có khoảng 17,9 triệu người tử vong do các bệnh tim mạch, chiếm 32% tổng số ca tử vong toàn cầu. Trong số đó, hơn 85% là do nhồi máu cơ tim và đột quỵ. Các yếu tố nguy cơ chính gây bệnh tim mạch bao gồm: hút thuốc lá, chế độ ăn không lành mạnh, lối sống ít vận động, lạm dụng rượu bia, tăng huyết áp, đái tháo đường và rối loạn lipid máu. Béo phì và tình trạng căng thẳng kéo dài cũng được ghi nhận là những yếu tố nguy cơ đáng lưu ý. Ngoài ra, yếu tố di truyền, tuổi cao và giới tính nam cũng góp phần làm tăng nguy cơ mắc bệnh tim mạch. WHO ước tính có khoảng 1,13 tỷ người trên thế giới đang bị tăng huyết áp – một yếu tố nguy cơ hàng đầu của bệnh lý tim mạch. Các biểu hiện lâm sàng của bệnh tim mạch thay đổi tùy theo loại bệnh, nhưng phổ biến nhất là cảm giác đau thắt ngực, khó thở, mệt mỏi, đánh trống ngực, phù chi dưới hoặc ngất. Một số trường hợp không có triệu chứng rõ ràng cho đến khi xảy ra biến cố tim mạch cấp tính như nhồi máu cơ tim hoặc đột quỵ. Điều này gây khó khăn trong việc phát hiện và can thiệp sớm. Chẩn đoán bệnh tim mạch thường dựa trên khai thác triệu chứng, tiền sử cá nhân và gia đình, kết hợp với các xét nghiệm cận lâm sàng như điện tâm đồ (ECG), siêu âm tim, chụp mạch và xét nghiệm sinh hóa. Việc kiểm soát các yếu tố nguy cơ là chìa khóa trong dự phòng bệnh tim mạch. WHO khuyến nghị tăng cường hoạt động thể chất (ít nhất 150 phút/tuần với cường độ vừa phải), giảm lượng muối trong khẩu phần ăn xuống dưới 5g/ngày, hạn chế chất béo bão hòa, ngừng hút thuốc và hạn chế rượu bia. Việc điều trị sớm tăng huyết áp, đái tháo đường và rối loạn mỡ máu có thể làm giảm đáng kể nguy cơ biến cố tim mạch. Tại Việt Nam, theo thống kê của Bộ Y tế, bệnh tim mạch là nguyên nhân gây tử vong hàng đầu, chiếm khoảng 31% tổng số ca tử vong mỗi năm. Gánh nặng bệnh tim mạch đang có xu hướng gia tăng, đặc biệt ở nhóm tuổi trung niên và người cao tuổi. Trong bối cảnh đó, việc sử dụng các mô hình thống kê và học máy để phân tích dữ liệu, nhận diện yếu tố nguy cơ và dự báo khả năng mắc bệnh tim mạch là cần thiết. Những mô hình này có thể hỗ trợ trong công tác tầm soát, can thiệp sớm và hoạch định chính sách y tế cộng đồng một cách hiệu quả hơn.
Mô hình hồi quy nhị phân là một phương pháp thống kê thuộc nhóm mô hình hồi quy tổng quát, được sử dụng khi biến phụ thuộc là biến định tính nhị phân, tức chỉ nhận hai giá trị phân biệt. Trong thực hành, giá trị này thường được mã hóa dưới dạng 0 và 1, phản ánh hai trạng thái đối lập, chẳng hạn như có bệnh và không có bệnh, thành công và thất bại, hoặc chấp nhận và từ chối. Mục tiêu của mô hình là ước lượng xác suất xảy ra của sự kiện mang giá trị 1 dựa trên các biến giải thích định lượng hoặc định tính.
Mô hình hồi quy nhị phân được phát triển từ các nghiên cứu đầu thế kỷ XX. Mô hình Probit được đề xuất bởi Chester Ittner Bliss vào năm 1934 và mô hình Logit (logistic regression) được phát triển có hệ thống bởi David Cox vào năm 1958. Cả hai mô hình đều sử dụng hàm liên kết phi tuyến để đảm bảo xác suất dự báo nằm trong khoảng [0;1], nhưng khác nhau về giả định phân phối. Cụ thể, mô hình Probit sử dụng hàm phân phối tích lũy chuẩn (normal CDF), còn Logit sử dụng hàm logistic.
Dạng tổng quát của mô hình hồi quy nhị phân được biểu diễn như sau: \[ P(Y = 1|X) = \frac{1}{1 + e^{-z}} \\ z = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_k X_k \] Trong đó:
\(Y\) là biến phụ thuộc nhị phân;
\(X_1, X_2, \ldots, X_k\) là các biến độc lập;
\(\beta_0, \beta_1, \ldots, \beta_k\) là các hệ số ước lượng;
\(F(\cdot)\) là hàm liên kết xác suất.
Ưu điểm chính của mô hình hồi quy nhị phân là khả năng mô hình hóa xác suất của các sự kiện rời rạc trên cơ sở các biến giải thích định lượng hoặc định tính, đồng thời cung cấp cơ sở cho việc kiểm định ý nghĩa thống kê của từng yếu tố ảnh hưởng đến xác suất xảy ra của biến phụ thuộc.
Mô hình Logistic (hay còn gọi là mô hình Logit) là một dạng đặc biệt của mô hình hồi quy nhị phân, đượ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 \(Y\) và một hoặc nhiều biến độc lập \(X_1, X_2, \ldots, X_k\). Trong mô hình này, xác suất xảy ra của sự kiện \(Y = 1\) được biểu diễn thông qua hàm logistic.
Mô hình Logit được giới thiệu và phát triển bởi David Cox vào năm 1958, dựa trên ý tưởng biến đổi tuyến tính thành xác suất thông qua hàm liên kết logit. Đây là phương pháp phổ biến trong phân tích dữ liệu y học, kinh tế lượng và các ngành khoa học xã hội khi biến phụ thuộc chỉ có hai trạng thái. Dạng tổng quát của mô hình Logit được viết như sau: \[ P(Y = 1 \mid X_1, X_2, \ldots, X_k) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 X_1 + \beta_2 X_2 + \ldots + \beta_k X_k)}} \]
Trong đó:
\(P(Y = 1)\) là xác suất xảy ra của biến phụ thuộc;
\(\beta_0\) là hệ số chặn (intercept);
\(\beta_1, \beta_2, \ldots, \beta_k\) là các hệ số hồi quy tương ứng với từng biến độc lập;
\(e\) là cơ số của logarit tự nhiên, xấp xỉ 2.718. Hàm logistic đảm bảo rằng giá trị dự đoán của xác suất luôn nằm trong khoảng từ 0 đến 1, phù hợp với bản chất của biến nhị phân. Mỗi hệ số \(\beta_j\) cho biết ảnh hưởng cận biên của biến \(X_j\) đến log-odds của xác suất xảy ra sự kiện, tức là mức thay đổi logit khi \(X_j\) tăng thêm một đơn vị, giữ các biến còn lại không đổi.
Mô hình Logit thường được ước lượng bằng phương pháp hợp lý cực đại (Maximum Likelihood Estimation - MLE), do phương pháp bình phương tối thiểu không phù hợp với phân phối nhị phân của biến phụ thuộc.
Việc kiểm định ý nghĩa thống kê của các hệ số hồi quy trong mô hình Logit thường sử dụng kiểm định Wald hoặc kiểm định Likelihood Ratio. Đồng thời, các chỉ tiêu đánh giá độ phù hợp của mô hình như chỉ số Akaike (AIC), bảng ma trận nhầm lẫn (confusion matrix) hay hệ số phân biệt (Pseudo R-squared) cũng được áp dụng trong phân tích.
Mô hình Probit là một dạng của mô hình hồi quy nhị phân, được phát triển để xử lý các biến phụ thuộc chỉ nhận hai giá trị (0 hoặc 1). Mô hình được sử dụng phổ biến trong các lĩnh vực như kinh tế học, y tế, khoa học xã hội, nơi mà kết quả đầu ra là một sự lựa chọn giữa hai khả năng, chẳng hạn như có bệnh/không bệnh, mua hàng/không mua hàng, hoặc chấp nhận/từ chối.
Mô hình Probit được giới thiệu bởi Chester Ittner Bliss vào năm 1934, nhằm giải thích xác suất xảy ra của một sự kiện nhị phân thông qua hàm phân phối tích lũy chuẩn (CDF - Cumulative Distribution Function) của phân phối chuẩn chuẩn hoá. Phương pháp này cho phép xác suất được ánh xạ vào khoảng (0;1) mà không vượt ra ngoài giới hạn xác suất.
Dạng tổng quát của mô hình Probit được viết như sau: \[ P(Y = 1 \mid X_1, X_2, \ldots, X_k) = \Phi(\beta_0 + \beta_1 X_1 + \beta_2 X_2 + \ldots + \beta_k X_k) \] Trong đó:
Mô hình Complementary log-log (Cloglog) là một dạng của mô hình hồi quy nhị phân, tương tự như mô hình Logit và Probit, được sử dụng khi biến phụ thuộc là nhị phân (0 hoặc 1). Tuy nhiên, điểm đặc trưng của mô hình Cloglog là nó phù hợp hơn với các tình huống có xác suất xảy ra sự kiện rất nhỏ hoặc rất lớn, tức là phân bố không đối xứng. \[ \log(-\log(1 - P(Y = 1 | X))) = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_k X_k \] Trong đó:
Mô hình xác suất tuyến tính (LPM) là mô hình hồi quy tuyến tính áp
dụng cho biến phụ thuộc nhị phân, trong đó xác suất xảy ra sự kiện được
mô hình hóa như một hàm tuyến tính của các biến độc lập. Mô hình này có
hình thức đơn giản và dễ ước lượng bằng phương pháp bình phương tối
thiểu thông thường (OLS), tuy nhiên tồn tại một số hạn chế về mặt lý
thuyết và thực tiễn. \[
P(Y = 1 | X) = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_k
X_k
\]
Trong đó:
Phương pháp ước lượng Tối đa Hợp lý (MLE) là một trong những kỹ thuật phổ biến nhất để ước lượng các tham số trong các mô hình thống kê, đặc biệt là các mô hình hồi quy nhị phân như Logit, Probit hay Cloglog. MLE tìm giá trị của các tham số sao cho khả năng (xác suất) xảy ra tập dữ liệu quan sát được là lớn nhất.
Giả sử ta có tập dữ liệu gồm \(n\) quan sát độc lập, mỗi quan sát bao gồm một biến phản hồi nhị phân \(y_i \in \{0, 1\}\) và một vector biến giải thích \(x_i\). Ta mô hình hóa xác suất xảy ra sự kiện \(y_i = 1\) bằng một hàm phân phối tích lũy \(F(.)\), với tham số \(\beta\), tức là:
\[ P(y_i = 1 \mid x_i) = F(x_i' \beta) \]
Từ đó, hàm hợp lý (likelihood function) cho toàn bộ tập dữ liệu được viết dưới dạng:
\[ L(\beta) = \prod_{i=1}^{n} [F(x_i' \beta)]^{y_i} [1 - F(x_i' \beta)]^{1 - y_i} \]
Hay nếu lấy log (log-likelihood):
\[ \log L(\beta) = \sum_{i=1}^{n} \left[ y_i \log(F(x_i' \beta)) + (1 - y_i) \log(1 - F(x_i' \beta)) \right] \]
Trong đó:
\(y_i\): biến phụ thuộc nhị phân
(0 hoặc 1)
\(x_i\): vector hàng chứa các
biến độc lập của quan sát thứ \(i\)
\(\beta\): vector hệ số cần ước
lượng
\(F(.)\): hàm phân phối tích lũy, có thể là:
Logit:
\[
F(z) = \frac{1}{1 + \exp(-z)}
\]
Probit:
\[
F(z) = \Phi(z)
\]
Cloglog:
\[
F(z) = 1 - \exp(-\exp(z))
\]
Giá trị ước lượng \(\hat{\beta}\) được tìm bằng cách tối đa hóa hàm log-likelihood theo \(\beta\).
Trong phân tích dữ liệu nhị phân, hai thước đo thường được sử dụng để đánh giá mối liên hệ giữa biến độc lập và xác suất xảy ra biến phụ thuộc (nhị phân) là Relative Risk (RR) và Odds Ratio (OR).
Relative Risk đo lường tỷ lệ xác suất xảy ra sự kiện ở nhóm phơi nhiễm so với nhóm không phơi nhiễm.
Giả sử ta có một biến phân nhóm nhị phân (ví dụ: giới tính, hút thuốc…), thì Risk Ratio (RR) được tính như sau:
\[ RR = \frac{P(y = 1 \mid x = 1)}{P(y = 1 \mid x = 0)} \]
Trong đó:
Ý nghĩa:
Odds Ratio (OR) đo lường tỷ lệ giữa “odds” (tức là tỷ số giữa xác suất xảy ra và không xảy ra của một sự kiện) giữa hai nhóm.
Công thức đầy đủ:
\[ OR = \frac{P(y = 1 \mid x = 1) / P(y = 0 \mid x = 1)}{P(y = 1 \mid x = 0) / P(y = 0 \mid x = 0)} \]
Hoặc rút gọn:
\[ OR = \frac{P_1 / (1 - P_1)}{P_0 / (1 - P_0)} \]
Trong đó:
Ý nghĩa của Odds Ratio:
OR thường được sử dụng trong các nghiên cứu bệnh chứng (case-control studies), nơi ta không biết xác suất thực tế của sự kiện, nhưng có thể so sánh odds giữa hai nhóm.
setwd("C:/Users/Administrator/Downloads")
dldt <- read.csv("C:/Users/Administrator/Downloads/dldt.csv", fileEncoding = "UTF-8-BOM")
Bộ dữ liệu được sử dụng trong nghiên cứu được thu thập từ trang Kaggle, liên quan đến các bệnh nhân mắc hoặc có nguy cơ mắc bệnh tim mạch. Dữ liệu bao gồm các thông tin lâm sàng và cá nhân của bệnh nhân như tuổi tác, giới tính, huyết áp, cholesterol, nhịp tim, kết quả xét nghiệm, v.v. Đây là tập dữ liệu dạng bảng, với mỗi dòng tương ứng với một bệnh nhân. Tổng cộng, bộ dữ liệu có 920 quan sát và được sử dụng để phục vụ cho việc phân tích các yếu tố nguy cơ và xây dựng mô hình dự báo bệnh tim.
head(dldt)
## id age sex dataset cp trestbps chol fbs restecg
## 1 1 63 Male Cleveland typical angina 145 233 TRUE lv hypertrophy
## 2 2 67 Male Cleveland asymptomatic 160 286 FALSE lv hypertrophy
## 3 3 67 Male Cleveland asymptomatic 120 229 FALSE lv hypertrophy
## 4 4 37 Male Cleveland non-anginal 130 250 FALSE normal
## 5 5 41 Female Cleveland atypical angina 130 204 FALSE lv hypertrophy
## 6 6 56 Male Cleveland atypical angina 120 236 FALSE normal
## thalch exang oldpeak slope thal num
## 1 150 FALSE 2.3 downsloping fixed defect No
## 2 108 TRUE 1.5 flat normal Yes
## 3 129 TRUE 2.6 flat reversable defect Yes
## 4 187 FALSE 3.5 downsloping normal No
## 5 172 FALSE 1.4 upsloping normal No
## 6 178 FALSE 0.8 upsloping normal No
Để có cái nhìn tổng quan ban đầu về cấu trúc và nội dung của bộ dữ liệu, ta tiến hành hiển thị 6 dòng đầu tiên của tập dữ liệu dldt. Việc này giúp kiểm tra định dạng, tên biến, kiểu dữ liệu cũng như phát hiện sơ bộ các vấn đề có thể tồn tại trong dữ liệu gốc (như thiếu giá trị, lỗi nhập liệu, v.v.).
sum(is.na(dldt))
## [1] 8
Kết quả kiểm tra cho thấy bộ dữ liệu có tổng cộng 8 giá trị bị thiếu. Điều này cho thấy nhìn chung dữ liệu tương đối đầy đủ, tuy nhiên vẫn tồn tại một số ô trống có thể ảnh hưởng đến kết quả phân tích nếu không được xử lý phù hợp. Vì vậy, trước khi tiến hành phân tích hồi quy, cần xử lý những trường hợp bị thiếu dữ liệu này để đảm bảo độ chính xác và tin cậy của mô hình.
dldt <- na.omit(dldt)
sum(is.na(dldt))
## [1] 0
Sau khi áp dụng phương pháp loại bỏ các dòng dữ liệu chứa giá trị thiếu, kết quả cho thấy không còn giá trị thiếu nào trong bộ dữ liệu. Điều này cho thấy việc xử lý dữ liệu thiếu đã được thực hiện đầy đủ và bộ dữ liệu hiện tại đảm bảo tính đầy đủ cần thiết để phục vụ cho các bước phân tích và xây dựng mô hình hồi quy logistic và probit trong các phần tiếp theo.
Trong nghiên cứu này, mục tiêu là tìm hiểu các yếu tố ảnh hưởng đến nguy cơ mắc bệnh tim mạch. Do đó, biến phụ thuộc (biến mục tiêu) được lựa chọn là biến num, thể hiện tình trạng mắc bệnh tim của bệnh nhân. Biến num đã được chuyển đổi thành biến nhị phân với hai giá trị: “No”: Không mắc bệnh tim , “Yes”: Mắc bệnh tim . Các biến độc lập (biến giải thích) được sử dụng để phân tích mối quan hệ với biến độc lập bao gồm: sex: Giới tính, dataset: Quốc gia, cp: Loại cơn đau ngực, fbs: Đường huyết lúc đói, restecg: Kết quả điện tâm đồ lúc nghỉ, exang: Đau thắt ngực khi gắng sức, slope: Độ dốc của đoạn ST khi gắng sức, thal: Tình trạng thalassemia. Việc lựa chọn các biến độc lập dựa trên cơ sở lý thuyết y khoa cũng như các nghiên cứu trước đó cho thấy chúng có thể ảnh hưởng đáng kể đến nguy cơ mắc bệnh tim mạch. Các biến này sẽ được phân tích chi tiết trong phần thống kê mô tả và kiểm định mô hình.
# Tính tần suất biến num trong dldt
num_freq <- table(dldt$num)
# Tính tỷ lệ phần trăm
num_prop <- prop.table(num_freq) * 100
# Tạo bảng tóm tắt
num_summary <- data.frame(
Tình_trạng_bệnh_tim = names(num_freq),
Tần_suất = as.vector(num_freq),
Tỷ_lệ_phần_trăm = round(as.vector(num_prop), 2)
)
# Hiển thị bảng
print(num_summary)
## Tình_trạng_bệnh_tim Tần_suất Tỷ_lệ_phần_trăm
## 1 No 411 45.02
## 2 Yes 502 54.98
Kết quả phân tích biến num cho thấy trong dữ liệu, nhóm không mắc bệnh tim (“No”) chiếm 44,67% với 411 quan sát, trong khi nhóm mắc bệnh tim (“Yes”) chiếm tỷ lệ cao hơn, 55,33% tương ứng với 509 quan sát. Sự phân bố này phản ánh mức độ phổ biến tương đối của bệnh tim trong quần thể nghiên cứu. Tỷ lệ phân bố giữa hai nhóm là cơ sở quan trọng để đánh giá các yếu tố ảnh hưởng đến nguy cơ mắc bệnh tim trong các phân tích tiếp theo.
install.packages("ggplot2")
## package 'ggplot2' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\Administrator\AppData\Local\Temp\Rtmp6D3pJD\downloaded_packages
library(ggplot2)
ggplot(dldt, aes(x = num, fill = num)) +
geom_bar(width = 0.6) +
geom_text(stat = "count", aes(label = ..count..), vjust = -0.5) +
labs(title = "Tần suất tình trạng bệnh tim",
x = "Tình trạng bệnh tim",
y = "Tần suất") +
scale_fill_manual(values = c("No" = "blue", "Yes" = "red")) +
theme_minimal()
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
sex_freq <- table(dldt$sex)
sex_prop <- prop.table(sex_freq) * 100
# Tạo bảng tóm tắt
sex_summary <- data.frame(
Gioi_tinh = names(sex_freq),
Tan_suat = as.vector(sex_freq),
Ty_le_phan_tram = round(as.vector(sex_prop), 2)
)
print(sex_summary)
## Gioi_tinh Tan_suat Ty_le_phan_tram
## 1 Female 194 21.25
## 2 Male 719 78.75
Kết quả phân tích biến giới tính trong dữ liệu cho thấy nhóm nam giới chiếm ưu thế với 78,91% tổng số quan sát, tương ứng 726 trường hợp, trong khi nhóm nữ giới chiếm 21,09% với 194 trường hợp. Sự phân bố không đồng đều này có thể phản ánh đặc điểm dân số hoặc cách thu thập dữ liệu trong nghiên cứu. Việc chênh lệch tỷ lệ giới tính như trên cần được xem xét cẩn trọng trong các phân tích tiếp theo, vì giới tính có thể ảnh hưởng đến nguy cơ mắc bệnh tim cũng như các yếu tố liên quan khác.
ggplot(dldt, aes(x = sex, fill = sex)) +
geom_bar(width = 0.6) +
geom_text(stat = "count", aes(label = ..count..), vjust = -0.5) +
labs(title = "Tần suất giới tính trong dữ liệu",
x = "Giới tính",
y = "Tần suất") +
scale_fill_manual(values = c("Female" = "pink", "Male" = "lightblue")) +
theme_minimal()
dataset_freq <- table(dldt$dataset)
dataset_prop <- prop.table(dataset_freq) * 100
dataset_summary <- data.frame(
Dataset = names(dataset_freq),
Tan_suat = as.vector(dataset_freq),
Ty_le_phan_tram = round(as.vector(dataset_prop), 2)
)
print(dataset_summary)
## Dataset Tan_suat Ty_le_phan_tram
## 1 Cleveland 304 33.30
## 2 Hungary 291 31.87
## 3 Switzerland 123 13.47
## 4 VA Long Beach 195 21.36
Biến dataset trong dữ liệu cho thấy sự phân bố tương đối đa dạng giữa các nguồn dữ liệu. Cụ thể, Cleveland chiếm tỷ lệ cao nhất với 33,04% (304 quan sát), tiếp theo là Hungary với 31,85% (293 quan sát). Switzerland chiếm tỷ lệ thấp nhất, chỉ 13,37% (123 quan sát), trong khi VA Long Beach chiếm 21,74% (200 quan sát). Sự phân bố này phản ánh sự đa dạng về nguồn gốc địa lý của dữ liệu thu thập được, điều này cần được xem xét kỹ lưỡng trong các phân tích tiếp theo nhằm tránh sai lệch do sự không đồng đều về nguồn dữ liệu. Việc hiểu rõ đặc điểm phân bố này giúp đảm bảo tính khách quan và độ tin cậy trong việc đánh giá các yếu tố ảnh hưởng đến bệnh tim mạch.
ggplot(dldt, aes(x = dataset, fill = dataset)) +
geom_bar(width = 0.6) +
geom_text(stat = "count", aes(label = ..count..), vjust = -0.5) +
labs(title = "Tần suất các nguồn dữ liệu (dataset)",
x = "Nguồn dữ liệu",
y = "Tần suất") +
theme_minimal()
cp_freq <- table(dldt$cp)
cp_prop <- prop.table(cp_freq) * 100
cp_summary <- data.frame(
Loai_con_dau_ngu = names(cp_freq),
Tan_suat = as.vector(cp_freq),
Ty_le_phan_tram = round(as.vector(cp_prop), 2)
)
print(cp_summary)
## Loai_con_dau_ngu Tan_suat Ty_le_phan_tram
## 1 asymptomatic 492 53.89
## 2 atypical angina 174 19.06
## 3 non-anginal 201 22.02
## 4 typical angina 46 5.04
Biến cp (loại cơn đau ngực) trong dữ liệu là biến định tính với bốn nhóm phân loại chính. Kết quả thống kê cho thấy nhóm asymptomatic (không triệu chứng) chiếm tỷ lệ lớn nhất với 53,91% (496 quan sát), tiếp theo là nhóm non-anginal (đau không phải do tim) với 22,17% (204 quan sát) và nhóm atypical angina (đau thắt ngực không điển hình) chiếm 18,91% (174 quan sát). Nhóm có tỷ lệ thấp nhất là typical angina (đau thắt ngực điển hình), chỉ chiếm 5,00% (46 quan sát). Phân bố này phản ánh sự đa dạng các triệu chứng cơn đau ngực trong nhóm nghiên cứu, đồng thời cho thấy phần lớn bệnh nhân không có triệu chứng rõ ràng (không triệu chứng). Việc phân tích chi tiết biến này sẽ giúp làm rõ mối liên hệ giữa từng loại cơn đau ngực và nguy cơ mắc bệnh tim mạch, hỗ trợ trong việc chẩn đoán và điều trị phù hợp.
ggplot(dldt, aes(x = cp, fill = cp)) +
geom_bar(width = 0.6) +
geom_text(stat = "count", aes(label = ..count..), vjust = -0.5) +
labs(title = "Tần suất loại cơn đau ngực (cp)",
x = "Loại cơn đau ngực",
y = "Tần suất") +
theme_minimal()
fbs_freq <- table(dldt$fbs)
fbs_prop <- prop.table(fbs_freq) * 100
fbs_summary <- data.frame(
Duong_huyet_luc_doi = names(fbs_freq),
Tan_suat = as.vector(fbs_freq),
Ty_le_phan_tram = round(as.vector(fbs_prop), 2)
)
print(fbs_summary)
## Duong_huyet_luc_doi Tan_suat Ty_le_phan_tram
## 1 2 0.22
## 2 FALSE 754 82.58
## 3 TRUE 142 15.55
## 4 TRUE 15 1.64
Biến fbs (đường huyết lúc đói) là biến định tính dạng logic, phản ánh việc người bệnh có đường huyết lúc đói > 120 mg/dl hay không. Kết quả thống kê cho thấy: - Nhóm FALSE (không có đường huyết cao): 761 trường hợp, chiếm 82,72%. - Nhóm TRUE (có đường huyết cao): 142 trường hợp (15,43%) và 15 trường hợp (1,63%) cũng mang nhãn TRUE, cần kiểm tra khả năng trùng lặp hoặc sai lệch dữ liệu. - Có 2 trường hợp không có giá trị (0,22%). Tỷ lệ phân bố cho thấy phần lớn bệnh nhân không có đường huyết cao lúc đói. Tuy nhiên, tỷ lệ nhóm TRUE vẫn ở mức đáng kể và có thể là yếu tố nguy cơ cần đưa vào phân tích. Sự xuất hiện của giá trị thiếu và khả năng trùng lặp cần được xử lý trước khi tiến hành các phân tích tiếp theo nhằm đảm bảo tính chính xác của mô hình.
ggplot(dldt, aes(x = fbs, fill = fbs)) +
geom_bar(width = 0.6) +
geom_text(stat = "count", aes(label = ..count..), vjust = -0.5) +
labs(title = "Tần suất đường huyết lúc đói (fbs)",
x = "Đường huyết lúc đói",
y = "Tần suất") +
scale_fill_manual(values = c("FALSE" = "green", "TRUE" = "red"),
labels = c("Bình thường", "Cao")) +
theme_minimal()
restecg_freq <- table(dldt$restecg, useNA = "ifany")
restecg_prop <- prop.table(restecg_freq) * 100
restecg_summary <- data.frame(
Dien_tam_do_nghi = names(restecg_freq),
Tan_suat = as.vector(restecg_freq),
Ty_le_phan_tram = round(as.vector(restecg_prop), 2)
)
print(restecg_summary)
## Dien_tam_do_nghi Tan_suat Ty_le_phan_tram
## 1 1 0.11
## 2 lv hypertrophy 187 20.48
## 3 normal 549 60.13
## 4 st-t abnormality 176 19.28
Biến restecg phản ánh kết quả điện tâm đồ khi nghỉ. Phân bố cho thấy: - Nhóm normal (bình thường) chiếm tỷ lệ cao nhất với 552 trường hợp (60,00%), cho thấy phần lớn bệnh nhân có điện tâm đồ không bất thường. - Nhóm lv hypertrophy (phì đại thất trái) có 188 trường hợp (20,43%), phản ánh tình trạng dày thành cơ tim ở một bộ phận bệnh nhân, thường liên quan đến tăng huyết áp kéo dài. - Nhóm st-t abnormality (bất thường sóng ST-T) gồm 179 trường hợp (19,46%), liên quan đến sự thay đổi tái cực cơ tim, có thể gợi ý thiếu máu cơ tim hoặc rối loạn dẫn truyền. - Có 1 trường hợp không xác định (0,11%), cần được xử lý trước khi tiến hành các phân tích định lượng. Sự hiện diện đáng kể của hai nhóm bất thường cho thấy kết quả điện tâm đồ khi nghỉ là một yếu tố có giá trị phân loại trong phân tích bệnh lý tim mạch.
ggplot(data = dldt, aes(x = restecg)) +
geom_bar(aes(fill = restecg), width = 0.6) +
geom_text(stat = 'count', aes(label = ..count..), vjust = -0.5) +
labs(
title = "Biểu đồ Cột Kết Quả Điện Tâm Đồ Khi Nghỉ",
x = "Kết Quả Điện Tâm Đồ",
y = "Tần Suất"
) +
scale_fill_manual(values = c("steelblue", "darkorange", "darkgreen", "purple")) +
theme_minimal()
exang_freq <- table(dldt$exang, useNA = "ifany")
exang_prop <- prop.table(exang_freq) * 100
exang_summary <- data.frame(
Dau_that_nguc_khi_gang_suc = names(exang_freq),
Tan_suat = as.vector(exang_freq),
Ty_le_phan_tram = round(as.vector(exang_prop), 2)
)
print(exang_summary)
## Dau_that_nguc_khi_gang_suc Tan_suat Ty_le_phan_tram
## 1 FALSE 563 61.66
## 2 TRUE 350 38.34
Biến exang phản ánh tình trạng đau thắt ngực khi gắng sức (exercise-induced angina). Phân bố như sau: - Nhóm FALSE (không có đau thắt ngực khi gắng sức) chiếm 568 trường hợp (61,74%), cho thấy phần lớn bệnh nhân không xuất hiện triệu chứng này trong điều kiện vận động. - Nhóm TRUE (có đau thắt ngực khi gắng sức) gồm 351 trường hợp (38,15%), phản ánh tỷ lệ đáng kể bệnh nhân có biểu hiện thiếu máu cơ tim khi gắng sức. - Có 1 trường hợp không có giá trị (0,11%). Tỷ lệ tương đối cao ở nhóm có triệu chứng cho thấy đau thắt ngực khi gắng sức là một chỉ dấu lâm sàng quan trọng, có thể hỗ trợ trong việc sàng lọc và phân loại nguy cơ bệnh tim mạch.
ggplot(data = dldt, aes(x = exang)) +
geom_bar(aes(fill = exang), width = 0.6) +
geom_text(stat = 'count', aes(label = ..count..), vjust = -0.5) +
labs(
title = "Biểu đồ Cột: Đau Thắt Ngực Khi Gắng Sức",
x = "Tình Trạng Đau Thắt Ngực Khi Gắng Sức",
y = "Tần Suất"
) +
scale_fill_manual(values = c("steelblue", "firebrick")) +
theme_minimal()
slope_freq <- table(dldt$slope, useNA = "ifany")
slope_prop <- prop.table(slope_freq) * 100
slope_summary <- data.frame(
Doan_ST_gang_suc = names(slope_freq),
Tan_suat = as.vector(slope_freq),
Ty_le_phan_tram = round(as.vector(slope_prop), 2)
)
print(slope_summary)
## Doan_ST_gang_suc Tan_suat Ty_le_phan_tram
## 1 downsloping 102 11.17
## 2 flat 490 53.67
## 3 upsloping 321 35.16
Biến slope trong bộ dữ liệu thể hiện hình dạng đoạn ST trên điện tâm đồ khi bệnh nhân gắng sức, bao gồm ba nhóm: flat (nằm ngang), upsloping (đi lên) và downsloping (đi xuống). Kết quả phân tích cho thấy sự phân bố không đồng đều giữa các nhóm. Cụ thể, nhóm flat chiếm tỷ lệ cao nhất với 54,02% (497 trường hợp), tiếp theo là nhóm upsloping với 34,89% (321 trường hợp), trong khi nhóm downsloping chỉ chiếm 11,09% (102 trường hợp). Sự phân bố này cho thấy phần lớn bệnh nhân trong mẫu nghiên cứu có đoạn ST ở trạng thái nằm ngang hoặc đi lên khi gắng sức. Trong khi đó, nhóm downsloping, vốn thường được xem là chỉ dấu có nguy cơ tim mạch cao hơn, lại chiếm tỷ lệ thấp hơn. Điều này có thể phản ánh đặc điểm dân số trong mẫu hoặc phương pháp thu thập dữ liệu. Phân bố không đồng đều giữa các nhóm slope có thể ảnh hưởng đến các phân tích thống kê và dự báo, do đó cần được cân nhắc khi xây dựng mô hình phân tích liên quan đến nguy cơ tim mạch.
ggplot(data = dldt, aes(x = slope)) +
geom_bar(aes(fill = slope), width = 0.6) +
geom_text(stat = "count", aes(label = ..count..), vjust = -0.5) +
labs(
title = "Biểu đồ Cột: Đoạn ST Trên Điện Tâm Đồ Khi Gắng Sức",
x = "Hình Dạng Đoạn ST",
y = "Tần Suất"
) +
scale_fill_manual(values = c("steelblue", "firebrick", "darkgreen")) +
theme_minimal()
thal_freq <- table(dldt$thal, useNA = "ifany")
thal_prop <- prop.table(thal_freq) * 100
thal_summary <- data.frame(
Tinh_trang_thalassemia = names(thal_freq),
Tan_suat = as.vector(thal_freq),
Ty_le_phan_tram = round(as.vector(thal_prop), 2)
)
print(thal_summary)
## Tinh_trang_thalassemia Tan_suat Ty_le_phan_tram
## 1 2 0.22
## 2 fixed defect 186 20.37
## 3 normal 301 32.97
## 4 reversable defect 424 46.44
Biến thal phản ánh tình trạng thalassemia của bệnh nhân. Kết quả cho thấy phân bố không đồng đều giữa các nhóm. Cụ thể:
ggplot(data = dldt, aes(x = thal)) +
geom_bar(aes(fill = thal), width = 0.6) +
geom_text(stat = 'count', aes(label = ..count..), vjust = -0.5) +
labs(
title = "Biểu đồ Cột Tình Trạng Thalassemia",
x = "Tình Trạng Thalassemia",
y = "Tần Suất"
) +
scale_fill_manual(
values = c("fixed defect" = "red", "normal" = "green", "reversable defect" = "orange", "2" = "gray")
) +
theme_minimal()
table_num_sex <- table(dldt$num, dldt$sex)
table_num_sex
##
## Female Male
## No 144 267
## Yes 50 452
Kết quả phân tích bảng tần suất chéo giữa biến giới tính (sex) và tình trạng bệnh tim (num) cho thấy sự khác biệt rõ rệt về tỷ lệ mắc bệnh giữa hai nhóm: - Trong nhóm nữ, 74.23% không mắc bệnh tim, trong khi 25.77% có bệnh. - Ngược lại, ở nhóm nam, chỉ 36.78% không mắc bệnh, và 63.22% có bệnh. Tỷ lệ hiện mắc bệnh tim ở nam giới cao hơn đáng kể so với nữ giới. Sự khác biệt này cho thấy khả năng tồn tại mối liên hệ giữa giới tính và nguy cơ mắc bệnh tim trong mẫu nghiên cứu. Kết quả gợi ý rằng giới tính có thể là một yếu tố cần được kiểm soát trong các mô hình phân tích hoặc dự báo liên quan đến bệnh tim mạch.
Giả thuyết kiểm định” H0: “Giới tính và tình trạng bệnh tim không có mối liên hệ với nhau”. H1: “Giới tính và tình trạng bệnh tim có mối liên hệ với nhau”.
chisq_test <- chisq.test(table_num_sex)
chisq_test
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: table_num_sex
## X-squared = 83.429, df = 1, p-value < 2.2e-16
Kiểm định Chi-bình phương Pearson với điều chỉnh Yates cho giá trị df=1, p-value < 0.0001. Kết quả này cho thấy sự khác biệt quan sát được giữa các nhóm là có ý nghĩa thống kê. Do đó, giả thuyết không về sự độc lập giữa giới tính và tình trạng bệnh tim bị bác bỏ. Kết luận cho thấy mối liên hệ thống kê đáng kể giữa hai biến này trong dữ liệu nghiên cứu.
prop_table <- prop.table(table_num_sex, margin = 2)
round(prop_table * 100, 2)
##
## Female Male
## No 74.23 37.13
## Yes 25.77 62.87
Phân tích hiệu tỷ lệ cho thấy tỷ lệ mắc bệnh tim ở nam giới (63.22%) cao hơn đáng kể so với nữ giới (25.77%), với mức chênh lệch tuyệt đối là 37.45 điểm phần trăm. Điều này cho thấy giới tính có thể là một yếu tố nguy cơ quan trọng liên quan đến bệnh tim. Tỷ lệ cao hơn ở nam giới phản ánh khả năng tồn tại sự khác biệt về sinh học, hành vi sức khỏe, hoặc yếu tố lối sống giữa hai nhóm giới. Kết quả này cần được kiểm định thêm bằng các phân tích suy luận (ví dụ như kiểm định hiệu tỷ lệ hoặc mô hình hồi quy) để xác định mức độ tin cậy của sự khác biệt.
Giả thuyết kiểm định” H0: “Không có sự khác biệt về nguy cơ mắc bệnh tim giữa nam và nữ giới (RR = 1)”. H1: “Có sự khác biệt về nguy cơ mắc bệnh tim giữa nam và nữ giới (RR ≠ 1)”.
install.packages("epitools")
## package 'epitools' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\Administrator\AppData\Local\Temp\Rtmp6D3pJD\downloaded_packages
library(epitools)
riskratio(table_num_sex)
## $data
##
## Female Male Total
## No 144 267 411
## Yes 50 452 502
## Total 194 719 913
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## No 1.000000 NA NA
## Yes 1.386007 1.283637 1.49654
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## No NA NA NA
## Yes 0 2.2315e-20 3.105646e-20
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Kết quả phân tích cho thấy tỷ số rủi ro (RR) giữa nam và nữ giới là 1.388, với khoảng tin cậy 95% từ 1.286 đến 1.499. Giá trị p rất nhỏ (p < 0.001), do đó bác bỏ giả thuyết h0”: không có sự khác biệt về nguy cơ mắc bệnh tim giữa nam và nữ. Nguy cơ mắc bệnh tim ở nam giới cao hơn đáng kể so với nữ giới trong mẫu nghiên cứu. Điều này cho thấy giới tính là một yếu tố quan trọng liên quan đến khả năng mắc bệnh tim và cần được xem xét trong các phân tích và can thiệp y tế.
Giả thiết kiểm định: H0: “Không có sự khác biệt về nguy cơ mắc bệnh tim giữa nam và nữ giới (OR = 1)”. H1: “Có sự khác biệt về nguy cơ mắc bệnh tim giữa nam và nữ giới (OR ≠ 1)”.
oddsratio(table_num_sex)
## $data
##
## Female Male Total
## No 144 267 411
## Yes 50 452 502
## Total 194 719 913
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## No 1.000000 NA NA
## Yes 4.857891 3.42475 6.988938
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## No NA NA NA
## Yes 0 2.2315e-20 3.105646e-20
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Kết quả phân tích cho thấy tỷ số chênh (odds ratio) về khả năng mắc bệnh tim giữa nam và nữ là 4.933 (khoảng tin cậy 95%: từ 3.48 đến 7.10). Vì khoảng tin cậy không chứa giá trị 1 và giá trị p rất nhỏ (p < 0.001), có thể bác bỏ giả thuyết không. Kết quả này cho thấy nam giới có khả năng mắc bệnh tim cao hơn đáng kể so với nữ giới, với odds mắc bệnh tim ở nam cao gấp gần 5 lần so với nữ trong dữ liệu nghiên cứu.
table_num_dataset <- table(dldt$num, dldt$dataset)
table_num_dataset
##
## Cleveland Hungary Switzerland VA Long Beach
## No 165 187 8 51
## Yes 139 104 115 144
Biến dataset trong bộ dữ liệu phản ánh nguồn quốc gia cư trú của bệnh nhân, gồm: Cleveland, Hungary, Switzerland, và VA Long Beach. Kết quả thống kê chéo với biến num (tình trạng bệnh tim) cho thấy sự khác biệt rõ rệt về tỷ lệ mắc bệnh tim giữa các quốc gia: - Cleveland: Có 304 bệnh nhân, trong đó 165 người không mắc bệnh (54.28%) và 139 người mắc bệnh tim (45.72%). - Hungary: Có 293 bệnh nhân, với 187 người không mắc bệnh (63.83%) và 106 người mắc bệnh (36.17%). - Switzerland: Tổng cộng 123 bệnh nhân, nhưng đáng chú ý là chỉ có 8 người không mắc bệnh (6.50%), trong khi tới 115 người mắc bệnh tim (93.50%) – tỷ lệ mắc bệnh rất cao. - VA Long Beach: Trong 200 bệnh nhân, chỉ 51 người không mắc bệnh (25.50%), còn lại 149 người mắc bệnh (74.50%). Tỷ lệ mắc bệnh tim thay đổi đáng kể theo quốc gia. Đặc biệt, Switzerland và VA Long Beach có tỷ lệ bệnh tim rất cao, trong khi Hungary và Cleveland có tỷ lệ thấp hơn. Sự khác biệt này có thể liên quan đến cách thu thập dữ liệu, yếu tố dân số, hoặc môi trường chăm sóc y tế tại từng khu vực. Việc phân tích sâu hơn về nguồn dữ liệu và các yếu tố nguy cơ khác là cần thiết trước khi đưa ra kết luận nguyên nhân cụ thể.
Đặt giả thuyết: H0: “Không có sự khác biệt về tỷ lệ mắc bệnh tim giữa các quốc gia”. H1: “Có sự khác biệt về tỷ lệ mắc bệnh tim giữa các quốc gia”.
chisq_result <- chisq.test(table_num_dataset)
print(chisq_result)
##
## Pearson's Chi-squared test
##
## data: table_num_dataset
## X-squared = 155.81, df = 3, p-value < 2.2e-16
Kết quả kiểm định Chi-bình phương giữa biến “num” (tình trạng bệnh tim) và biến “dataset” (quốc gia cư trú) cho thấy có mối liên hệ có ý nghĩa thống kê giữa hai biến. Cụ thể, giá trị thống kê Chi-bình phương đạt 157.06 với 3 bậc tự do, và giá trị p rất nhỏ (p < 0.001). Điều này cho phép bác bỏ giả thuyết không, tức là không có mối liên hệ giữa quốc gia cư trú và tình trạng mắc bệnh tim. Nói cách khác, tỷ lệ mắc bệnh tim có sự khác biệt đáng kể giữa các quốc gia trong mẫu nghiên cứu. Phát hiện này cho thấy quốc gia cư trú có thể là một yếu tố liên quan đến nguy cơ mắc bệnh tim, có thể do khác biệt về lối sống, chế độ chăm sóc sức khỏe, hoặc các yếu tố môi trường và di truyền đặc thù của từng khu vực.
# Tạo bảng dữ liệu từ tần số bạn cung cấp
# Hàng 1: Có bệnh (Yes), Hàng 2: Không bệnh (No)
data_matrix <- matrix(c(
139, 106, 115, 149, # Yes
165, 187, 8, 51 # No
), nrow = 2, byrow = TRUE)
# Đặt tên hàng và cột
rownames(data_matrix) <- c("Yes", "No")
colnames(data_matrix) <- c("Cleveland", "Hungary", "Switzerland", "VA_Long_Beach")
# Lấy danh sách các quốc gia
countries <- colnames(data_matrix)
# Lặp qua từng cặp để tính odds ratio
for (i in 1:(length(countries) - 1)) {
for (j in (i + 1):length(countries)) {
cat("\n🔹 So sánh:", countries[i], "vs", countries[j], "\n")
tbl <- data_matrix[, c(countries[i], countries[j])]
result <- oddsratio(tbl)
print(result$measure)
print(result$p.value)
}
}
##
## 🔹 So sánh: Cleveland vs Hungary
## NA
## odds ratio with 95% C.I. estimate lower upper
## Yes 1.000000 NA NA
## No 1.484778 1.069824 2.064967
## NA
## two-sided midp.exact fisher.exact chi.square
## Yes NA NA NA
## No 0.01805705 0.01982909 0.01776551
##
## 🔹 So sánh: Cleveland vs Switzerland
## NA
## odds ratio with 95% C.I. estimate lower upper
## Yes 1.0000000 NA NA
## No 0.0599672 0.02594809 0.1200374
## NA
## two-sided midp.exact fisher.exact chi.square
## Yes NA NA NA
## No 0 1.46477e-22 8.528676e-20
##
## 🔹 So sánh: Cleveland vs VA_Long_Beach
## NA
## odds ratio with 95% C.I. estimate lower upper
## Yes 1.000000 NA NA
## No 0.289508 0.1946845 0.425589
## NA
## two-sided midp.exact fisher.exact chi.square
## Yes NA NA NA
## No 1.082118e-10 1.543947e-10 1.694611e-10
##
## 🔹 So sánh: Hungary vs Switzerland
## NA
## odds ratio with 95% C.I. estimate lower upper
## Yes 1.00000000 NA NA
## No 0.04041247 0.01746248 0.0812592
## NA
## two-sided midp.exact fisher.exact chi.square
## Yes NA NA NA
## No 0 5.180887e-30 1.122809e-26
##
## 🔹 So sánh: Hungary vs VA_Long_Beach
## NA
## odds ratio with 95% C.I. estimate lower upper
## Yes 1.0000000 NA NA
## No 0.1950459 0.130094 0.2887015
## NA
## two-sided midp.exact fisher.exact chi.square
## Yes NA NA NA
## No 0 2.860944e-17 6.20915e-17
##
## 🔹 So sánh: Switzerland vs VA_Long_Beach
## NA
## odds ratio with 95% C.I. estimate lower upper
## Yes 1.000000 NA NA
## No 4.825343 2.312828 11.4503
## NA
## two-sided midp.exact fisher.exact chi.square
## Yes NA NA NA
## No 7.221607e-06 1.147237e-05 1.783219e-05
Đặt giả thuyết: H0: “Không có sự khác biệt về tỷ lệ mắc bệnh tim giữa hai nhóm quốc gia (RR = 1)”. H1: “Có sự khác biệt về tỷ lệ mắc bệnh tim giữa hai nhóm quốc gia (RR # 1)”.
quoc_gia <- unique(dldt$dataset)
# so sánh RR giữa 2 nhóm
tinh_RR <- function(qg1, qg2, data) {
sub_data <- data[data$dataset %in% c(qg1, qg2), ]
tab <- table(sub_data$dataset, sub_data$num)
rr_result <- riskratio(tab)
cat("\nSo sánh:", qg1, "với", qg2, "\n")
print(tab)
print(rr_result$measure)
cat("p-value (chi-square):", rr_result$p.value[2, "chi.square"], "\n")
}
# Lặp lại cho tất cả cặp quốc gia
for (i in 1:(length(quoc_gia) - 1)) {
for (j in (i + 1):length(quoc_gia)) {
tinh_RR(quoc_gia[i], quoc_gia[j], dldt)
}
}
##
## So sánh: Cleveland với Hungary
##
## No Yes
## Cleveland 165 139
## Hungary 187 104
## risk ratio with 95% C.I.
## estimate lower upper
## Cleveland 1.0000000 NA NA
## Hungary 0.7816262 0.6419828 0.9516448
## p-value (chi-square): 0.0132528
##
## So sánh: Cleveland với Switzerland
##
## No Yes
## Cleveland 165 139
## Switzerland 8 115
## risk ratio with 95% C.I.
## estimate lower upper
## Cleveland 1.000000 NA NA
## Switzerland 2.044803 1.793658 2.331113
## p-value (chi-square): 8.528676e-20
##
## So sánh: Cleveland với VA Long Beach
##
## No Yes
## Cleveland 165 139
## VA Long Beach 51 144
## risk ratio with 95% C.I.
## estimate lower upper
## Cleveland 1.000000 NA NA
## VA Long Beach 1.615053 1.392528 1.873136
## p-value (chi-square): 6.155517e-10
##
## So sánh: Hungary với Switzerland
##
## No Yes
## Hungary 187 104
## Switzerland 8 115
## risk ratio with 95% C.I.
## estimate lower upper
## Hungary 1.000000 NA NA
## Switzerland 2.616088 2.227139 3.072963
## p-value (chi-square): 5.384635e-27
##
## So sánh: Hungary với VA Long Beach
##
## No Yes
## Hungary 187 104
## VA Long Beach 51 144
## risk ratio with 95% C.I.
## estimate lower upper
## Hungary 1.000000 NA NA
## VA Long Beach 2.066272 1.73411 2.462059
## p-value (chi-square): 1.763872e-16
##
## So sánh: Switzerland với VA Long Beach
##
## No Yes
## Switzerland 8 115
## VA Long Beach 51 144
## risk ratio with 95% C.I.
## estimate lower upper
## Switzerland 1.0000000 NA NA
## VA Long Beach 0.7898328 0.7177832 0.8691145
## p-value (chi-square): 1.133468e-05
So sánh Cleveland và Hungary, RR của Hungary so với Cleveland là 0.79 (khoảng tin cậy 95%: 0.65–0.96), với p = 0.0178 < 0.05. Điều này cho thấy nguy cơ mắc bệnh tim ở nhóm Hungary thấp hơn khoảng 21% so với nhóm Cleveland và sự khác biệt này có ý nghĩa thống kê. So sánh Cleveland và Switzerland, RR của Switzerland so với Cleveland là 2.04 (khoảng tin cậy 95%: 1.79–2.33), với p < 0.001. Nhóm Switzerland có nguy cơ mắc bệnh tim cao hơn khoảng 104% so với nhóm Cleveland, sự khác biệt rất rõ ràng và có ý nghĩa thống kê mạnh. So sánh Cleveland và VA Long Beach, RR của VA Long Beach so với Cleveland là 1.63 (khoảng tin cậy 95%: 1.41–1.89), với p < 0.001. Nhóm VA Long Beach có nguy cơ mắc bệnh tim cao hơn khoảng 63% so với nhóm Cleveland, và sự khác biệt này là có ý nghĩa thống kê. So sánh Hungary và Switzerland, RR của Switzerland so với Hungary là 2.58 (khoảng tin cậy 95%: 2.20–3.03), với p < 0.001. Nhóm Switzerland có nguy cơ mắc bệnh tim cao hơn hơn 2.5 lần so với Hungary, sự khác biệt này rất có ý nghĩa. So sánh Hungary và VA Long Beach, RR của VA Long Beach so với Hungary là 2.06 (khoảng tin cậy 95%: 1.73–2.45), với p < 0.001. Nhóm VA Long Beach có nguy cơ mắc bệnh tim cao hơn khoảng 106% so với Hungary, và sự khác biệt là đáng kể. So sánh Switzerland và VA Long Beach, RR của VA Long Beach so với Switzerland là 0.80 (khoảng tin cậy 95%: 0.73–0.87), với p < 0.001. Nhóm VA Long Beach có nguy cơ mắc bệnh tim thấp hơn khoảng 20% so với nhóm Switzerland, sự khác biệt này cũng có ý nghĩa thống kê. Tóm lại, các kết quả cho thấy sự khác biệt rõ ràng về nguy cơ mắc bệnh tim giữa các nhóm quốc gia trong bộ dữ liệu. Cần lưu ý rằng những so sánh này phản ánh mối liên hệ nguy cơ trên bộ dữ liệu nghiên cứu, và có thể ảnh hưởng bởi các yếu tố đặc thù về dân số, lối sống, hoặc điều kiện chăm sóc y tế của từng quốc gia.
Đặt giả thuyết: H0: “Không có sự khác biệt về tỷ lệ mắc bệnh tim giữa hai nhóm quốc gia (OR = 1)”. H1: “Có sự khác biệt về tỷ lệ mắc bệnh tim giữa hai nhóm quốc gia (OR # 1)”.
# Hàm tính OR cho 2 nhóm
tinh_OR <- function(qg1, qg2, data) {
sub_data <- data[data$dataset %in% c(qg1, qg2), ]
tab <- table(sub_data$dataset, sub_data$num)
or_result <- oddsratio(tab)
cat("\nSo sánh:", qg1, "với", qg2, "\n")
print(tab)
print(or_result$measure)
cat("p-value (chi-square):", or_result$p.value[2, "chi.square"], "\n")
}
# Lặp lại cho tất cả cặp quốc gia
for (i in 1:(length(quoc_gia) - 1)) {
for (j in (i + 1):length(quoc_gia)) {
tinh_OR(quoc_gia[i], quoc_gia[j], dldt)
}
}
##
## So sánh: Cleveland với Hungary
##
## No Yes
## Cleveland 165 139
## Hungary 187 104
## odds ratio with 95% C.I.
## estimate lower upper
## Cleveland 1.0000000 NA NA
## Hungary 0.6608355 0.4746357 0.9180604
## p-value (chi-square): 0.0132528
##
## So sánh: Cleveland với Switzerland
##
## No Yes
## Cleveland 165 139
## Switzerland 8 115
## odds ratio with 95% C.I.
## estimate lower upper
## Cleveland 1.0000 NA NA
## Switzerland 16.6781 8.330734 38.53849
## p-value (chi-square): 8.528676e-20
##
## So sánh: Cleveland với VA Long Beach
##
## No Yes
## Cleveland 165 139
## VA Long Beach 51 144
## odds ratio with 95% C.I.
## estimate lower upper
## Cleveland 1.000000 NA NA
## VA Long Beach 3.338485 2.268204 4.969978
## p-value (chi-square): 6.155517e-10
##
## So sánh: Hungary với Switzerland
##
## No Yes
## Hungary 187 104
## Switzerland 8 115
## odds ratio with 95% C.I.
## estimate lower upper
## Hungary 1.00000 NA NA
## Switzerland 25.21626 12.53479 58.4001
## p-value (chi-square): 5.384635e-27
##
## So sánh: Hungary với VA Long Beach
##
## No Yes
## Hungary 187 104
## VA Long Beach 51 144
## odds ratio with 95% C.I.
## estimate lower upper
## Hungary 1.000000 NA NA
## VA Long Beach 5.050417 3.404817 7.585797
## p-value (chi-square): 1.763872e-16
##
## So sánh: Switzerland với VA Long Beach
##
## No Yes
## Switzerland 8 115
## VA Long Beach 51 144
## odds ratio with 95% C.I.
## estimate lower upper
## Switzerland 1.000000 NA NA
## VA Long Beach 0.200318 0.08437696 0.4181958
## p-value (chi-square): 1.133468e-05
So sánh giữa các nhóm quốc gia cho thấy có sự khác biệt đáng kể về odds mắc bệnh tim. - So với nhóm Cleveland, nhóm Hungary có OR = 0.67 (95% CI: 0.48 - 0.93), p = 0.0177, cho thấy odds mắc bệnh tim của Hungary thấp hơn khoảng 33% so với Cleveland, và sự khác biệt này có ý nghĩa thống kê. - Nhóm Switzerland có OR rất cao so với Cleveland (OR = 16.68, 95% CI: 8.33 - 38.54, p < 0.001), cho thấy odds mắc bệnh tim ở Switzerland cao gấp hơn 16 lần so với Cleveland, sự khác biệt này rất rõ rệt về mặt thống kê. - Nhóm VA Long Beach cũng có odds mắc bệnh cao hơn Cleveland với OR = 3.45 (95% CI: 2.35 - 5.14, p < 0.001). - So với Hungary, odds mắc bệnh tim ở Switzerland cũng cao hơn rất nhiều (OR = 24.74, 95% CI: 12.31 - 57.27, p < 0.001). - Odds mắc bệnh của VA Long Beach cũng cao gấp khoảng 5.13 lần so với Hungary (95% CI: 3.46 - 7.69, p < 0.001). Tuy nhiên, so sánh giữa Switzerland và VA Long Beach, OR = 0.21 (95% CI: 0.09 - 0.43, p < 0.001), cho thấy odds mắc bệnh tim ở VA Long Beach thấp hơn đáng kể so với Switzerland. Kết luận chung: Có sự khác biệt rõ ràng về nguy cơ mắc bệnh tim (đo bằng odds) giữa các nhóm quốc gia. Nhóm Switzerland có odds mắc bệnh tim cao nhất, trong khi Hungary có odds thấp hơn Cleveland. Các khác biệt này đều có ý nghĩa thống kê với p-value rất nhỏ (< 0.05).
table_num_cp <- table(dldt$num, dldt$cp)
table_num_cp
##
## asymptomatic atypical angina non-anginal typical angina
## No 104 150 131 26
## Yes 388 24 70 20
Kết quả cho thấy sự phân bố các loại cơn đau ngực khác nhau giữa nhóm có và không mắc bệnh tim: - Nhóm không mắc bệnh tim: loại đau ngực phổ biến nhất là atypical angina (đau thắt ngực không điển hình) với 150 trường hợp, tiếp theo là non-anginal (không đau thắt ngực) với 131 trường hợp, asymptomatic (không triệu chứng) có 104 trường hợp và typical angina (đau thắt ngực điển hình) chiếm 26 trường hợp. - Nhóm mắc bệnh tim: loại asymptomatic (không triệu chứng) chiếm đa số với 392 trường hợp, trong khi non-anginal (không đau thắt ngực) là 73 trường hợp, atypical angina (đau thắt ngực không điển hình) là 24 trường hợp và typical angina (đau thắt ngực điển hình) chỉ có 20 trường hợp. => Tỷ lệ bệnh nhân mắc bệnh tim có biểu hiện asymptomatic (không triệu chứng) chiếm ưu thế rõ rệt so với các loại còn lại. Trong khi đó, bệnh nhân không mắc bệnh tim lại thường gặp các loại đau ngực như atypical angina (không điển hình) hoặc non-anginal (không đau thắt ngực). Sự khác biệt này cho thấy dạng không triệu chứng có thể là một chỉ báo quan trọng cần được chú ý trong chẩn đoán bệnh tim, ngay cả khi không có biểu hiện lâm sàng rõ ràng.
Đặt giả thuyết: H0: “Không có mối liên hệ giữa tình trạng bệnh tim và loại cơn đau ngực”. H1: ” Có mối liên hệ giữa tình trạng bệnh tim và loại cơn đau ngực”.
chisq.test(table_num_cp)
##
## Pearson's Chi-squared test
##
## data: table_num_cp
## X-squared = 268.06, df = 3, p-value < 2.2e-16
Kết quả kiểm định Chi-squared cho thấy có mối liên hệ có ý nghĩa thống kê giữa loại cơn đau ngực và tình trạng bệnh tim (X-squared = 268.35, df = 3, p-value < 2.2e-16). Với p-value rất nhỏ, bác bỏ giả thuyết rằng hai biến độc lập nhau. Điều này cho thấy loại cơn đau ngực có liên quan đến khả năng mắc bệnh tim.
Trong bối cảnh nghiên cứu bệnh tim mạch, loại cơn đau ngực (chest pain type – biến cp) là một yếu tố lâm sàng quan trọng có thể liên quan đến khả năng mắc bệnh tim (biến num). Trong số các dạng đau ngực, nhóm “asymptomatic” (không có triệu chứng) thường gây chú ý đặc biệt, bởi đây là những bệnh nhân không biểu hiện triệu chứng rõ ràng nhưng có thể tiềm ẩn nguy cơ bệnh lý nghiêm trọng. Dựa trên quan sát sơ bộ từ bảng tần số chéo giữa hai biến, tỷ lệ bệnh tim trong nhóm asymptomatic dường như cao hơn đáng kể so với các nhóm còn lại. Điều này đặt ra nghi vấn liệu nguy cơ mắc bệnh tim ở nhóm này có cao hơn một cách có ý nghĩa thống kê so với phần còn lại. Từ đó, ta tiến hành kiểm định hiệu tỷ lệ (risk difference) giữa nhóm asymptomatic và các nhóm khác để đánh giá mức độ chênh lệch nguy cơ mắc bệnh tim, từ đó cung cấp thêm bằng chứng cho việc sàng lọc và chẩn đoán lâm sàng. Đặt giả thuyết: H0: “Tỷ số nguy cơ mắc bệnh tim giữa nhóm asymptomatic và nhóm khác bằng 1”. H1: ” Tỷ số nguy cơ mắc bệnh tim giữa nhóm asymptomatic và nhóm khác khác 1”.
# Tạo biến nhóm: nhóm 1 là "asymptomatic", nhóm 2 là các nhóm còn lại
dldt$cp_group <- ifelse(dldt$cp == "asymptomatic", "asymptomatic", "khac")
# Tạo bảng 2x2 giữa cp_group và num
table_cp_num <- table(dldt$cp_group, dldt$num)
riskratio(table_cp_num)
## $data
##
## No Yes Total
## asymptomatic 104 388 492
## khac 307 114 421
## Total 411 502 913
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## asymptomatic 1.0000000 NA NA
## khac 0.3433651 0.2916339 0.4042725
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## asymptomatic NA NA NA
## khac 0 1.215719e-57 2.15573e-55
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Rủi ro tương đối của nhóm “khác” so với nhóm “asymptomatic” là 0.349 (KTC 95%: 0.297 – 0.410), cho thấy những người có kiểu đau ngực không phải asymptomatic có nguy cơ mắc bệnh tim thấp hơn khoảng 65% so với nhóm asymptomatic. Kết quả kiểm định cho thấy p = 2.485781e-57 < 0.05, nên bác bỏ giả thuyết rủi ro tương đối bằng 1. Như vậy, sự khác biệt về nguy cơ mắc bệnh tim giữa hai nhóm là có ý nghĩa thống kê.
Đặt giả thuyết: H0: “Tỷ số nguy cơ mắc bệnh tim giữa nhóm asymptomatic và nhóm khác bằng 1”. H1: ” Tỷ số nguy cơ mắc bệnh tim giữa nhóm asymptomatic và nhóm khác khác 1”.
oddsratio(table_cp_num, method = "wald")
## $data
##
## No Yes Total
## asymptomatic 104 388 492
## khac 307 114 421
## Total 411 502 913
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## asymptomatic 1.00000000 NA NA
## khac 0.09953323 0.07336554 0.1350343
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## asymptomatic NA NA NA
## khac 0 1.215719e-57 2.15573e-55
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Kết quả cho thấy tỷ số chênh ước tính ở nhóm “khác” (so với nhóm “asymptomatic”) là 0.1011. Khoảng tin cậy 95% cho tỷ số chênh dao động từ 0.0746 đến 0.1370. Điều này cho thấy khả năng có bệnh tim ở nhóm “khác” chỉ bằng khoảng 10% so với nhóm “asymptomatic”, nghĩa là nhóm “asymptomatic” có odds mắc bệnh cao hơn đáng kể. Kiểm định ý nghĩa thống kê được thực hiện với p-value từ kiểm định Fisher chính xác là 2.485781e-57. Vì p < 0.05, có thể bác bỏ giả thuyết không (H0), tức là bác bỏ giả thuyết rằng không có sự khác biệt về tỷ số chênh giữa hai nhóm. Như vậy, có bằng chứng thống kê khẳng định sự khác biệt có ý nghĩa giữa hai nhóm về khả năng mắc bệnh tim. Tóm lại, bệnh nhân thuộc nhóm “asymptomatic” có khả năng mắc bệnh tim cao hơn đáng kể so với các nhóm đau ngực khác. Phân tích tỷ số chênh đã cung cấp bằng chứng mạnh mẽ cho mối liên hệ này với mức ý nghĩa thống kê rất cao.
dldt$fbs <- as.logical(dldt$fbs)
table(dldt$num, dldt$fbs)
##
## FALSE TRUE
## No 363 44
## Yes 391 98
Phân tích mối liên hệ giữa biến đường huyết lúc đói (fbs) và tình trạng bệnh tim (num) thông qua bảng tần số chéo cho thấy sự khác biệt rõ rệt về tỷ lệ phân bố giữa hai nhóm.
Ở nhóm không mắc bệnh tim (num = No), có 363 trường hợp không tăng đường huyết lúc đói (fbs = FALSE), chiếm 89,19% tổng số cá thể trong nhóm này. Trong khi đó, số trường hợp có tăng đường huyết lúc đói (fbs = TRUE) là 44, tương ứng với 10,81%. Ngược lại, trong nhóm có bệnh tim (num = Yes), số trường hợp không tăng đường huyết (fbs = FALSE) là 398, chiếm 80,22%. Số trường hợp có tăng đường huyết (fbs = TRUE) là 98, chiếm 19,78% tổng số cá thể trong nhóm mắc bệnh tim. Tỷ lệ tăng đường huyết lúc đói trong nhóm có bệnh tim cao hơn đáng kể so với nhóm không mắc bệnh (19,78% so với 10,81%). Sự khác biệt này cho thấy có khả năng tồn tại mối liên hệ giữa tình trạng tăng đường huyết lúc đói và nguy cơ mắc bệnh tim. Tuy nhiên, cần tiếp tục thực hiện các phân tích định lượng, chẳng hạn như ước lượng tỷ số chênh (odds ratio) và kiểm định thống kê, để xác định mức độ liên quan và ý nghĩa thống kê của mối quan hệ này.
Đặt giả thuyết: H0: “Không có mối liên hệ giữa biến đường huyết lúc đói (fbs) và tình trạng bệnh tim (num)”. H1: ” Có mối liên hệ giữa biến đường huyết lúc đói (fbs) và tình trạng bệnh tim (num)“.
table_fbs_num <- table(dldt$num, dldt$fbs)
chisq.test(table_fbs_num, correct = FALSE)
##
## Pearson's Chi-squared test
##
## data: table_fbs_num
## X-squared = 14.189, df = 1, p-value = 0.0001653
Kiểm định Chi bình phương được sử dụng để đánh giá mối liên hệ giữa biến “fbs” (đường huyết lúc đói) và biến “num” (tình trạng bệnh tim). Kết quả kiểm định cho thấy giá trị thống kê Chi bình phương là 13.504 với 1 bậc tự do. Giá trị p thu được là 0.000238, nhỏ hơn mức ý nghĩa 0.05.
Dựa vào kết quả này, bác bỏ giả thuyết không. Điều này cho thấy tồn tại mối liên hệ có ý nghĩa thống kê giữa đường huyết lúc đói và tình trạng mắc bệnh tim trong mẫu nghiên cứu.
Khi quan sát bảng tần số chéo, trong nhóm không mắc bệnh tim (num = “No”) có 44 người có đường huyết cao (fbs = TRUE), chiếm khoảng 10.81%. Trong khi đó, ở nhóm có bệnh tim (num = “Yes”) có 98 người có đường huyết cao, chiếm khoảng 19.76%. Tỷ lệ này cho thấy tình trạng đường huyết cao xuất hiện phổ biến hơn ở nhóm bệnh tim, từ đó củng cố thêm bằng chứng về mối liên hệ giữa hai biến.
Đặt giả thuyết: H0: “Rủi ro mắc bệnh tim ở nhóm có đường huyết lúc đói cao (fbs = TRUE) không khác so với nhóm có đường huyết bình thường (fbs = FALSE), tức là RR = 1”. H1: ” Rủi ro mắc bệnh tim ở nhóm có đường huyết lúc đói cao khác so với nhóm có đường huyết bình thường, tức là RR ≠ 1)“.
riskratio(table_fbs_num, rev = "columns")
## $data
##
## TRUE FALSE Total
## No 44 363 407
## Yes 98 391 489
## Total 142 754 896
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## No 1.0000000 NA NA
## Yes 0.8965111 0.8478606 0.9479532
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## No NA NA NA
## Yes 0.0001454085 0.0001575339 0.000165301
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Phân tích mối liên hệ giữa đường huyết lúc đói và tình trạng bệnh tim cho thấy trong số 903 quan sát, có 142 người có đường huyết cao (fbs = TRUE) và 761 người có đường huyết bình thường (fbs = FALSE). Trong nhóm không mắc bệnh tim (num = No), có 44 người có đường huyết cao và 363 người không. Ngược lại, ở nhóm có bệnh tim (num = Yes), có 98 người có đường huyết cao và 398 người không. Kết quả tính rủi ro tương đối (Relative Risk) cho thấy nhóm có đường huyết cao có nguy cơ mắc bệnh tim gấp 0.90 lần so với nhóm không có đường huyết cao (RR = 0.8997). Khoảng tin cậy 95% cho rủi ro tương đối là từ 0.8513 đến 0.9508. Vì khoảng tin cậy này không bao gồm 1, nên sự khác biệt có ý nghĩa thống kê. Kiểm định hai phía cho thấy giá trị p từ kiểm định Chi bình phương là 0.00024, từ kiểm định Fisher là 0.00023. Tất cả đều nhỏ hơn mức ý nghĩa 0.05, do đó có thể bác bỏ giả thuyết rủi ro bằng nhau giữa hai nhóm. Kết quả này chỉ ra rằng có mối liên hệ có ý nghĩa thống kê giữa đường huyết lúc đói và tình trạng bệnh tim trong bộ dữ liệu. Tuy nhiên, rủi ro tương đối nhỏ hơn 1 cho thấy, trong mẫu nghiên cứu này, tỷ lệ người mắc bệnh tim trong nhóm có đường huyết cao thực tế lại thấp hơn so với nhóm không có đường huyết cao. Kết quả này có thể chịu ảnh hưởng bởi các yếu tố nhiễu hoặc do đặc điểm đặc thù của bộ dữ liệu, cần được kiểm chứng thêm qua phân tích sâu hơn hoặc mô hình hồi quy điều chỉnh.
Giả thuyết kiểm định: H0: “Không có mối liên hệ giữa biến đường huyết lúc đói (fbs) và tình trạng bệnh tim (num)”. H1: ” Có mối liên hệ giữa biến đường huyết lúc đói (fbs) và tình trạng bệnh tim (num)“.
oddsratio(table_fbs_num, method = "wald", rev = "neither")
## $data
##
## FALSE TRUE Total
## No 363 44 407
## Yes 391 98 489
## Total 754 142 896
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## No 1.000000 NA NA
## Yes 2.067775 1.409426 3.033641
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## No NA NA NA
## Yes 0.0001454085 0.0001575339 0.000165301
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Tỷ số chênh (odds ratio) giữa hai nhóm bệnh nhân được phân loại theo tình trạng đường huyết lúc đói (biến fbs) là 2.03, với khoảng tin cậy 95% từ 1.38 đến 2.98. Nghĩa là xác suất mắc bệnh tim ở nhóm có giá trị fbs là TRUE (nghĩa là mức đường huyết lúc đói > 120 mg/dl) cao gấp 2.03 lần so với nhóm có giá trị fbs là FALSE (mức đường huyết lúc đói ≤ 120 mg/dl). Giá trị p thu được từ kiểm định hai phía là 0.00021, nhỏ hơn mức ý nghĩa α = 0.05. Do đó, bác bỏ giả thuyết không (H₀), tức là có bằng chứng thống kê cho thấy mối liên hệ giữa đường huyết lúc đói và khả năng mắc bệnh tim. Kết quả cho thấy đường huyết lúc đói là một yếu tố có liên quan đáng kể đến nguy cơ mắc bệnh tim trong dữ liệu nghiên cứu.
Để đánh giá mối liên quan giữa tình trạng bất thường đoạn ST trên điện tâm đồ khi nghỉ ngơi (st-t abnormality) và nguy cơ mắc bệnh tim, biến restecg được mã hóa lại thành biến nhị phân: nhóm có “st-t abnormality” được gán giá trị 1, trong khi các nhóm còn lại (bao gồm “lv hypertrophy” và “normal”) được gộp lại và gán giá trị 0. Biến kết quả là num, đại diện cho tình trạng bệnh tim, với hai mức: “Yes” (có bệnh tim) và “No” (không có bệnh tim). Bảng tần số chéo giữa hai biến này được thiết lập để làm cơ sở cho việc tính toán tỷ số chênh (odds ratio). Phân tích tỷ số chênh được thực hiện nhằm xác định liệu nhóm có biểu hiện bất thường đoạn ST có nguy cơ mắc bệnh tim cao hơn so với nhóm không có biểu hiện này hay không. Chỉ số OR và khoảng tin cậy 95% được sử dụng để đánh giá mức độ và ý nghĩa thống kê của mối liên hệ.
# Tạo biến nhị phân từ biến restecg trong dữ liệu dldt
dldt$restecg_bin <- ifelse(dldt$restecg == "st-t abnormality", "abnormal", "non-abnormal")
# Tạo bảng tần số chéo giữa restecg_bin và num
table_restecg_bin <- table(dldt$restecg_bin, dldt$num)
table_restecg_bin
##
## No Yes
## abnormal 61 115
## non-abnormal 350 387
Trong nhóm bệnh nhân có biểu hiện bất thường đoạn ST trên điện tâm đồ (st-t abnormality), có 61 người không mắc bệnh tim và 118 người được chẩn đoán có bệnh tim. Ngược lại, trong nhóm không có bất thường đoạn ST (gồm lv hypertrophy và normal), số bệnh nhân không mắc bệnh tim là 350 và có bệnh tim là 391. Như vậy, tỷ lệ mắc bệnh tim ở nhóm st-t abnormality là 65.19%, trong khi ở nhóm non-abnormal là 52.76%. Tỷ số chênh (odds ratio) được sử dụng để đánh giá mối liên hệ giữa kết quả điện tâm đồ và tình trạng bệnh tim. Kết quả phân tích cho thấy OR = 1.66, với khoảng tin cậy 95% từ 1.15 đến 2.39. Điều này cho thấy bệnh nhân có bất thường đoạn ST có khả năng mắc bệnh tim cao hơn 1.66 lần so với những người không có bất thường này. Kiểm định chi bình phương cho thấy sự khác biệt giữa hai nhóm là có ý nghĩa thống kê, với giá trị p = 0.0062. Điều này chứng tỏ mối liên hệ giữa điện tâm đồ và tình trạng bệnh tim là có ý nghĩa, tức là biểu hiện bất thường đoạn ST có thể là một chỉ dấu quan trọng liên quan đến nguy cơ mắc bệnh tim. Kết quả này gợi ý rằng cần đặc biệt lưu ý đến kết quả điện tâm đồ, cụ thể là đoạn ST, trong quá trình tầm soát và chẩn đoán bệnh tim ở bệnh nhân.
Giả thuyết kiểm định: H0: “Không có mối liên hệ giữa tình trạng bệnh tim và kết quả điện tâm đồ”. H1: ” Có mối liên hệ giữa tình trạng bệnh tim và kết quả điện tâm đồ”.
chisq.test(table_restecg_bin)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: table_restecg_bin
## X-squared = 8.9382, df = 1, p-value = 0.002793
Kết quả kiểm định Chi bình phương với hiệu chỉnh Yates cho bảng chéo giữa biến điện tâm đồ và biến đầu ra cho thấy giá trị thống kê X-squared = 9.5696, df = 1. Giá trị p = 0.001978, nhỏ hơn mức ý nghĩa 0.05, cho thấy sự khác biệt có ý nghĩa thống kê. Điều này cho thấy sự phân bố bệnh tim giữa nhóm có bất thường điện tâm đồ (61 người không bệnh, 118 người có bệnh) và nhóm không bất thường điện tâm đồ (350 người không bệnh, 391 người có bệnh) không đồng đều. Kết quả chỉ ra có mối liên hệ có ý nghĩa giữa tình trạng điện tâm đồ và việc mắc bệnh tim trong mẫu nghiên cứu. Do đó, biến điện tâm đồ có thể ảnh hưởng hoặc liên quan đến nguy cơ mắc bệnh tim trong nhóm đối tượng được khảo sát.
Giả thuyết kiểm định: H0: “Tỷ số nguy cơ giữa hai nhóm bằng 1 (RR = 1”) (tức là không có sự khác biệt về nguy cơ mắc bệnh tim giữa các nhóm điện tâm đồ). H1: ” Tỷ số nguy cơ giữa hai nhóm khác 1 (RR ≠ 1)” (tức là có sự khác biệt về nguy cơ mắc bệnh tim giữa các nhóm điện tâm đồ).
riskratio(table_restecg_bin, rev = "columns")
## $data
##
## Yes No Total
## abnormal 115 61 176
## non-abnormal 387 350 737
## Total 502 411 913
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## abnormal 1.000000 NA NA
## non-abnormal 1.370198 1.103365 1.701561
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## abnormal NA NA NA
## non-abnormal 0.002027165 0.002353225 0.00211208
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Rủi ro tương đối cho thấy nhóm có điện tâm đồ bình thường (non-abnormal) có nguy cơ mắc bệnh tim cao hơn nhóm có bất thường điện tâm đồ (abnormal), với ước tính RR là 1.39 (khoảng tin cậy 95% từ 1.12 đến 1.72). Khoảng tin cậy không chứa giá trị 1, cho thấy sự khác biệt về nguy cơ giữa hai nhóm là có ý nghĩa thống kê. Giá trị p rất nhỏ (p ≈ 0.0014), nhỏ hơn mức ý nghĩa 0.05, cho phép bác bỏ giả thuyết không và kết luận rằng có sự khác biệt đáng kể về nguy cơ mắc bệnh tim giữa hai nhóm điện tâm đồ. Như vậy, dữ liệu cho thấy nhóm điện tâm đồ bình thường có nguy cơ mắc bệnh tim cao hơn nhóm điện tâm đồ bất thường trong mẫu nghiên cứu này.
Giả thuyết kiểm định: H0: “Không có mối liên hệ giữa tình trạng bệnh tim và kết quả điện tâm đồ”. H1: ” Có mối liên hệ giữa tình trạng bệnh tim và kết quả điện tâm đồ”.
oddsratio(table_restecg_bin, method = "wald")
## $data
##
## No Yes Total
## abnormal 61 115 176
## non-abnormal 350 387 737
## Total 411 502 913
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## abnormal 1.0000000 NA NA
## non-abnormal 0.5865093 0.4164332 0.8260465
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## abnormal NA NA NA
## non-abnormal 0.002027165 0.002353225 0.00211208
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Trong nhóm bệnh nhân có bất thường ST-T (abnormal), tỷ lệ mắc bệnh tim là 118/179, tương đương 65.92%. Trong khi đó, ở nhóm không bất thường ST-T (non-abnormal), tỷ lệ này là 391/741, tương đương 52.75%. Mặc dù tỷ lệ mắc bệnh cao hơn ở nhóm “abnormal”, kết quả phân tích tỷ số chênh (odds ratio) lại cho thấy xu hướng ngược lại. Tỷ số chênh (odds ratio – OR) giữa hai nhóm được ước lượng là 0.5775, với khoảng tin cậy 95% từ 0.4106 đến 0.8122. Điều này cho thấy odds mắc bệnh tim ở nhóm “non-abnormal” thấp hơn đáng kể so với nhóm “abnormal”, với xác suất sai lầm loại I nhỏ hơn 0.05 (p-value = 0.0014 theo kiểm định Fisher và chi bình phương). Như vậy, kết quả chỉ ra rằng có sự liên quan có ý nghĩa thống kê giữa tình trạng bất thường đoạn ST-T và bệnh tim. Nhóm có bất thường ST-T có odds mắc bệnh tim cao hơn nhóm không bất thường, và sự khác biệt này là có ý nghĩa thống kê.
table(dldt$exang, dldt$num)
##
## No Yes
## FALSE 348 215
## TRUE 63 287
Kết quả phân tích bảng tần số chéo giữa hai biến cho thấy: trong nhóm không có đau thắt ngực khi gắng sức (exang = FALSE), có 348 trường hợp không mắc bệnh tim và 220 trường hợp mắc bệnh, chiếm tương ứng 61.27% và 38.73% trong nhóm này (tổng số quan sát là 568). Trong khi đó, ở nhóm có đau thắt ngực khi gắng sức (exang = TRUE), có 63 trường hợp không mắc bệnh và 288 trường hợp mắc bệnh, tương ứng 17.95% và 82.05% trong nhóm này (tổng số quan sát là 351). Phân bố này cho thấy tỷ lệ mắc bệnh tim ở nhóm có đau thắt ngực khi gắng sức (82.05%) cao hơn đáng kể so với nhóm không có triệu chứng này (38.73%). Sự chênh lệch rõ rệt giữa hai nhóm gợi ý rằng đau thắt ngực khi gắng sức có thể là một yếu tố lâm sàng liên quan đến nguy cơ mắc bệnh tim mạch. Phân tích tiếp theo bằng kiểm định thống kê và các chỉ số đo lường như tỷ số rủi ro (RR) hoặc tỷ số chênh (OR) là cần thiết để đánh giá mức độ liên quan và ý nghĩa thống kê của mối quan hệ này.
Giả thuyết kiểm định: H0: “Không có mối liên quan giữa tình trạng đau thắt ngực khi gắng sức (exang) và tình trạng mắc bệnh tim (num)”. H1: ” Có mối liên quan giữa tình trạng đau thắt ngực khi gắng sức (exang) và tình trạng mắc bệnh tim (num)“.
table_exang_num <- table(dldt$exang, dldt$num)
chisq.test(table_exang_num)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: table_exang_num
## X-squared = 165.61, df = 1, p-value < 2.2e-16
Kết quả kiểm định Chi bình phương cho thấy sự khác biệt có ý nghĩa thống kê giữa hai nhóm bệnh nhân phân theo tình trạng đau thắt ngực khi gắng sức (exang) về phân bố tình trạng bệnh tim (num). Cụ thể, giá trị thống kê Chi bình phương đạt 162.92 với 1 bậc tự do, tương ứng với giá trị p là 2.2e-16. Với mức ý nghĩa α = 0.05, kết quả này cho phép bác bỏ giả thuyết không (H₀), tức là bác bỏ giả thuyết cho rằng biến “exang” và “num” độc lập với nhau. Điều này cho thấy có mối liên hệ có ý nghĩa thống kê giữa biểu hiện đau thắt ngực khi gắng sức và tình trạng mắc bệnh tim. Phân bố tỷ lệ bệnh tim khác biệt đáng kể giữa hai nhóm bệnh nhân có và không có đau thắt ngực khi gắng sức.
Giả thuyết kiểm định: H0: “Tỷ số rủi ro giữa hai nhóm bệnh nhân (có và không có đau thắt ngực khi gắng sức) là bằng nhau (RR = 1)”. H1: ” Tỷ số rủi ro giữa hai nhóm khác nhau (tức RR ≠ 1)“.
riskratio(table_exang_num)
## $data
##
## No Yes Total
## FALSE 348 215 563
## TRUE 63 287 350
## Total 411 502 913
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## FALSE 1.000000 NA NA
## TRUE 2.147256 1.9121 2.411332
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## FALSE NA NA NA
## TRUE 0 3.104191e-40 2.774678e-38
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Tỷ số rủi ro (Risk Ratio) giữa nhóm có biểu hiện đau thắt ngực khi gắng sức (exang = TRUE) và nhóm không có biểu hiện này (exang = FALSE) là 2,118, với khoảng tin cậy 95% từ 1,889 đến 2,375. Điều này cho thấy nguy cơ mắc bệnh tim (num > 0) ở nhóm có đau thắt ngực khi gắng sức cao hơn khoảng 2,1 lần so với nhóm không có triệu chứng. Giá trị p thu được từ kiểm định chi bình phương là 1,0788e-37 (p < 0,05), rất nhỏ so với ngưỡng ý nghĩa thông thường. Do đó, bác bỏ giả thuyết không (H0), kết luận rằng có mối liên hệ có ý nghĩa thống kê giữa tình trạng đau thắt ngực khi gắng sức và bệnh tim.
Giả thuyết kiểm định: H0: “Tỷ số rủi ro giữa hai nhóm bệnh nhân (có và không có đau thắt ngực khi gắng sức) là bằng nhau (OR = 1)”. H1: ” Tỷ số rủi ro giữa hai nhóm khác nhau (tức OR ≠ 1)“.
oddsratio(table_exang_num)
## $data
##
## No Yes Total
## FALSE 348 215 563
## TRUE 63 287 350
## Total 411 502 913
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## FALSE 1.000000 NA NA
## TRUE 7.344685 5.354742 10.19746
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## FALSE NA NA NA
## TRUE 0 3.104191e-40 2.774678e-38
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Kết quả phân tích odds ratio giữa biến exang (đau thắt ngực khi gắng sức) và biến num (tình trạng mắc bệnh tim) cho thấy rằng nhóm bệnh nhân có biểu hiện đau thắt ngực khi gắng sức có khả năng mắc bệnh tim cao hơn đáng kể so với nhóm không có biểu hiện này. Cụ thể, odds ratio ước lượng là 7.20314, với khoảng tin cậy 95% từ 5.255265 đến 9.993928. Điều này cho thấy khả năng mắc bệnh tim ở nhóm có exang là cao hơn khoảng 7.2 lần so với nhóm không có exang. Kiểm định giả thuyết cho thấy p-value thu được từ kiểm định chi bình phương là 1.078797e-37, nhỏ hơn mức ý nghĩa α = 0,05. Do đó, bác bỏ giả thuyết không H0 cho rằng không có mối liên hệ giữa exang và num. Kết quả cho thấy có mối liên quan có ý nghĩa thống kê giữa tình trạng đau thắt ngực khi gắng sức và khả năng mắc bệnh tim.
Biến slope trong bộ dữ liệu ban đầu là một biến định tính phân loại với ba mức giá trị: upsloping, flat và downsloping. Tuy nhiên, khi thực hiện các phép kiểm định đo lường mối liên quan giữa biến slope (đặc điểm điện tâm đồ) và biến kết cục num (tình trạng bệnh tim, gồm “Yes” và “No”), yêu cầu đặt ra là phải xây dựng bảng tần số chéo dạng 2×2. Các chỉ số như Risk Ratio (RR) và Odds Ratio (OR) chỉ được định nghĩa rõ ràng và có ý nghĩa trong bối cảnh so sánh giữa hai nhóm (phơi nhiễm và không phơi nhiễm) với hai kết cục (có và không có bệnh). Do đó, để đảm bảo phù hợp về mặt phương pháp luận, biến slope cần được nhóm lại từ ba mức thành hai nhóm. Việc nhóm lại được thực hiện như sau: các trường hợp có giá trị flat được giữ nguyên như một nhóm riêng biệt (phản ánh điện tâm đồ dẹt – thường có liên quan đến bất thường), trong khi các giá trị còn lại (upsloping và downsloping) được gộp chung thành nhóm “not_flat”. Cách nhóm này giúp so sánh nguy cơ mắc bệnh tim giữa nhóm có điện tâm đồ dẹt và nhóm không có điện tâm đồ dẹt, từ đó cho phép áp dụng các mô hình 2×2 để tính toán và diễn giải các chỉ số RR và OR một cách hợp lý và có ý nghĩa.
# Nhóm lại biến slope
dldt$slope2 <- ifelse(dldt$slope == "flat", "flat", "not_flat")
# Chuyển thành factor
dldt$slope2 <- factor(dldt$slope2, levels = c("not_flat", "flat"))
table_slope2_num <- table(dldt$slope2, dldt$num)
print(table_slope2_num)
##
## No Yes
## not_flat 239 184
## flat 172 318
Bảng tần số cho thấy trong nhóm có dạng ST “flat”, số bệnh nhân mắc bệnh tim (325 người) cao hơn đáng kể so với nhóm không mắc (172 người). Ngược lại, ở nhóm “not_flat”, số người không mắc bệnh (239) nhiều hơn người mắc bệnh (184). Kết quả này gợi ý rằng dạng ST “flat” có thể liên quan đến nguy cơ mắc bệnh tim cao hơn.
Giả thuyết kiểm định: H0: “Không có mối liên hệ giữa dạng ST (slope) và tình trạng bệnh tim (num)”. H1: ” Có mối liên hệ giữa dạng ST (slope) và tình trạng bệnh tim (num)“.
chisq.test(table_slope2_num)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: table_slope2_num
## X-squared = 41.14, df = 1, p-value = 1.417e-10
Kiểm định Chi-squared giữa hai biến slope_group và num cho kết quả X-squared = 43.434, df = 1, p-value = 4.384e-11. Vì p-value < 0.05, bác bỏ giả thuyết không (H₀), cho thấy tồn tại mối liên hệ có ý nghĩa thống kê giữa hình dạng đoạn ST (slope) và tình trạng bệnh tim (num). Sự phân bố bệnh tim khác nhau rõ rệt giữa nhóm “flat” và “not_flat”. ## 3.5.7.3 Hiệu tỷ lệ
Giả thuyết kiểm định: H0: “Tỷ lệ mắc bệnh tim ở nhóm có đoạn ST”flat” bằng với tỷ lệ mắc bệnh tim ở nhóm “not_flat”“. H1:” Tỷ lệ mắc bệnh tim ở hai nhóm “flat” và “not_flat” là khác nhau”.
riskratio(table_slope2_num)
## $data
##
## No Yes Total
## not_flat 239 184 423
## flat 172 318 490
## Total 411 502 913
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## not_flat 1.000000 NA NA
## flat 1.491948 1.314488 1.693364
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## not_flat NA NA NA
## flat 8.831025e-11 8.961497e-11 9.125047e-11
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Kết quả phân tích cho thấy rủi ro tương đối (RR) của nhóm có đoạn ST dạng “flat” là 1.503313, với khoảng tin cậy 95% từ 1.325288 đến 1.705253, so với nhóm “not_flat”. Điều này cho thấy nguy cơ mắc bệnh tim ở nhóm “flat” cao hơn 50.33% so với nhóm còn lại. Giá trị p = 2.695799e-11, nhỏ hơn 0.05, cho thấy kết quả có ý nghĩa thống kê.
Giả thuyết kiểm định: H0: “Tỷ lệ mắc bệnh tim ở nhóm có đoạn ST”flat” bằng với tỷ lệ mắc bệnh tim ở nhóm “not_flat”“. H1:” Tỷ lệ mắc bệnh tim ở hai nhóm “flat” và “not_flat” là khác nhau”.
oddsratio(table_slope2_num, method = "wald")
## $data
##
## No Yes Total
## not_flat 239 184 423
## flat 172 318 490
## Total 411 502 913
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## not_flat 1.000000 NA NA
## flat 2.401479 1.838487 3.136873
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## not_flat NA NA NA
## flat 8.831025e-11 8.961497e-11 9.125047e-11
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Kết quả phân tích odds ratio (OR) cho thấy sự khác biệt đáng kể về khả năng mắc bệnh tim giữa hai nhóm bệnh nhân theo dạng đoạn ST trên điện tâm đồ, sau khi gộp thành hai nhóm: flat và not_flat (bao gồm downsloping và upsloping). Ở nhóm not_flat, odds mắc bệnh tim là 1.000. Trong khi đó, nhóm có đoạn ST dạng flat có odds mắc bệnh tim cao hơn với OR là 2.454342. Khoảng tin cậy 95% cho OR nằm trong khoảng từ 1.879873 đến 3.204361, cho thấy kết quả ước lượng có độ tin cậy cao. Giá trị p thu được từ phép kiểm chi bình phương là 2.695799e-11, rất nhỏ so với mức ý nghĩa 0.05. Điều này cho thấy mối liên hệ giữa đặc điểm đoạn ST và bệnh tim là có ý nghĩa thống kê. Dạng ST flat liên quan đến nguy cơ mắc bệnh tim cao hơn rõ rệt so với các dạng còn lại.
Biến thal là biến định tính phân loại, bao gồm ba giá trị: “khiếm khuyết cố định” (fixed defect), “bình thường” (normal) và “khiếm khuyết có thể hồi phục” (reversible defect). Việc sử dụng các phương pháp phân tích nguy cơ như tỷ số nguy cơ tương đối (RR) và tỷ số chênh (OR) yêu cầu cấu trúc dữ liệu ở dạng bảng 2x2, trong đó cả biến độc lập và biến phụ thuộc chỉ bao gồm hai nhóm. Do đó, để đảm bảo tính phù hợp về mặt phương pháp luận và khả năng áp dụng phân tích, cần tiến hành nhóm lại các mức giá trị của biến thal thành hai nhóm. Việc nhóm lại này nhằm giảm số lượng phân loại trong biến, từ đó tạo điều kiện cho việc xây dựng bảng tần số chéo dạng 2x2 với biến “num” – một biến phản ánh tình trạng mắc bệnh tim (với hai mức: “có bệnh” và “không có bệnh”). Ngoài ra, việc nhóm lại còn giúp tăng số lượng quan sát trong từng ô của bảng, từ đó tăng độ chính xác của các kiểm định thống kê và giảm sai số trong các ước lượng khoảng tin cậy.
# Nhóm biến thal thành 2 mức: 'normal' giữ nguyên, các giá trị khác gộp thành 'unnormal'
dldt$thal_grouped <- ifelse(dldt$thal == "normal", "normal", "unnormal")
dldt$thal_grouped <- factor(dldt$thal_grouped, levels = c("normal", "unnormal"))
table_num_thal <- table(dldt$num, dldt$thal_grouped)
print(table_num_thal)
##
## normal unnormal
## No 220 191
## Yes 81 421
Phân tích bảng tần số chéo giữa biến tình trạng bệnh tim (“num”) và biến thalassemia đã nhóm (“thal_grouped”) cho thấy sự phân bố không đồng đều giữa các nhóm. Trong nhóm bệnh nhân có kết quả thalassemia bình thường (normal), có 220 trường hợp không mắc bệnh tim (No) và 81 trường hợp có mắc bệnh tim (Yes). Tỷ lệ mắc bệnh tim trong nhóm này là khoảng 26.9%. Ngược lại, trong nhóm bệnh nhân có kết quả thalassemia bất thường (unnormal, gồm fixed defect và reversible defect), có 191 trường hợp không mắc bệnh tim và 428 trường hợp có mắc bệnh tim. Tỷ lệ mắc bệnh tim trong nhóm này là khoảng 69.1%. Sự khác biệt đáng kể về tỷ lệ mắc bệnh tim giữa hai nhóm thalassemia gợi ý rằng tình trạng thalassemia có thể là một yếu tố liên quan đến nguy cơ bệnh tim. Nhóm có thalassemia bất thường có tỷ lệ mắc bệnh tim cao hơn rõ rệt so với nhóm bình thường. Việc phân tích sâu hơn với các chỉ số định lượng như tỷ số nguy cơ (RR) hoặc tỷ số odds (OR) là cần thiết để đánh giá mức độ ảnh hưởng của tình trạng thalassemia đến bệnh tim. Tuy nhiên, cần lưu ý rằng nhóm “unnormal” bao gồm nhiều loại tổn thương khác nhau, do đó việc nhóm có thể che lấp một số đặc điểm riêng biệt của từng loại thalassemia.
Giả thuyết kiểm định: H0: “Không có mối liên hệ giữa tình trạng bệnh tim và kết quả thalassemia”. H1: ” Có mối liên hệ giữa tình trạng bệnh tim và kết quả thalassemia”.
chisq.test(table_num_thal, correct = FALSE)
##
## Pearson's Chi-squared test
##
## data: table_num_thal
## X-squared = 142.98, df = 1, p-value < 2.2e-16
Kiểm định Chi bình phương Pearson được sử dụng để đánh giá mối liên hệ giữa biến “num” (tình trạng bệnh tim) và biến “thal” (tình trạng thalassemia đã được nhóm thành hai mức: normal và unnormal). Kết quả kiểm định thu được như sau: giá trị thống kê Chi bình phương là 146.15 với 1 bậc tự do (df = 1) và giá trị p rất nhỏ, p-value < 2.2e-16. Với mức ý nghĩa thông thường (α = 0.05), giá trị p nhỏ hơn nhiều so với α, cho thấy bằng chứng thống kê rất mạnh để bác bỏ giả thuyết không (H₀). Do đó, có thể kết luận rằng tồn tại mối liên hệ có ý nghĩa thống kê giữa tình trạng bệnh tim và tình trạng thalassemia. Kết quả này cho thấy phân bố bệnh tim khác biệt đáng kể giữa các nhóm thalassemia (bình thường và bất thường), và biến “thal” có thể đóng vai trò là yếu tố liên quan quan trọng trong việc phân tích bệnh tim. Cần tiếp tục đánh giá sâu hơn, chẳng hạn như tính toán tỉ số chênh (OR) hoặc tỉ số nguy cơ (RR), để xác định mức độ ảnh hưởng cụ thể của từng nhóm thalassemia đến nguy cơ mắc bệnh tim.
Giả thuyết kiểm định: H0: “Không có sự khác biệt về nguy cơ mắc bệnh tim giữa hai nhóm thalassemia(RR = 1)”. H1: ” Có sự khác biệt về nguy cơ mắc bệnh tim giữa hai nhóm thalassemia (RR # 1)“.
riskratio(table_num_thal)
## $data
##
## normal unnormal Total
## No 220 191 411
## Yes 81 421 502
## Total 301 612 913
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## No 1.000000 NA NA
## Yes 1.804624 1.615633 2.015723
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## No NA NA NA
## Yes 0 1.743782e-33 5.94476e-33
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Trong nghiên cứu này, nhóm bệnh nhân có tình trạng thalassemia bình thường (normal) được chọn làm nhóm tham chiếu. Nhóm còn lại, gồm các bệnh nhân có tình trạng thalassemia bất thường (unnormal), cho thấy nguy cơ mắc bệnh tim mạch cao hơn đáng kể. Cụ thể, tỷ số nguy cơ (RR) ở nhóm “unnormal” là 1.809, với khoảng tin cậy 95% nằm trong khoảng từ 1.620 đến 2.021. Điều này cho thấy bệnh nhân có thalassemia bất thường có nguy cơ mắc bệnh tim cao hơn khoảng 81% so với nhóm bình thường.
Kết quả kiểm định cho thấy p-value của phép kiểm Fisher là 3.480849 × 10⁻³⁴, và p-value của phép kiểm chi bình phương là 1.203722 × 10⁻³³. Cả hai giá trị đều nhỏ hơn rất nhiều so với mức ý nghĩa 0.05, cho thấy sự khác biệt quan sát được giữa hai nhóm là có ý nghĩa thống kê.
Tóm lại, tình trạng thalassemia có mối liên hệ đáng kể về mặt thống kê với nguy cơ mắc bệnh tim mạch. Những bệnh nhân có thalassemia bất thường có nguy cơ mắc bệnh cao hơn đáng kể so với những bệnh nhân có tình trạng bình thường.
Giả thuyết kiểm định: H0: “Không có sự khác biệt về nguy cơ mắc bệnh tim giữa hai nhóm thalassemia(RR = 1)”. H1: ” Có sự khác biệt về nguy cơ mắc bệnh tim giữa hai nhóm thalassemia (RR # 1)“.
oddsratio(table_num_thal, method = "wald")
## $data
##
## normal unnormal Total
## No 220 191 411
## Yes 81 421 502
## Total 301 612 913
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## No 1.000000 NA NA
## Yes 5.986685 4.405008 8.136283
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## No NA NA NA
## Yes 0 1.743782e-33 5.94476e-33
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Trong tổng số 920 quan sát, số bệnh nhân có tình trạng thalassemia “unnormal” chiếm tỷ lệ cao hơn đáng kể trong nhóm mắc bệnh tim (Yes) so với nhóm không mắc bệnh tim (No). Cụ thể, trong nhóm Yes, có 428 bệnh nhân thuộc nhóm “unnormal” và 81 bệnh nhân thuộc nhóm “normal”. Trong khi đó, ở nhóm No, chỉ có 191 bệnh nhân “unnormal” so với 220 bệnh nhân “normal”. Kết quả phân tích Odds Ratio cho thấy: OR = 6.09, với khoảng tin cậy 95% từ 4.48 đến 8.27. Điều này có nghĩa là nguy cơ có bệnh tim ở nhóm bệnh nhân có thalassemia không bình thường (unnormal) cao gấp khoảng 6 lần so với nhóm có tình trạng thalassemia bình thường (normal), tính theo tỉ lệ odds. P-value của kiểm định Fisher là 3.48×10⁻³⁴, rất nhỏ hơn 0.05, cho thấy sự khác biệt này là có ý nghĩa thống kê. Do đó, có thể kết luận rằng tình trạng thalassemia không bình thường (unnormal) có mối liên hệ chặt chẽ với việc mắc bệnh tim, và biến thal có thể đóng vai trò là yếu tố nguy cơ đáng kể trong phân tích bệnh lý tim mạch.
lpm_model <- lm(I(num == "Yes") ~ sex + dataset + cp + fbs + restecg + exang + slope + thal, data = dldt)
summary(lpm_model)
##
## Call:
## lm(formula = I(num == "Yes") ~ sex + dataset + cp + fbs + restecg +
## exang + slope + thal, data = dldt)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.98898 -0.19617 0.02907 0.21449 0.94869
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.59983 0.45005 1.333 0.182937
## sexMale 0.12303 0.03215 3.827 0.000139 ***
## datasetHungary -0.10199 0.03641 -2.801 0.005201 **
## datasetSwitzerland 0.26777 0.04623 5.792 9.69e-09 ***
## datasetVA Long Beach 0.03455 0.04245 0.814 0.415829
## cpatypical angina -0.35716 0.03701 -9.651 < 2e-16 ***
## cpnon-anginal -0.26240 0.03305 -7.939 6.21e-15 ***
## cptypical angina -0.17990 0.05777 -3.114 0.001906 **
## fbsTRUE 0.10426 0.03536 2.948 0.003278 **
## restecglv hypertrophy -0.12922 0.36701 -0.352 0.724851
## restecgnormal -0.17209 0.36547 -0.471 0.637845
## restecgst-t abnormality -0.17902 0.36631 -0.489 0.625163
## exangTRUE 0.19126 0.02858 6.692 3.92e-11 ***
## slopeflat 0.04426 0.04314 1.026 0.305234
## slopeupsloping -0.09876 0.04678 -2.111 0.035036 *
## thalfixed defect 0.15569 0.25988 0.599 0.549278
## thalnormal -0.05630 0.25834 -0.218 0.827536
## thalreversable defect 0.10813 0.25859 0.418 0.675929
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3628 on 878 degrees of freedom
## (17 observations deleted due to missingness)
## Multiple R-squared: 0.4797, Adjusted R-squared: 0.4697
## F-statistic: 47.63 on 17 and 878 DF, p-value: < 2.2e-16
Kết quả hồi quy từ mô hình Xác suất tuyến tính (LPM) bội với biến phụ thuộc là tình trạng mắc bệnh tim (num, đã được nhị phân hóa thành Yes/No) và các biến độc lập là giới tính (sex), quốc gia cư trú (dataset), loại cơn đau ngực (cp), đường huyết lúc đói (fbs), kết quả điện tâm đồ (restecg), đau thắt ngực khi gắng sức (exang), đoạn ST (slope) và tình trạng thalassemia (thal) cho thấy như sau: Hệ số chặn (Intercept) là 0.66685, không có ý nghĩa thống kê (p = 0.1996), cho thấy khi tất cả các biến độc lập ở mức tham chiếu, xác suất mắc bệnh tim trung bình khoảng 66.7%. Biến sex cho thấy nam giới có xác suất mắc bệnh tim cao hơn nữ giới với hệ số 0.12243 (p = 0.0001), có ý nghĩa thống kê. Biến dataset thể hiện ảnh hưởng của khu vực cư trú đến khả năng mắc bệnh tim. So với nhóm tham chiếu (Cleveland), người từ Hungary có xác suất mắc bệnh tim thấp hơn (hệ số -0.10910, p = 0.0028), trong khi người từ Thụy Sĩ có xác suất cao hơn (hệ số 0.26517, p < 0.0001). Tác động của nhóm VA Long Beach không có ý nghĩa thống kê (p = 0.3454). Đối với biến cp (loại cơn đau ngực), so với nhóm tham chiếu (asymptomatic), các loại cơn đau khác đều liên quan đến xác suất mắc bệnh tim thấp hơn: - Atypical angina: hệ số -0.35740 (p < 0.0001) - Non-anginal: hệ số -0.26423 (p < 0.0001) - Typical angina: hệ số -0.18312 (p = 0.0016) Tất cả đều có ý nghĩa thống kê, cho thấy đau ngực không điển hình hoặc không đau ngực có khả năng mắc bệnh tim thấp hơn nhóm không triệu chứng rõ ràng. Biến fbs (đường huyết lúc đói) có ba mức trong kết quả hồi quy, nhưng không mức nào có ý nghĩa thống kê (p > 0.66). Điều này cho thấy ảnh hưởng của đường huyết lúc đói đến xác suất mắc bệnh tim trong mô hình này không rõ ràng. Biến restecg (điện tâm đồ lúc nghỉ) với các mức “lv hypertrophy”, “normal” và “st-t abnormality” đều không có ý nghĩa thống kê (p > 0.64), cho thấy không có mối liên hệ đáng kể giữa kết quả ECG lúc nghỉ với xác suất mắc bệnh tim trong mô hình này. Biến exang (đau thắt ngực khi gắng sức) có hệ số 0.18260 (p < 0.0001), có ý nghĩa thống kê cao. Điều này cho thấy người bị đau thắt ngực khi gắng sức có xác suất mắc bệnh tim cao hơn rõ rệt so với người không bị. Biến slope cho thấy chỉ có mức “upsloping” có p-value gần ngưỡng ý nghĩa (hệ số -0.07998, p = 0.0829), trong khi mức “flat” không có ý nghĩa thống kê (p = 0.1335). Cuối cùng, biến thal không có mức nào có ý nghĩa thống kê (p > 0.5), cho thấy ảnh hưởng của tình trạng thalassemia tới xác suất mắc bệnh tim không đáng kể trong mô hình. Mô hình có R-squared là 0.4759 và adjusted R-squared là 0.4648, cho thấy khoảng 47.6% biến thiên của xác suất mắc bệnh tim được giải thích bởi các biến độc lập trong mô hình. F-statistic là 42.97 với p-value < 2.2e-16, chỉ ra rằng mô hình tổng thể có ý nghĩa thống kê. Residual standard error là 0.3639 với 899 bậc tự do. Nhìn chung, mô hình chỉ ra rằng giới tính nam, quốc gia cư trú (đặc biệt là Thụy Sĩ), loại cơn đau ngực, và đau thắt ngực khi gắng sức là những yếu tố ảnh hưởng đáng kể đến xác suất mắc bệnh tim. Các biến khác không cho thấy ảnh hưởng thống kê rõ ràng trong mô hình LPM này.
# Ép về factor với mức tham chiếu là "No"
dldt$num_bin <- factor(dldt$num, levels = c("No", "Yes"))
model_logit <- glm(num_bin ~ sex + dataset + cp + fbs + restecg + exang + slope + thal,
data = dldt,
family = binomial)
summary(model_logit)
##
## Call:
## glm(formula = num_bin ~ sex + dataset + cp + fbs + restecg +
## exang + slope + thal, family = binomial, data = dldt)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 9.97572 535.41837 0.019 0.985135
## sexMale 0.87702 0.25975 3.376 0.000735 ***
## datasetHungary -0.71048 0.28327 -2.508 0.012137 *
## datasetSwitzerland 2.63306 0.51810 5.082 3.73e-07 ***
## datasetVA Long Beach 0.06241 0.31500 0.198 0.842957
## cpatypical angina -2.22969 0.29255 -7.621 2.51e-14 ***
## cpnon-anginal -1.48967 0.23094 -6.451 1.11e-10 ***
## cptypical angina -1.14084 0.39086 -2.919 0.003514 **
## fbsTRUE 0.76816 0.27239 2.820 0.004802 **
## restecglv hypertrophy -10.35724 535.41148 -0.019 0.984566
## restecgnormal -10.67354 535.41142 -0.020 0.984095
## restecgst-t abnormality -10.78338 535.41145 -0.020 0.983931
## exangTRUE 1.21682 0.20930 5.814 6.11e-09 ***
## slopeflat 0.35687 0.33006 1.081 0.279605
## slopeupsloping -0.64984 0.35087 -1.852 0.064009 .
## thalfixed defect 1.06191 2.71477 0.391 0.695679
## thalnormal -0.32436 2.70450 -0.120 0.904537
## thalreversable defect 0.73012 2.70636 0.270 0.787329
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1234.60 on 895 degrees of freedom
## Residual deviance: 700.39 on 878 degrees of freedom
## (17 observations deleted due to missingness)
## AIC: 736.39
##
## Number of Fisher Scoring iterations: 12
Mô hình hồi quy logistic bội được xây dựng với biến phụ thuộc là tình trạng mắc bệnh tim (num_bin), phân loại thành hai nhóm: “yes” (mắc bệnh tim) và “no” (không mắc bệnh tim). Các biến độc lập được đưa vào mô hình bao gồm sex, dataset, cp, fbs, restecg, exang, slope và thal. Mô hình được ước lượng với hàm liên kết logit, sử dụng hàm glm() với family = binomial. Giá trị deviance còn lại của mô hình là 722.22, so với null deviance ban đầu là 1263.75, cho thấy mô hình đã giải thích được một phần đáng kể phương sai trong biến phụ thuộc. AIC của mô hình là 762.22, tương đối thấp, gợi ý mô hình phù hợp tương đối tốt. Một quan sát đã bị loại do thiếu dữ liệu. Trong số các biến đưa vào mô hình, nhiều biến có ý nghĩa thống kê ở mức 1% hoặc 5%. Giới tính nam (sexMale) có hệ số hồi quy 0.86948, với giá trị p = 0.000684, cho thấy nam giới có xác suất mắc bệnh tim cao hơn so với nữ giới (nhóm tham chiếu). Về biến quốc gia (dataset), Hungary có hệ số hồi quy -0.76716 (p = 0.006313), ngụ ý rằng người bệnh từ Hungary có xác suất mắc bệnh tim thấp hơn so với nhóm Cleveland (tham chiếu). Ngược lại, nhóm bệnh nhân từ Thụy Sĩ có hệ số 2.59545 (p < 0.0001), cho thấy nguy cơ mắc bệnh tim cao hơn đáng kể. VA Long Beach không có ý nghĩa thống kê (p = 0.769584). Biến loại đau ngực (cp) thể hiện ảnh hưởng mạnh mẽ đến xác suất mắc bệnh tim. So với nhóm đau ngực không rõ ràng (asymptomatic), các mức đau khác như “atypical angina” (-2.21112, p < 0.0001), “non-anginal” (-1.50174, p < 0.0001), và “typical angina” (-1.15708, p = 0.002965) đều làm giảm xác suất mắc bệnh tim, phù hợp với thực tế lâm sàng. Biến exang (đau thắt ngực khi gắng sức) có hệ số hồi quy 1.15992 với p = 2.05e-08, khẳng định ảnh hưởng mạnh và có ý nghĩa cao: người có biểu hiện đau thắt ngực khi gắng sức có nguy cơ mắc bệnh tim cao hơn. Các biến còn lại như fbs, restecg, slope và thal đều không có ý nghĩa thống kê ở mức thông thường (p > 0.05), cho thấy không đủ bằng chứng để kết luận về ảnh hưởng của các yếu tố này trong mô hình hiện tại. Cần lưu ý rằng nhiều mức của các biến phân loại như restecg và fbs có giá trị hệ số rất lớn hoặc bất thường (ví dụ: -10.65 hoặc 1.84), cùng với sai số chuẩn cao, điều này có thể xuất phát từ hiện tượng đa cộng tuyến hoặc do một số mức có số lượng quan sát thấp, gây nhiễu mô hình. Cần thực hiện thêm các bước kiểm tra chẩn đoán mô hình (diagnostic checking) để xác nhận tính ổn định của ước lượng.
model_probit <- glm(num_bin ~ sex + dataset + cp + fbs + restecg + exang + slope + thal,
family = binomial(link = "probit"),
data = dldt)
summary(model_probit)
##
## Call:
## glm(formula = num_bin ~ sex + dataset + cp + fbs + restecg +
## exang + slope + thal, family = binomial(link = "probit"),
## data = dldt)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.78507 146.96068 0.019 0.984880
## sexMale 0.51575 0.14556 3.543 0.000395 ***
## datasetHungary -0.42005 0.16044 -2.618 0.008842 **
## datasetSwitzerland 1.48015 0.27424 5.397 6.77e-08 ***
## datasetVA Long Beach 0.01193 0.17985 0.066 0.947125
## cpatypical angina -1.27932 0.16272 -7.862 3.78e-15 ***
## cpnon-anginal -0.87376 0.13300 -6.570 5.04e-11 ***
## cptypical angina -0.66002 0.22780 -2.897 0.003763 **
## fbsTRUE 0.44530 0.15439 2.884 0.003924 **
## restecglv hypertrophy -3.00239 146.95440 -0.020 0.983700
## restecgnormal -3.20225 146.95433 -0.022 0.982615
## restecgst-t abnormality -3.24689 146.95436 -0.022 0.982373
## exangTRUE 0.71889 0.12024 5.979 2.25e-09 ***
## slopeflat 0.21488 0.18749 1.146 0.251773
## slopeupsloping -0.38657 0.20021 -1.931 0.053506 .
## thalfixed defect 0.60319 1.35791 0.444 0.656895
## thalnormal -0.17402 1.35156 -0.129 0.897551
## thalreversable defect 0.42479 1.35268 0.314 0.753497
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1234.60 on 895 degrees of freedom
## Residual deviance: 698.37 on 878 degrees of freedom
## (17 observations deleted due to missingness)
## AIC: 734.37
##
## Number of Fisher Scoring iterations: 12
Kết quả mô hình Probit bội sử dụng biến phụ thuộc nhị phân num_bin (phân biệt giữa nhóm có và không có bệnh tim) và các biến độc lập bao gồm sex, dataset, cp, fbs, restecg, exang, slope, và thal cho thấy một số yếu tố có ý nghĩa thống kê trong việc dự đoán khả năng mắc bệnh tim. Biến sexMale có hệ số 0.50756 (p = 0.000398), cho thấy nam giới có xác suất bị bệnh tim cao hơn so với nữ, và mối quan hệ này có ý nghĩa thống kê ở mức 1%. Đối với biến dataset, bệnh nhân từ Thụy Sĩ (datasetSwitzerland) có hệ số cao nhất với 1.45500 (p < 0.001), thể hiện xác suất mắc bệnh tim cao hơn đáng kể so với nhóm tham chiếu (Cleveland). Ngược lại, nhóm Hungary có hệ số âm (-0.45183, p = 0.004493), cho thấy xác suất mắc bệnh tim thấp hơn. datasetVA Long Beach không có ý nghĩa thống kê (p = 0.853829). Các loại cơn đau ngực (biến cp) cho thấy ảnh hưởng rõ rệt. So với nhóm tham chiếu (asymptomatic), các nhóm khác có hệ số âm, cho thấy khả năng mắc bệnh tim thấp hơn. Cụ thể, cpatypical angina có hệ số -1.27149 (p < 0.001), cpnon-anginal là -0.88108 (p < 0.001), và cptypical angina là -0.66931 (p = 0.003207). Biến exangTRUE (đau thắt ngực khi gắng sức) có hệ số 0.68045 (p < 0.001), chỉ ra rằng bệnh nhân có đau thắt ngực khi gắng sức có xác suất mắc bệnh tim cao hơn một cách có ý nghĩa. Các biến còn lại bao gồm fbs, restecg, slope, và thal không có ý nghĩa thống kê (p > 0.05), cho thấy không đủ bằng chứng để kết luận rằng chúng ảnh hưởng đáng kể đến khả năng mắc bệnh tim trong mô hình này. Độ lệch còn lại của mô hình (Residual deviance) là 720.96 với 899 bậc tự do, giảm đáng kể so với độ lệch ban đầu (Null deviance: 1263.75 với 918 bậc tự do), cho thấy mô hình có mức độ phù hợp khá tốt. Giá trị AIC là 760.96, có thể dùng để so sánh với các mô hình khác. Tổng số quan sát sử dụng là 919, trong đó 1 quan sát bị loại do thiếu dữ liệu.
model_cloglog <- glm(num_bin ~ sex + dataset + cp + fbs + restecg + exang + slope + thal,
data = dldt,
family = binomial(link = "cloglog"))
summary(model_cloglog)
##
## Call:
## glm(formula = num_bin ~ sex + dataset + cp + fbs + restecg +
## exang + slope + thal, family = binomial(link = "cloglog"),
## data = dldt)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.70206 44.18330 0.016 0.98732
## sexMale 0.56781 0.17329 3.277 0.00105 **
## datasetHungary -0.39144 0.17787 -2.201 0.02776 *
## datasetSwitzerland 1.46265 0.25306 5.780 7.48e-09 ***
## datasetVA Long Beach -0.05847 0.18168 -0.322 0.74758
## cpatypical angina -1.57619 0.22299 -7.068 1.57e-12 ***
## cpnon-anginal -0.91927 0.15062 -6.103 1.04e-09 ***
## cptypical angina -0.72094 0.25532 -2.824 0.00475 **
## fbsTRUE 0.47119 0.15727 2.996 0.00273 **
## restecglv hypertrophy -1.30445 44.16205 -0.030 0.97644
## restecgnormal -1.52013 44.16179 -0.034 0.97254
## restecgst-t abnormality -1.54836 44.16193 -0.035 0.97203
## exangTRUE 0.75456 0.12247 6.161 7.23e-10 ***
## slopeflat 0.20260 0.18120 1.118 0.26353
## slopeupsloping -0.50877 0.20621 -2.467 0.01362 *
## thalfixed defect 0.53252 1.36536 0.390 0.69652
## thalnormal -0.29385 1.36247 -0.216 0.82924
## thalreversable defect 0.39305 1.35983 0.289 0.77255
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1234.60 on 895 degrees of freedom
## Residual deviance: 709.03 on 878 degrees of freedom
## (17 observations deleted due to missingness)
## AIC: 745.03
##
## Number of Fisher Scoring iterations: 11
Mô hình Cloglog bội được xây dựng nhằm phân tích mối quan hệ giữa biến phụ thuộc nhị phân num_bin (mắc bệnh tim hoặc không) với các biến độc lập: sex, dataset, cp, fbs, restecg, exang, slope, và thal. Kết quả mô hình cho thấy một số biến có ý nghĩa thống kê ở mức ý nghĩa 5%, trong khi một số biến khác không có ảnh hưởng đáng kể đến xác suất mắc bệnh tim. Biến giới tính sex có hệ số dương (0.54326) với giá trị p = 0.00128, cho thấy nam giới có xác suất mắc bệnh tim cao hơn nữ giới một cách có ý nghĩa thống kê. Biến dataset cho thấy có sự khác biệt giữa các khu vực thu thập dữ liệu. Cụ thể, so với nhóm tham chiếu là Cleveland, nhóm Switzerland có hệ số rất cao (1.41362) với p-value = 1.36e-08, cho thấy khả năng mắc bệnh tim cao hơn đáng kể. Ngược lại, nhóm Hungary có hệ số âm (-0.42037, p = 0.01641), ngụ ý xác suất mắc bệnh thấp hơn đáng kể. Nhóm VA Long Beach không có ý nghĩa thống kê (p = 0.89698). Biến cp (kiểu đau ngực) có ảnh hưởng mạnh mẽ đến xác suất mắc bệnh tim. So với nhóm tham chiếu (asymptomatic), các loại đau ngực khác đều có hệ số âm và có ý nghĩa thống kê rất cao. Cụ thể: atypical angina (-1.55696, p < 0.0001), non-anginal (-0.91629, p < 0.0001), và typical angina (-0.72039, p = 0.00450). Điều này cho thấy các loại đau ngực này liên quan đến xác suất mắc bệnh tim thấp hơn so với dạng không có triệu chứng. Biến exang (đau thắt ngực khi gắng sức) có hệ số dương 0.69768 với p < 0.0001, hàm ý rằng bệnh nhân có biểu hiện đau ngực khi gắng sức có khả năng mắc bệnh tim cao hơn rõ rệt so với những người không có triệu chứng này. Biến slope (dạng đoạn ST) cho thấy xu hướng đoạn ST phẳng (flat) có ảnh hưởng tích cực đến xác suất mắc bệnh tim (hệ số = 0.30674, p = 0.08184) và dạng dốc lên (upsloping) có hệ số âm (-0.38642, p = 0.05352). Cả hai biến này có ý nghĩa thống kê ở mức xấp xỉ 10%, cần được cân nhắc trong phân tích sâu hơn. Các biến fbs, restecg, và thal không cho thấy ý nghĩa thống kê rõ ràng trong mô hình. Các p-value của chúng đều lớn hơn 0.1, cho thấy ảnh hưởng của các yếu tố này đến xác suất mắc bệnh tim là không đáng kể trong mô hình Cloglog. Độ lệch còn lại (residual deviance) của mô hình là 735.02 với 899 bậc tự do, thấp hơn nhiều so với độ lệch của mô hình rỗng (null deviance = 1263.75). Điều này cho thấy mô hình có khả năng giải thích đáng kể phương sai trong dữ liệu. Giá trị AIC của mô hình là 775.02, là cơ sở để so sánh với các mô hình khác như logit hoặc probit trong phân tích tiếp theo.
if(!require(pscl)) install.packages("pscl")
## Loading required package: pscl
## Classes and Methods for R originally developed in the
## Political Science Computational Laboratory
## Department of Political Science
## Stanford University (2002-2015),
## by and under the direction of Simon Jackman.
## hurdle and zeroinfl functions by Achim Zeileis.
library(pscl)
# Tính log-likelihood cho LPM (vì logLik() không hoạt động với lm)
logLik_lpm <- function(model) {
n <- length(model$residuals)
rss <- sum(model$residuals^2)
sigma2 <- rss / n
ll <- -0.5 * n * (log(2 * pi) + log(sigma2) + 1)
class(ll) <- "logLik"
attr(ll, "df") <- length(coef(model))
attr(ll, "nobs") <- n
return(ll)
}
# Bảng so sánh
comparison_table <- data.frame(
"Mo hinh" = c("LPM", "Logit", "Probit", "Cloglog"),
AIC = c(AIC(lpm_model), AIC(model_logit), AIC(model_probit), AIC(model_cloglog)),
LogLikelihood = c(
as.numeric(logLik_lpm(lpm_model)),
as.numeric(logLik(model_logit)),
as.numeric(logLik(model_probit)),
as.numeric(logLik(model_cloglog))
),
"McFadden R-squared" = c(
NA,
pR2(model_logit)["McFadden"],
pR2(model_probit)["McFadden"],
pR2(model_cloglog)["McFadden"]
),
check.names = FALSE
)
## fitting null model for pseudo-r2
## fitting null model for pseudo-r2
## fitting null model for pseudo-r2
# Làm tròn số liệu
comparison_table$AIC <- round(comparison_table$AIC, 2)
comparison_table$LogLikelihood <- round(comparison_table$LogLikelihood, 2)
comparison_table$`McFadden R-squared` <- round(as.numeric(comparison_table$`McFadden R-squared`), 4)
print(comparison_table)
## Mo hinh AIC LogLikelihood McFadden R-squared
## 1 LPM 745.61 -353.80 NA
## 2 Logit 736.39 -350.19 0.4327
## 3 Probit 734.37 -349.19 0.4343
## 4 Cloglog 745.03 -354.52 0.4257
Về tiêu chí AIC, mô hình Probit có giá trị thấp nhất (AIC = 760.96), tiếp theo là Logit (AIC = 762.22), cho thấy hai mô hình này có mức độ phù hợp tốt hơn so với mô hình LPM (AIC = 771.95) và Cloglog (AIC = 775.02). Như vậy, xét theo AIC, mô hình Probit là tối ưu nhất trong bốn mô hình được xây dựng. Xét đến giá trị Log-Likelihood, kết quả tương tự được quan sát: Probit đạt giá trị log-likelihood cao nhất (-360.48), nhỉnh hơn Logit (-361.11), trong khi mô hình LPM (-364.97) và Cloglog (-367.51) thể hiện mức độ phù hợp kém hơn. Việc tối đa hóa Log-Likelihood là mục tiêu quan trọng trong các mô hình hồi quy nhị phân, do đó điều này càng củng cố vai trò nổi bật của mô hình Probit. Về chỉ số McFadden R-squared, cả ba mô hình phi tuyến (Logit, Probit, Cloglog) đều cho kết quả đáng chú ý, trong đó Probit đạt 0.4295 và Logit là 0.4285. Mô hình Cloglog có giá trị thấp hơn đáng kể (0.4184), trong khi mô hình tuyến tính (LPM) không cung cấp được chỉ số McFadden R-squared phù hợp, do bản chất tuyến tính của nó. Tổng hợp ba tiêu chí, có thể kết luận rằng mô hình Probit có hiệu quả cao nhất trong việc dự đoán xác suất xảy ra của biến phụ thuộc. Mô hình Logit xếp sau và thể hiện hiệu quả tương đương. Ngược lại, hai mô hình còn lại (LPM và Cloglog) có mức độ phù hợp thấp hơn, đặc biệt là Cloglog dù được thiết kế để xử lý các tình huống không đối xứng nhưng lại không đem lại hiệu quả vượt trội trong bộ dữ liệu này.
# Dự đoán xác suất từ mô hình Probit
predicted_probs <- predict(model_probit, type = "response")
# Chuyển xác suất thành lớp dự đoán
predicted_class <- ifelse(predicted_probs >= 0.5, 1, 0)
# Lấy nhãn thực tế từ mô hình (nếu bạn chưa có sẵn)
actual_class <- model_probit$y
# Tạo ma trận nhầm lẫn
conf_matrix <- table(Du_doan = predicted_class, Thuc_te = actual_class)
print(conf_matrix)
## Thuc_te
## Du_doan 0 1
## 0 322 75
## 1 85 414
Ma trận nhầm lẫn của mô hình probit cho thấy khả năng phân loại của mô hình trong việc dự đoán nguy cơ mắc bệnh tim mạch (biến phụ thuộc num, gồm hai nhóm: có bệnh và không có bệnh). Cụ thể, mô hình đã dự đoán đúng 324 trong tổng số 398 trường hợp không mắc bệnh tim mạch, tương ứng với tỷ lệ chính xác là 81.41%. Ngược lại, trong số 521 trường hợp có bệnh tim mạch, mô hình dự đoán đúng 434 trường hợp, tương ứng với độ chính xác là 83.49%.
Tổng số quan sát trong mẫu là 919 bệnh nhân, trong đó có 758 trường hợp được mô hình phân loại chính xác (chiếm 82.48%). Như vậy, mô hình có tỷ lệ sai lệch chung là 17.52%, với 74 trường hợp không mắc bệnh bị phân loại nhầm là có bệnh (false positives), và 87 trường hợp có bệnh bị phân loại nhầm là không có bệnh (false negatives). Hai loại sai lệch này có mức độ xấp xỉ nhau, phản ánh sự cân bằng tương đối của mô hình trong việc dự đoán cả hai nhóm.
Trong bối cảnh nghiên cứu y sinh học, đặc biệt liên quan đến bệnh tim mạch – một bệnh lý có nguy cơ cao và hậu quả nặng nề – việc nhầm lẫn giữa người bệnh và người khỏe mạnh có thể dẫn đến hậu quả lâm sàng nghiêm trọng. Do đó, mặc dù mô hình đạt độ chính xác tương đối cao trên toàn tập dữ liệu, vẫn cần đặc biệt chú trọng đến tỷ lệ false negative, tức các trường hợp mắc bệnh nhưng bị dự đoán là không có bệnh. Đây là nhóm có thể bị bỏ sót trong sàng lọc và chẩn đoán.
Với mục tiêu phân tích các yếu tố ảnh hưởng đến nguy cơ mắc bệnh tim mạch, kết quả phân loại khả quan từ mô hình probit là một nền tảng phù hợp để tiếp tục đánh giá ý nghĩa thống kê và mức độ ảnh hưởng của từng biến độc lập như giới tính, quốc gia, loại cơn đau ngực, đường huyết lúc đói, điện tâm đồ lúc nghỉ, đau thắt ngực khi gắng sức, độ dốc đoạn ST và tình trạng thalassemia. Việc phân tích thêm các hệ số ước lượng và kiểm định từng biến sẽ cho phép nhận diện những yếu tố có liên quan chặt chẽ đến nguy cơ mắc bệnh tim mạch trong mẫu nghiên cứu.
install.packages("caret")
## package 'caret' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\Administrator\AppData\Local\Temp\Rtmp6D3pJD\downloaded_packages
install.packages("pROC")
## package 'pROC' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\Administrator\AppData\Local\Temp\Rtmp6D3pJD\downloaded_packages
library(caret)
## Loading required package: lattice
library(pROC)
## Type 'citation("pROC")' for a citation.
##
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
# Kiểm tra nếu là ma trận 2x2 thì mới tiếp tục
if (all(dim(conf_matrix) == c(2, 2))) {
# Gán giá trị từ ma trận (đúng thứ tự hàng/cột)
TN <- conf_matrix[1, 1] # Dự đoán 0, thực tế 0
FN <- conf_matrix[1, 2] # Dự đoán 0, thực tế 1
FP <- conf_matrix[2, 1] # Dự đoán 1, thực tế 0
TP <- conf_matrix[2, 2] # Dự đoán 1, thực tế 1
# Tính các chỉ số hiệu suất
accuracy <- (TP + TN) / (TP + TN + FP + FN)
precision <- TP / (TP + FP)
recall <- TP / (TP + FN)
f1_score <- 2 * (precision * recall) / (precision + recall)
# In kết quả ra màn hình
cat("Độ chính xác (Accuracy):", round(accuracy, 4), "\n")
cat("Độ chuẩn (Precision):", round(precision, 4), "\n")
cat("Độ nhạy (Recall):", round(recall, 4), "\n")
cat("F1-Score:", round(f1_score, 4), "\n")
} else {
cat("⚠️ Ma trận không phải dạng 2x2, không thể tính chỉ số hiệu suất.\n")
}
## Độ chính xác (Accuracy): 0.8214
## Độ chuẩn (Precision): 0.8297
## Độ nhạy (Recall): 0.8466
## F1-Score: 0.8381
Các chỉ số hiệu suất cho mô hình probit cho thấy mô hình có khả năng phân loại tương đối tốt giữa nhóm bệnh nhân có nguy cơ mắc bệnh tim mạch và nhóm không có nguy cơ. Cụ thể, mô hình đạt độ chính xác tổng thể là 82.48%, nghĩa là khoảng hơn 8 trên 10 trường hợp được phân loại đúng so với thực tế. Đây là một mức độ chính xác tương đối cao trong các nghiên cứu y tế có yếu tố nhị phân.
Chỉ số độ chuẩn (Precision) đạt 83.3%, phản ánh rằng trong số tất cả các trường hợp được mô hình dự đoán là có bệnh tim mạch, khoảng 83.3% thực sự là những người có bệnh. Điều này cho thấy mô hình có khả năng hạn chế tương đối tốt việc đưa ra các dự đoán dương tính giả, tức là tránh đánh giá nhầm người không mắc bệnh thành người có bệnh.
Độ nhạy (Recall) của mô hình là 85.43%, nghĩa là trong tổng số các trường hợp thực sự mắc bệnh tim mạch, mô hình đã phát hiện đúng khoảng 85.43%. Đây là một yếu tố rất quan trọng trong bối cảnh lâm sàng, vì bỏ sót bệnh nhân thực sự mắc bệnh (âm tính giả) có thể dẫn đến hậu quả nghiêm trọng. Mức độ nhạy cao cho thấy mô hình phù hợp để sàng lọc ban đầu trong các chương trình dự báo nguy cơ bệnh tim mạch.
F1-Score đạt giá trị 84.35%, là chỉ số tổng hợp cân bằng giữa độ chuẩn và độ nhạy. Điều này cho thấy mô hình đạt được sự cân đối tương đối tốt giữa việc phát hiện đúng người bệnh và hạn chế sai sót trong phân loại người không bệnh. F1-Score cao đặc biệt quan trọng khi dữ liệu có mất cân bằng về số lượng giữa hai nhóm, hoặc khi cả hai loại lỗi (dương tính giả và âm tính giả) đều cần kiểm soát nghiêm ngặt.
Tóm lại, với các chỉ số hiệu suất hiện tại, mô hình probit đang thể hiện khả năng phân loại hiệu quả đối với bài toán dự đoán nguy cơ mắc bệnh tim mạch. Tuy nhiên, để khẳng định độ tin cậy và khả năng tổng quát của mô hình, cần tiến hành đánh giá thêm bằng các tập kiểm định độc lập hoặc áp dụng các kỹ thuật kiểm định chéo (cross-validation). Đồng thời, nên tiếp tục xem xét ý nghĩa thống kê của từng biến độc lập nhằm hiểu rõ yếu tố nào có ảnh hưởng đáng kể đến nguy cơ mắc bệnh tim mạch trong dân số nghiên cứu.
# Đường cong ROC và AUC
roc_obj <- roc(actual_class, predicted_probs)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
# Vẽ đường cong ROC
plot(roc_obj, col = "blue", lwd = 2, main = "Đường cong ROC")
abline(a = 0, b = 1, lty = 2, col = "gray") # Đường chéo ngẫu nhiên
# Tính AUC
auc_value <- auc(roc_obj)
cat("AUC:", round(auc_value, 4), "\n")
## AUC: 0.9026
Đường cong ROC của mô hình Probit cho thấy hiệu suất phân loại cao trong việc dự đoán khả năng mắc bệnh tim mạch. Đường cong đi lệch rõ về phía góc trên bên trái của đồ thị, cho thấy mô hình có khả năng phân biệt tốt giữa hai nhóm: người có nguy cơ và không có nguy cơ mắc bệnh.
Chỉ số AUC (Area Under the Curve) đạt giá trị 0.9004, đây là một mức rất cao trong các nghiên cứu mô hình hóa dự đoán. AUC phản ánh xác suất mà mô hình có thể xếp hạng đúng một cặp quan sát gồm một người mắc bệnh và một người không mắc bệnh. Giá trị AUC càng gần 1 thì khả năng phân biệt của mô hình càng tốt. Theo các tiêu chuẩn thống kê, AUC từ 0.90 trở lên được đánh giá là xuất sắc trong phân loại nhị phân.
Giá trị AUC = 0.9004 cho thấy mô hình probit không chỉ có hiệu suất tổng thể cao (thể hiện qua độ chính xác và F1-score) mà còn có khả năng ổn định trong việc cân bằng giữa tỷ lệ dương tính thật và dương tính giả ở các ngưỡng phân loại khác nhau. Điều này đặc biệt quan trọng trong bối cảnh y tế, khi các ngưỡng quyết định có thể thay đổi tùy vào mức độ chấp nhận rủi ro.
Tóm lại, kết quả đường cong ROC và chỉ số AUC hỗ trợ mạnh mẽ cho kết luận rằng mô hình probit được xây dựng có năng lực dự đoán tốt và hoàn toàn có thể sử dụng làm công cụ hỗ trợ đánh giá nguy cơ mắc bệnh tim mạch trong cộng đồng dân cư nghiên cứu. Tuy nhiên, việc đánh giá thêm trên tập dữ liệu độc lập hoặc qua kiểm định chéo là cần thiết để kiểm tra tính ổn định và khả năng tổng quát hóa của mô hình.
Từ kết quả phân tích các mô hình hồi quy nhị phân, mô hình Probit được lựa chọn là mô hình phù hợp nhất để tiếp tục nghiên cứu nhờ vào khả năng phân loại tốt và mức độ phù hợp cao với dữ liệu. Việc áp dụng mô hình này giúp làm rõ các yếu tố có ảnh hưởng đáng kể đến khả năng mắc bệnh tim mạch ở bệnh nhân.
Kết quả cho thấy, giới tính là một yếu tố quan trọng, khi nam giới có xu hướng dễ mắc bệnh tim hơn nữ giới. Đồng thời, những bệnh nhân xuất hiện các triệu chứng đau ngực không điển hình hoặc không do tim thường có xác suất mắc bệnh cao hơn so với người có cơn đau ngực điển hình. Bên cạnh đó, những người có chỉ số đường huyết lúc đói cao cũng có nguy cơ cao hơn, phản ánh mối liên hệ giữa chuyển hóa đường và sức khỏe tim mạch.
Ngoài ra, kết quả điện tâm đồ, đặc biệt là dấu hiệu phì đại thất trái, cũng liên quan đến khả năng mắc bệnh. Những bệnh nhân có biểu hiện đau thắt ngực khi gắng sức, hoặc có dạng đoạn ST bất thường trên điện tâm đồ, cũng cho thấy nguy cơ cao hơn. Cuối cùng, tình trạng thalassemia, đặc biệt là các dạng khuyết tật tim mạch cố định hoặc hồi phục, có mối liên hệ rõ rệt với bệnh tim.
Từ những phát hiện này, có thể khẳng định rằng mô hình Probit không chỉ hiệu quả về mặt dự báo mà còn giúp nhận diện rõ các yếu tố nguy cơ, qua đó cung cấp cơ sở thực tiễn cho việc sàng lọc và phòng ngừa bệnh tim mạch trong cộng đồng.
Mặc dù mô hình Probit đã cho thấy mức độ phù hợp tương đối tốt với dữ liệu, nghiên cứu vẫn tồn tại một số hạn chế cần được thừa nhận. Trước hết, bộ dữ liệu sử dụng mang tính thứ cấp và được tổng hợp từ nhiều nguồn khác nhau, điều này có thể dẫn đến sự không đồng nhất về cách thu thập dữ liệu, tiêu chuẩn chẩn đoán và điều kiện bệnh lý, từ đó ảnh hưởng đến tính đại diện và độ tin cậy của kết quả. Thêm vào đó, một số biến quan trọng khác liên quan đến lối sống, tiền sử gia đình hoặc các yếu tố di truyền chưa được đưa vào mô hình do dữ liệu không đầy đủ, dẫn đến khả năng bỏ sót các yếu tố gây nhiễu tiềm ẩn. Ngoài ra, mô hình chỉ sử dụng các biến định tính và định lượng có sẵn tại thời điểm khảo sát, chưa xét đến các yếu tố biến thiên theo thời gian, như sự tiến triển của bệnh hoặc hiệu quả điều trị. Cuối cùng, nghiên cứu chủ yếu đánh giá mối liên hệ tuyến tính hoặc dạng chuẩn hóa giữa các biến với khả năng mắc bệnh, mà chưa phân tích sâu về các mối quan hệ phi tuyến hay tương tác giữa các yếu tố, điều này có thể làm giảm tính khái quát hóa của mô hình trong bối cảnh thực tế.
Trong các nghiên cứu tiếp theo, có thể mở rộng mô hình bằng cách đưa thêm các biến giải thích liên quan đến hành vi sức khỏe, yếu tố di truyền, hoặc đặc điểm lâm sàng chi tiết hơn, nhằm nâng cao độ chính xác trong dự báo nguy cơ mắc bệnh tim mạch. Việc sử dụng dữ liệu theo chiều dọc (panel data) hoặc dữ liệu thời gian thực sẽ giúp đánh giá được sự thay đổi tình trạng sức khỏe theo thời gian và phản ánh rõ hơn ảnh hưởng của các yếu tố can thiệp y tế. Ngoài ra, cần xem xét áp dụng các mô hình phi tuyến hoặc học máy (machine learning) để phát hiện những mối quan hệ phức tạp và tương tác không hiển nhiên giữa các biến, từ đó cải thiện khả năng phân loại và dự báo. Cuối cùng, nên tiến hành đánh giá mô hình trên các tập dữ liệu độc lập nhằm kiểm định khả năng tổng quát hóa của kết quả và tính ứng dụng thực tiễn trong các chiến lược can thiệp y tế cộng đồng.