This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

1. Nhập và tìm hiểu dữ liệu

setwd("C:/Users/Administrator/Downloads")
data <- read.csv("C:/Users/Administrator/Downloads/heart_disease_uci.csv")
print(data)
# Kiểm tra 6 dòng dầu của dữ liệu
head(data,6)
# Kiểm tra cấu trúc của bộ dữ liệu
# Các biến định tính dạng chuỗi cần chuyển thành factor:
cols_to_factor <- c("sex", "dataset", "cp", "restecg", "slope", "thal", "fbs", "exang", "num")
# Chuyển các biến định tính dạng chuỗi thành factor
data[cols_to_factor] <- lapply(data[cols_to_factor], as.factor)
str(data)

Bộ dữ liệu Heart Disease UCI được thu thập từ các bệnh nhân để phân tích các yếu tố nguy cơ của bệnh tim mạch. Bộ dữ liệu này bao gồm thông tin về các đặc điểm nhân khẩu học, tiền sử bệnh lý, kết quả các xét nghiệm và các yếu tố khác liên quan đến sức khỏe tim mạch. Bộ dữ liệu này có 920 quan sát và 15 biến, trong đó có 9 biến định tính và 5 biến định lượng. Các Biến trong Bộ Dữ Liệu: - id: Định danh, int, Mã số định danh cho mỗi bệnh nhân. Không sử dụng trong phân tích thống kê. - age: Định lượng, int, Tuổi của bệnh nhân tại thời điểm chẩn đoán. - sex: Định tính, Factor, Giới tính của bệnh nhân (Nam hoặc Nữ). - dataset: Định tính, Factor, Quốc gia cư trú của bệnh nhân. - cp: Định tính, Factor, Loại cơn đau ngực của bệnh nhân (asymptomatic, atypical angina, non-anginal, typical angina). - trestbps: Định lượng, int, Huyết áp khi bệnh nhân nghỉ ngơi (mmHg). - chol: Định lượng, int, Mức cholesterol trong máu (mg/dl). - fbs: Định tính, logical, Đường huyết lúc đói (TRUE = có, FALSE = không). - restecg: Định tính, Factor, Kết quả điện tâm đồ khi bệnh nhân nghỉ ngơi (lv hypertrophy, normal). - thalch: Định lượng, int, Mức độ thalassemia (một loại rối loạn máu). - exang: Định tính, logical, Đau thắt ngực khi gắng sức (TRUE = có, FALSE = không). - oldpeak: Định lượng, numeric, Mức độ thay đổi đoạn ST trên điện tâm đồ khi bệnh nhân gắng sức. - slope: Định tính, Factor, Đoạn ST trên điện tâm đồ (flat, downsloping, upsloping). - thal: Định tính, Factor, Tình trạng thalassemia của bệnh nhân (fixed defect, normal, reversible defect). - num: Định tính, Factor, Biến đầu ra chỉ số mức độ bệnh tim (0 = không có bệnh, 1-4 = có bệnh tim).

# Kiểm tra và loại bỏ giá trị thiếu
colSums(is.na(data))
data_clean <- na.omit(data)
sum(is.na(data_clean))
dl <- data_clean

2. Thống kê mô tả

2.1 Biến sex

  • Biến định tính, đại diện cho giới tính sinh học của bệnh nhân trong bộ dữ liệu, với hai giá trị phân loại chính: Male (Nam) và Female (Nữ). Biến này đóng vai trò quan trọng trong việc phân tích sự phân bổ giới tính trong mẫu nghiên cứu, đồng thời giúp làm cơ sở để tìm hiểu mối quan hệ giữa giới tính và các yếu tố sức khỏe, bệnh lý, cũng như yếu tố di truyền liên quan đến các bệnh lý tim mạch. ### Thống kê tần suất và tỷ lệ phần trăm
# Tần suất và tỷ lệ phần trăm
sex_freq <- table(dl$sex)
sex_prop <- prop.table(sex_freq) * 100
# Hiển thị dưới dạng bảng
sex_summary <- data.frame(
  Giới_tính = names(sex_freq),
  Tần_suất = as.vector(sex_freq),
  Tỷ_lệ = round(as.vector(sex_prop), 2)
)
sex_summary

Tỷ lệ giới tính trong mẫu nghiên cứu cho thấy sự phân bố không đồng đều, với 76.52% nam giới và 23.48% nữ giới. Tỷ lệ nam giới chiếm ưu thế đáng kể so với nữ giới. Điều này có thể phản ánh đặc điểm dân số của đối tượng nghiên cứu hoặc cách thức thu thập dữ liệu. Phân bố giới tính không đồng đều có thể ảnh hưởng đến các phân tích tiếp theo, đặc biệt là khi xét đến các yếu tố như bệnh lý, điều trị hoặc di truyền, vì vậy cần lưu ý khi áp dụng giới tính vào các mô hình phân tích thống kê hoặc dự báo. ### Biểu đồ cột

install.packages("ggplot2")
library(ggplot2)
ggplot(data = dl, aes(x = sex)) +
  geom_bar(aes(fill = sex), width = 0.6) +
  geom_text(stat = 'count', aes(label = ..count..), vjust = -0.5) +  # Hiển thị số liệu
  labs(title = "Biểu đồ Cột Giới Tính", x = "Giới Tính", y = "Tần Suất") +
  scale_fill_manual(values = c("blue", "pink")) +
  theme_minimal()

2.2 Biến dataset

Biến định tính, đại diện cho quốc gia cư trú của bệnh nhân trong bộ dữ liệu, với các giá trị phân loại chính: Cleveland, Hungary, Switzerland, và VA Long Beach. Biến này cho phép phân tích sự phân bố bệnh tim mạch ở các khu vực và quốc gia khác nhau. Việc có sự đa dạng về địa lý trong bộ dữ liệu giúp nghiên cứu sự khác biệt về yếu tố nguy cơ, thói quen sống, chế độ dinh dưỡng, cũng như sự ảnh hưởng của hệ thống chăm sóc sức khỏe tại mỗi khu vực đến tỷ lệ mắc bệnh tim. ### Thống kê tần suất và tỷ lệ phần trăm

# Thống kê tần suất cho biến dataset
dataset_freq <- table(dl$dataset)
dataset_prop <- prop.table(dataset_freq) * 100
# Hiển thị dưới dạng bảng tần suất và tỷ lệ phần trăm
dataset_summary <- data.frame(
  Dataset = names(dataset_freq),
  Tần_suất = as.vector(dataset_freq),
  Tỷ_lệ = round(as.vector(dataset_prop), 2)
)
# In kết quả thống kê tần suất
print(dataset_summary)

Biến dataset trong bộ dữ liệu cho thấy sự phân bố không đồng đều giữa các nguồn dữ liệu. Cụ thể, tỷ lệ quan sát từ các nguồn khác nhau như sau: - Cleveland chiếm 41.03% tổng số quan sát (304 trường hợp), là nguồn dữ liệu phổ biến nhất trong mẫu nghiên cứu. - Hungary chiếm 35.22% (261 trường hợp), đứng thứ hai về số lượng quan sát. - Switzerland chỉ chiếm 6.21% (46 trường hợp), là nguồn ít nhất trong bộ dữ liệu. - VA Long Beach chiếm 17.54% (130 trường hợp), có sự phân bố vừa phải trong mẫu. Phân bố này có thể phản ánh sự phân bổ không đồng đều giữa các khu vực hoặc cách thu thập dữ liệu. Việc phân tích tỷ lệ và sự phân bổ của từng nguồn dữ liệu có thể ảnh hưởng đến các kết quả phân tích và kết luận về bệnh lý, điều trị, hoặc các yếu tố liên quan. Cần lưu ý khi áp dụng phân tích hoặc mô hình dự báo trong trường hợp mẫu không đồng đều về nguồn gốc. ### Biểu đồ cột

