Bộ dữ liệu COVID-19 Reinfection and Health Dataset mô phỏng hồ sơ của các bệnh nhân Covid-19 ở Đan Mạch giai đoạn 2020 - 2024. Bộ dữ liệu được thu thập và công bố tại https://www.kaggle.com/datasets/khushikyad001/covid-19-reinfection-and-health-dataset/data
# Tải và đọc file dữ liệu
tk <- read.csv("D:/AnhThu/DATA_DT/covid_related_disease_data.csv")
# Xem cấu trúc của bộ dữ liệu
str(tk)
## 'data.frame': 3000 obs. of 26 variables:
## $ Patient_ID : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Age : int 69 38 41 81 50 66 76 77 79 72 ...
## $ Gender : chr "Male" "Male" "Female" "Female" ...
## $ Region : chr "Hovedstaden" "Sjælland" "Syddanmark" "Hovedstaden" ...
## $ Preexisting_Condition : chr "Obesity" "Asthma" "Hypertension" "Asthma" ...
## $ Date_of_Infection : chr "06/21/2022" "02/02/2024" "05/28/2023" "08/13/2023" ...
## $ COVID_Strain : chr "Delta" "XBB.1.5" "Beta" "Delta" ...
## $ Symptoms : chr "Mild" "Mild" "Mild" "Severe" ...
## $ Severity : chr "Moderate" "Moderate" "High" "High" ...
## $ Hospitalized : chr "Yes" "No" "Yes" "No" ...
## $ Hospital_Admission_Date: chr "01/13/2025" "" "03/07/2025" "" ...
## $ Hospital_Discharge_Date: chr "01/26/2025" "" "04/26/2025" "" ...
## $ ICU_Admission : chr "No" "No" "Yes" "No" ...
## $ Ventilator_Support : chr "No" "No" "Yes" "No" ...
## $ Recovered : chr "Yes" "No" "No" "Yes" ...
## $ Date_of_Recovery : chr "04/19/2023" "" "" "02/09/2025" ...
## $ Reinfection : chr "No" "No" "No" "Yes" ...
## $ Date_of_Reinfection : chr "" "" "" "08/24/2024" ...
## $ Vaccination_Status : chr "Yes" "No" "Yes" "Yes" ...
## $ Vaccine_Type : chr "None" "None" "Janssen" "AstraZeneca" ...
## $ Doses_Received : int 1 0 3 1 2 3 0 3 0 1 ...
## $ Date_of_Last_Dose : chr "09/22/2022" "" "05/14/2024" "10/31/2024" ...
## $ Long_COVID_Symptoms : chr "None" "None" "Fatigue" "None" ...
## $ Occupation : chr "Healthcare" "Healthcare" "Unemployed" "Office Worker" ...
## $ Smoking_Status : chr "Never" "Never" "Never" "Never" ...
## $ BMI : num 27.7 21.9 22.7 27.7 11.9 29.8 22.3 24.4 26.1 21.2 ...
Bộ dữ liệu là data frame, bao gồm 3000 quan sát và 26 biến. Bộ dữ liệu bao gồm các biến sau:
Patient_ID: Mã bệnh nhân
Age: Tuổi của bệnh nhân
Gender: Giới tính của bệnh nhân
Region: Khu vực cư trú của khách hàng
Pressxisting_Condition: Các bệnh nền của bệnh nhân
Date_of_Infection: Ngày bị nhiễm Covid-19
COVID_Strain: Biến thể Covid-19
Symptoms: Mức độ triệu chứng Covid
Severity: Mức độ nghiêm trọng Covid
Hospitalized: Khả năng nhập viện của bệnh nhân (Yes/No)
Hospital_Admission_Date: Ngày bệnh nhân nhập viện
Hospital_Discharge_Date: Ngày xuất viện
ICU_Admission: Bệnh nhân có vào phòng ICU hay không (Yes/No)
Ventilator_Support: Có sử dụng máy thở hay không (Yes/No)
Recovered: Tình trạng phục hồi sức khỏe (Yes/No)
Date_of_Recovery: Ngày phục hồi sức khỏe
Reinfection: Có tái nhiễm Covid hay không (Yes/No)
Date_of_Reinfection: Ngày tái nhiễm
Vaccination_Status: Tình trạng tiêm chủng
Vaccine_Type: Loại vắc xin
Doses_Received: Số liều vắc xin
Date_of_Last_Dose: Ngày tiêm vắc xin lần cuối
Long_COVID_Symptoms: Triệu chứng hậu Covid
Occupation: Nghề nghiệp của bệnh nhân
Smoking_Status: Tình trạng hút thuốc: Never (chưa bao giờ), Former(đã từng), Current (đang hút)
BMI: Chỉ số khối cơ thể
Ở bài này, các biến định tính được lựa chọn để phân tích, bao gồm: Symptoms, Hospitalized, Recovered, Long_COVID_Symptoms. Ta tiến hành kiểm tra xem có giá trị bị thiếu (NA) trong các biến định tính.
# Rút trích các dữ liệu định tính
a <- select(tk, c("Symptoms", "Hospitalized", "Recovered", "Long_COVID_Symptoms"))
# Kiểm tra số lượng giá trị bị thiếu (NA)
sum(is.na(a))
## [1] 0
is.na() tạo ra một bảng giá trị TRUE nếu
giá trị bị thiếu (NA), FALSE nếu không bị NA. Kết quả sum()
cho biết số lượng TRUE, tức là đếm số ô bị thiếu dữ liệu.Dựa vào kết quả kiểm tra = 0, cho thấy không có giá trị bị thiếu (NA) trong các biến định tính của bộ dữ liệu.
Bảng tần số mức độ triệu chứng:
# Số lượng các mức độ
table(a$Symptoms)
##
## Mild Moderate Severe
## 1010 978 1012
# Trực quan hóa dữ liệu
a %>% group_by(Symptoms) %>% summarise(n = n()) %>%
mutate(pc = paste0(round(n/sum(n)*100, 2),"%")) %>%
ggplot(aes(x = "", y = n, fill = Symptoms)) +
geom_col(width = 1) +
coord_polar(theta = "y") +
geom_text(aes(label = pc), position = position_stack(vjust = 0.5)) +
labs(title = "Biểu đồ tròn thể hiện tần suất mức độ triệu chứng") +
theme_void()
Nhận xét: Phân bổ mức độ triệu chứng khá đồng đều, trong đó 33,67% là triệu chứng nhẹ (1010/3000 đối với Mild), 32,6% là triệu chứng trung bình (978/3000 đối với Moderate) và 33,73% là triệu chứng nguy hiểm (Severe).
Ước lượng khoảng tin cậy
Với độ tin cậy 95%, tỷ lệ của triệu chứng “Severe” trong tổng thể được thể hiện như sau:
# Số lượng mức độ nguy hiểm
se <- sum(a$Symptoms == "Severe")
# Số lượng bệnh nhân
total <- nrow(a)
# Ước lượng khoảng tin cậy 95%
prop.test(se, total, conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: se out of total, null probability 0.5
## X-squared = 316.88, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.3204679 0.3546189
## sample estimates:
## p
## 0.3373333
Kiểm định giả thuyết:
Đặt giả thuyết:
H0: p = 0.5
H1: p ≠ 0.5
Diễn giải: Kết quả kiểm định cho thấy giá trị p_value = 2.2e - 16 < 0.05. Vậy giả thuyết H0 bị bác bỏ, khẳng định tỷ lệ Severe không phải là 50% mà là nằm trong khoảng tin cậy [32,05%;35,62%].
Bảng tần số khả năng nhập viện:
# Số lượng các khả năng nhập viện
table(a$Hospitalized)
##
## No Yes
## 2124 876
# Trực quan hóa dữ liệu
a %>% group_by(Hospitalized) %>% summarise(n = n()) %>%
mutate(pc = paste0(round(n/sum(n)*100, 2),"%")) %>%
ggplot(aes(x = "", y = n, fill = Hospitalized)) +
geom_col(width = 1) +
coord_polar(theta = "y") +
geom_text(aes(label = pc), position = position_stack(vjust = 0.5)) +
labs(title = "Biểu đồ tròn thể hiện tần suất khả năng nhập viện") +
theme_void()
Nhận xét:
Bảng tần số thể hiện, trong 3000 bệnh nhân có 2124 bệnh nhân không có khả năng nhập viện và 876 bệnh nhân nhập viện.
Biểu đồ tròn thể hiện tần suất khả năng nhập viện của bệnh nhân. Biểu đồ hình tròn với màu cam thể hiện tỷ lệ không nhập viện và màu xanh thể hiện tỷ lệ nhập viện. Có thể thấy trong bộ dữ liệu này có 70,8% không nhập viện và 29,2% nhập viện.
Ước lượng khoảng tin cậy
Với độ tin cậy 95%, tỷ lệ của khả năng có nhập viện trong tổng thể được thể hiện như sau:
# Số lượng mức độ nguy hiểm
hp <- sum(a$Hospitalized == "Yes")
# Ước lượng khoảng tin cậy 95%
prop.test(hp, total, conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: hp out of total, null probability 0.5
## X-squared = 518.34, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.2758402 0.3086972
## sample estimates:
## p
## 0.292
Kiểm định giả thuyết:
Đặt giả thuyết:
H0: p = 0.5
H1: p ≠ 0.5
Diễn giải: Kết quả kiểm định cho thấy giá trị p_value = 2.2e - 16 < 0.05. Vậy giả thuyết H0 bị bác bỏ, khẳng định tỷ lệ Severe không phải là 50% mà là nằm trong khoảng tin cậy [27,58%;30,87%].
Bảng tần số tình trạng phục hồi sức khỏe:
# Bảng tần số phục hồi sức khỏe
table(a$Recovered)
##
## No Yes
## 1492 1508
# Trực quan hóa dữ liệu
a %>% group_by(Recovered) %>% summarise(n = n()) %>%
mutate(pc = paste0(round(n/sum(n)*100, 2),"%")) %>%
ggplot(aes(x = "", y = n, fill = Recovered)) +
geom_col(width = 1) +
coord_polar(theta = "y") +
geom_text(aes(label = pc), position = position_stack(vjust = 0.5)) +
labs(title = "Biểu đồ tròn thể hiện tần suất phục hồi sức khỏe") +
theme_void()
Nhận xét:
Bảng tần suất thể hiện, trong 3000 bệnh nhân, có 1508 bệnh nhân đã phục hồi sức khỏe và 1492 bệnh nhân chưa phục hồi.
Biểu đồ tròn thể hiện tần suất thể hiện tình trạng phục hồi sức khỏe. Biểu đồ hình tròn với màu cam thể hiện tỷ lệ chưa phục hồi và màu xanh thể hiện tỷ lệ đã phục hồi sức khỏe của bệnh nhân. Có thể thấy, số lượng phân bổ khá đồng đều. Vậy trong bộ dữ liệu này có 49,73% bệnh nhân chưa phục hồi và 50,27% bệnh nhân đã khỏe mạnh.
Bảng tần số triệu chứng hậu Covid:
# Số lượng triệu chứng hậu Covid
table(a$Long_COVID_Symptoms)
##
## Brain Fog Chest Pain Fatigue None
## 99 65 79 2682
## Shortness of Breath
## 75
Nhận xét: Trong 3000 bệnh nhân đã từng bị Covid-19, có 2682 bệnh nhân không có triệu chứng hậu Covid (None) và các bệnh nhân còn lại đều bị hậu Covid lần lượt là: 99 người có triệu chứng Brain Fog (suy giảm trí nhớ), 65 người bị Chest Pain (đau ngực), 79 người bị Fatigue (mệt mỏi kéo dài) và 74 người bị Shortness of Breath (khó thở).
Ước lượng khoảng tin cậy
Với độ tin cậy 95%, tỷ lệ của triệu chứng “Brain Fog” trong tổng thể được thể hiện như sau:
# Số lượng bệnh nền hen suyễn
al <- sum(a$Long_COVID_Symptoms == "Brain Fog")
# Ước lượng khoảng tin cậy 95%
prop.test(al, total, conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: al out of total, null probability 0.5
## X-squared = 2615.2, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.02703021 0.04019522
## sample estimates:
## p
## 0.033
Ý nghĩa: Tỷ lệ triệu chứng hậu Covid là Brain Fog trong tập bệnh nhân là 3,3%%. Với độ tin cậy 95%, tỷ lệ Brian Fog trong toàn bộ triệu chứng hậu Covid nằm trong khoảng 2,7% đến 4,02%.
Kiểm định giả thuyết:
Đặt giả thuyết:
H0: p = 0.5
H1: p ≠ 0.5
Diễn giải: Kết quả kiểm định cho thấy giá trị p_value = 2.2e - 16 < 0.05 . Vậy giả thuyết H0 bị bác bỏ, khẳng định tỷ lệ Asthma không phải là 50% mà là nằm trong khoảng tin cậy [2,7%;4,02%].
Hai biến Recovered và Long_COVID_Symstoms được lựa chọn để trả lời câu hỏi những bệnh nhân chưa phục hồi sức khỏe có nguy cơ mắc những triệu chứng hậu Covid cao hơn so với những người đã khỏe mạnh hay không?
Bảng tần suất thể hiện tỷ lệ phần trăm triệu chứng hậu COVID theo từng nhóm hồi phục sức khỏe
# Bảng tần số tái nhiễm và bệnh nền
table_rec_long <- table(a$Recovered, a$Long_COVID_Symptoms)
# Tính tỷ lệ % theo từng bệnh nền
tyle <- round(prop.table(table_rec_long, margin = 1)*100,2)
tyle
##
## Brain Fog Chest Pain Fatigue None Shortness of Breath
## No 1.07 0.34 0.87 96.38 1.34
## Yes 5.50 3.98 4.38 82.49 3.65
Biểu đồ thể hiện tỷ lệ Recovered với Long_COVID_Symptoms
ggplot(a, aes(x = Recovered, fill = Long_COVID_Symptoms)) +
geom_bar(position = "fill") +
scale_y_continuous(labels = scales::percent_format()) +
labs(title = "Tỷ lệ hậu Covid theo tình trạng hồi phục sức khỏe", x = "Tình trạng hồi phục", y = "Tỷ lệ phần trăm")
Diễn giải kết quả: Bảng tần suất cho biết, tại mỗi nhóm tình trạng hồi phục sức khỏe (Yes/No) có bao nhiêu % người gặp các triệu chứng hậu Covid. Cụ thể, đối với nhóm đã hồi phục, khoảng 82,49% bệnh nhân hoàn toàn hồi phục không gặp các triệu chứng, còn lại là những người vẫn gặp các triệu chứng kéo dài như mệt mỏi (4,38%), suy giảm trí nhớ (5,5%), đau ngực (3,98%) và khó thở (3,65%). Ngược lại, trong nhóm chưa hồi phục, toàn bộ bệnh nhân (100%) chưa ghi nhận triệu chứng hậu Covid-19.
Để kiểm tra mối quan hệ giữa Recovered và Long_COVID_Symptoms, ta sử dụng kiểm định Chi-square test để khẳng định mối quan hệ này.
Đặt giả thuyết:
H0: Recovered và Long_COVID_Symptoms độc lập,
H1: Recovered và Long_COVID_Symptoms có liên quan
chisq.test(table_rec_long)
##
## Pearson's Chi-squared test
##
## data: table_rec_long
## X-squared = 157.72, df = 4, p-value < 2.2e-16
Kết luận thống kê: Giá trị p_value < 2.2e - 16 < 0.05 nên ta bác bỏ giả thuyết H0. Vậy tình trạng phục hồi sức khỏe Recovered và triệu chứng hậu Covid Long_COVID_Symptoms có mối liên hệ với nhau.
Vì Relative Risk chỉ thực hiện được cho 2 biến định tính nhị phân, hay dữ liệu bảng 2x2. Do đó, ta tiến hành mã hóa các triệu chứng sau Covid thành 2 nhóm: Nhóm không gặp triệu chứng (False) và nhóm gặp triệu chứng (True)
# Mã hóa dữ liệu Long_COVID_Symptoms thành biến Long_COVID_Symptoms1
a$Long_COVID_Symptoms1 <- recode(a$Long_COVID_Symptoms, None = 'False', .default = 'True')
# Bảng tần số chéo
table_rec_long1 <- table(a$Recovered, a$Long_COVID_Symptoms1)
table_rec_long1
##
## False True
## No 1438 54
## Yes 1244 264
# Tính rủi ro tương đối
RelRisk(table_rec_long1)
## [1] 1.168345
Diễn giải: Kết quả tính toán Relative Risk (RR) giữa 2 tình trạng hồi phục Yes/No và 2 triệu chứng hậu Covid True/False cho thấy RR = 1,1683. Kết quả tính toán cho thấy những người chưa hồi phục sức khỏe không có nguy cơ gặp triệu chứng hậu Covid cao hơn khoảng 1,1683 lần so với nhóm bệnh nhân đã phục hồi sức khỏe.
# Tính Relative Risk
riskratio(table_rec_long1, rev = 'c')
## $data
##
## True False Total
## No 54 1438 1492
## Yes 264 1244 1508
## Total 318 2682 3000
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## No 1.0000000 NA NA
## Yes 0.8559117 0.834575 0.8777939
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## No NA NA NA
## Yes 0 1.616839e-37 4.612154e-35
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Nhận xét:
Kết quả RR = 0,8559 cho thấy rằng những bệnh nhân đã phục hồi sức khỏe không mắc cái triệu chứng hậu Covid khoảng 0,856 lần so với những bệnh nhân chưa phục hồi sức khỏe.
oddsratio(table_rec_long1, rev = 'c')
## $data
##
## True False Total
## No 54 1438 1492
## Yes 264 1244 1508
## Total 318 2682 3000
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## No 1.0000000 NA NA
## Yes 0.1774478 0.1298802 0.2381877
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## No NA NA NA
## Yes 0 1.616839e-37 4.612154e-35
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Kết quả:
Hai biến SymptomS và Hospitalized được lựa chọn để trả lời câu hỏi mức độ nghiêm trọng của triệu chứng Covid-19 có liên quan đến khả năng nhập viện của bệnh nhân hay không?
Bảng tần suất thể hiện tỷ lệ mức độ triệu chứng với khả năng nhập viện
Ta tiến hành quy ước khả năng nhập viện thành 2 biểu hiện là “Nhập viện” và “Không nhập viện”
a$Hospi1 <- recode(a$Hospitalized,Yes = 'Nhập viện', No = 'Không nhập viện')
# Bảng tần số mức độ và khả năng nhập viện
table_sym_hos <- table(a$Symptoms, a$Hospi1)
# Tính tỷ lệ % theo từng bệnh nền
tyle1 <- round(prop.table(table_sym_hos, margin = 1)*100,2)
tyle1
##
## Không nhập viện Nhập viện
## Mild 67.62 32.38
## Moderate 73.11 26.89
## Severe 71.74 28.26
Biểu đồ tình trạng nhập viện theo mức độ triệu chứng:
ggplot(a, aes(x = Symptoms, fill = Hospitalized)) +
geom_bar(position = "fill") +
scale_y_continuous(labels = scales::percent_format()) +
labs(title = "Tình trạng nhập viện theo mức độ triệu chứng ", x = "Mức độ nghiêm trọng", y = "Tỷ lệ phần trăm")
Diễn giải kết quả: Bảng tần suất cho biết, tại mỗi mức độ cụ thể có bao nhiêu % bệnh nhân nhập viện (hoặc không). Dựa vào bảng tần suất có sự khác biệt giữa các mức độ. Tại mức độ Moderate (Trung bình) có 73,11% bệnh nhân không nhập viện , trong khi đó bệnh nhân với mức độ Mild có tỷ lệ nhập viện là 32,38%.
chisq.test(table_sym_hos)
##
## Pearson's Chi-squared test
##
## data: table_sym_hos
## X-squared = 7.8812, df = 2, p-value = 0.01944
Kết luận thống kê: Giá trị p_value = 0.01944 < 0.05 nên ta bác bỏ giả thuyết H0. Vậy SymptomS và Hospitalized có mối liên hệ với nhau.
Vì Relative Risk chỉ thực hiện được cho 2 biến định tính nhị phân, hay dữ liệu bảng 2x2. Do đó, ta tiến hành xét 2 biểu hiện của mức độ là Mild đại diện cho triệu chứng nhẹ và Severe đại diện cho các triệu chứng nguy hiểm
# Lọc dữ liệu
Mucdo <- a %>% filter(Symptoms == "Mild"| Symptoms == "Severe")
Tính Relative Risk:
# Tạo bảng tần số chéo
table_md <- table(Mucdo$Symptoms, Mucdo$Hospi1)
table_md
##
## Không nhập viện Nhập viện
## Mild 683 327
## Severe 726 286
# Tính Relative Risk
RelRisk(table_md)
## [1] 0.9426343
Diễn giải: Kết quả tính toán Relative Risk (RR) giữa 2 mức độ Mild/Severe và 2 khả năng nhập viện Yes/No cho thấy RR = 0,9426. Kết quả tính toán khả năng không nhập viện của bệnh nhân mắc triệu chứng nhẹ thấp hơn khoảng 0,943 lần so với bệnh nhân mắc triệu chứng nguy hiểm.
riskratio(table_md)
## $data
##
## Không nhập viện Nhập viện Total
## Mild 683 327 1010
## Severe 726 286 1012
## Total 1409 613 2022
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Mild 1.0000000 NA NA
## Severe 0.8728892 0.764498 0.9966483
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Mild NA NA NA
## Severe 0.0443084 0.0472765 0.04410454
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Nhận xét:
Kết quả RR = 0.8729 cho thấy rằng rủi ro nhập viện đối với bệnh nhân Covid nguy hiểm thấp hơn nhóm bệnh nhân có triệu chứng nhẹ khoảng 0,8729 lần.
oddsratio(table_md, rev = 'c')
## $data
##
## Nhập viện Không nhập viện Total
## Mild 327 683 1010
## Severe 286 726 1012
## Total 613 1409 2022
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Mild 1.000000 NA NA
## Severe 1.215171 1.004972 1.469925
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Mild NA NA NA
## Severe 0.0443084 0.0472765 0.04410454
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Diễn giải
Tỷ lệ chênh Odds Ratio = 1,215, tức là tỷ lệ khả năng nhập viện (so với không nhập viện) ở triệu chứng nhẹ (Mild) cao hơn khả năng nhập viện (so với không nhập viện) ở triệu chứng nguy hiểm (Severe) 1,215 lần.
Thực hiện hồi quy logit giữa biến phụ thuộc “Tình trạng phục hồi sức khỏe” và biến độc lập là “Các triệu chứng hậu Covid”. Để thực hiện hồi quy logit, biến phụ thuộc và độc lập phải là biến nhị phân. Vì vậy, ta tiến hành chuyển đổi các biến thành factor
# Chuyển đổi các biến thành factor
a$Recovered <- factor(a$Recovered, levels = c('Yes','No'))
a$Long_COVID_Symptoms1 <- factor(a$Long_COVID_Symptoms1, levels = c('False','True'))
# Hồi quy logit
logit_model <- glm(Recovered ~ Long_COVID_Symptoms1, data = a, family = binomial(link = 'logit'))
summary(logit_model)
##
## Call:
## glm(formula = Recovered ~ Long_COVID_Symptoms1, family = binomial(link = "logit"),
## data = a)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.14492 0.03872 3.743 0.000182 ***
## Long_COVID_Symptoms1True -1.73189 0.15429 -11.225 < 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: 4158.8 on 2999 degrees of freedom
## Residual deviance: 3993.7 on 2998 degrees of freedom
## AIC: 3997.7
##
## Number of Fisher Scoring iterations: 3
Kết quả hồi quy như sau:
\[ \ln\left(\frac{p}{1 - p}\right) = 0.14492 - 1.73189 \times \mathit{LongCovidSymstom_{True}} \]
Hệ số chặn là 0.14492, có giá trị p_value < mức ý nghĩa 0.05. Hệ số này có ý nghĩa là đối với bệnh nhân đã phục hồi sức khỏe thì log(odd) không mắc các triệu chứng hậu Covid là 0.144492.
Hệ số \(\hat{\beta}_1 = -1.73189\) cho thấy log(odd) mắc các triệu chứng hậu Covid của bệnh nhân đã phục hồi sức khỏe thấp hơn khoảng 1.73189 so với không mắc hậu Covid
probit_model <- glm(Recovered ~ Long_COVID_Symptoms1, data = a, family = binomial(link = 'probit'))
summary(probit_model)
##
## Call:
## glm(formula = Recovered ~ Long_COVID_Symptoms1, family = binomial(link = "probit"),
## data = a)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.09078 0.02424 3.746 0.00018 ***
## Long_COVID_Symptoms1True -1.04569 0.08672 -12.059 < 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: 4158.8 on 2999 degrees of freedom
## Residual deviance: 3993.7 on 2998 degrees of freedom
## AIC: 3997.7
##
## Number of Fisher Scoring iterations: 3
Kết quả hồi quy như sau:
\[ \pi = \Phi(0.09078 - 1.04569 \times \mathit{LongCovidSymstom_{True}}) \]
Hệ số chặn là 0.09078, nghĩa là xác suất là bệnh nhân đã phục hồi sức khỏe không mắc các triệu chứng hậu Covid là 0.09078.
Hệ số \(\hat{\beta}_1 = -1.04569\) cho thấy xác suất mắc các triệu chứng hậu Covid của bệnh nhân đã phục hồi sức khỏe thấp hơn khoảng 1.04569 so với không mắc hậu Covid
Từ kết quả hồi quy, ta dự báo xác suất cho khách hàng đã hồi phục sức khỏe theo khả năng mắc hậu Covid hay không. Kết quả dự báo như sau:
# Tạo dữ liệu mới với từng khả năng mắc hậu Covid
dubao <- data.frame(Long_COVID_Symptoms1 = c("False", "True"))
# Ước lượng xác suất hồi phục sức khỏe cho khả năng
predict(logit_model, newdata = dubao, type = "response")
## 1 2
## 0.5361670 0.1698113
Kết quả dự báo như sau:
Xác suất những bệnh nhân đã hồi phục không mắc các triệu chứng hậu Covid là 53,62%.
Xác suất những bệnh nhân đã hồi phục mắc các triệu chứng hậu Covid là 16,98%.