PHÂN TÍCH CÁC YẾU TỐ ẢNH HƯỞNG ĐẾN NGUY CƠ MẮC BỆNH TIM MẠCH

Chương 1: TỔNG QUAN

1.1 Lý do chọn đề tài

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.

1.2 Mục tiêu nghiên cứu

  • Mục tiêu chung: Phân tích mức độ ảnh hưởng của các yếu tố định tính đến nguy cơ mắc bệnh tim mạch và xây dựng mô hình dự báo khả năng mắc bệnh dựa trên các yếu tố này bằng phương pháp hồi quy logistic và hồi quy probit.
  • Mục tiêu cụ thể: Mô tả đặc điểm phân bố của các nhóm đối tượng có và không mắc bệnh tim mạch theo các biến định tính trong bộ dữ liệu. Kiểm định mức độ ảnh hưởng có ý nghĩa thống kê của từng yếu tố định tính đến khả năng mắc bệnh. Xây dựng và so sánh hai mô hình hồi quy logistic và hồi quy probit nhằm lượng hóa mối liên hệ giữa các biến giải thích và khả năng mắc bệnh tim mạch. Đánh giá và đối chiếu hiệu quả dự báo của hai mô hình thông qua các chỉ số đo lường phù hợp.

1.3 Đối tượng và phạm vi nghiên cứu

Đố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.

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

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.

Chương 2: CƠ SỞ LÝ THUYẾT

2.1 Tổng quan về bệnh tim mạch

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.

2.2 Mô hình hồi quy nhị phâ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.

2.3 Mô hình Logistic (Logit)

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.

2.4 Mô hình Probit

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 đó:

  • \(Y\) là biến phụ thuộc nhị phân (ví dụ: \(Y = 0\) biểu thị không mắc bệnh, \(Y = 1\) biểu thị có mắc bệnh).
  • \(X_1, X_2, \ldots, X_k\) là các biến độc lập ảnh hưởng đến xác suất xảy ra của biến phụ thuộc.
  • \(\beta_0, \beta_1, \ldots, \beta_k\) là các hệ số hồi quy cần được ước lượng.
  • \(\Phi(\cdot)\) là hàm phân phối tích lũy của phân phối chuẩn chuẩn hóa (có trung bình bằng 0 và phương sai bằng 1).

2.5 Mô hình Complementary log-log (Cloglog)

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 đó:

  • \(Y\) là biến phụ thuộc nhị phân (ví dụ: 0 = không mắc bệnh, 1 = mắc bệnh).
  • \(X_1, X_2, \ldots, X_k\) là các biến độc lập giải thích xác suất xảy ra sự kiện.
  • \(\beta_0, \beta_1, \ldots, \beta_k\) là các hệ số hồi quy.
  • \(\log(-\log(1 - P))\) là hàm liên kết (link function) của mô hình cloglog, khác với hàm logit hay probit.

2.5 Mô hình xác suất tuyến tính (LMP)

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 đó:

  • \(Y\) là biến phụ thuộc nhị phân (ví dụ: 0 = không có bệnh, 1 = có bệnh).
  • \(P(Y = 1 | X)\) là xác suất xảy ra sự kiện Y = 1 với điều kiện các biến X.
  • \(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ố hồi quy cần ước lượng.

2.6 Phương pháp ước lượng: Maximum Likelihood Estimation (MLE)

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\).

2.7 Relative Risk và Odds Ratio

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).

2.7.1 Relative Risk (Rủi ro tương đối - RR)

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 đó:

  • \(x = 1\): nhóm phơi nhiễm hoặc có yếu tố nguy cơ
  • \(x = 0\): nhóm không phơi nhiễm
  • \(y = 1\): sự kiện xảy ra (ví dụ: mắc bệnh)