library(ggplot2)
ggplot(data = dl, aes(x = dataset)) +
  geom_bar(aes(fill = dataset), width = 0.6) +
  geom_text(stat = 'count', aes(label = ..count..), vjust = -0.5) +  # Hiển thị số liệu
  labs(title = "Biểu đồ Cột Quốc Gia Cư Trú", x = "Quốc Gia Cư Trú", y = "Tần Suất") +
  scale_fill_manual(values = c("blue", "green", "red", "orange")) +  # Chỉnh màu cho từng quốc gia
  theme_minimal()

Ước lượng khoảng và kiểm định tỷ lệ

Hạng mục “Cleveland” trong biến “dataset” Giả thuyết kiểm định: H0: p = 0.25 (Tỷ lệ nữ trong tổng thể là 50%) H1: p ≠ 0.25 (Tỷ lệ nữ trong tổng thể khác 50%)

2.3 Biến cp

Biến cp trong bộ dữ liệu là một biến định tính, với các giá trị phân loại chính: asymptomatic (không có triệu chứng), atypical angina (đau ngực không điển hình), non-anginal (không phải đau ngực) và typical angina (đau ngực điển hình). Tỷ lệ các loại cơn đau ngực trong mẫu nghiên cứu cho thấy sự phân bố không đồng đều giữa các nhóm. Cụ thể, nếu tỷ lệ asymptomatic chiếm phần lớn, điều này có thể phản ánh mức độ phổ biến của các vấn đề về bệnh tim mạch hoặc các triệu chứng không điển hình trong nhóm bệnh nhân nghiên cứu. ### Thống kê tần suất và tỷ lệ phần trăm

# Tần suất và tỷ lệ phần trăm
cp_freq <- table(dl$cp)
cp_prop <- prop.table(cp_freq) * 100

# Hiển thị dưới dạng bảng
cp_summary <- data.frame(
  Loai_con_dau = names(cp_freq),
  Tần_suất = as.vector(cp_freq),
  Tỷ_lệ = round(as.vector(cp_prop), 2)
)
cp_summary

Tỷ lệ các loại cơn đau ngực trong mẫu nghiên cứu cho thấy sự phân bố không đồng đều giữa các hạng mục. Cụ thể, asymptomatic chiếm 52.90% tổng số bệnh nhân, là loại cơn đau phổ biến nhất trong mẫu nghiên cứu. Atypical angina chiếm 20.24%, non-anginal chiếm 21.73%, và typical angina chiếm 5.13%. Phân bố không đồng đều này có thể phản ánh sự khác biệt trong đặc điểm lâm sàng của các bệnh nhân, hoặc do sự đa dạng trong cách thức thu thập dữ liệu. Phân bố này có thể ảnh hưởng đến các phân tích tiếp theo, đặc biệt là khi xét đến các yếu tố như mức độ nghiêm trọng của bệnh, phương pháp điều trị hoặc các yếu tố nguy cơ liên quan. ### Biểu đồ cột

library(ggplot2)
ggplot(data = dl, aes(x = cp)) +
  geom_bar(aes(fill = cp), width = 0.6) +
  geom_text(stat = 'count', aes(label = ..count..), vjust = -0.5) +  # Hiển thị số liệu
  labs(title = "Biểu đồ Cột Các Loại Cơn Đau Ngực", x = "Loại Cơn Đau Ngực", y = "Tần Suất") +
  scale_fill_manual(values = c("blue", "green", "red", "orange")) +  # Chỉnh màu cho từng loại cơn đau
  theme_minimal()

2.4 Biến fbs

Biến fbs trong bộ dữ liệu là một biến định tính, với hai giá trị phân loại chính: TRUE (có đường huyết lúc đói) và FALSE (không có đường huyết lúc đói). Tỷ lệ bệnh nhân có đường huyết lúc đói (TRUE) và không có đường huyết lúc đói (FALSE) trong mẫu nghiên cứu cho thấy sự phân bố không đồng đều giữa các nhóm. Cụ thể, nếu tỷ lệ bệnh nhân có đường huyết lúc đói chiếm phần lớn, điều này có thể phản ánh mức độ phổ biến của các vấn đề về tiểu đường hoặc bệnh lý chuyển hóa trong nhóm bệnh nhân nghiên cứu.

Thống kê tần suất và tỷ lệ phần trăm

# Tần suất và tỷ lệ phần trăm của fbs
fbs_freq <- table(dl$fbs)
fbs_prop <- prop.table(fbs_freq) * 100
# Hiển thị dưới dạng bảng
fbs_summary <- data.frame(
  Đường_huyết_lúc_đói = names(fbs_freq),
  Tần_suất = as.vector(fbs_freq),
  Tỷ_lệ = round(as.vector(fbs_prop), 2)
)
fbs_summary

Tỷ lệ các giá trị trong biến fbs cho thấy sự phân bố không đồng đều giữa các nhóm. Cụ thể, FALSE (không có đường huyết lúc đói) chiếm tỷ lệ cao nhất với 85.02% tổng số quan sát, trong khi TRUE (có đường huyết lúc đói) chiếm 14.98%. Phân bố này có thể phản ánh tỷ lệ bệnh nhân ít có vấn đề về đường huyết lúc đói, trong khi nhóm có đường huyết lúc đói ít phổ biến hơn. Phân bố không đồng đều này có thể ảnh hưởng đến các phân tích tiếp theo, đặc biệt khi xét đến các yếu tố nguy cơ, như bệnh tiểu đường hoặc các bệnh chuyển hóa. ### Biểu đồ cột

library(ggplot2)
ggplot(data = dl, aes(x = fbs)) +
  geom_bar(aes(fill = fbs), width = 0.6) +
  geom_text(stat = 'count', aes(label = ..count..), vjust = -0.5) +  # Hiển thị số liệu
  labs(title = "Biểu đồ Cột Đường Huyết Lúc Đói", x = "Đường Huyết Lúc Đói", y = "Tần Suất") +
  scale_fill_manual(values = c("blue", "orange")) +  # Chỉnh màu cho TRUE và FALSE
  theme_minimal()

2.5 Biến restecg

Biến restecg trong bộ dữ liệu là một biến định tính, đại diện cho kết quả của điện tâm đồ khi bệnh nhân nghỉ ngơi. Biến này có hai giá trị phân loại chính: lv hypertrophy và normal. Tỷ lệ phân bố của các giá trị này cho thấy mức độ phổ biến của từng kết quả điện tâm đồ trong mẫu nghiên cứu. Phân bố này có thể phản ánh tình trạng sức khỏe tim mạch của bệnh nhân, đặc biệt là mức độ nghiêm trọng của các bất thường về điện tâm đồ. Việc phân tích kết quả của restecg có thể giúp nhận diện các bệnh lý tim mạch tiềm ẩn và điều chỉnh các phương pháp điều trị thích hợp.

Thống kê tần suất và tỷ lệ phần trăm

# Tần suất và tỷ lệ phần trăm của restecg
restecg_freq <- table(dl$restecg)
restecg_prop <- prop.table(restecg_freq) * 100
# Hiển thị dưới dạng bảng
restecg_summary <- data.frame(
  Kết_quả_điện_tâm_đồ = names(restecg_freq),
  Tần_suất = as.vector(restecg_freq),
  Tỷ_lệ = round(as.vector(restecg_prop), 2)
)
restecg_summary

Tỷ lệ các kết quả điện tâm đồ trong bộ dữ liệu cho thấy sự phân bố không đồng đều giữa các nhóm. Cụ thể, normal chiếm tỷ lệ cao nhất với 60.05% (445 trường hợp), cho thấy phần lớn bệnh nhân có kết quả điện tâm đồ bình thường. lv hypertrophy chiếm 23.62% (175 trường hợp), là nhóm có sự thay đổi rõ rệt trong điện tâm đồ liên quan đến sự phì đại của tâm thất trái. st-t abnormality chiếm 16.19% (120 trường hợp), chỉ ra sự bất thường trong đoạn ST-T trên điện tâm đồ, một dấu hiệu quan trọng trong việc phát hiện các vấn đề về mạch vành hoặc thiếu máu cơ tim. Phân bố này có thể phản ánh sự phân bổ khác nhau về tình trạng sức khỏe tim mạch của bệnh nhân và có thể ảnh hưởng đến các phân tích và kết luận về bệnh lý, điều trị, cũng như các yếu tố liên quan.

