library(tidyverse)
library(DT)
library(scales)
library(psych)
library(knitr)
library(kableExtra)
library(DescTools)
library(epitools)
library(AER)
library(dplyr)
Đột quỵ (hay còn gọi là tai biến mạch máu não) là một trong những nguyên nhân hàng đầu gây tử vong và tàn tật trên toàn cầu, đồng thời được xem là gánh nặng y tế nghiêm trọng trong thế kỷ 21. Theo Tổ chức Y tế Thế giới (WHO), mỗi năm có khoảng 15 triệu người trên thế giới bị đột quỵ, trong đó gần 6 triệu người tử vong và hơn 5 triệu người sống sót nhưng phải chịu các di chứng nghiêm trọng về thần kinh và vận động. Đột quỵ không chỉ gây tổn thất lớn về mặt sức khỏe và kinh tế mà còn ảnh hưởng lâu dài đến chất lượng cuộc sống của người bệnh và gia đình họ.
Tại Việt Nam, đột quỵ là nguyên nhân gây tử vong đứng thứ ba và đang có xu hướng gia tăng nhanh chóng, đặc biệt ở các khu vực đô thị và dân số cao tuổi. Nhiều yếu tố nguy cơ liên quan đến lối sống hiện đại như hút thuốc lá, ít vận động, chế độ ăn uống không lành mạnh, cùng với các yếu tố lâm sàng như tăng huyết áp, thừa cân, hoặc tiền sử bệnh lý tim mạch, đều có thể làm tăng đáng kể khả năng bị đột quỵ. Đáng lo ngại là nhiều trường hợp đột quỵ xảy ra bất ngờ, khi người bệnh chưa từng được cảnh báo về nguy cơ.
Trong bối cảnh đó, việc phân tích và phát hiện sớm các yếu tố nguy cơ có liên quan đến đột quỵ đóng vai trò then chốt trong việc phòng ngừa chủ động và xây dựng các mô hình dự báo rủi ro chính xác. Những công cụ này có thể giúp hỗ trợ các chương trình y tế cộng đồng, nâng cao nhận thức phòng ngừa, tối ưu hóa chiến lược can thiệp sớm thông qua cải thiện lối sống và theo dõi các chỉ số sức khỏe.
Với tầm quan trọng và tính cấp thiết như vậy, đề tài “NGHIÊN CỨU MỐI LIÊN HỆ GIỮA CÁC YẾU TỐ NGUY CƠ VÀ KHẢ NĂNG MẮC BỆNH ĐỘT QUỴ” được lựa chọn nhằm cung cấp cơ sở khoa học cho việc nhận diện sớm nhóm nguy cơ cao, từ đó hỗ trợ các quyết định trong hoạch định chính sách y tế và nâng cao hiệu quả phòng ngừa đột quỵ trong cộng đồng.
Mục tiêu tổng quát:
Phân tích và xác định các yếu tố chính ảnh hưởng đến nguy cơ mắc bệnh đột quỵ trên một nhóm đối tượng cụ thể, từ đó xây dựng mô hình dự báo rủi ro nhằm phục vụ công tác phòng ngừa và kiểm soát bệnh.
Mục tiêu cụ thể:
Hệ thống hóa các cơ sở lý thuyết liên quan đến bệnh đột quỵ, các dạng biểu hiện lâm sàng, biến chứng và các yếu tố nguy cơ đã được xác định trong các nghiên cứu trước.
Thu thập và xử lý dữ liệu từ bộ Stroke Prediction Dataset, bao gồm các đặc điểm nhân khẩu học, hành vi sức khỏe và yếu tố lâm sàng của đối tượng nghiên cứu.
Áp dụng các mô hình thống kê và học máy như hồi quy logistic, logit, probit,… để xác định mức độ ảnh hưởng của từng yếu tố đến khả năng mắc đột quỵ.
Đề xuất các khuyến nghị cụ thể về thay đổi lối sống, chiến lược tầm soát sớm và chính sách y tế cộng đồng, dựa trên các yếu tố nguy cơ đã được phân tích.
Đối tượng nghiên cứu: Các yếu tố nguy cơ (như tuổi, giới tính, chỉ số khối cơ thể BMI, huyết áp, tiền sử gia đình, loại thuốc sử dụng, mức độ hoạt động thể chất, v.v.) và mối quan hệ của chúng với chứng đột quỵ.
Đối tượng khảo sát: Dữ liệu có thể được thu thập từ các cuộc điều tra sức khỏe cộng đồng, hồ sơ bệnh án tại bệnh viện, được tác giả thu thập từ bộ dữ liệu Stroke Prediction Dataset từ nguồn kaggle.com.
Phạm vi không gian: Nghiên cứu có thể được giới hạn trong một khu vực địa lý nhất định (ví dụ: một tỉnh/thành phố, một bệnh viện).
Bộ dữ liệu được sử dụng trong nghiên cứu có cấu trúc phù hợp cho các phân tích định lượng, đặc biệt là các mô hình thống kê với biến phụ thuộc nhị phân. Hầu hết các biến trong tập dữ liệu đều là biến nhị phân hoặc phân loại với số lượng mức độ hạn chế, thuận lợi cho việc áp dụng các mô hình hồi quy nhị phân như hồi quy tuyến tính (OLS), hồi quy logistic, mô hình probit, và mô hình complementary log-log (cloglog). Các mô hình này được lựa chọn nhằm phân tích và định lượng mối quan hệ giữa các yếu tố nguy cơ (biến độc lập) và khả năng xảy ra đột quỵ (biến phụ thuộc – Has_Stroke).
Bên cạnh các mô hình hồi quy, nghiên cứu còn sử dụng các phương pháp thống kê mô tả để tóm tắt đặc điểm nhân khẩu học và hành vi sức khỏe của đối tượng khảo sát, đồng thời áp dụng kiểm định Chi-squared để kiểm tra mối liên hệ thống kê giữa các biến phân loại và khả năng mắc đột quỵ. Việc kết hợp giữa phân tích mô tả, kiểm định giả thuyết và mô hình hóa định lượng cho phép nâng cao độ tin cậy, tính khách quan và chiều sâu của các kết luận rút ra từ nghiên cứu.
Cách tiếp cận này phù hợp với định hướng phân tích trong thống kê y tế và dịch tễ học, đồng thời bảo đảm tính khoa học và thực tiễn khi ứng dụng vào việc phân tích dữ liệu sức khỏe cộng đồng, từ đó phục vụ công tác dự phòng, sàng lọc và can thiệp y tế một cách hiệu quả hơn.
Bộ dữ liệu “Stroke Prediction Dataset” được thiết kế nhằm hỗ trợ các nhà nghiên cứu, chuyên gia khoa học dữ liệu và những người quan tâm đến lĩnh vực chăm sóc sức khỏe trong việc phân tích các yếu tố nguy cơ liên quan đến đột quỵ.
Tập dữ liệu bao gồm 1.985 quan sát và 9 biến độc lập có ý nghĩa, được xây dựng dựa trên thông tin lâm sàng chi tiết cùng với các mô hình dữ liệu y tế công cộng, nhằm phục vụ cho việc nghiên cứu, dự đoán và phòng ngừa nguy cơ đột quỵ trong cộng đồng.
library(xlsx)
## Warning: package 'xlsx' was built under R version 4.3.3
library(dplyr)
library(ggplot2)
library(gmodels)
## Warning: package 'gmodels' was built under R version 4.3.3
## Registered S3 method overwritten by 'gdata':
## method from
## reorder.factor DescTools
data <- read.xlsx(file = "C:/Users/HP/Downloads/Stroke Prediction Dataset.xlsx", sheetIndex = 1, header = T)
Cấu trúc bộ dữ liệu
library(data.table)
## Warning: package 'data.table' was built under R version 4.3.3
##
## Attaching package: 'data.table'
## The following objects are masked from 'package:zoo':
##
## yearmon, yearqtr
## The following object is masked from 'package:DescTools':
##
## %like%
## The following objects are masked from 'package:lubridate':
##
## hour, isoweek, mday, minute, month, quarter, second, wday, week,
## yday, year
## The following objects are masked from 'package:dplyr':
##
## between, first, last
## The following object is masked from 'package:purrr':
##
## transpose
data.table(data)
## Age Salt_Intake BP_History BMI Medication Family_History
## <num> <num> <char> <char> <char> <char>
## 1: 32 11.7 Normal Normal None No
## 2: 78 9.5 Normal Normal None No
## 3: 38 10.0 Hypertension Normal ACE Inhibitor No
## 4: 20 10.8 Hypertension Normal Beta Blocker Yes
## 5: 47 7.2 Normal Normal None No
## ---
## 1981: 51 11.8 Normal Normal Other No
## 1982: 61 6.0 Normal Underweight None No
## 1983: 29 6.2 Normal Normal None No
## 1984: 19 8.5 Hypertension Normal None No
## 1985: 42 9.1 Normal Overweight Diuretic Yes
## Exercise_Level Smoking_Status Has_Stroke
## <char> <char> <char>
## 1: Low Non-Smoker No
## 2: Moderate Non-Smoker No
## 3: Low Non-Smoker Yes
## 4: High Non-Smoker Yes
## 5: High Non-Smoker No
## ---
## 1981: Low Non-Smoker No
## 1982: Low Smoker No
## 1983: Moderate Non-Smoker No
## 1984: High Non-Smoker No
## 1985: Moderate Smoker Yes
Kiểm tra số lượng NA trong cột định tính
if (any(is.na(data))) {
cat("Có giá trị thiếu trong dữ liệu.\n")
} else {
cat("Không có giá trị thiếu trong dữ liệu.\n")
}
## Không có giá trị thiếu trong dữ liệu.
Kết quả thu được cho thấy rằng tất cả các cột định tính đều không có giá trị thiếu (NA).
Bộ dữ liệu bao gồm 1.985 quan sát (observations) và 9 biến (variables), phản ánh thông tin sức khỏe và các yếu tố lối sống có liên quan đến nguy cơ đột quỵ ở người trưởng thành từ 18 đến 84 tuổi.
Has_Stroke: Biến phụ thuộc.Thể hiện đối tượng có bị đột quỵ hay chưa.
Smoking_Status: Tình trạng hút thuốc lá của đối tượng. Bao gồm hai giá trị: “Non-Smoker” (không hút thuốc) và “Smoker” (có hút thuốc).
Family_History: Tiền sử gia đình đột quỵ hay không (“Yes”: CÓ / “No”: KHÔNG).
BMI: Phân loại tình trạng thể trọng (“Underweight”: gầy, “Normal”: bình thường, “Overweight”: thừa cân).
BP_History: Tiền sử huyết áp của đối tượng, được phân thành ba mức: “Normal” (bình thường), “PreHypertension” (tiền tăng huyết áp), và “Hypertension” (huyết áp cao).
Chuyển đổi các biến định tính sang kiểu factor
# Chuyển các biến định tính sang factor
data$BP_History <- as.factor(data$BP_History)
data$BMI <- as.factor(data$BMI)
data$Family_History <- as.factor(data$Family_History)
data$Smoking_Status <- as.factor(data$Smoking_Status)
data$Has_Stroke <- as.factor(data$Has_Stroke)
Kiểm tra lại cấu trúc dữ liệu sau khi chuyển đổi
str(data)
## 'data.frame': 1985 obs. of 9 variables:
## $ Age : num 32 78 38 20 47 55 77 39 76 77 ...
## $ Salt_Intake : num 11.7 9.5 10 10.8 7.2 7.4 8.5 13.7 5 9.3 ...
## $ BP_History : Factor w/ 3 levels "Hypertension",..: 2 2 1 1 2 3 2 2 1 1 ...
## $ BMI : Factor w/ 3 levels "Normal","Overweight",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ Medication : chr "None" "None" "ACE Inhibitor" "Beta Blocker" ...
## $ Family_History: Factor w/ 2 levels "No","Yes": 1 1 1 2 1 1 2 2 2 1 ...
## $ Exercise_Level: chr "Low" "Moderate" "Low" "High" ...
## $ Smoking_Status: Factor w/ 2 levels "Non-Smoker","Smoker": 1 1 1 1 1 1 2 1 1 1 ...
## $ Has_Stroke : Factor w/ 2 levels "No","Yes": 1 1 2 2 1 1 2 1 2 2 ...
Giải thích:
sapply(data, class): Áp dụng hàm class() cho từng cột để kiểm tra kiểu dữ liệu. Kết quả trả về là một vector hiển thị tên cột và loại dữ liệu tương ứng.
Kết quả là “factor” cho tất cả các cột → chuyển đổi thành công.
sapply(data, class)
## Age Salt_Intake BP_History BMI Medication
## "numeric" "numeric" "factor" "factor" "character"
## Family_History Exercise_Level Smoking_Status Has_Stroke
## "factor" "character" "factor" "factor"
Kết quả thu được: toàn bộ các biến định tính đã được chuyển đổi thành dạng factor.
Đột quỵ (Stroke), hay còn gọi là tai biến mạch máu não, là một tình trạng y tế nghiêm trọng xảy ra khi lưu lượng máu đến một phần của não bị gián đoạn hoặc giảm nghiêm trọng, làm cho mô não không nhận đủ oxy và dưỡng chất cần thiết. Trong vài phút, các tế bào não bắt đầu chết, gây ra tổn thương thần kinh nghiêm trọng hoặc thậm chí tử vong nếu không được can thiệp kịp thời.
Đột quỵ thường được chia thành hai loại chính:
Đột quỵ thiếu máu cục bộ (Ischemic Stroke): Chiếm khoảng 80–85% các trường hợp, xảy ra khi một cục máu đông làm tắc nghẽn động mạch cung cấp máu cho não.
Đột quỵ xuất huyết (Hemorrhagic Stroke): Xảy ra khi một mạch máu trong não bị vỡ, gây xuất huyết trong mô não.
Ngoài ra, còn có cơn thiếu máu não thoáng qua (TIA - Transient Ischemic Attack), thường được xem là “cảnh báo sớm” cho đột quỵ thực sự, với các triệu chứng tương tự nhưng biến mất trong vòng 24 giờ.
Đột quỵ có thể gây ra nhiều biến chứng nghiêm trọng, bao gồm:
Suy giảm vận động: Yếu hoặc liệt một phần cơ thể, thường ở nửa người.
Suy giảm nhận thức và giao tiếp: Gặp khó khăn trong ngôn ngữ, trí nhớ hoặc tư duy.
Biến chứng tâm lý: Trầm cảm, lo âu, thay đổi cảm xúc.
Biến chứng hô hấp và tim mạch: Tăng nguy cơ viêm phổi, nhồi máu cơ tim, tái phát đột quỵ.
Tử vong: Đột quỵ là một trong những nguyên nhân hàng đầu gây tử vong toàn cầu.
Chỉ số BMI (Body Mass Index)
Chỉ số BMI là chỉ số đo lường trạng thái thể trọng bằng cách lấy cân nặng chia cho bình phương chiều cao (kg/m²). BMI cao, đặc biệt là trong ngưỡng “thừa cân” và “béo phì”, có liên quan chặt chẽ đến nguy cơ mắc đột quỵ. Thừa cân làm tăng huyết áp, rối loạn lipid máu và khả năng hình thành cục máu đông — những yếu tố trực tiếp dẫn đến đột quỵ.
Nghiên cứu liên quan: Theo nghiên cứu của Strazzullo et al. (2010) đăng trên tạp chí Stroke, BMI cao làm tăng nguy cơ đột quỵ thiếu máu cục bộ tới 64%. Ngoài ra, mối liên hệ giữa thừa cân và đột quỵ vẫn tồn tại sau khi đã điều chỉnh cho các yếu tố như tuổi, giới tính và tăng huyết áp.
Tiền sử gia đình (Family History)
Yếu tố di truyền đóng vai trò quan trọng trong nguy cơ mắc đột quỵ. Những người có cha mẹ, anh chị em từng bị đột quỵ có nguy cơ cao hơn do chia sẻ gen liên quan đến rối loạn mạch máu, huyết áp, cholesterol và đông máu.
Nghiên cứu liên quan: Nghiên cứu của Jood và cộng sự (2005) đăng trên Stroke Journal cho thấy nguy cơ đột quỵ tăng gấp 2 lần ở những người có tiền sử gia đình mắc đột quỵ. Mối liên hệ vẫn duy trì ngay cả khi kiểm soát các yếu tố lối sống.
Tiền sử huyết áp (BP History)
Tăng huyết áp được xem là yếu tố nguy cơ mạnh nhất và phổ biến nhất của đột quỵ. Huyết áp cao làm tổn thương thành mạch máu, thúc đẩy xơ vữa động mạch và tăng khả năng vỡ mạch hoặc hình thành cục máu đông.
Nghiên cứu liên quan: Theo WHO (2021), cứ mỗi 10 mmHg tăng huyết áp tâm thu sẽ làm tăng nguy cơ đột quỵ từ 20–30%. Nghiên cứu lớn INTERSTROKE (2010) cũng khẳng định tăng huyết áp chiếm tới 54% tổng số nguy cơ gây đột quỵ toàn cầu.
Tình trạng hút thuốc (Smoking Status)
Hút thuốc lá là một trong những yếu tố nguy cơ đã được xác lập đối với bệnh lý tim mạch và đột quỵ. Các chất trong khói thuốc gây viêm, làm tổn thương nội mô mạch máu, thúc đẩy hình thành cục máu đông và xơ vữa động mạch.
Nghiên cứu liên quan: Một phân tích tổng hợp của Shinton và Beevers (1989) chỉ ra rằng người hút thuốc có nguy cơ đột quỵ cao hơn 2–3 lần so với người không hút. Ngoài ra, nguy cơ giảm đáng kể chỉ sau vài năm ngừng hút thuốc, cho thấy tác dụng phục hồi của việc cai thuốc.
Mô hình Logit được sử dụng phổ biến để phân tích mối quan hệ giữa một biến phụ thuộc nhị phân và một hoặc nhiều biến độc lập (liên tục hoặc định tính). Mục tiêu là ước lượng xác suất xảy ra sự kiện (ở đây là tái phát bệnh).
Xác suất tái phát của cá thể thứ \(i\) được mô hình hóa như sau:
\[ P_i = P(Y_i = 1 | X_i) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 X_{1i} + \dots + \beta_k X_{ki})}} = \frac{e^{Z_i}}{1 + e^{Z_i}} \]
Trong đó:
Để tuyến tính hóa mô hình, người ta sử dụng hàm logit:
\[ L_i = \ln\left( \frac{P_i}{1 - P_i} \right) = \beta_0 + \beta_1 X_{1i} + \dots + \beta_k X_{ki} \]
Tỷ số \(\frac{P_i}{1 - P_i}\) được gọi là tỷ số chênh (odds), cho biết khả năng xảy ra sự kiện so với không xảy ra sự kiện. Mỗi hệ số \(\beta_k\) được diễn giải bằng tỷ số chênh lệch (Odds Ratio – OR):
\[ OR_k = e^{\beta_k} \]
Ý nghĩa: Khi biến \(X_k\) tăng một đơn vị (và các biến khác giữ nguyên), odds của việc tái phát bệnh sẽ thay đổi \(e^{\beta_k}\) lần.
Mô hình Probit là một lựa chọn thay thế cho Logit, với khác biệt chính nằm ở hàm liên kết. Probit sử dụng hàm phân phối tích lũy chuẩn \(\Phi(Z)\) thay vì hàm logistic.
Mô hình có dạng:
\[ P_i = P(Y_i = 1 | X_i) = \Phi(Z_i) = \int_{-\infty}^{Z_i} \frac{1}{\sqrt{2\pi}} e^{-t^2/2} dt \]
Trong đó:
\[ Z_i = \beta_0 + \beta_1 X_{1i} + \dots + \beta_k X_{ki} \]
Mặc dù Logit và Probit sử dụng các phân phối khác nhau (logistic vs chuẩn), trong thực tế hai mô hình thường cho kết quả khá tương đồng. Tuy nhiên, Logit được ưa chuộng hơn do khả năng diễn giải đơn giản thông qua Odds Ratio.
Mô hình Cloglog là một dạng của hồi quy nhị phân, trong đó hàm liên kết là:
\[ \log(-\log(1 - p)) = \eta = \beta_0 + \beta_1 x_1 + \cdots + \beta_k x_k \]
Từ đó, xác suất xảy ra sự kiện là:
\[ p = 1 - \exp(-\exp(\eta)) \]
Để ước lượng các tham số \(\beta\), mô hình sử dụng phương pháp ước lượng hợp lý tối đa (MLE), thông qua việc cực đại hóa hàm log-likelihood:
\[ \ell(\beta) = \sum_{i=1}^{n} \left[ y_i \log(1 - \exp(-\exp(\eta_i))) + (1 - y_i)( -\exp(\eta_i)) \right] \]
Phương pháp này đặc biệt phù hợp khi xác suất xảy ra sự kiện không đối xứng hoặc sự kiện hiếm. Hàm liên kết cloglog giúp mô hình phản ánh tốt hơn sự thay đổi nhanh chóng về xác suất gần ngưỡng 1.
Để đánh giá mức độ phù hợp của mô hình hồi quy nhị phân (logit, probit, cloglog), các chỉ số được dùng để đánh giá phổ biến như:
Công thức:
\[ AIC = -2 \cdot \log(L) + 2k \]
Trong đó:
\(L\) là giá trị hàm hợp lý tối đa (likelihood),
\(k\) là số lượng tham số ước lượng trong mô hình.
Ý nghĩa: AIC là thước đo cân bằng giữa độ phù hợp của mô hình và độ phức tạp của nó. Mô hình có AIC thấp hơn được xem là phù hợp hơn, tránh được hiện tượng overfitting.
Do hàm Likelihood là một tích phức tạp, người ta thường sử dụng logarit của nó để dễ tính toán:
\[ \ln L = \sum_{i=1}^{n} \left[ Y_i \ln(P_i) + (1 - Y_i) \ln(1 - P_i) \right] \]
Quá trình ước lượng sẽ tìm các giá trị \(\hat{\beta}_0, \hat{\beta}_1, \dots, \hat{\beta}_k\) sao cho hàm log-likelihood đạt cực đại. Việc tối ưu hóa này thường được thực hiện bằng các thuật toán số như Newton-Raphson, Fisher scoring, hay Gradient ascent.
tab_smoking <- table(data$Smoking_Status)
tab_smoking
##
## Non-Smoker Smoker
## 1417 568
Kết quả trên sẽ được trực quan hóa bằng biểu đồ cột để so sánh số lượng giữa hai nhóm.
barplot(tab_smoking,
main = "Biểu đồ tần số tình trạng hút thuốc",
xlab = "Tình trạng hút thuốc",
ylab = "Tần số",
col = c("lightblue", "orange"),
border = "white",
ylim = c(0, max(tab_smoking) + 40)) -> bp_smoking
text(x = bp_smoking, y = tab_smoking + 15, labels = tab_smoking)
Thông qua bảng tần số và biểu đồ, ta thấy rằng trong tổng số 1985 bệnh nhân, có 1417 người không hút thuốc (Non-Smoker), cao gần gấp 2,5 lần so với nhóm hút thuốc . Trong khi đó, số bệnh nhân có hút thuốc (Smoker) là 568 người. Tiếp theo, chúng ta sẽ tính tỷ lệ phần trăm và vẽ biểu đồ tròn để thể hiện rõ hơn sự chênh lệch về mặt tương đối giữa hai nhóm.
Trực quan hóa
library(graphics)
# Tính tần suất từng loại Smoking_Status
smoking_freq <- table(data$Smoking_Status)
# Tính phần trăm
smoking_percent <- round(smoking_freq / sum(smoking_freq) * 100, 1) # Làm tròn 1 chữ số
# Tạo nhãn: "Non-smoker - 40%"
labels <- paste(names(smoking_freq), "-", smoking_percent, "%")
# Vẽ biểu đồ tròn với nhãn phần trăm
pie(smoking_freq,
labels = labels,
main = "Biểu đồ tròn tình trạng hút thuốc",
col = rainbow(length(smoking_freq))
)
Biểu đồ tròn thể hiện tỷ lệ phần trăm: nhóm Non-Smoker chiếm 71,4%, trong khi nhóm Smoker chiếm 28,6%. Điều này cho thấy phần lớn đối tượng trong nghiên cứu không hút thuốc, phản ánh xu hướng hạn chế hành vi hút thuốc trong quần thể khảo sát. Sự chênh lệch lớn này cho thấy thói quen hút thuốc không phải là một đặc điểm phổ biến trong nhóm bệnh nhân được khảo sát. Tuy nhiên, điều quan trọng là phải phân tích xem liệu nhóm thiểu số này có nguy cơ đột quỵ cao hơn hay không.
Chúng ta sẽ lập bảng tần số chéo giữa hai biến Smoking và Has_Stroke để xem xét mối quan hệ sơ bộ giữa chúng.
# Đổi tên levels của biến Smoking
data$Smoking <- factor(data$Smoking_Status, levels = c("Non-Smoker", "Smoker"),
labels = c("Không hút thuốc", "Hút thuốc"))
# Tạo lại bảng tần số
table_Stroke_smoking <- table(data$Smoking, data$Has_Stroke)
table_Stroke_smoking
##
## No Yes
## Không hút thuốc 793 624
## Hút thuốc 160 408
Bảng tần số chéo cho thấy:
Trong nhóm không hút thuốc (No): có 793 người không đột quỵ và 624 người đột quỵ. Trong nhóm có hút thuốc (Yes): có 160 người không đột quỵ và 408 người đột quỵ.
Một quan sát ban đầu đáng chú ý là ở nhóm hút thuốc, số ca đột quỵ (408) gần cao hơn gấp gần 3 lần so với số ca không đột quỵ (160). . Điều này gợi ý rằng tỷ lệ mắc bệnh ở nhóm bệnh nhân hút thuốc có thể cao hơn.
Trực quan hóa
Để làm rõ hơn nhận định trên, chúng ta sẽ sử dụng biểu đồ cột nhóm.
# Chuyển bảng tần số thành data frame đúng chiều
df_plot_smoking <- as.data.frame(table_Stroke_smoking)
colnames(df_plot_smoking) <- c("Smoking_Status", "Has_Stroke", "Count")
# Vẽ biểu đồ
library(ggplot2)
ggplot(df_plot_smoking, aes(x = Smoking_Status, y = Count, fill = Has_Stroke)) +
geom_col(position = "dodge") +
labs(title = "Tình trạng đột quỵ theo tình trạng hút thuốc",
x = "Tình trạng hút thuốc",
y = "Số lượng bệnh nhân",
fill = "Tình trạng mắc bệnh đột quỵ") +
theme_minimal() +
scale_fill_manual(values = c("No" = "lightpink", "Yes" = "lightgreen"))
Biểu đồ cột trực quan hóa một cách rõ ràng sự khác biệt đã nêu:
Ở nhóm không hút thuốc: Cột “Không đột quỵ” (màu hồng) cao hơn cột “đột quỵ” (màu xanh).
Ở nhóm có hút thuốc: Cột “đột quỵ” (màu xanh) cao hơn rất nhiều so với cột “Không đột quỵ” (màu hồng).
Biểu đồ củng cố mạnh mẽ giả thuyết rằng việc hút thuốc có liên quan đến nguy cơ đột quỵ cao hơn. Bệnh nhân hút thuốc dường như có tỷ lệ đột quỵ cao gấp 250%, trong khi tỷ lệ này ở người không hút thuốc thấp hơn đáng kể.
Tiếp theo, chúng ta tính toán Nguy cơ tương đối (Relative Risk - RR) để định lượng mức độ ảnh hưởng của việc hút thuốc đến khả năng đột quỵ. Nhóm không hút thuốc sẽ được coi là nhóm phơi nhiễm gốc (baseline).
install.packages("epitools")
## Warning: package 'epitools' is in use and will not be installed
library(epitools)
riskratio(table_Stroke_smoking)
## $data
##
## No Yes Total
## Không hút thuốc 793 624 1417
## Hút thuốc 160 408 568
## Total 953 1032 1985
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Không hút thuốc 1.000000 NA NA
## Hút thuốc 1.631162 1.508637 1.763638
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Không hút thuốc NA NA NA
## Hút thuốc 0 8.212484e-30 3.971194e-29
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Dựa trên bảng tần số đã được giải thích rõ ở phần trước ác giải sẽ tính toán Relative Risk trong đó biến độc lập là tình trạng hút thuốc và phụ thuộc là khả năng đột quỵ. Nhóm tham chiếu là bệnh nhân không hút thuốc và không bị đột quỵ. Và nhóm đối tượng cần quan tâm là bệnh nhân đang trong tình trạng hút thuốc và bị đột quỵ.
Phân tích Risk Ratio (RR) giữa tình trạng hút thuốc và nguy cơ đột quỵ
Bảng tần số
| Nhóm hút thuốc | đột quỵ(Yes) | Không đột quỵ(No) | Tổng |
|---|---|---|---|
| Không hút thuốc | 624 | 793 | 1417 |
| Hút thuốc | 408 | 160 | 568 |
| Tổng | 1032 | 953 | 1985 |
Công thức tính nguy cơ (Risk)
\[ \text{Risk} = \frac{\text{Số ca mắc (Yes)}}{\text{Tổng số trong nhóm}} \]
\[\text{Risk}_{\text{Không hút thuốc}} = \frac{624}{1417} \approx 0.4403\]
\[\text{Risk}_{\text{Hút thuốc}} = \frac{408}{568} \approx 0.7183\]
Công thức tính Risk Ratio (RR)
\[ RR = \frac{\text{Risk}_{\text{Hút thuốc}}}{\text{Risk}_{\text{Không hút thuốc}}} \]
\[ RR = \frac{0.7183}{0.4403} \approx 1.63 \]
Nhận xét:
Tỷ lệ đột quỵ ở nhóm hút thuốc là 408/568 ≈ 71,8%, cao hơn đáng kể so với nhóm không hút thuốc (624/1417 ≈ 44,1%).
Risk Ratio (RR) = 1,63; 95% CI: [1,51 – 1,76]; p < 0,001: → Điều này chứng minh rằng nhóm hút thuốc có nguy cơ đột quỵ cao gấp khoảng 1,63 lần so với nhóm không hút thuốc, và kết quả có ý nghĩa thống kê rất mạnh (p gần bằng 0).
Khoảng tin cậy (CI) không bao gồm 1, cho thấy mối liên hệ này ổn định và đáng tin cậy.
Kết luận từ các kiểm định:
| đột quỵ | midp.exact | fisher.exact | chi.square |
|---|---|---|---|
| No | NA | NA | NA |
| Yes | 0 | 0 8.212484e-30 | 3.971194e-29 |
Các giá trị p-value từ cả ba phương pháp kiểm định (Mid-p exact, Fisher exact, và Chi-square) đều rất nhỏ (p < 0.001). Điều này bác bỏ giả thuyết không (H₀: không có mối liên hệ giữa hút thuốc và đột quỵ) và khẳng định rằng có một mối liên hệ có ý nghĩa thống kê rất mạnh mẽ giữa hai biến này.
oddsratio(table_Stroke_smoking, conf.level = 0.95)
## $data
##
## No Yes Total
## Không hút thuốc 793 624 1417
## Hút thuốc 160 408 568
## Total 953 1032 1985
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Không hút thuốc 1.000000 NA NA
## Hút thuốc 3.237094 2.626336 4.005022
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Không hút thuốc NA NA NA
## Hút thuốc 0 8.212484e-30 3.971194e-29
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Công thức tính Odds
\[ \text{Odds} = \frac{\text{Số ca mắc (Yes)}}{\text{Số ca không mắc (No)}} \]
Công thức tính Odds Ratio (OR)
\[ \text{Odds} = \frac{\text{Odds Hút thuốc}}{\text{Odds không Hút thuốc}} \]
Nhận xét:
Kết quả cho thấy Tỷ số chênh (OR) là 3.237 Điều này có nghĩa là “odds” (tỷ lệ giữa xác suất xảy ra và không xảy ra) của việc đột quỵ ở nhóm bệnh nhân hút thuốc cao gấp 3.237 lần so với “odds” đột quỵ ở nhóm bệnh nhân không hút thuốc. Kết quả này có ý nghĩa thống kê cao (p-value < 0.001), cho thấy hút thuốc là một yếu tố nguy cơ có liên quan mạnh mẽ đến khả năng đột quỵ trong bộ dữ liệu nghiên cứu.
Chúng ta sử dụng kiểm định Chi bình phương để kiểm tra giả thuyết về tính độc lập giữa tình trạng hút thuốc và khả năng đột quỵ.
Giả thuyết kiểm định:
# Kiểm định Chi bình phương
chisq.test(table_Stroke_smoking)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: table_Stroke_smoking
## X-squared = 124.38, df = 1, p-value < 2.2e-16
Kết quả kiểm định Chi-squared cho thấy giá trị thống kê χ² là 124,38 với 1 bậc tự do, và giá trị p (p-value) < 2.2 × 10⁻¹⁶. Với mức ý nghĩa thông thường α = 0.05, giá trị p rất nhỏ này cho phép bác bỏ giả thuyết không (H₀), tức là giả thuyết cho rằng hai biến “Smoking_Status” và “Has_Stroke” là độc lập với nhau.
Điều này chứng tỏ tồn tại mối liên hệ có ý nghĩa thống kê giữa tình trạng hút thuốc và khả năng bị đột quỵ trong quần thể được khảo sát. Cụ thể, người hút thuốc có xu hướng bị đột quỵ với tỷ lệ cao hơn đáng kể so với người không hút thuốc.
Phát hiện này hoàn toàn phù hợp với các bằng chứng y học trước đây, vốn đã chỉ ra rằng hành vi hút thuốc làm gia tăng nguy cơ rối loạn chức năng nội mô mạch máu, tăng huyết áp, và xơ vữa động mạch — những yếu tố góp phần trực tiếp vào nguy cơ mắc đột quỵ và các bệnh lý tim mạch nghiêm trọng khác.
Để so sánh trực tiếp tỷ lệ đột quỵ giữa hai nhóm, chúng ta tiến hành kiểm định hiệu hai tỷ lệ.
Gọi p1 là tỷ lệ đột quỵ ở nhóm hút thuốc, p2 là tỷ lệ đột quỵ ở nhóm không hút thuốc.
Giả thuyết kiểm định:
H₀: p1 - p2 = 0 (Tỷ lệ đột quỵ ở hai nhóm là như nhau).
H₁: p1 - p2 > 0 (Tỷ lệ đột quỵ ở nhóm hút thuốc cao hơn nhóm không hút thuốc).
# Số ca đột quỵ ở nhóm hút thuốc và không hút thuốc
success_smoking <- c(408, 624)
# Tổng số bệnh nhân trong mỗi nhóm
n_smoking <- c(568, 1417)
# Kiểm định hiệu tỷ lệ một phía
prop.test(success_smoking, n_smoking, alternative = "greater", correct = FALSE)
##
## 2-sample test for equality of proportions without continuity correction
##
## data: success_smoking out of n_smoking
## X-squared = 125.49, df = 1, p-value < 2.2e-16
## alternative hypothesis: greater
## 95 percent confidence interval:
## 0.24007 1.00000
## sample estimates:
## prop 1 prop 2
## 0.7183099 0.4403670
Nhận xét kết quả kiểm định hai tỷ lệ
Kết quả kiểm định hai tỷ lệ độc lập (two-sample proportion test) cho thấy:
Với \(p\)-value nhỏ hơn rất nhiều so với mức ý nghĩa \(\alpha = 0.05\), ta bác bỏ giả thuyết không \((H_0: p_1 - p_2 = 0)\) và chấp nhận giả thuyết đối \((H_1: p_1 - p_2 > 0)\).
Điều này cho thấy tỷ lệ đột quỵ ở nhóm hút thuốc \((p_1 = 71.83\%)\) cao hơn một cách có ý nghĩa thống kê so với nhóm không hút thuốc \((p_2 = 44.04\%)\).
Khoảng tin cậy 95% cho hiệu tỷ lệ \((p_1 - p_2)\) nằm trong khoảng \([0.240; 1.000]\), xác nhận rằng sự chênh lệch này là dương và có ý nghĩa thống kê.
Kết luận: Hành vi hút thuốc có liên quan chặt chẽ đến việc gia tăng nguy cơ đột quỵ.
Trong phần này, chúng ta sẽ phân tích mối liên hệ giữa đặc điểm tiền sử gia đình đột quỵ của bệnh nhân và khả năng đột quỵ. Biến độc lập là Family_History và biến phụ thuộc là Has_Stroke.
Đầu tiên, chúng ta sẽ lập bảng tần số cho biến Family_History để hiểu rõ sự phân bố của nhóm bệnh nhân có tiền sử gia đình bị đột quỵ trong tập dữ liệu.
tab_Family_History <- table(data$Family_History)
tab_Family_History
##
## No Yes
## 1000 985
Kết quả sẽ được trực quan hóa bằng biểu đồ cột để dễ dàng so sánh số lượng giữa hai nhóm.
barplot(tab_Family_History,
main = "Biểu đồ tần số nhóm bệnh nhân có tiền sử gia đình bị đột quỵ",
xlab = "Tiền sử gia đình bị đột quỵ",
ylab = "Tần số",
col = c("lightyellow", "lightgreen"),
border = "white",
ylim = c(0, max(tab_Family_History) + 40)) -> bp_Family_History
text(x = bp_Family_History, y = tab_Family_History + 15, labels = tab_Family_History)
Thông qua bảng tần số và biểu đồ, ta thấy rằng trong tổng số 1985 bệnh nhân, có 985 người có tiền sử gia đình đột quỵ (Yes). Trong khi đó, số bệnh nhân không có tiền sử gia đình đột quỵ (No) là 1000 người.
Tiếp theo, chúng ta sẽ tính tỷ lệ phần trăm và vẽ biểu đồ tròn để thể hiện rõ hơn sự chênh lệch về mặt tương đối giữa hai nhóm.
# Thay đổi nhãn từ Yes/No sang Có/Không
data$Family_History <- ifelse(data$Family_History == "Yes", "Có", "Không")
# Đảm bảo là factor và đúng thứ tự
data$Family_History <- factor(data$Family_History, levels = c("Không", "Có"))
# Tính tần suất và phần trăm
family_freq <- table(data$Family_History)
family_percent <- round(family_freq / sum(family_freq) * 100, 1)
# Tạo nhãn: "Có - 58.2%"
labels <- paste(names(family_freq), "-", family_percent, "%")
# Vẽ biểu đồ tròn có phần trăm
pie(family_freq,
labels = labels,
main = "Biểu đồ tròn: Tiền sử gia đình (Family History)",
col = rainbow(length(family_freq))
)
Biểu đồ tròn cho thấy một cách trực quan rằng nhóm bệnh nhân có tiền sử gia đình đột quỵ chiếm đến 49.6% trong mẫu nghiên cứu, trong khi nhóm không có tiền sử gia đình đột quỵ chiếm 50.4%. Điều này cho thấy tiền sử gia đình đột quỵ là trường hợp ít phổ biến hơn. Phân tích tiếp theo sẽ làm rõ liệu đặc điểm này có ảnh hưởng đến nguy cơ đột quỵ hay không.
Chúng ta sẽ lập bảng tần số chéo giữa hai biến Family_History và Has_Stroke để xem xét mối quan hệ sơ bộ giữa chúng.
table_Stroke_Family_History <- table(data$Family_History, data$Has_Stroke)
table_Stroke_Family_History
##
## No Yes
## Không 620 380
## Có 333 652
Bảng tần số chéo cho thấy:
Điều này cho thấy tình trạng tiền sử gia đình đột quỵ có thể liên quan đến nguy cơ đột quỵ cao hơn so với tiền sử gia đình đột quỵ . Tuy nhiên, cần thực hiện kiểm định thống kê để xác định mức độ ý nghĩa của mối liên hệ này.
Để làm rõ hơn nhận định trên, chúng ta sẽ sử dụng biểu đồ cột nhóm.
# Tạo bảng tần số chéo
table_Stroke_Family_History <- table(data$Family_History, data$Has_Stroke)
# Chuyển bảng chéo thành data frame
df_plot_Family_History <- as.data.frame(table_Stroke_Family_History)
colnames(df_plot_Family_History) <- c("Family_History", "Has_Stroke", "Count")
# Vẽ biểu đồ
ggplot(df_plot_Family_History, aes(x = Family_History, y = Count, fill = Has_Stroke)) +
geom_col(position = "dodge") +
labs(title = "Tình trạng đột quỵ theo tiền sử gia đình mắc đột quỵ",
x = "Tiền sử gia đình mắc đột quỵ (Family_History)",
y = "Số lượng bệnh nhân",
fill = " đột quỵ") +
theme_minimal() +
scale_fill_manual(values = c("No" = "purple", "Yes" = "green"))
Tiếp theo, chúng ta tính toán Nguy cơ tương đối (Relative Risk - RR) để định lượng mức độ ảnh hưởng của tính đến khả năng đột quỵ. Nhóm không có tiền sử gia đình đột quỵ sẽ được coi là nhóm tham chiếu.
riskratio(table_Stroke_Family_History)
## $data
##
## No Yes Total
## Không 620 380 1000
## Có 333 652 985
## Total 953 1032 1985
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Không 1.000000 NA NA
## Có 1.741918 1.59059 1.907643
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Không NA NA NA
## Có 0 1.65228e-36 3.06871e-36
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Nhận xét:
1. Cách tính Risk Ratio (RR)
RR được tính bằng công thức:
\[ RR = \frac{\text{Tỷ lệ bệnh ở nhóm có tiền sử}}{\text{Tỷ lệ bệnh ở nhóm không có tiền sử}} \]
\[ p_{\text{Có}} = \frac{652}{985} \approx 0.662 \]
\[ p_{\text{Không}} = \frac{380}{1000} = 0.380 \]
⇒ RR:
\[ RR = \frac{0.662}{0.380} \approx 1.742 \]
Nhận xét kết quả
Kết quả phân tích cho thấy:
RR = 1.742 (95% CI: 1.591 – 1.908), p < 0.001.
Những người có tiền sử gia đình bị đột quỵ có nguy cơ đột quỵ cao hơn khoảng 1.74 lần so với những người không có tiền sử gia đình.
Khoảng tin cậy 95% không chứa giá trị 1 và p-value rất nhỏ (< 0.05), chứng tỏ sự khác biệt có ý nghĩa thống kê mạnh.
Yếu tố Family History là một yếu tố nguy cơ quan trọng, có liên quan chặt chẽ đến khả năng đột quỵ.
Kết luận từ các kiểm định:
| Family_History | midp.exact | fisher.exact | chi.square |
|---|---|---|---|
| không | NA | NA | NA |
| có | 0 | 1.65228e-36 | 3.06871e-36 |
Dựa trên kết quả kiểm định giữa tính chất tiền sử gia đình đột quỵ (Family_History) và khả năng đột quỵ, ta thấy rằng ở nhóm tiền sử gia đình đột quỵ (có), các giá trị p từ cả ba phương pháp kiểm định mid-p exact, Fisher exact và Chi-square đều rất nhỏ, nhỏ hơn nhiều so với ngưỡng ý nghĩa 0.05. Điều này cho thấy mối liên hệ giữa tính chất tiền sử gia đình đột quỵ và khả năng đột quỵ là có ý nghĩa thống kê. Nói cách khác, tính chất của tiền sử gia đình đột quỵ có thể là một yếu tố nguy cơ làm tăng khả năng đột quỵ.
Tương tự, chúng ta sẽ tính Tỷ số chênh (Odds Ratio - OR).
oddsratio(table_Stroke_Family_History, conf.level = 0.95)
## $data
##
## No Yes Total
## Không 620 380 1000
## Có 333 652 985
## Total 953 1032 1985
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Không 1.000000 NA NA
## Có 3.191925 2.658208 3.838499
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Không NA NA NA
## Có 0 1.65228e-36 3.06871e-36
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
OR được tính bằng công thức:
\[ OR = \frac{\dfrac{a}{b}}{\dfrac{c}{d}} = \frac{a \times d}{b \times c} \]
Trong đó:
Khi đó:
\[ OR = \frac{652 \times 620}{333 \times 380} \approx 3.19 \]
Chúng ta sử dụng kiểm định Chi bình phương để kiểm tra giả thuyết về tính độc lập giữa tính chất Tiền sử gia đình và khả năng đột quỵ.
Giả thuyết kiểm định:
# Kiểm định Chi bình phương
chisq.test(table_Stroke_Family_History)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: table_Stroke_Family_History
## X-squared = 156.89, df = 1, p-value < 2.2e-16
Nhận xét
Kết quả kiểm định Chi bình phương Pearson với hiệu chỉnh liên tục của Yates cho giá trị thống kê X-squared là 156.89, với bậc tự do là 1. Giá trị p-value tương ứng là 2.2e-16, một giá trị cực kỳ nhỏ.
Do p-value nhỏ hơn rất nhiều so với mức ý nghĩa thông thường (α = 0.05), chúng ta bác bỏ giả thuyết không (H₀). Điều này cung cấp bằng chứng thống kê mạnh mẽ để kết luận rằng có một mối liên hệ phụ thuộc rất rõ ràng giữa việc tiền sử gia đình bị đột quỵ và khả năng đột quỵ .
Để so sánh trực tiếp tỷ lệ đột quỵ giữa hai nhóm, chúng ta tiến hành kiểm định hiệu hai tỷ lệ. Gọi p1 là tỷ lệ đột quỵ ở nhóm có tiền sử gia đình bệnh , p2 là tỷ lệ đột quỵ ở nhóm không có tiền sử gia đình bị đột quỵ.
# Số ca đột quỵ ở nhóm và
success_Family_History <- c(652, 380)
# Tổng số bệnh nhân trong mỗi nhóm
n_Family_History <- c(985, 1000)
# Kiểm định hiệu tỷ lệ một phía
prop.test(success_Family_History, n_Family_History, alternative = "greater", correct = FALSE)
##
## 2-sample test for equality of proportions without continuity correction
##
## data: success_Family_History out of n_Family_History
## X-squared = 158.02, df = 1, p-value < 2.2e-16
## alternative hypothesis: greater
## 95 percent confidence interval:
## 0.2465441 1.0000000
## sample estimates:
## prop 1 prop 2
## 0.6619289 0.3800000
Kết quả kiểm định hai tỷ lệ cho thấy tỷ lệ đột quỵ ở nhóm bệnh nhân có tiền sử gia đình đột quỵ (p₁ = 66.2%) cao hơn rõ rệt so với nhóm khong có tiền sử gia đình đột quỵ (p₂ = 38%). Giá trị p rất nhỏ (\(p = 2.2 \times 10^{-16}\)) cho thấy sự khác biệt này có ý nghĩa thống kê ở mức ý nghĩa 5%.
Bác bỏ giả thuyết \(H_0\), kết luận rằng tỷ lệ đột quỵ ở nhóm có tiền sử gia đình cao hơn một cách có ý nghĩa thống kê so với nhóm không có tiền sử.
Trong phần này, chúng ta sẽ phân tích mối liên hệ giữa tiền sử huyết áp của bệnh nhân và khả năng đột quỵ. Biến độc lập là BP_History (với 3 mức độ: “Normal”: Bình thường ,“Hypertension”: huyết áp cao, “PreHypertension”: tiền tăng huyết áp) và biến phụ thuộc là Has_Stroke (có hoặc không đột quỵ).
Đầu tiên, chúng ta sẽ lập bảng tần số cho biến BP_History để hiểu rõ sự phân bố của các nhóm bệnh nhân theo tiền sử huyết áp điều trị.
tab_BP_History <- table(data$BP_History)
tab_BP_History
##
## Hypertension Normal Prehypertension
## 569 796 620
Kết quả trên sẽ được trực quan hóa bằng biểu đồ cột để so sánh số lượng giữa các nhóm.
barplot(tab_BP_History,
main = "Biểu đồ tần số tiền sử huyết áp ",
xlab = "tiền sử huyết áp",
ylab = "Tần số",
col = c("skyblue", "lightgreen", "lightcoral", "plum"),
border = "white",
ylim = c(0, max(tab_BP_History) + 40)) -> bp_BP_History
text(x = bp_BP_History, y = tab_BP_History + 15, labels = tab_BP_History)
Bảng dịch thuật
| tiền sử huyết áp (tiếng Anh) | Tiếng Việt tương ứng |
|---|---|
| Hypertension | tiền sử huyết áp cao |
| Normal | Bình thường |
| Prehypertension | tiền tăng huyết áp |
# Tính tần suất
bp_freq <- table(data$BP_History)
# Tính phần trăm và làm tròn
bp_percent <- round(bp_freq / sum(bp_freq) * 100, 1)
# Tạo nhãn hiển thị: "Prehypertension - 28.3%"
labels <- paste(names(bp_freq), "-", bp_percent, "%")
# Vẽ biểu đồ tròn
pie(bp_freq,
labels = labels,
main = "Phân loại tiền sử huyết áp",
col = rainbow(length(bp_freq))
)
Nhận xét
Kết quả phân bố tình trạng huyết áp cho thấy trong tổng số mẫu khảo sát, 40,1% đối tượng có huyết áp bình thường (569 người), trong khi 31,2% rơi vào nhóm tiền tăng huyết áp (620 người) và 28,7% (569 người) đã mắc tăng huyết áp. Tỷ lệ tiền tăng huyết áp khá cao, phản ánh một bộ phận đáng kể dân số đang ở giai đoạn nguy cơ, có khả năng tiến triển thành đột quỵ thực sự nếu không có các biện pháp can thiệp kịp thời về lối sống và dinh dưỡng. Số người đã bị tăng huyết áp (gần 1/3 mẫu nghiên cứu) cũng là một con số đáng lưu ý, cho thấy vấn đề này là một thách thức sức khỏe cộng đồng.
Tiếp theo, chúng ta sẽ tính tỷ lệ phần trăm và vẽ biểu đồ tròn để thể hiện rõ hơn sự phân bố tương đối giữa các nhóm.
Chúng ta sẽ lập bảng tần số chéo giữa hai biến BP_History và Has_Stroke để xem xét mối quan hệ sơ bộ giữa chúng.
# Bảng tần số chéo giữa tiền sử huyết áp và đột quỵ
table_caohuyetap_BP_History <- table(data$BP_History, data$Has_Stroke)
# Thêm hàng và cột tổng
addmargins(table_caohuyetap_BP_History)
##
## No Yes Sum
## Hypertension 41 528 569
## Normal 510 286 796
## Prehypertension 402 218 620
## Sum 953 1032 1985
Hypertension (tiền sử cao huyết áp) : 569 bệnh nhân, có đến 528 ca đột quỵ → nguy cơ rất cao.
Normal: 796 bệnh nhân, 286 ca đột quỵ → nguy cơ trung bình.
PreHypertension: 620 bệnh nhân, 218 ca đột quỵ → nguy cơ trung bình.
Kết luận: tiền sử huyết áp điều trị liên quan rõ rệt đến khả năng đột quỵ.
Để làm rõ hơn nhận định trên, chúng ta sẽ sử dụng biểu đồ cột nhóm.
# Chuyển bảng chéo thành data frame
df_plot_BP_History <- as.data.frame(table_caohuyetap_BP_History)
colnames(df_plot_BP_History) <- c("BP_History", "Has_Stroke", "Count")
# Đảm bảo thứ tự tiền sử huyết áp theo lâm sàng
df_plot_BP_History$BP_History <- factor(df_plot_BP_History$BP_History,
levels = c("Hypertension", "Normal"
,"PreHypertension"))
# Vẽ biểu đồ cột tỷ lệ
library(ggplot2)
ggplot(df_plot_BP_History, aes(x = BP_History, y = Count, fill = Has_Stroke)) +
geom_col(position = "fill") + # tỷ lệ phần trăm theo cột
scale_y_continuous(labels = scales::percent_format()) +
scale_fill_manual(values = c("No" = "lightblue", "Yes" = "pink"),
labels = c("Không cao huyết áp", "cao huyết áp")) +
labs(title = "Tỷ lệ đột quỵ theo tiền sử huyết áp điều trị",
x = "tiền sử huyết áp điều trị",
y = "Tỷ lệ (%)",
fill = "Tình trạng cao huyết áp") +
theme_minimal(base_size = 13) +
theme(axis.text.x = element_text(angle = 25, hjust = 1))
Biểu đồ cho thấy tỷ lệ đột quỵ tăng dần theo tiền sử huyết áp điều trị. Cụ thể:
Đáng chú ý, nhóm Hypertension có tỷ lệ đột quỵ gần như tuyệt đối.
Điều này cho thấy tiền sử huyết áp có liên quan rõ rệt đến nguy cơ mắc bệnh đột quỵ, trong đó tiền sử tăng huyết áp là yếu tố nguy cơ cao nhất.
3án Nguy cơ tương đối (RR), lấy nhóm Hypertension làm nhóm tham chiếu.
riskratio(table_caohuyetap_BP_History)
## $data
##
## No Yes Total
## Hypertension 41 528 569
## Normal 510 286 796
## Prehypertension 402 218 620
## Total 953 1032 1985
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Hypertension 1.0000000 NA NA
## Normal 0.3871964 0.3519120 0.4260186
## Prehypertension 0.3789162 0.3396787 0.4226861
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Hypertension NA NA NA
## Normal 0 1.134512e-111 6.141558e-99
## Prehypertension 0 4.564659e-104 1.101697e-93
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Trong nghiên cứu này, nhóm Hypertension được chọn làm nhóm tham chiếu để đánh giá nguy cơ đột quỵ ở các nhóm tiền sử huyết áp. Việc phân tích tỉ số nguy cơ (Relative Risk – RR) cho phép so sánh khả năng đột quỵ giữa các nhóm một cách trực quan và có ý nghĩa thống kê.
Nhóm Hypertension (tăng huyết áp)
Được chọn làm nhóm tham chiếu với RR = 1.00.
Đây là nhóm có tỷ lệ biến phụ thuộc (Yes) cao nhất (528/569 ≈ 92,8%).
Nhóm Normal (huyết áp bình thường)
Có RR = 0.387 (95% CI: 0.352 – 0.426), nghĩa là nguy cơ mắc bệnh đột quỵ ở nhóm này chỉ bằng khoảng 38,7% so với nhóm tiền sử huyết áp cao.
Giá trị p rất nhỏ (p < 2.2e-16), cho thấy sự khác biệt có ý nghĩa thống kê cao.
Nhóm PreHypertension (tiền tăng huyết áp)
Có RR = 0.379 (95% CI: 0.340 – 0.423), tương đương với nguy cơ mắc bệnh chỉ bằng 37,9% so với nhóm tiền sử huyết áp cao.
P-value cũng cực kỳ nhỏ (p < 2.2e-16), chứng tỏ sự khác biệt có ý nghĩa thống kê mạnh mẽ.
Tổng thể, Kết quả cho thấy nhóm tăng huyết áp có xác suất xảy ra biến phụ thuộc cao vượt trội so với hai nhóm còn lại. Cả nhóm huyết áp bình thường và tiền tăng huyết áp đều có nguy cơ thấp hơn đáng kể, với mức giảm khoảng 62% so với nhóm tăng huyết áp. Sự khác biệt này có ý nghĩa thống kê rất cao (p-value cực nhỏ), chứng tỏ trạng thái huyết áp là một yếu tố quan trọng ảnh hưởng đến biến phụ thuộc.
oddsratio(table_caohuyetap_BP_History)
## $data
##
## No Yes Total
## Hypertension 41 528 569
## Normal 510 286 796
## Prehypertension 402 218 620
## Total 953 1032 1985
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Hypertension 1.00000000 NA NA
## Normal 0.04382381 0.03047540 0.06141565
## Prehypertension 0.04240178 0.02925768 0.05997314
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Hypertension NA NA NA
## Normal 0 1.134512e-111 6.141558e-99
## Prehypertension 0 4.564659e-104 1.101697e-93
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Phân tích Odds Ratio (OR) nhằm so sánh khả năng đột quỵ giữa các nhóm tiền sử huyết áp điều trị, với nhóm Hypertension được chọn làm nhóm tham chiếu.
Hypertension (tiền sử huyết áp cao): Là nhóm tham chiếu (OR = 1.00).
Normal (huyết áp bình thường): OR = 0.0438 (95% CI: 0.0305–0.0614), p < 2.2e-16. Nhóm này có khả năng bị đột quỵ thấp hơn đáng kể, chỉ khoảng 4,4% so với nhóm tăng huyết áp.
PreHypertension (tiền tăng huyết áp): OR = 0.0424 (95% CI: 0.0293–0.0600), p < 2.2e-16. Nhóm tiền tăng huyết áp cũng có khả năng mắc bệnh thấp hơn nhiều, chỉ bằng khoảng 4,2% so với nhóm tăng huyết áp.
Kết luận tổng thể:
Những người hiện đang ở tình trạng tăng huyết áp có xác suất mắc bệnh đột quỵ vượt trội so với hai nhóm còn lại. Hai nhóm “bình thường” và “tiền tăng huyết áp” có nguy cơ thấp hơn rất nhiều (chỉ khoảng 4% so với nhóm tăng huyết áp). Sự khác biệt này có ý nghĩa thống kê mạnh (p < 0.001).
Chúng ta sử dụng kiểm định Chi bình phương để kiểm tra giả thuyết về tính độc lập giữa tiền sử huyết áp và khả năng đột quỵ.
Giả thuyết kiểm định:
H₀ (Giả thuyết không): tiền sử huyết áp và khả năng mắc bệnh đột quỵ là hai biến độc lập. H₁ (Giả thuyết đối): tiền sử huyết áp và khả năng mắc bệnh đột quỵ là hai biến phụ thuộc.
# Kiểm định Chi bình phương
chisq.test(table_caohuyetap_BP_History)
##
## Pearson's Chi-squared test
##
## data: table_caohuyetap_BP_History
## X-squared = 532.16, df = 2, p-value < 2.2e-16
Kết quả kiểm định
\[ \chi^2 = 532.16,\quad df = 2,\quad p\text{-value} < 2.2 \times 10^{-16} \]
Diễn giải
Giá trị p rất nhỏ (gần bằng 0), cho thấy có đủ bằng chứng để bác bỏ giả thuyết \(H_0\) với mức ý nghĩa 5%. Điều này chứng tỏ rằng tiền sử huyết áp có mối liên hệ có ý nghĩa thống kê với khả năng mắc bệnh đột quỵ.
Nói cách khác, khả năng mắc bệnh đột quỵ phụ thuộc đáng kể vào tiền sử huyết áp, từ đó củng cố vai trò của việc theo dõi sát và phân tầng nguy cơ dựa trên tiền sử huyết áp.
Để so sánh trực tiếp tỷ lệ đột quỵ giữa hai nhóm, chúng ta tiến hành kiểm định hiệu hai tỷ lệ.
Gọi p1 là tỷ lệ đột quỵ ở nhóm có huyết áp cao, p2 là tỷ lệ đột quỵ ở nhóm có huyết áp bình thường, p3 là tỷ lệ đột quỵ ở nhóm có tiền huyết áp.
Giả thuyết kiểm định
# Số ca đột quỵ ở nhóm
success_BP_History <- c(528, 286, 218)
# Tổng số bệnh nhân trong mỗi nhóm
n_BP_History <- c(569, 796, 620)
# Kiểm định hiệu tỷ lệ một phía
prop.test(success_BP_History, n_BP_History, alternative = "greater", correct = FALSE)
##
## 3-sample test for equality of proportions without continuity correction
##
## data: success_BP_History out of n_BP_History
## X-squared = 532.16, df = 2, p-value < 2.2e-16
## alternative hypothesis: two.sided
## sample estimates:
## prop 1 prop 2 prop 3
## 0.9279438 0.3592965 0.3516129
Kết quả kiểm định hai tỷ lệ cho thấy tỷ lệ đột quỵ ở nhóm bệnh nhân có tiền sử huyết áp cao (p₁ = 92.79%) cao hơn rõ rệt so với nhóm tiền sử huyết áp bình thường và nhóm tiền huyết áp cao (p₂ = 35.92% và p3 = 35.16%). Giá trị p rất nhỏ (\(p = 2.2 \times 10^{-16}\)) cho thấy sự khác biệt này có ý nghĩa thống kê ở mức ý nghĩa 5%.
Bác bỏ giả thuyết \(H_0\), kết luận rằng tỷ lệ đột quỵ ở nhóm có tiền sử huyết áp cao cao hơn một cách có ý nghĩa thống kê so với hai nhóm còn lại.
library(ggplot2)
affect_freq <- table(data$BMI)
affect_percent <- prop.table(affect_freq) * 100
data.frame(Affects = names(affect_freq),
Frequency = as.numeric(affect_freq),
Percentage = round(as.numeric(affect_percent), 1))
## Affects Frequency Percentage
## 1 Normal 703 35.4
## 2 Overweight 1182 59.5
## 3 Underweight 100 5.0
Trực quan hóa
library(ggplot2)
library(dplyr)
# Nhập dữ liệu
data1 <- data.frame(
Affects = c("Normal", "Overweight", "Underweight"),
Frequency = c(703, 1182, 100),
Percentage = c(35.4, 59.5, 5.0)
)
# Tạo nhãn phần trăm
data1 <- data1 %>%
mutate(label = paste0(Percentage, "%"))
# Vẽ biểu đồ tròn với màu đẹp
ggplot(data1, aes(x = "", y = Frequency, fill = Affects)) +
geom_bar(stat = "identity", width = 1) +
coord_polar("y") +
geom_text(aes(label = label),
position = position_stack(vjust = 0.5),
color = "white", size = 5) +
scale_fill_manual(values = c(
"Normal" = "#66c2a5", # xanh ngọc
"Overweight" = "#fc8d62", # cam
"Underweight" = "#8da0cb" # xanh dương nhạt
)) +
labs(title = "Biểu đồ tròn: Phân bố thể trạng BMI") +
theme_void() +
theme(plot.title = element_text(hjust = 0.5, size = 16, face = "bold"))
Nhận xét
Biểu đồ mô tả phân bố thể trạng (BMI) của các bệnh nhân đến khám cho thấy, 59.5% bệnh nhân có chỉ số BMI nằm trong ngưỡng bình thường, trong khi 35,4% thuộc nhóm thừa cân (overweight) và 5% thiếu cân (underweight).
Trong trường hợp này ta lập bảng tần số giữa hai biến Thể Trạng và bị đột quỵ của bệnh nhân tham gia khảo sát . Bảng tần số giúp chúng ta hiểu rõ hơn sự khác nhau theo 2 nhóm.
table_dotquy_bmi <- table(data$Has_Stroke, data$BMI)
table_dotquy_bmi
##
## Normal Overweight Underweight
## No 368 532 53
## Yes 335 650 47
# Bảng chéo
# Chuyển thành data frame để dùng với ggplot
df_plot <- as.data.frame(table_dotquy_bmi)
colnames(df_plot) <- c("Has_Stroke", "BMI", "Count")
# Biểu đồ
ggplot(df_plot, aes(x = BMI, y = Count, fill = Has_Stroke)) +
geom_col(position = "dodge") +
labs(title = "Tình trạng bị đột quỵ theo thể trạng",
x = "Thể Trạng (BMI)",
y = "Số lượng bị đột quỵ",
fill = "đột quỵ") +
theme_minimal()
Biểu đồ trên minh họa mối quan hệ giữa tình trạng chỉ số khối cơ thể (BMI) và nguy cơ đột quỵ trong mẫu dữ liệu bao gồm các bệnh nhân từ 18 đến 84 tuổi. Kết quả thể hiện như sau:
Nhóm Overweight (thừa cân) chiếm tỷ trọng lớn nhất trong toàn bộ mẫu và có số lượng người bị đột quỵ cao hơn đáng kể so với nhóm không bị (khoảng 650 so với 532 trường hợp). Phát hiện này gợi ý rằng tình trạng thừa cân có thể là một yếu tố liên quan chặt chẽ đến nguy cơ đột quỵ.
Ở nhóm Normal BMI (cân nặng bình thường), số lượng người không bị đột quỵ (368) chỉ nhỉnh hơn nhóm bị đột quỵ (335) một cách không đáng kể. Điều này cho thấy ngay cả trong nhóm có thể trạng bình thường, nguy cơ đột quỵ vẫn tồn tại và không thể xem nhẹ.
Nhóm Underweight (thiếu cân) có quy mô mẫu nhỏ nhất trong ba nhóm, với số lượng bị đột quỵ (47) và không bị (53) gần như tương đương. Tuy nhiên, do số quan sát thấp, khả năng khái quát hóa kết quả từ nhóm này là hạn chế và cần được thận trọng khi đưa ra nhận định.
Tổng thể, biểu đồ cho thấy xu hướng rõ rệt rằng tình trạng thừa cân có liên quan đến tỷ lệ đột quỵ cao hơn trong quần thể nghiên cứu. Trong khi đó, dữ liệu từ nhóm thiếu cân quá hạn chế để đưa ra kết luận đáng tin cậy về mối liên hệ giữa thiếu cân và nguy cơ đột quỵ.
library(epitools)
Trong phần này, tác giả sẽ thực hiện tính Relative Risk nhằm phân tích sự ảnh hưởng của 3 nhóm thể trạng lên khả năng đột quỵ của các bệnh nhân tham gia khảo sát. Chúng ta sẽ tính toán Nguy cơ tương đối (RR), lấy nhóm Normal (Bình Thường) làm nhóm tham chiếu.
# Tạo bảng tần số
tab <- matrix(c(335,368, # Normal: Yes, No
650,532, # Overweight: Yes, No
47,53), # Underweight: Yes, No
nrow=3, byrow=TRUE)
# Đặt tên hàng và cột
rownames(tab) <- c("Normal", "Overweight", "Underweight")
colnames(tab) <- c("Yes", "No")
# Tính Risk Ratio
rr_result <- riskratio(tab, rev="columns")
# Xem kết quả
print(rr_result)
## $data
## No Yes Total
## Normal 368 335 703
## Overweight 532 650 1182
## Underweight 53 47 100
## Total 953 1032 1985
##
## $measure
## NA
## risk ratio with 95% C.I. estimate lower upper
## Normal 1.0000000 NA NA
## Overweight 1.1540016 1.0514417 1.266565
## Underweight 0.9862985 0.7898754 1.231567
##
## $p.value
## NA
## two-sided midp.exact fisher.exact chi.square
## Normal NA NA NA
## Overweight 0.00206186 0.002270016 0.002037362
## Underweight 0.90425574 0.915226144 0.902640554
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Phân tích Risk Ratio (RR) khẳng định quan sát trên khi nhóm thừa cân có RR = 1,154 (95% CI: 1,051 – 1,267; p ≈ 0,003), nghĩa là nguy cơ bị đột quỵ ở nhóm này cao hơn khoảng 15,4% so với nhóm bình thường và sự khác biệt này có ý nghĩa thống kê. Ngược lại, nhóm thiếu cân có RR = 0,986 (95% CI: 0,789 – 1,232; p ≈ 0,928), thể hiện nguy cơ bị tương đương nhóm bình thường và không đạt được mức ý nghĩa thống kê.
Kết quả trên củng cố giả thuyết rằng thừa cân là một yếu tố nguy cơ quan trọng đối với sự xuất hiện đột quỵ. Trong khi đó, thiếu cân dường như không làm thay đổi đáng kể nguy cơ bị bệnh. Những phát hiện này phù hợp với nhiều nghiên cứu dịch tễ học trước đây, vốn đã chỉ ra mối liên hệ giữa tình trạng thừa cân, béo phì và sự gia tăng tỷ lệ các bệnh lý tim mạch, đặc biệt là đột quỵ.
or_result <- oddsratio(tab, rev="columns")
# Xem kết quả
print(or_result)
## $data
## No Yes Total
## Normal 368 335 703
## Overweight 532 650 1182
## Underweight 53 47 100
## Total 953 1032 1985
##
## $measure
## NA
## odds ratio with 95% C.I. estimate lower upper
## Normal 1.0000000 NA NA
## Overweight 1.3418854 1.1128927 1.618597
## Underweight 0.9745193 0.6382994 1.483865
##
## $p.value
## NA
## two-sided midp.exact fisher.exact chi.square
## Normal NA NA NA
## Overweight 0.00206186 0.002270016 0.002037362
## Underweight 0.90425574 0.915226144 0.902640554
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Phân tích Odds Ratio (OR) nhằm so sánh khả năng bị đột quỵ giữa các nhóm Thể Trạng, với nhóm Normal được chọn làm nhóm tham chiếu.
Nhận xét
Kết quả phân tích Odds Ratio (OR) chỉ ra rằng nhóm thừa cân có khả năng bị đột quỵ cao hơn nhóm bình thường với OR = 1,341 (95% CI: 1,113 – 1,619; p ≈ 0,003). Điều này đồng nghĩa với việc những người thuộc nhóm thừa cân có odds bị đột quỵ lớn hơn khoảng 34,1% so với nhóm bình thường, và sự khác biệt này mang ý nghĩa thống kê.
Ngược lại, nhóm thiếu cân có OR = 0,975 (95% CI: 0,639 – 1,484; p ≈ 0,928), thể hiện rằng odds đột quỵ ở nhóm này tương đương với nhóm bình thường và không có sự khác biệt có ý nghĩa thống kê.
Kết quả này củng cố nhận định rằng thừa cân là một yếu tố liên quan mạnh đến sự gia tăng khả năng đột quỵ, trong khi tình trạng thiếu cân không cho thấy ảnh hưởng đáng kể. Xu hướng này phù hợp với nhiều nghiên cứu dịch tễ học trước đây, vốn đã chỉ ra rằng tích lũy mỡ cơ thể, đặc biệt là mỡ nội tạng, có vai trò quan trọng trong việc làm tăng nguy cơ bị đột quỵ thông qua các cơ chế liên quan đến rối loạn chuyển hóa và điều hòa mạch máu.
Sau khi đã thực hiện các phân tích đơn biến và nhận thấy rằng các yếu tố BMI, Smoking_Status, Family_History và BP_History đều có mối liên hệ với khả năng bị đột quỵ (HasStroke), bước tiếp theo là xây dựng một mô hình hồi quy đa biến.
Mục tiêu của phân tích đa biến là để đánh giá tác động đồng thời của nhiều biến độc lập lên một biến phụ thuộc. Điều này cho phép chúng ta:
# Linear Probability Model
data$Stroke_bin <- ifelse(data$Has_Stroke == "Yes", 1, 0)
model_lpm <- lm(Stroke_bin ~ BMI + Smoking_Status + BP_History + Family_History, data = data)
summary(model_lpm)
##
## Call:
## lm(formula = Stroke_bin ~ BMI + Smoking_Status + BP_History +
## Family_History, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.73265 -0.29374 -0.09307 0.27740 0.90693
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.66420 0.02213 30.008 < 2e-16 ***
## BMIOverweight 0.06844 0.01823 3.755 0.000179 ***
## BMIUnderweight 0.03670 0.04094 0.897 0.370065
## Smoking_StatusSmoker 0.27581 0.01901 14.507 < 2e-16 ***
## BP_HistoryNormal -0.57114 0.02102 -27.173 < 2e-16 ***
## BP_HistoryPrehypertension -0.57105 0.02222 -25.704 < 2e-16 ***
## Family_HistoryCó 0.28528 0.01719 16.600 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3827 on 1978 degrees of freedom
## Multiple R-squared: 0.4154, Adjusted R-squared: 0.4137
## F-statistic: 234.3 on 6 and 1978 DF, p-value: < 2.2e-16
\[ \hat{\pi} = 0.6642 + 0.06844 \cdot \text{BMI}_\text{Overweight} + 0.03670 \cdot \text{BMI}_\text{Underweight} + 0.27581 \cdot \text{Smoking_Status}_\text{Smoker} - 0.57114 \cdot \text{BP_History}_\text{Normal} \\ - 0.57105 \cdot \text{BP_History}_\text{Prehypertension} + 0.28528 \cdot \text{Family_History}_\text{Yes} \]
Mô hình hồi quy tuyến tính được sử dụng nhằm dự đoán xác suất bị đột quỵ \(\hat{\pi}\) của bệnh nhân dựa trên các yếu tố: thể trạng, hút thuốc, tiền sử gia đình, và tiền sử huyết áp.
Biến phụ thuộc: Stroke_bin (biến nhị phân: có/không
bị).
Biến độc lập: BMI, Smoking_Status,
BP_History, Family_History.
mô hình giải thích được khoảng 41.5% biến thiên của biến phụ thuộc (Stroke_bin). Kiểm định F CHO THẤY mô hình có ý nghĩa thống kê toàn cục, tức ít nhất một biến độc lập có ảnh hưởng đáng kể đến khả năng đột quỵ.
BMIOverweight: Hệ số dương (0.9307, p < 0.001) → thừa cân làm tăng xác suất đột quỵ khoảng 9.3 điểm % so với BMI bình thường.
BMIUnderweight: Không có ý nghĩa thống kê (p = 0.37).
Smoking_Status: Hệ số 0.27581 (p < 0.001) → hút thuốc có xác suất đột quỵ cao hơn 27.6%.
BP_History:
Normal: Hệ số -0.57114 (p < 0.001) → nhóm huyết áp bình thường có xác suất đột quỵ thấp hơn so với nhóm tham chiếu).
Prehypertension: Tương tự, hệ số -0.57105 (p < 0.001) → nhóm tiền tăng huyết áp cũng có xác suất tương tự.
Family_HistoryYes: Hệ số 0.28528 (p < 0.001) → tiền sử gia đình bị đột quỵ làm tăng xác suất đột quỵ.
Mô hình hồi quy tuyến tính (LPM) cho thấy các yếu tố thừa cân, hút thuốc, tiền sử huyết áp, và tiền sử gia đình đều có ảnh hưởng đáng kể đến xác suất đột quỵ.
Tuy nhiên, do biến phụ thuộc là nhị phân, LPM không phải là mô hình tối ưu: nó có thể dự báo xác suất ngoài khoảng [0,1] và vi phạm giả định phân phối chuẩn của sai số
Cần tiếp tục so sánh với các mô hình nhị phân như logit, probit, và cloglog để xác định mô hình phù hợp hơn.
# Logit
model_logit <- glm(Stroke_bin ~ BMI + Smoking_Status + BP_History + Family_History,
family = binomial(link = "logit"), data = data)
summary(model_logit)
##
## Call:
## glm(formula = Stroke_bin ~ BMI + Smoking_Status + BP_History +
## Family_History, family = binomial(link = "logit"), data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.3631 0.1854 7.350 1.97e-13 ***
## BMIOverweight 0.4676 0.1293 3.617 0.000298 ***
## BMIUnderweight 0.2483 0.2865 0.867 0.385972
## Smoking_StatusSmoker 1.8781 0.1436 13.079 < 2e-16 ***
## BP_HistoryNormal -3.9614 0.2073 -19.113 < 2e-16 ***
## BP_HistoryPrehypertension -3.9553 0.2121 -18.649 < 2e-16 ***
## Family_HistoryCó 1.9795 0.1361 14.548 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 2748.6 on 1984 degrees of freedom
## Residual deviance: 1698.4 on 1978 degrees of freedom
## AIC: 1712.4
##
## Number of Fisher Scoring iterations: 5
Mô hình hồi quy logistic (logit) được sử dụng nhằm dự đoán xác suất
tái phát \(\pi\) của bệnh nhân tuyến
giáp biệt hóa, với biến phụ thuộc nhị phân Stroke_bin (0:
không có khả năng, 1: có khả năng).
Các biến độc lập được đưa vào mô hình gồm:
BMI (Thể Trạng),Smoking_Status (hút thuốc hay không),BP_History (tiền sử huyết áp),Family_History (gia đình có mắc bệnh không),→ Mô hình logit cải thiện đáng kể so với mô hình rỗng, thể hiện qua deviance giảm mạnh. AIC thấp cho thấy mức độ phù hợp tương đối tốt với dữ liệu nhị phân.
Mô hình logit có dạng tổng quát:
\[ \log\left(\frac{\pi}{1 - \pi}\right) = \beta_0 + \beta_1 \cdot \text{BMI} + \beta_2 \cdot \text{Smoking\_Status} + \beta_3 \cdot \text{BP\_History} + \beta_4 \cdot \text{Family\_History} \]
Thay các hệ số ước lượng:
\[ \log\left(\frac{\pi}{1 - \pi}\right) = 1.3631 + 0.4676 \cdot \text{BMI}_{Overweight} + 0.2483 \cdot \text{BMI}_{Underweight} + 1.8781 \cdot \text{Smoking\_Status}_{Smoker} - 3.9614 \cdot \text{BP\_History}_{Normal} - 3.9553 \cdot \text{BP\_History}_{Prehypertension} + 1.9795 \cdot \text{Family\_History}_{Yes} \]
Tỷ số Odds (Odds Ratio):
exp(coef(model_logit))
## (Intercept) BMIOverweight BMIUnderweight
## 3.90819501 1.59615213 1.28190008
## Smoking_StatusSmoker BP_HistoryNormal BP_HistoryPrehypertension
## 6.54082651 0.01903604 0.01915200
## Family_HistoryCó
## 7.23891566
| Biến | Hệ số \(\beta\) | OR (odds ratio) | Giá trị p | Ý nghĩa thống kê | Diễn giải ý nghĩa |
|---|---|---|---|---|---|
| BMIOverweight | 0.4676 | 1.596 | 0.000298 | Có | Người thừa cân có odds đột quỵ cao hơn ~5.96 lần so với nhóm BMI bình thường. |
| BMIUnderweight | 0.2483 | 1.282 | 0.386 | Không | Ảnh hưởng không đáng kể. |
| Smoking_Status | 1.8781 | 6.539 | < 2e-16 | Có | Người hút thuốc có odds khả năng đột quỵ cao gấp ~ 6.5 lần so với người không hút. |
| BP_History_Normal | -3.9614 | 0.019 | < 2e-16 | Có | Người có tiền sử huyết áp bình thường có odds khả năng đột quỵ không đáng kể so với nhóm tham chiếu. |
| BP_HistoryPrehypertension | -3.9553 | 0.019 | < 2e-16 | Có | Người tiền tăng huyết áp cũng có odds khả năng đột quỵ không đáng kể so với nhóm tham chiếu. |
| Family_HistoryYes | 1.9795 | 7.237 | < 2e-16 | Có | Có tiền sử gia đình mắc bệnh làm tăng odds đột quỵ ~7.2 lần. |
Ghi chú:
- \(\text{OR} = e^{\beta}\)
- Giá trị p < 0.05 → Có ý nghĩa thống kê
# Probit
model_probit <- glm(Stroke_bin ~ BMI + Smoking_Status + BP_History + Family_History,
family = binomial(link = "probit"), data = data)
summary(model_probit)
##
## Call:
## glm(formula = Stroke_bin ~ BMI + Smoking_Status + BP_History +
## Family_History, family = binomial(link = "probit"), data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.80831 0.10158 7.957 1.76e-15 ***
## BMIOverweight 0.27289 0.07467 3.655 0.000257 ***
## BMIUnderweight 0.10695 0.16562 0.646 0.518436
## Smoking_StatusSmoker 1.09529 0.08088 13.542 < 2e-16 ***
## BP_HistoryNormal -2.31464 0.11089 -20.874 < 2e-16 ***
## BP_HistoryPrehypertension -2.32096 0.11400 -20.360 < 2e-16 ***
## Family_HistoryCó 1.14632 0.07475 15.335 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 2748.6 on 1984 degrees of freedom
## Residual deviance: 1691.6 on 1978 degrees of freedom
## AIC: 1705.6
##
## Number of Fisher Scoring iterations: 6
Mô hình hồi quy Probit có dạng:
\[ \Phi^{-1}(\pi) = 0.80831 + 0.27289 \cdot \text{BMI}_{Overweight} + 0.10695 \cdot \text{BMI}_{Underweight} + 1.09529 \cdot \text{Smoking\_Status}_{Smoker} - 2.31464 \cdot \text{BP\_History}_{Normal} - 2.32096 \cdot \text{BP\_History}_{Prehypertension} + 1.14632 \cdot \text{Family\_History}_{Yes} \]
Trong đó: - \(\Phi^{-1}(\pi)\) là hàm nghịch đảo của hàm phân phối chuẩn tích lũy, đặc trưng cho mô hình Probit. - \(\pi\) là xác suất đột quỵ.
| Biến | Hệ số \(\beta\) | Giá trị p | Ý nghĩa thống kê | Diễn giải ý nghĩa |
|---|---|---|---|---|
| BMIOverweight | 0.27289 | 0.000257 | Có | Người thừa cân có xác suất đột quỵ cao hơn nhóm BMI bình thường. |
| BMIUnderweight | 0.10695 | 0.518 | Không | Ảnh hưởng không đáng kể. |
| Smoking_StatusSmoker | 1.09529 | < 2e-16 | Có | Người hút thuốc có xác suất đột quỵ cao hơn đáng kể. |
| BP_History_HypertensionNormal | -2.31464 | < 2e-16 | Có | Nhóm huyết áp bình thường có xác suất mắc thấp hơn nhiều so với nhóm tăng huyết áp. |
| BP_HistoryPrehypertension | - 2.32096 | < 2e-16 | Có | Nhóm tiền tăng huyết áp cũng có xác suất thấp hơn đáng kể. |
| Family_HistoryYes | 1.14632 | < 2e-16 | Có | Có tiền sử gia đình làm tăng xác suất đột quỵ. |
# Cloglog
model_cloglog <- glm(Stroke_bin ~ BMI + Smoking_Status + BP_History + Family_History,
family = binomial(link = "cloglog"), data = data)
summary(model_cloglog)
##
## Call:
## glm(formula = Stroke_bin ~ BMI + Smoking_Status + BP_History +
## Family_History, family = binomial(link = "cloglog"), data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.31787 0.09735 3.265 0.001094 **
## BMIOverweight 0.29497 0.08774 3.362 0.000774 ***
## BMIUnderweight 0.11984 0.19590 0.612 0.540702
## Smoking_StatusSmoker 1.26412 0.09210 13.725 < 2e-16 ***
## BP_HistoryNormal -2.56855 0.12764 -20.123 < 2e-16 ***
## BP_HistoryPrehypertension -2.60559 0.13294 -19.599 < 2e-16 ***
## Family_HistoryCó 1.41020 0.09884 14.268 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 2748.6 on 1984 degrees of freedom
## Residual deviance: 1685.1 on 1978 degrees of freedom
## AIC: 1699.1
##
## Number of Fisher Scoring iterations: 6
Mô hình hồi quy Cloglog có dạng:
\[ \log\left(-\log(1 - \pi)\right) = 0.31787 + 0.29497 \cdot \text{BMI}_{Overweight} + 0.11984 \cdot \text{BMI}_{Underweight} + 1.26412 \cdot \text{Smoking\_Status}_{Smoker} - 2.56855 \cdot \text{BP\_History}_{Normal} - 2.60559 \cdot \text{BP\_History}_{Prehypertension} + 1.41020 \cdot \text{Family\_History}_{Yes} \]
Trong đó: - \(\pi\) là xác suất đột quỵ. - Hàm liên kết là \(g(\pi) = \log(-\log(1 - \pi))\).
| Biến | Hệ số \(\beta\) | Giá trị p | Ý nghĩa thống kê | Diễn giải ý nghĩa |
|---|---|---|---|---|
| BMIOverweight | 0.29497 | 0.00077 | Có | Người thừa cân có xác suất đột quỵ cao hơn đáng kể. |
| BMIUnderweight | 0.11984 | 0.541 | Không | Ảnh hưởng không đáng kể. |
| Smoking_StatusSmoker | 1.26412 | < 2e-16 | Có | Người hút thuốc có nguy cơ mắc bệnh cao hơn nhiều. |
| BP_History_HypertensionNormal | -2.56855 | < 2e-16 | Có | Huyết áp bình thường có nguy cơ đột quỵ thấp. |
| BP_HistoryPrehypertension | -2.60559 | < 2e-16 | Có | Tiền tăng huyết áp có xác suất ảnh hưởng thấp. |
| Family_HistoryYes | 1.41020 | < 2e-16 | Có | Có tiền sử gia đình mắc bệnh làm tăng mạnh nguy cơ đột quỵ. |
# So sánh AIC
aic_values <- data.frame(
Mô_hình = c("LPM", "Logit", "Probit", "Cloglog"),
AIC = c(AIC(model_lpm), AIC(model_logit), AIC(model_probit), AIC(model_cloglog))
)
print(aic_values)
## Mô_hình AIC
## 1 LPM 1828.510
## 2 Logit 1712.377
## 3 Probit 1705.560
## 4 Cloglog 1699.130
Bảng AIC của các mô hình
| Mô hình | AIC | Nhận xét về độ phù hợp |
|---|---|---|
| LPM | 1828.510 | Phù hợp tương đối |
| Logit | 1712.377 | Phù hợp tương đối |
| Probit | 1705.560 | Phù hợp tương tự Logit |
| Cloglog | 1699.130 | ✅ Tốt nhất (AIC thấp nhất trong các mô hình nhị phân) |
Lưu ý: Mô hình LPM (Linear Probability Model) là mô hình hồi quy tuyến tính, không thuộc họ phân phối nhị thức nên AIC có thể âm và không trực tiếp so sánh được với các mô hình logit, probit, cloglog.
Kết luận:
# Cài đặt gói
if (!require(pROC)) install.packages("pROC", dependencies = TRUE)
## Loading required package: pROC
## Warning: package 'pROC' was built under R version 4.3.3
## Type 'citation("pROC")' for a citation.
##
## Attaching package: 'pROC'
## The following object is masked from 'package:gmodels':
##
## ci
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
library(pROC)
# Huấn luyện mô hình cloglog
model_cloglog <- glm(
formula = Stroke_bin ~ BMI + Smoking_Status + BP_History +
Family_History,
family = binomial(link = "cloglog"),
data = data
)
# Tính xác suất dự đoán từ mô hình cloglog
predicted_probs_cloglog <- predict(model_cloglog, type = "response")
# Vẽ đường cong ROC và tính AUC, loại bỏ cảnh báo
suppressWarnings({
roc_cloglog <- roc(
response = data$Has_Stroke,
predictor = predicted_probs_cloglog,
levels = c("No", "Yes"),
direction = "<"
)
})
# Vẽ biểu đồ ROC
plot(roc_cloglog, col = "darkgreen", lwd = 2, main = "ROC Curve - Cloglog Model")
# Hiển thị AUC
auc_cloglog <- auc(roc_cloglog)
print(paste("AUC:", round(auc_cloglog, 4)))
## [1] "AUC: 0.8732"
model_logit <- glm(Stroke_bin ~ BMI + Smoking_Status + BP_History +
Family_History, family = binomial(link = "logit"), data = data)
model_probit <- glm(Stroke_bin ~ BMI + Smoking_Status + BP_History +
Family_History, family = binomial(link = "probit"), data = data)
model_cloglog <- glm(Stroke_bin ~ BMI + Smoking_Status + BP_History +
Family_History, family = binomial(link = "cloglog"), data = data)
# Dự đoán xác suất
pred_logit <- predict(model_logit, type = "response")
pred_probit <- predict(model_probit, type = "response")
pred_cloglog <- predict(model_cloglog, type = "response")
# Tạo ROC cho từng mô hình và loại bỏ cảnh báo
suppressWarnings({
roc_logit <- roc(response = data$Has_Stroke, predictor = pred_logit, levels = c("No", "Yes"), direction = "<")
roc_probit <- roc(response = data$Has_Stroke, predictor = pred_probit, levels = c("No", "Yes"), direction = "<")
roc_cloglog <- roc(response = data$Has_Stroke, predictor = pred_cloglog, levels = c("No", "Yes"), direction = "<")
})
# Vẽ ROC đầu tiên
plot(roc_logit, col = "#1b9e77", lwd = 2, main = "So sánh ROC: Logit - Probit - Cloglog", legacy.axes = TRUE)
# Vẽ các ROC tiếp theo
lines(roc_probit, col = "#7570b3", lwd = 2)
lines(roc_cloglog, col = "#fc8d62", lwd = 2)
# Thêm chú thích (legend)
legend("bottomright", legend = c(
paste("Logit (AUC =", round(auc(roc_logit), 3), ")"),
paste("Probit (AUC =", round(auc(roc_probit), 3), ")"),
paste("Cloglog (AUC =", round(auc(roc_cloglog), 3), ")")
),
col = c("#1b9e77", "#7570b3", "#fc8d62"),
lwd = 2, cex = 0.8, box.lwd = 0
)
Đánh giá hiệu suất mô hình bằng ROC và AUC
Ba mô hình hồi quy nhị phân (Logit, Probit, Cloglog) được xây dựng để dự đoán khả năng đột quỵ dựa trên các biến độc lập: BMI, tình trạng hút thuốc, tiền sử huyết áp, và tiền sử gia đình.
Biểu đồ ROC cho thấy cả ba mô hình đều có AUC = 0.873, chứng tỏ khả năng phân loại tương đương và mức độ dự đoán rất tốt.
Các đường ROC gần như trùng khít, cho thấy việc lựa chọn Logit, Probit hay Cloglog không tạo ra sự khác biệt đáng kể về hiệu suất phân loại.
Mặc dù Probit và Cloglog đạt AIC thấp hơn Logit, nhưng trong thực tiễn:
Kết luận: - Cả ba mô hình đều đạt AUC cao (0.873), thể hiện khả năng dự đoán mạnh. - Logit được khuyến nghị sử dụng vì: - Dễ diễn giải. - Phù hợp với chuẩn báo cáo trong các nghiên cứu y học. - Đem lại hiệu suất phân loại tương đương với Probit và Cloglog.
Nghiên cứu “Phân tích các yếu tố ảnh hưởng đến khả năng mắc đột quỵ” sử dụng dữ liệu thực tế nhằm xác định các yếu tố nguy cơ chính góp phần vào khả năng xảy ra đột quỵ. Phân tích hồi quy nhị phân được thực hiện thông qua ba mô hình phổ biến: Logit, Probit và Complementary Log-log (Cloglog). Các biến được đưa vào mô hình bao gồm: chỉ số khối cơ thể (BMI), tình trạng hút thuốc, tiền sử huyết áp, và tiền sử gia đình có người mắc đột quỵ.
Kết quả cho thấy có hai yếu tố nguy cơ nổi bật và nhất quán trong cả ba mô hình: tiền sử huyết áp và tiền sử gia đình. Cụ thể, người có tiền sử huyết áp có nguy cơ đột quỵ cao hơn gần 3 lần so với người không có tiền sử này. Tương tự, người có người thân từng mắc đột quỵ cũng có nguy cơ cao hơn đáng kể. Các yếu tố này đều đạt mức ý nghĩa thống kê và phù hợp với các nghiên cứu trước đó trong lĩnh vực y học dự phòng và dịch tễ học.
Trong khi đó, các yếu tố như BMI và tình trạng hút thuốc không cho thấy ảnh hưởng thống kê rõ rệt trong mô hình phân tích đa biến, mặc dù chúng vẫn được xem là yếu tố nguy cơ tiềm năng trong thực hành lâm sàng.
Đánh giá hiệu suất mô hình qua đường cong ROC và chỉ số AUC cho thấy cả ba mô hình đều đạt hiệu năng phân loại tương đương nhau, với AUC = 0.873. Điều này phản ánh khả năng phân biệt tương đối tốt giữa nhóm có nguy cơ và không có nguy cơ đột quỵ. Đường ROC gần như trùng khít giữa ba mô hình càng củng cố thêm tính ổn định trong hiệu năng phân loại.
Mặc dù Probit và Cloglog có AIC thấp hơn, mô hình Logit vẫn được lựa chọn là phương án tối ưu nhờ tính dễ diễn giải (qua tỷ số odds – odds ratio) và phổ biến rộng rãi trong nghiên cứu y học lâm sàng. Việc sử dụng mô hình Logit giúp hỗ trợ tốt hơn trong công tác tiên lượng nguy cơ đột quỵ, từ đó phục vụ công tác sàng lọc, tư vấn và can thiệp sớm cho nhóm đối tượng nguy cơ cao trong cộng đồng.
Trong quá trình thực hiện nghiên cứu, tác giả nhận thấy vẫn còn tồn tại một số hạn chế nhất định.
Thứ nhất, kích thước mẫu sử dụng trong phân tích chưa thật sự lớn, điều này có thể ảnh hưởng đến độ chính xác của các kết quả ước lượng và tính khái quát khi áp dụng cho cộng đồng rộng hơn.
Thứ hai, dữ liệu được thu thập chủ yếu từ nguồn thứ cấp hoặc do người tham gia tự khai báo, nên không tránh khỏi sai lệch, đặc biệt với các thông tin như tình trạng hút thuốc hay tiền sử bệnh lý.
Thứ ba, mô hình chưa đưa vào các biến số lâm sàng quan trọng khác, như huyết áp thực tế, mức mỡ máu, chỉ số đường huyết hay tuổi – vốn là những yếu tố có mối liên hệ chặt chẽ với nguy cơ đột quỵ trong thực tế.
Cuối cùng, do nghiên cứu mang tính mô tả cắt ngang, nên chỉ phản ánh được mối liên hệ giữa các yếu tố, chứ chưa đủ cơ sở để khẳng định mối quan hệ nhân – quả.
Từ những hạn chế nêu trên, tác giả xin đưa ra một số kiến nghị nhằm cải thiện chất lượng nghiên cứu trong tương lai.
Trước hết, cần mở rộng cỡ mẫu và phạm vi khảo sát, bao gồm nhiều nhóm tuổi, nghề nghiệp, khu vực sinh sống khác nhau để tăng tính đại diện và độ tin cậy cho kết quả nghiên cứu.
Thứ hai, nên bổ sung thêm các chỉ số y khoa cụ thể hơn, như huyết áp đo trực tiếp, chỉ số lipid, glucose máu hay độ tuổi, để giúp mô hình dự đoán chính xác và đầy đủ hơn.
Bên cạnh đó, nhóm khuyến khích nên thực hiện những nghiên cứu theo thời gian (cohort study) để có thể đánh giá rõ ràng hơn về mối quan hệ nhân – quả giữa các yếu tố nguy cơ và nguy cơ mắc đột quỵ.
Cuối cùng, nếu có điều kiện, nên phát triển các công cụ đánh giá nguy cơ đột quỵ đơn giản và dễ sử dụng, ứng dụng vào các cơ sở y tế hoặc cộng đồng, nhằm giúp phát hiện sớm nhóm đối tượng nguy cơ cao và có biện pháp can thiệp kịp thời.