Ý nghĩa:

  • \(RR = 1\): không có sự khác biệt về nguy cơ giữa hai nhóm
  • \(RR > 1\): nguy cơ xảy ra sự kiện cao hơn ở nhóm phơi nhiễm
  • \(RR < 1\): nguy cơ xảy ra sự kiện thấp hơn ở nhóm phơi nhiễm ## 2.7.2 Odds Ratio (Tỷ số chênh - OR)

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 đó:

  • \(P_1 = P(y = 1 \mid x = 1)\): xác suất xảy ra sự kiện ở nhóm phơi nhiễm
  • \(P_0 = P(y = 1 \mid x = 0)\): xác suất xảy ra sự kiện ở nhóm không phơi nhiễm

Ý nghĩa của Odds Ratio:

  • \(OR = 1\): không có mối liên hệ giữa phơi nhiễm và sự kiện
  • \(OR > 1\): odds xảy ra sự kiện cao hơn ở nhóm phơi nhiễm
  • \(OR < 1\): odds xảy ra sự kiện thấp hơn ở nhóm phơi nhiễm

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.

Chương 3: PHÂN TÍCH VÀ KẾT QUẢ NGHIÊN CỨU

3.1 Dữ liệu nghiên cứu

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.).

3.2 Kiểm tra giá trị thiếu

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.

  • Loại bỏ giá trị thiếu và kiểm tra lại
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.

3.3 Xác định biến độc lập và biến phụ thuộc

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.

3.4 Thống kê mô tả các biến

3.4.1 Biến độc lập

# 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.

3.4.2 Biến phụ thuộc

3.4.2.1 Biến “sex”

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()

3.4.2.2 Biến “dataset”

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()

3.4.2.3 Biến “cp”

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()

3.4.2.4 Biến “fbs”

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()

3.4.2.5 Biến “restecg”

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()

3.4.2.6 Biến “exang”

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()

3.4.2.7 Biến “slope”

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()

3.4.2.8 Biến “thal”

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ể:

  • Nhóm “reversable defect” (tổn thương có thể hồi phục) chiếm tỷ lệ cao nhất với 46.63% (429 trường hợp), cho thấy đây là tình trạng phổ biến nhất trong mẫu nghiên cứu.
  • Nhóm “normal” (bình thường) chiếm 32.72% (301 trường hợp), phản ánh số lượng bệnh nhân không có dấu hiệu bất thường về thalassemia vẫn khá lớn. Nhóm “fixed defect” (tổn thương cố định) chiếm 20.43% (188 trường hợp), cho thấy mức độ tồn tại của tổn thương không hồi phục cũng đáng kể.
  • Dữ liệu thiếu chiếm tỷ lệ rất thấp (0.22%, tương đương 2 trường hợp), không ảnh hưởng đáng kể đến kết quả phân tích. Sự phân bố này có thể liên quan đến đặc điểm sinh lý hoặc yếu tố di truyền trong dân số nghiên cứu. Cần xem xét ảnh hưởng của tình trạng thalassemia đến nguy cơ bệnh tim trong các phân tích tiếp theo.
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()

3.5 Phân tích mối quan hệ giữa hai biến định tính

3.5.1 Biến “num” và biến “sex”

3.5.1.1 Bảng tần số chéo

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.

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

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.

3.5.1.3 Hiệu tỷ lệ

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.

3.5.1.4 Rủi ro tương đối

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ế.

3.5.1.5 Tỷ số chênh

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.

3.5.2 Biến “num” và biến “dataset”

3.5.2.1 Bảng tần số chéo

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ể.

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

Đặ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.

3.5.2.3 Hiệu tỷ lệ