Biểu đồ cột

library(ggplot2)
ggplot(data = dl, aes(x = restecg)) +
  geom_bar(aes(fill = restecg), width = 0.6) +
  geom_text(stat = 'count', aes(label = ..count..), vjust = -0.5) +  # Hiển thị số liệu
  labs(title = "Biểu đồ Cột Kết Quả Điện Tâm Đồ", x = "Kết Quả Điện Tâm Đồ", y = "Tần Suất") +
  scale_fill_manual(values = c("blue", "green", "red", "orange")) +  # Chỉnh màu cho từng kết quả
  theme_minimal()

2.6 Biến exang

Biến exang trong bộ dữ liệu là một biến định tính, đại diện cho tình trạng đau thắt ngực khi bệnh nhân gắng sức. Biến này có hai giá trị phân loại: TRUE (có đau thắt ngực khi gắng sức) và FALSE (không có đau thắt ngực khi gắng sức). Tỷ lệ phân bố giữa hai nhóm cho thấy mức độ phổ biến của triệu chứng này trong mẫu bệnh nhân. Sự hiện diện của exang có thể phản ánh các vấn đề về tim mạch, như tắc nghẽn mạch vành hoặc thiếu máu cơ tim, và có thể là yếu tố dự báo quan trọng cho các rủi ro tim mạch cao hơn. Phân tích biến exang giúp nhận diện bệnh nhân có nguy cơ cao và có thể hỗ trợ việc điều chỉnh phương pháp điều trị.

Thống kê tần suất và tỷ lệ phần trăm

# Tần suất và tỷ lệ phần trăm của exang
exang_freq <- table(dl$exang)
exang_prop <- prop.table(exang_freq) * 100
# Hiển thị dưới dạng bảng
exang_summary <- data.frame(
  Đau_thắt_ngực_khi_gắng_sức = names(exang_freq),
  Tần_suất = as.vector(exang_freq),
  Tỷ_lệ = round(as.vector(exang_prop), 2)
)
exang_summary

Tỷ lệ các giá trị trong biến exang cho thấy sự phân bố không đồng đều giữa các nhóm. Cụ thể, FALSE (không có đau thắt ngực khi gắng sức) chiếm tỷ lệ cao nhất với 60.05% (445 trường hợp), trong khi TRUE (có đau thắt ngực khi gắng sức) chiếm 39.95% (296 trường hợp). Phân bố này cho thấy một tỷ lệ khá cao bệnh nhân gặp phải triệu chứng đau thắt ngực khi gắng sức, điều này có thể phản ánh nguy cơ bệnh tim mạch của họ. Việc phân tích biến exang giúp nhận diện những bệnh nhân có nguy cơ cao mắc các vấn đề tim mạch như thiếu máu cơ tim hoặc tắc nghẽn mạch vành.

Biểu đồ cột

library(ggplot2)
ggplot(data = dl, aes(x = exang)) +
  geom_bar(aes(fill = exang), width = 0.6) +
  geom_text(stat = 'count', aes(label = ..count..), vjust = -0.5) +  # Hiển thị số liệu
  labs(title = "Biểu đồ Cột Đau Thắt Ngực Khi Gắng Sức", x = "Đau Thắt Ngực Khi Gắng Sức", y = "Tần Suất") +
  scale_fill_manual(values = c("blue", "orange")) +  # Chỉnh màu cho TRUE và FALSE
  theme_minimal()

2.7 Biến slope

Biến slope trong bộ dữ liệu là một biến định tính, đại diện cho đoạn ST trên điện tâm đồ khi bệnh nhân gắng sức. Biến này có ba giá trị phân loại chính: flat, downsloping, và upsloping, phản ánh các kiểu thay đổi của đoạn ST trên điện tâm đồ. Các giá trị này có thể liên quan đến mức độ nghiêm trọng của tình trạng bệnh tim mạch, đặc biệt là bệnh động mạch vành. - Flat: Đoạn ST phẳng, có thể cho thấy tình trạng thiếu máu cơ tim không nghiêm trọng hoặc trong giai đoạn hồi phục. - Downsloping: Đoạn ST xuống, thường được liên kết với mức độ thiếu máu cơ tim nghiêm trọng hơn, có thể gây ra các triệu chứng như đau ngực hoặc khó thở. - Upsloping: Đoạn ST lên, có thể được xem là dấu hiệu của một phản ứng bình thường đối với gắng sức nhưng cũng cần được đánh giá trong ngữ cảnh lâm sàng. Phân tích biến slope giúp bác sĩ đánh giá mức độ nghiêm trọng của bệnh lý tim mạch và đưa ra các quyết định điều trị phù hợp.

Thống kê tần suất và tỷ lệ phần trăm

# Tần suất và tỷ lệ phần trăm của slope
slope_freq <- table(dl$slope)
slope_prop <- prop.table(slope_freq) * 100
# Hiển thị dưới dạng bảng
slope_summary <- data.frame(
  Đoạn_ST_trên_điện_tâm_đồ = names(slope_freq),
  Tần_suất = as.vector(slope_freq),
  Tỷ_lệ = round(as.vector(slope_prop), 2)
)
slope_summary

Tỷ lệ phân bố các giá trị trong biến slope cho thấy sự đa dạng về thay đổi đoạn ST trên điện tâm đồ khi bệnh nhân gắng sức. Cụ thể, flat chiếm tỷ lệ cao nhất với 41.84% (310 trường hợp), cho thấy một phần lớn bệnh nhân có đoạn ST phẳng, có thể phản ánh tình trạng thiếu máu cơ tim nhẹ hoặc hồi phục. Up sloping chiếm 23.35% (173 trường hợp), trong khi downsloping chiếm 6.48% (48 trường hợp), chỉ ra mức độ thiếu máu cơ tim nghiêm trọng hơn và có thể liên quan đến các triệu chứng nguy hiểm. Normal (210 trường hợp, chiếm 28.34%) cho thấy đoạn ST không có bất kỳ thay đổi bất thường nào, điều này có thể phản ánh tình trạng sức khỏe tim mạch ổn định. Phân bố này có thể giúp các bác sĩ phân loại mức độ nguy cơ của bệnh nhân và đưa ra quyết định điều trị phù hợp.

Biểu đồ cột

library(ggplot2)
ggplot(data = dl, aes(x = slope)) +
  geom_bar(aes(fill = slope), width = 0.6) +
  geom_text(stat = 'count', aes(label = ..count..), vjust = -0.5) +  # Hiển thị số liệu
  labs(title = "Biểu đồ Cột Đoạn ST trên Điện Tâm Đồ", x = "Đoạn ST trên Điện Tâm Đồ", y = "Tần Suất") +
  scale_fill_manual(values = c("blue", "green", "red", "orange")) +  # Chỉnh màu cho từng đoạn ST
  theme_minimal()

2.8 Biến thal

Biến thal trong bộ dữ liệu là một biến định tính, đại diện cho tình trạng thalassemia (rối loạn máu) của bệnh nhân. Biến này có ba giá trị phân loại chính: fixed defect, normal, và reversible defect. - Fixed defect: Phản ánh sự tồn tại của một khiếm khuyết cố định trong quá trình vận chuyển oxy trong máu, thường liên quan đến các vấn đề nghiêm trọng về tim mạch và có thể cần điều trị dài hạn. - Normal: Chỉ ra rằng bệnh nhân không mắc phải bất kỳ vấn đề nghiêm trọng nào liên quan đến thalassemia hoặc các vấn đề máu khác. - Reversible defect: Đề cập đến các khiếm khuyết có thể phục hồi, thường gặp trong các tình huống như thiếu máu cấp tính hoặc tình trạng hồi phục sau cơn nhồi máu cơ tim.

Phân tích biến thal có thể giúp xác định mối liên hệ giữa tình trạng thalassemia và nguy cơ mắc bệnh tim mạch. Sự hiện diện của fixed defect có thể gợi ý về một tình trạng sức khỏe nghiêm trọng cần được theo dõi và điều trị đặc biệt, trong khi normalreversible defect có thể chỉ ra các vấn đề có thể cải thiện hoặc kiểm soát được.

Thống kê tần suất và tỷ lệ phần trăm

# Tần suất và tỷ lệ phần trăm của thal
thal_freq <- table(dl$thal)
thal_prop <- prop.table(thal_freq) * 100
# Hiển thị dưới dạng bảng
thal_summary <- data.frame(
  Tình_trạng_thalassemia = names(thal_freq),
  Tần_suất = as.vector(thal_freq),
  Tỷ_lệ = round(as.vector(thal_prop), 2)
)
thal_summary

Tỷ lệ phân bố các giá trị trong biến thal cho thấy sự phân bố không đồng đều giữa các nhóm. Cụ thể: - Normal chiếm tỷ lệ cao nhất với 46.02% (341 trường hợp), cho thấy phần lớn bệnh nhân không mắc phải các vấn đề nghiêm trọng liên quan đến thalassemia. - Reversible defect chiếm 23.48% (174 trường hợp), chỉ ra rằng có một số bệnh nhân có tình trạng thalassemia có thể phục hồi, thường liên quan đến tình trạng thiếu máu cấp tính hoặc rối loạn tạm thời. - Fixed defect chiếm 5.26% (39 trường hợp), phản ánh sự tồn tại của các khiếm khuyết cố định trong cơ thể bệnh nhân, có thể là dấu hiệu của các bệnh lý nghiêm trọng và cần được theo dõi chặt chẽ. Phân bố này cho thấy một số bệnh nhân có tình trạng thalassemia hoặc các vấn đề máu nghiêm trọng, trong khi đa số có tình trạng bình thường hoặc có thể hồi phục. Phân tích thal giúp xác định mối liên hệ giữa tình trạng thalassemia và nguy cơ bệnh tim mạch, hỗ trợ trong việc quyết định phương pháp điều trị thích hợp. ### Biểu đồ cột

library(ggplot2)
ggplot(data = dl, aes(x = thal)) +
  geom_bar(aes(fill = thal), width = 0.6) +
  geom_text(stat = 'count', aes(label = ..count..), vjust = -0.5) +  # Hiển thị số liệu
  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("blue", "green", "red", "orange")) +  # Chỉnh màu cho các tình trạng thal
  theme_minimal()

2.9 Biến num

Biến num trong bộ dữ liệu là một biến định tính, chỉ số mức độ bệnh tim của bệnh nhân. Biến này có các giá trị phân loại từ 0 đến 4, trong đó: - 0: Bệnh nhân không có bệnh tim. - 1-4: Các mức độ bệnh tim từ nhẹ đến nghiêm trọng (từ mức độ 1 đến 4). Phân tích biến num giúp đánh giá mức độ nghiêm trọng của bệnh tim mạch ở bệnh nhân, từ đó hỗ trợ bác sĩ trong việc đưa ra quyết định điều trị thích hợp. Mối quan hệ giữa các mức độ bệnh tim và các yếu tố nguy cơ như huyết áp, cholesterol, hoặc các triệu chứng lâm sàng có thể giúp xác định bệnh nhân nào cần được chăm sóc đặc biệt. Phân bố và tỷ lệ của các giá trị trong num cũng có thể phản ánh sự phân bổ các mức độ bệnh tim trong mẫu nghiên cứu và giúp điều chỉnh chiến lược nghiên cứu hoặc can thiệp điều trị.

Thống kê tần suất và tỷ lệ phần trăm

# Tần suất và tỷ lệ phần trăm của num
num_freq <- table(dl$num)
num_prop <- prop.table(num_freq) * 100
# Hiển thị dưới dạng bảng
num_summary <- data.frame(
  Mức_độ_bệnh_tim = names(num_freq),
  Tần_suất = as.vector(num_freq),
  Tỷ_lệ = round(as.vector(num_prop), 2)
)
num_summary

Phân bố các mức độ bệnh tim trong bộ dữ liệu cho thấy sự tập trung chủ yếu vào mức độ bệnh nhẹ và trung bình: * Mức độ 0 (không có bệnh tim) chiếm tỷ lệ cao nhất với 48.18% (357 trường hợp), phản ánh một phần lớn bệnh nhân trong mẫu không mắc bệnh tim mạch. * Mức độ 1 (bệnh tim nhẹ) chiếm 27.67% (205 trường hợp), cho thấy một tỷ lệ đáng kể bệnh nhân có bệnh tim ở mức độ nhẹ. * Mức độ 2 (bệnh tim trung bình) chiếm 10.66% (79 trường hợp), trong khi mức độ 3 (bệnh tim nặng) chiếm 10.53% (78 trường hợp). * Mức độ 4 (bệnh tim rất nặng) chiếm tỷ lệ thấp nhất với 2.97% (22 trường hợp), cho thấy chỉ một ít bệnh nhân có tình trạng bệnh tim nghiêm trọng nhất. Phân bố này giúp hiểu rõ về tình trạng bệnh tim trong mẫu nghiên cứu và có thể hỗ trợ trong việc xác định các nhóm bệnh nhân cần can thiệp và điều trị đặc biệt, đặc biệt là với các mức độ từ 2 trở lên.

Biểu đồ cột

ggplot(data = dl, aes(x = factor(num))) +
  geom_bar(aes(fill = factor(num)), width = 0.6) +
  geom_text(stat = 'count', aes(label = ..count..), vjust = -0.5) +  # Hiển thị số liệu
  labs(title = "Biểu đồ Cột Mức Độ Bệnh Tim", x = "Mức Độ Bệnh Tim", y = "Tần Suất") +
  scale_fill_manual(values = c("blue", "green", "red", "orange", "purple")) +  # Chỉnh màu cho từng mức độ
  theme_minimal()

3. Ước lượng khoảng và kiểm định giả thuyết cho tỷ lệ

3.1 Biến “sex”

Giả thuyết kiểm định: H0: p = 0.5 (Tỷ lệ nữ trong tổng thể là 50%) H1: p ≠ 0.5 (Tỷ lệ nữ trong tổng thể khác 50%)

# Đếm số lượng nam và tổng số trong bộ dữ liệu 'dl'
male_count <- sum(dl$sex == "Male", na.rm = TRUE)  # Đếm số nam
total_gender <- sum(dl$sex %in% c("Female", "Male"), na.rm = TRUE)  # Tổng số nam và nữ
# Tính tỷ lệ nam
p_male <- male_count / total_gender
# Kiểm định tỷ lệ nam có bằng 0.5 không (H0: p = 0.5)
test_gender <- prop.test(male_count, total_gender, p = 0.5, correct = TRUE)
# In kết quả
cat("Tỷ lệ nam:", round(p_male, 4), "\n")
cat("Kết quả kiểm định tỷ lệ nam:\n")
print(test_gender)