# 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
  • So sánh Cleveland và Hungary: Hiệu tỷ lệ (odds ratio) giữa nhóm không bệnh và có bệnh là 1.48, với khoảng tin cậy 95% từ 1.07 đến 2.06. Điều này cho thấy khả năng không mắc bệnh ở nhóm Cleveland cao hơn khoảng 1.48 lần so với nhóm Hungary, và sự khác biệt này có ý nghĩa thống kê (p < 0.05).
  • So sánh Cleveland và Switzerland: Hiệu tỷ lệ giữa nhóm không bệnh và có bệnh là 0.06, khoảng tin cậy 95% từ 0.03 đến 0.12. Điều này cho thấy xác suất không mắc bệnh ở nhóm Cleveland thấp hơn rất nhiều so với nhóm Switzerland, và sự khác biệt này là rất có ý nghĩa thống kê (p gần bằng 0).
  • So sánh Cleveland và VA Long Beach: Hiệu tỷ lệ là 0.29, với khoảng tin cậy 95% từ 0.19 đến 0.43. Tức là nhóm Cleveland có khả năng không mắc bệnh thấp hơn khoảng 71% so với nhóm VA Long Beach, và sự khác biệt này cũng có ý nghĩa thống kê cao.
  • So sánh Hungary và Switzerland: Hiệu tỷ lệ là 0.04, với khoảng tin cậy 95% từ 0.02 đến 0.08. Khả năng không mắc bệnh ở nhóm Hungary thấp hơn đáng kể so với nhóm Switzerland. Kết quả cho thấy sự khác biệt này có ý nghĩa thống kê rõ rệt.
  • So sánh Hungary và VA Long Beach: Hiệu tỷ lệ là 0.20, khoảng tin cậy từ 0.13 đến 0.29. Điều này chỉ ra rằng nhóm Hungary có khả năng không mắc bệnh thấp hơn so với nhóm VA Long Beach, với sự khác biệt có ý nghĩa.
  • So sánh Switzerland và VA Long Beach: Hiệu tỷ lệ là 4.83, với khoảng tin cậy 95% từ 2.31 đến 11.45. Kết quả này cho thấy nhóm Switzerland có khả năng không mắc bệnh cao hơn gần 5 lần so với nhóm VA Long Beach, và đây là một sự khác biệt rất có ý nghĩa thống kê.

3.5.2.4 Rủi ro tương đối

Đặ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.

3.5.2.5 Tỷ số chênh

Đặ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).

3.5.3 Biến “num” và biến “cp”

3.5.3.1 Bảng tần số chéo

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.

3.5.3.2 Kiểm định Chi-bình phươ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.

3.5.3.3 Rủi ro tương đối

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ê.

3.5.3.4 Tỷ số chênh

Đặ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.

3.5.4 Biến “num” và biến “fbs”

3.5.4.1 Bảng tần số chéo

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.

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

Đặ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.

3.5.4.3 Hiệu tỷ lệ

3.5.4.4 Rủi ro tương đối

Đặ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.

3.5.4.5 Tỷ số 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.

3.5.5 Biến “num” và biến “restecg”

3.5.5.1 Bảng tần số chéo

Để đá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.

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

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.

3.5.5.3 Hiệu tỷ lệ

3.5.5.4 Rủi ro tương đối

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.

3.5.5.5 Tỷ số chênh

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ê.

3.5.6 Biến “num” và biến “exang”

3.5.6.1 Bảng tần số chéo

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.

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

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.

3.5.6.3 Hiệu tỷ lệ

3.5.6.4 Rủi ro tương đối

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.

3.5.6.5 Tỷ số chênh

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.

3.5.7 Biến “num” và biến “slope”

3.5.7.1 Bảng tần số chéo

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.

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

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ệ

3.5.7.4 Rủi ro tương đối

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ê.

3.5.7.5 Tỷ số chênh

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.

3.5.8 Biến “num” và biến “thal”

3.5.8.1 Bảng tần số chéo

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.

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

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.

3.5.8.3 Hiệu tỷ lệ

3.5.8.4 Rủi ro tương đối

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.

3.5.8.5 Tỷ số chênh

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.

3.6 Mô hình hồi quy bội

3.6.1 Mô hình Xác suất Tuyến tính (LPM) Bội

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.

3.6.2 Mô hình Logit Bội

# É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.

3.6.3 Mô hình Probit Bội

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.

3.6.4 Mô hình Cloglog Bội

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.

3.7 So sánh các mô hình hồi quy bội

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.

3.8 Đánh giá hiệu quả mô hình

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

# 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.

3.8.2 Các chỉ số hiệu suất

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.

3.8.3 Đường cong ROC và chỉ số AUC

# Đườ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.

Chương 4: KẾT LUẬN

4.1 Kết luận

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.

4.2 Hạn chế

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ế.

4.3 Đề xuất hướng nghiên cứu tiếp theo

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.