Kết quả kiểm định tỷ lệ nam cho thấy tỷ lệ nam trong mẫu là 0.7652 (76.52%) Giá trị X-squared = 207.37 và df = 1 cho thấy kết quả kiểm định rất mạnh mẽ. p-value < 2.2e-16: p-value cực kỳ nhỏ (nhỏ hơn mức ý nghĩa 0.05), do đó chúng ta bác bỏ H₀. Điều này có nghĩa là tỷ lệ nam trong tổng thể không phải là 50%, mà khác 50%. Khoảng tin cậy 95%: [0.7326, 0.7949], tức là chúng ta có thể tin tưởng rằng tỷ lệ nam trong tổng thể nằm trong khoảng từ 73.26% đến 79.49% với mức độ tin cậy 95%. Tỷ lệ mẫu (p): Tỷ lệ nam trong mẫu là 0.7652, tức là 76.52% nam giới trong mẫu nghiên cứu. => Dựa vào kết quả kiểm định, chúng ta có đủ cơ sở để bác bỏ giả thuyết không H₀. Tỷ lệ nam trong tổng thể khác 50%, và trong mẫu này, tỷ lệ nam chiếm khoảng 76.52%. Điều này có thể phản ánh sự phân bố không đồng đều giới tính trong mẫu nghiên cứu.

3.2 Biến “num”

Để kiểm tra sự khác biệt giữa bệnh nhân không mắc bệnh tim và những bệnh nhân có bệnh tim (dù ở mức độ nhẹ hay nặng), ta sẽ nhóm num làm 2 nhóm:một nhóm không có bệnh tim (mức độ 0) và một nhóm có bệnh tim (mức độ 1 đến 4). - Không có bệnh tim: num = 0 - Có bệnh tim: num = 1, 2, 3, 4

# Nhóm lại thành hai nhóm: Có bệnh tim và Không có bệnh tim
dl$num_group <- ifelse(dl$num == 0, "Không có bệnh tim", "Có bệnh tim")
# Thống kê tần suất và tỷ lệ phần trăm của các nhóm
num_group_freq <- table(dl$num_group)
num_group_prop <- prop.table(num_group_freq) * 100
# Hiển thị kết quả thống kê
num_group_summary <- data.frame(
  Nhóm_bệnh_tim = names(num_group_freq),
  Tần_suất = as.vector(num_group_freq),
  Tỷ_lệ = round(as.vector(num_group_prop), 2)
)
num_group_summary

Kết quả thống kê cho biến num sau khi nhóm thành 2 nhóm (Có bệnh tim và Không có bệnh tim) cho thấy sự phân bố giữa hai nhóm này như sau: Có bệnh tim chiếm 51.82% tổng số quan sát (384 trường hợp). Không có bệnh tim chiếm 48.18% tổng số quan sát (357 trường hợp). Sự phân bố này khá đồng đều giữa hai nhóm, với sự chênh lệch chỉ khoảng 3.64% giữa nhóm có và không có bệnh tim. Điều này có thể phản ánh sự phân bố mẫu nghiên cứu trong việc nghiên cứu các yếu tố nguy cơ đối với bệnh tim mạch. Phân bố gần như đồng đều như vậy giúp bạn dễ dàng phân tích và so sánh sự ảnh hưởng của các yếu tố khác (như giới tính, tuổi tác, các chỉ số sức khỏe khác) đối với tỷ lệ bệnh tim trong mẫu nghiên cứu. Tuy nhiên, cần lưu ý rằng sự phân bố này có thể bị ảnh hưởng bởi các yếu tố khác như phương pháp thu thập dữ liệu, cách thức phân loại bệnh nhân hoặc sự chênh lệch trong cách chọn mẫu.

Hạng mục “Có bệnh tim” của nhóm “num” Giả thuyết kiểm định H0: p = 0.5 (Tỷ lệ người có bệnh tim trong mẫu là 50%) H1: p ≠ 0.5 (Tỷ lệ người có bệnh tim trong mẫu khác 50%)

# Đếm số lượng bệnh nhân có bệnh tim (num_group = "Có bệnh tim") và tổng số bệnh nhân trong bộ dữ liệu
num_with_disease <- sum(dl$num_group == "Có bệnh tim", na.rm = TRUE)  # Đếm số người có bệnh tim
total_patients <- sum(!is.na(dl$num_group))  # Tổng số bệnh nhân có dữ liệu về bệnh tim
# Tính tỷ lệ người có bệnh tim
p_disease <- num_with_disease / total_patients
# Kiểm định tỷ lệ người có bệnh tim có bằng 50% không (H₀: p = 0.5)
test_disease <- prop.test(num_with_disease, total_patients, p = 0.5, correct = TRUE)
# In kết quả
cat("Tỷ lệ người có bệnh tim:", round(p_disease, 4), "\n")
cat("Kết quả kiểm định tỷ lệ người có bệnh tim:\n")
print(test_disease)

Kết quả kiểm định tỷ lệ người có bệnh tim cho thấy tỷ lệ người có bệnh tim trong mẫu là 0.5182 (51.82%). Giá trị X-squared = 0.91228 và df = 1 cho thấy kết quả kiểm định không quá mạnh mẽ, tức là có sự chênh lệch nhẹ nhưng không rõ ràng. p-value = 0.3395: p-value này lớn hơn mức ý nghĩa 0.05, vì vậy chúng ta không bác bỏ H₀. Điều này có nghĩa là tỷ lệ người có bệnh tim trong tổng thể không khác biệt so với 50%. Khoảng tin cậy 95%: [0.4816, 0.5547], tức là chúng ta có thể tin tưởng rằng tỷ lệ người có bệnh tim trong tổng thể nằm trong khoảng từ 48.16% đến 55.47% với mức độ tin cậy 95%. Tỷ lệ mẫu (p): Tỷ lệ người có bệnh tim trong mẫu là 0.5182, tức là 51.82% người có bệnh tim trong mẫu nghiên cứu. => Dựa vào kết quả kiểm định, chúng ta không có đủ cơ sở để bác bỏ giả thuyết không H₀. Tỷ lệ người có bệnh tim trong tổng thể không khác 50%, và trong mẫu này, tỷ lệ người có bệnh tim là khoảng 51.82%. Điều này có thể phản ánh rằng tỷ lệ bệnh tim trong mẫu nghiên cứu không khác biệt đáng kể so với tỷ lệ 50% giả định ban đầu.

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

4.1 Biến “sex” và “dataset”

Bảng tần suất chéo

# Tạo bảng tần suất chéo giữa sex và dataset
tab_sex_dataset <- table(dl$sex, dl$dataset)
# Hiển thị bảng tần suất chéo
print(tab_sex_dataset)

Bảng tần suất chéo giữa giới tính và quốc gia cư trú của bệnh nhân cho thấy sự phân bố không đồng đều giữa các nhóm giới tính ở từng quốc gia. Cụ thể: Tỷ lệ nữ: - Cleveland: Tỷ lệ nữ là 3.27%. - Hungary: Tỷ lệ nữ là 2.33%. - Switzerland: Tỷ lệ nữ là 0.10%. - VA Long Beach: Tỷ lệ nữ là 0.17%. Tỷ lệ nam: - Cleveland: Tỷ lệ nam là 6.98%. - Hungary: Tỷ lệ nam là 6.48%. - Switzerland: Tỷ lệ nam là 1.45%. - VA Long Beach: Tỷ lệ nam là 4.22%. Phân bố giới tính này có thể phản ánh sự khác biệt trong việc thu thập dữ liệu, cách lựa chọn bệnh nhân, hoặc các yếu tố dân số học đặc thù của mỗi quốc gia.

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

chisq_result <- chisq.test(table(dl$sex, dl$dataset))
print(chisq_result)

Kết quả kiểm định Chi-square giữa giới tính (sex) và quốc gia cư trú (dataset) cho thấy giá trị thống kê Chi-square là 48.541 với bậc tự do df = 3. P-value là 1.634e-10, nhỏ hơn mức ý nghĩa 0.05, điều này cho thấy chúng ta có đủ cơ sở để bác bỏ giả thuyết không H₀. - Giả thuyết không H0: Giới tính và quốc gia cư trú là độc lập. - Giả thuyết đối kháng H1: Giới tính và quốc gia cư trú có sự phụ thuộc lẫn nhau. Vì p-value rất nhỏ (1.634e-10), ta có thể kết luận rằng có sự phụ thuộc giữa giới tính và quốc gia cư trú. Điều này có nghĩa là tỷ lệ nam nữ có sự khác biệt đáng kể giữa các quốc gia cư trú trong bộ dữ liệu. => Sự phụ thuộc giữa giới tính và quốc gia cư trú có thể phản ánh các yếu tố như đặc điểm dân số học, phương pháp thu thập dữ liệu, hoặc các yếu tố liên quan đến việc phân bổ bệnh nhân trong từng quốc gia. Phân tích này có thể giúp xác định những yếu tố ảnh hưởng đến phân bố giới tính ở các quốc gia khác nhau và các phân tích tiếp theo cần chú ý đến sự khác biệt này.

Ước lượng Odds Ratio và Relative Risk

install.packages("epitools")
library(epitools)
# Tính Odds Ratio
odds_ratio <- oddsratio(tab_sex_dataset)
print("Odds Ratio:")
print(odds_ratio)
# Tính Relative Risk
relative_risk <- riskratio(tab_sex_dataset)
print("Relative Risk:")
print(relative_risk)

Nhận xét về Odds Ratio (OR): OR (nam so với nữ) = 1.3027, có nghĩa là nam giới có khả năng mắc bệnh tim cao hơn khoảng 30% so với nữ giới trong mẫu nghiên cứu này. Tuy nhiên, khoảng tin cậy 95% của OR là [0.9043, 1.8836], bao gồm giá trị 1, điều này cho thấy không có sự khác biệt rõ ràng giữa nhóm nam và nữ về tỷ lệ mắc bệnh tim. p-value = 0.156, lớn hơn mức ý nghĩa 0.05, điều này cho thấy sự khác biệt giữa tỷ lệ mắc bệnh tim ở nam và nữ không có ý nghĩa thống kê. -> Mặc dù OR > 1 cho thấy nam giới có tỷ lệ mắc bệnh tim cao hơn nữ giới, nhưng kết quả này không có ý nghĩa thống kê, vì vậy không thể kết luận chắc chắn về sự khác biệt này.

Nhận xét về Relative Risk (RR): RR (nam so với nữ) = 1.1577, có nghĩa là nam giới có nguy cơ mắc bệnh tim cao hơn 15.77% so với nữ giới. Tuy nhiên, khoảng tin cậy 95% của RR là [0.9411, 1.4241], bao gồm giá trị 1, điều này cho thấy không có sự khác biệt rõ ràng giữa nam và nữ về nguy cơ mắc bệnh tim. p-value = 0.156, lớn hơn mức ý nghĩa 0.05, cho thấy sự khác biệt giữa tỷ lệ mắc bệnh tim ở nam và nữ không có ý nghĩa thống kê. -> Mặc dù RR > 1 cho thấy nam giới có nguy cơ mắc bệnh tim cao hơn nữ giới, nhưng sự khác biệt này cũng không có ý nghĩa thống kê, vì vậy không thể kết luận chắc chắn về sự khác biệt này. => Cả Odds Ratio (OR) và Relative Risk (RR) đều chỉ ra rằng nam giới có nguy cơ mắc bệnh tim cao hơn nữ giới, nhưng không có sự khác biệt thống kê đáng kể (do p-value > 0.05 và khoảng tin cậy bao gồm 1). Vì vậy, kết quả cho thấy rằng không có bằng chứng mạnh mẽ cho thấy sự khác biệt về nguy cơ mắc bệnh tim giữa nam và nữ trong mẫu nghiên cứu này.

4.2 Biến “sex” và “cp”

Bảng tần suất chéo

# Tạo bảng tần suất chéo giữa sex và cp
tab_sex_cp <- table(dl$sex, dl$cp)
print("Bảng tần suất chéo giữa sex và cp:")
print(tab_sex_cp)

Bảng tần suất chéo giữa giới tính và loại cơn đau ngực cho thấy sự phân bố không đồng đều giữa các nhóm giới tính ở các loại cơn đau ngực. Cụ thể: Tỷ lệ nữ (Female): Asymptomatic: Tỷ lệ nữ với cơn đau ngực không triệu chứng là 8.64%, chiếm 64/741 tổng số nữ bệnh nhân. Atypical Angina: Tỷ lệ nữ với cơn đau ngực điển hình là 6.88%, chiếm 51/741 tổng số nữ bệnh nhân. Non-anginal: Tỷ lệ nữ với cơn đau ngực không điển hình là 6.75%, chiếm 50/741 tổng số nữ bệnh nhân. Typical Angina: Tỷ lệ nữ với cơn đau ngực điển hình là 1.21%, chiếm 9/741 tổng số nữ bệnh nhân. Tỷ lệ nam (Male): Asymptomatic: Tỷ lệ nam với cơn đau ngực không triệu chứng là 44.26%, chiếm 328/741 tổng số nam bệnh nhân. Atypical Angina: Tỷ lệ nam với cơn đau ngực điển hình là 13.36%, chiếm 99/741 tổng số nam bệnh nhân. Non-anginal: Tỷ lệ nam với cơn đau ngực không điển hình là 14.98%, chiếm 111/741 tổng số nam bệnh nhân. Typical Angina: Tỷ lệ nam với cơn đau ngực điển hình là 3.91%, chiếm 29/741 tổng số nam bệnh nhân. => Phân tích bảng tần suất chéo giữa giới tính và loại cơn đau ngực cho thấy có sự phân bố không đồng đều giữa các giới tính trong từng loại cơn đau ngực. Cụ thể, tỷ lệ nam giới vượt trội hơn nữ giới ở tất cả các nhóm, đặc biệt là ở các nhóm Asymptomatic (không triệu chứng) và Non-anginal (không phải đau ngực). Điều này có thể phản ánh sự khác biệt trong cách thu thập dữ liệu, hoặc yếu tố dân số học đặc thù của từng quốc gia.

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

chi_test <- chisq.test(tab_sex_cp)
print(chi_test)

Kết quả kiểm định Chi-square giữa giới tính (sex) và loại cơn đau ngực (cp) cho thấy giá trị thống kê Chi-square là 25.547 với bậc tự do df = 3. P-value là 1.187e-05, nhỏ hơn mức ý nghĩa 0.05, điều này cho thấy chúng ta có đủ cơ sở để bác bỏ giả thuyết không H₀. - Giả thuyết không H₀: Giới tính và loại cơn đau ngực là độc lập. - Giả thuyết đối kháng H₁: Giới tính và loại cơn đau ngực có sự phụ thuộc lẫn nhau. Vì p-value rất nhỏ (1.187e-05), ta có thể kết luận rằng có sự phụ thuộc giữa giới tính và loại cơn đau ngực. Điều này có nghĩa là tỷ lệ nam nữ phân bố khác nhau đáng kể giữa các loại cơn đau ngực trong mẫu dữ liệu. => Sự phụ thuộc giữa giới tính và loại cơn đau ngực có thể phản ánh những yếu tố như sự khác biệt về sinh lý, bệnh lý, hoặc các yếu tố liên quan đến cách phân loại và thu thập dữ liệu bệnh nhân. Việc này có thể giúp nghiên cứu thêm về các đặc điểm bệnh lý của bệnh tim ở nam và nữ, và điều này cần được lưu ý trong các phân tích tiếp theo để tránh sai lệch trong kết quả.

Ước lượng Odds Ratio và Relative Risk

# Tính Odds Ratio
odds_ratio <- oddsratio(tab_sex_cp)
print("Odds Ratio:")
print(odds_ratio)
# Tính Relative Risk
relative_risk <- riskratio(tab_sex_cp)
print("Relative Risk:")
print(relative_risk)
  • Odds Ratio (OR): OR (Male vs Female) = 0.3795 (95% CI: [0.2463, 0.5854]) p-value = 1.412485e-05 (rất nhỏ). -> Giải thích: OR < 1 cho thấy nam giới có ít khả năng mắc các loại cơn đau ngực hơn nữ giới trong bộ dữ liệu này. Khoảng tin cậy 95% của OR (0.2463, 0.5854) không bao gồm giá trị 1, điều này càng củng cố kết luận rằng có sự khác biệt đáng kể giữa hai giới về tỷ lệ mắc cơn đau ngực. P-value cực kỳ nhỏ (dưới 0.05) chứng tỏ sự khác biệt này là có ý nghĩa thống kê, chúng ta có thể bác bỏ giả thuyết không H₀ (tức là giới tính không ảnh hưởng).
  • Relative Risk (RR): RR (Male vs Female) = 0.5228 (95% CI: [0.39997, 0.68335]) p-value = 1.412485e-05 (rất nhỏ). -> Giải thích: RR < 1 cho thấy nam giới có tỷ lệ mắc các loại cơn đau ngực thấp hơn nữ giới. Khoảng tin cậy 95% của RR (0.39997, 0.68335) không bao gồm giá trị 1, điều này củng cố kết luận rằng có sự khác biệt đáng kể về tỷ lệ mắc bệnh giữa nam và nữ. P-value rất nhỏ chứng tỏ sự khác biệt này có ý nghĩa thống kê, và chúng ta có thể bác bỏ giả thuyết không H₀ về sự độc lập giữa giới tính và cơn đau ngực. => Giới tính có ảnh hưởng rõ rệt đến sự xuất hiện của cơn đau ngực, với nam giới có nguy cơ thấp hơn nữ giới trong mẫu nghiên cứu này.

4.3 Biến “sex” và “fbs”

Bảng tần suất chéo

# Tạo bảng tần suất chéo giữa sex và fbs
tab_sex_fbs <- table(dl$sex, dl$fbs)
print(tab_sex_fbs)

Bảng tần suất chéo giữa giới tính (sex) và đường huyết lúc đói (fbs) cho thấy: - Nam giới có tỷ lệ đường huyết lúc đói (FALSE) và (TRUE) cao hơn nữ giới. Cụ thể, tỷ lệ nam giới có đường huyết lúc đói (FALSE) chiếm 52.34% và nam giới có đường huyết lúc đói (TRUE) chiếm 10.56%. - Tỷ lệ nữ giới có đường huyết lúc đói (TRUE) chỉ chiếm 2.06%, thấp hơn nhiều so với nam giới. Điều này có thể phản ánh sự khác biệt giới tính trong nguy cơ mắc các vấn đề về đường huyết.

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

chi_square_result <- chisq.test(tab_sex_fbs) 
print(chi_square_result)

Giá trị thống kê Chi-squared (X-squared) = 3.3748 và bậc tự do (df) = 1. P-value = 0.0662, lớn hơn mức ý nghĩa 0.05, điều này có nghĩa là chúng ta không có đủ cơ sở để bác bỏ giả thuyết không H₀. Giả thuyết: H0: Giới tính và đường huyết lúc đói là độc lập với nhau. H1: Giới tính và đường huyết lúc đói có sự phụ thuộc lẫn nhau. => Với p-value = 0.0662, kết quả kiểm định không đủ mạnh để bác bỏ giả thuyết không. Điều này có nghĩa là không có sự phụ thuộc đáng kể giữa giới tính và trạng thái đường huyết lúc đói trong bộ dữ liệu này. Tuy nhiên, p-value gần mức 0.05 cho thấy có thể có một sự liên quan nhẹ giữa hai yếu tố này, nhưng không đủ để kết luận chắc chắn.

Ước lượng Odds Ratio và Relative Risk

# Tính Odds Ratio (OR)
odds_ratio <- oddsratio(tab_sex_fbs)
print("Odds Ratio:")
print(odds_ratio)
# Tính Relative Risk (RR)
relative_risk <- riskratio(tab_sex_fbs)
print("Relative Risk:")
print(relative_risk)
  • Tỷ lệ chênh (Odds Ratio - OR): OR (Nam vs. Nữ) = 1.6884 (Khoảng tin cậy 95%: [1.0086; 2.9759]) p-value = 0.04616, nhỏ hơn mức ý nghĩa 0.05. -> Kết quả cho thấy Nam có tỷ lệ chênh cao hơn so với nữ giới trong việc có đường huyết lúc đói, với p-value nhỏ cho thấy sự khác biệt này có ý nghĩa thống kê.
  • Rủi ro tương đối (Relative Risk - RR): RR (Nam vs. Nữ) = 1.5855 (Khoảng tin cậy 95%: [0.9858; 2.5502]) p-value = 0.04616, cũng nhỏ hơn mức ý nghĩa 0.05. -> Tỷ lệ rủi ro tương đối cho thấy Nam có nguy cơ cao hơn nữ giới trong việc có đường huyết lúc đói, với sự khác biệt có ý nghĩa thống kê. => Dựa trên kết quả Odds Ratio và Relative Risk, có thể kết luận rằng Nam có khả năng bị đường huyết lúc đói cao hơn nữ giới. Cả hai chỉ số đều có p-value nhỏ hơn 0.05, chỉ ra rằng sự khác biệt giữa nam và nữ là có ý nghĩa thống kê.

4.4 Biến “sex” và “restecg”

Bảng tần suất chéo

tab_sex_restecg <- table(dl$sex, dl$restecg)
print("Bảng tần suất chéo giữa sex và restecg:")
print(tab_sex_restecg)

Bảng tần suất chéo giữa giới tính (sex) và kết quả điện tâm đồ (restecg) cho thấy sự phân bố không đồng đều giữa các nhóm giới tính trong từng kết quả điện tâm đồ. - Tỷ lệ nữ: lv hypertrophy: Số nữ có kết quả lv hypertrophy là 0, chiếm 0% tổng số nữ. normal: Số nữ có kết quả bình thường là 47, chiếm 27.01% tổng số nữ. st-t abnormality: Số nữ có kết quả ST-T bất thường là 104, chiếm 59.77% tổng số nữ. - Tỷ lệ nam: lv hypertrophy: Số nam có kết quả lv hypertrophy là 1, chiếm 0.18% tổng số nam. normal: Số nam có kết quả bình thường là 128, chiếm 22.59% tổng số nam. st-t abnormality: Số nam có kết quả ST-T bất thường là 341, chiếm 60.11% tổng số nam. => Phân bố giới tính trong kết quả điện tâm đồ cho thấy nam giới chiếm ưu thế ở tất cả các loại kết quả, đặc biệt là với st-t abnormality, trong khi nữ giới chiếm tỷ lệ cao hơn trong nhóm st-t abnormality. Tỷ lệ lv hypertrophy gần như không có ở nữ giới (0), trong khi nam giới có 1 người có kết quả lv hypertrophy.

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

chi_square_result <- chisq.test(tab_sex_restecg)
print(chi_square_result)

Giá trị thống kê Chi-squared (X-squared) = 2.6631 với bậc tự do (df) = 3. P-value = 0.4465, lớn hơn mức ý nghĩa 0.05. Giả thuyết kiểm định: H0: Giới tính và kết quả điện tâm đồ là độc lập. H1: Giới tính và kết quả điện tâm đồ có sự phụ thuộc lẫn nhau. => Với p-value = 0.4465, lớn hơn mức ý nghĩa 0.05, chúng ta không bác bỏ giả thuyết không H₀. Điều này có nghĩa là không có đủ bằng chứng để kết luận rằng có sự phụ thuộc giữa giới tính và kết quả điện tâm đồ. Hai biến này có thể là độc lập trong mẫu dữ liệu của bạn.

Ước lượng Odds Ratio và Relative Risk

# Tính Odds Ratio (OR)
odds_ratio <- oddsratio(tab_sex_restecg, method = "wald")
print("Odds Ratio:")
print(odds_ratio)
# Tính Relative Risk (RR)
relative_risk <- riskratio(tab_sex_restecg)
print("Relative Risk:")
print(relative_risk)
  • Tỷ lệ chênh (Odds Ratio - OR): OR (Nam vs Nữ) = 0 (Khoảng tin cậy 95%: [0, NaN]) p-value = 0.7329 OR = 0 cho thấy tỷ lệ chênh giữa nam và nữ trong việc có kết quả điện tâm đồ không thể tính toán hợp lý vì có giá trị 0 trong bảng tần suất. p-value = 0.7329 cho thấy không có sự khác biệt có ý nghĩa thống kê giữa nam và nữ trong việc mắc kết quả điện tâm đồ, vì p-value lớn hơn 0.05.
  • Rủi ro tương đối (Relative Risk - RR): RR (Nam vs Nữ) = 0.9922 (Khoảng tin cậy 95%: [0.9772, 1.0075]) p-value = 0.7329 RR = 0.9922 cho thấy nguy cơ mắc kết quả điện tâm đồ giữa nam và nữ là gần như bằng nhau, vì giá trị của RR rất gần 1. p-value = 0.7329 cho thấy sự khác biệt giữa hai nhóm giới tính là không có ý nghĩa thống kê, vì p-value lớn hơn 0.05. => Odds Ratio (OR) và Relative Risk (RR) đều cho thấy không có sự khác biệt có ý nghĩa thống kê giữa nam và nữ về tỷ lệ mắc các kết quả điện tâm đồ (restecg). Cả OR và RR đều gần với 1, cho thấy giới tính không có ảnh hưởng lớn đến việc mắc các loại kết quả điện tâm đồ này.

4.5 Biến “sex” và “exang”

Bảng tần suất chéo

tab_sex_exang <- table(dl$sex, dl$exang)
print("Bảng tần suất chéo giữa sex và exang:")
print(tab_sex_exang)

Bảng tần suất chéo giữa giới tính (sex) và đau thắt ngực khi gắng sức (exang) cho thấy sự phân bố không đồng đều giữa các nhóm giới tính trong từng nhóm đau thắt ngực. -Tỷ lệ nữ: Không có đau thắt ngực khi gắng sức (FALSE): Số nữ không có đau thắt ngực khi gắng sức là 133, chiếm 24.46% tổng số nữ. Có đau thắt ngực khi gắng sức (TRUE): Số nữ có đau thắt ngực khi gắng sức là 41, chiếm 7.51% tổng số nữ. - Tỷ lệ nam: Không có đau thắt ngực khi gắng sức (FALSE): Số nam không có đau thắt ngực khi gắng sức là 312, chiếm 55.01% tổng số nam. Có đau thắt ngực khi gắng sức (TRUE): Số nam có đau thắt ngực khi gắng sức là 255, chiếm 44.99% tổng số nam. => Phân tích bảng tần suất chéo này cho thấy nam giới có tỷ lệ mắc đau thắt ngực khi gắng sức cao hơn nữ giới. Cần xem xét sự khác biệt này khi phân tích các yếu tố nguy cơ hoặc bệnh lý liên quan đến đau thắt ngực.

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

chi_square_result <- chisq.test(tab_sex_exang)
print(chi_square_result)

Giá trị thống kê Chi-squared (X-squared) = 24.557 với bậc tự do (df) = 1. P-value = 7.214e-07, rất nhỏ (nhỏ hơn mức ý nghĩa 0.05). Giả thuyết kiểm định: H0: Giới tính và đau thắt ngực khi gắng sức là độc lập. H1: Giới tính và đau thắt ngực khi gắng sức có sự phụ thuộc lẫn nhau. Với p-value = 7.214e-07, nhỏ hơn mức ý nghĩa 0.05, chúng ta bác bỏ giả thuyết không H₀. Điều này có nghĩa là có sự phụ thuộc mạnh mẽ giữa giới tính và đau thắt ngực khi gắng sức trong bộ dữ liệu này. => Sự phụ thuộc giữa giới tính và đau thắt ngực khi gắng sức cho thấy có sự khác biệt đáng kể về tỷ lệ mắc đau thắt ngực khi gắng sức giữa nam và nữ, cần lưu ý khi phân tích các yếu tố nguy cơ liên quan đến bệnh lý này.

Ước lượng Odds Ratio và Relative Risk

# Tính Odds Ratio (OR)
odds_ratio <- oddsratio(tab_sex_exang)
print("Odds Ratio:")
print(odds_ratio)
# Tính Relative Risk (RR)
relative_risk <- riskratio(tab_sex_exang)
print("Relative Risk:")
print(relative_risk)
  • Tỷ lệ chênh (Odds Ratio - OR): OR (Nam vs Nữ) = 2.642 (Khoảng tin cậy 95%: [1.8069, 3.9325]) p-value = 2.628146e-07, rất nhỏ, cho thấy sự khác biệt có ý nghĩa thống kê. Giải thích: OR = 2.642 có nghĩa là nam giới có tỷ lệ mắc đau thắt ngực khi gắng sức cao gấp khoảng 2.64 lần so với nữ giới. Khoảng tin cậy 95% không bao gồm giá trị 1 (1.8069, 3.9325), cho thấy sự khác biệt này là đáng kể và có ý nghĩa thống kê. p-value rất nhỏ (< 0.05) chứng tỏ sự khác biệt giữa nam và nữ là có ý nghĩa thống kê.
  • Rủi ro tương đối (Relative Risk - RR): RR (Nam vs Nữ) = 1.9086 (Khoảng tin cậy 95%: [1.4387, 2.5321]) p-value = 2.628146e-07, rất nhỏ, cho thấy sự khác biệt có ý nghĩa thống kê. Giải thích: RR = 1.9086 có nghĩa là nam giới có nguy cơ mắc đau thắt ngực khi gắng sức cao hơn nữ giới khoảng 1.91 lần. Khoảng tin cậy 95% không bao gồm giá trị 1 (1.4387, 2.5321), điều này càng củng cố rằng sự khác biệt giữa nam và nữ là có ý nghĩa thống kê. p-value rất nhỏ (< 0.05) cho thấy sự khác biệt này là có ý nghĩa thống kê. => Odds Ratio (OR) và Relative Risk (RR) đều cho thấy nam giới có tỷ lệ mắc đau thắt ngực khi gắng sức cao hơn nữ giới, và sự khác biệt này có ý nghĩa thống kê rất mạnh mẽ (vì p-value cực kỳ nhỏ). Cả OR và RR đều chỉ ra rằng nam giới có nguy cơ mắc đau thắt ngực khi gắng sức cao hơn nữ giới, với OR = 2.642 và RR = 1.9086.

4.6 Biến “sex” và “slope”

Bảng tần suất chéo

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

Ước lượng Odds Ratio và Relative Risk

4.7 Biến “sex” và “thal”

Bảng tần suất chéo

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

Ước lượng Odds Ratio và Relative Risk

4.8 Biến “num” và “dataset”

Bảng tần suất chéo

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

Ước lượng Odds Ratio và Relative Risk

4.9 Biến “num” và “cp”

Bảng tần suất chéo

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

Ước lượng Odds Ratio và Relative Risk

4.10 Biến “num” và “fbs”

Bảng tần suất chéo

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

Ước lượng Odds Ratio và Relative Risk

4.11 Biến “num” và “restecg”

Bảng tần suất chéo

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

Ước lượng Odds Ratio và Relative Risk

4.5 Biến “num” và “exang”

Bảng tần suất chéo

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

Ước lượng Odds Ratio và Relative Risk

4.12 Biến “num” và “slope”

Bảng tần suất chéo

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

Ước lượng Odds Ratio và Relative Risk

4.13 Biến “num” và “thal”

Bảng tần suất chéo

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

Ước lượng Odds Ratio và Relative Risk