BTVN 02
MỤC LỤC
I. BÀI 1: KHÁM BỆNH CHO DỮ LIỆU THÔ.
1.1. Nhiệm vụ.
pacman, rio,
tidyverse.if (!require("pacman")) install.packages("pacman")
pacman::p_load(rio, tidyverse)
rio::import() để nạp file dữ liệu vào.df_raw <- rio::import("raw_health_survey.csv")
summary () và glimpse() để kiểm
tra tổng quan.summary(df_raw)
## ID Age Gender Heart_Rate
## Min. : 1.00 Min. : 0.00 Length:250 Min. : 50.00
## 1st Qu.: 63.25 1st Qu.: 37.25 Class :character 1st Qu.: 68.50
## Median :125.50 Median : 46.00 Mode :character Median : 76.00
## Mean :125.50 Mean : 56.60 Mean : 75.86
## 3rd Qu.:187.75 3rd Qu.: 53.00 3rd Qu.: 82.50
## Max. :250.00 Max. :999.00 Max. :106.00
## NA's :15
## Weight Income
## Min. : 17.70 Length:250
## 1st Qu.: 54.70 Class :character
## Median : 65.35 Mode :character
## Mean : 66.04
## 3rd Qu.: 76.58
## Max. :103.20
## NA's :20
glimpse(df_raw)
## Rows: 250
## Columns: 6
## $ ID <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, …
## $ Age <int> 51, 32, 47, 44, 37, 15, 36, 33, 46, 39, 40, 999, 42, 42, 14…
## $ Gender <chr> "nam", "nu", "1", "0", "nam", "Female", "F", "0", "M", "nu"…
## $ Heart_Rate <int> 73, 80, 61, 71, 83, 76, 78, 62, 80, 70, 58, 81, 75, 68, 78,…
## $ Weight <dbl> 103.2, NA, 74.3, NA, 75.8, NA, NA, NA, 57.3, NA, NA, NA, NA…
## $ Income <chr> "High", "Medium", "High", NA, "High", "Medium", "Medium", "…
1.2. Cảm nghĩ và tư duy của bạn.
a. Câu hỏi: Từ kết quả
summary(), bạn phát hiện ra những điểm bất
thường (Outliers) nào vô lí về mặt sinh học? Ở biến Gender, bạn thấy
người nhập liệu đã gây ra thảm họa gì?
b. Trả lời:
Khi thực hiện hàm summary():
Biến Age có giá trị Min = 0 và Max = 999.
Biến Weight có giá trị Min = 17.7.
Khi thực hiện hàm glimpse():
Biến Gender được nhập liệu bằng nhiều kiểu mã hóa
khác nhau.
Lúc này, chúng ta cần tiến hành làm sạch dữ liệu bằng cách chuẩn
hóa rồi mới thực hiện phân tích thông kê bằng hàm
unique().
unique(df_raw$Gender)2.1. Nhiệm vụ.
dplyr
(mutate, filter, ifelse,
case_when) để dọn dẹp.NA.Gender về một chuẩn duy nhất
là "Male" và "Female".df_clean.# Gọi 'dplyr' để làm sạch dữ liệu
df_clean <- df_raw %>%
mutate(
# Sửa Age:
Age = ifelse(Age <= 0 | Age >= 100, NA, Age),
# Sửa Weight
Weight = ifelse(Weight < 30, NA, Weight),
# Chuẩn hóa Gender
Gender = case_when(
Gender %in% c("nam", "Nam", "M", "Male", "1") ~ "Male",
Gender %in% c("nu", "Nu", "F", "Female", "0") ~ "Female",
# Thống nhất giới tính lại chỉ có 2 giá trị là Male và Female
)
)
2.2. Cảm nghĩ và tư duy của bạn.
a. Câu hỏi: So sánh bảng dữ liệu trước và sau khi làm sạch, bạn cảm thấy thế nào về vai trò của việc mã hóa dữ liệu?
b. Trả lời:
summary(df_clean)
## ID Age Gender Heart_Rate
## Min. : 1.00 Min. :14.00 Length:250 Min. : 50.00
## 1st Qu.: 63.25 1st Qu.:38.00 Class :character 1st Qu.: 68.50
## Median :125.50 Median :46.00 Mode :character Median : 76.00
## Mean :125.50 Mean :45.53 Mean : 75.86
## 3rd Qu.:187.75 3rd Qu.:53.00 3rd Qu.: 82.50
## Max. :250.00 Max. :77.00 Max. :106.00
## NA's :5 NA's :15
## Weight Income
## Min. : 34.80 Length:250
## 1st Qu.: 54.85 Class :character
## Median : 65.60 Mode :character
## Mean : 66.59
## 3rd Qu.: 76.60
## Max. :103.20
## NA's :23
glimpse(df_clean)
## Rows: 250
## Columns: 6
## $ ID <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, …
## $ Age <int> 51, 32, 47, 44, 37, 15, 36, 33, 46, 39, 40, NA, 42, 42, 14,…
## $ Gender <chr> "Male", "Female", "Male", "Female", "Male", "Female", "Fema…
## $ Heart_Rate <int> 73, 80, 61, 71, 83, 76, 78, 62, 80, 70, 58, 81, 75, 68, 78,…
## $ Weight <dbl> 103.2, NA, 74.3, NA, 75.8, NA, NA, NA, 57.3, NA, NA, NA, NA…
## $ Income <chr> "High", "Medium", "High", NA, "High", "Medium", "Medium", "…
Age và
Weight được chuyển thành “NA”.Gender được chuẩn
hóa thành hai nhóm thống nhất là Male và
Female.3.1. Missing Data là gì?
Trong bộ dữ liệu của bạn, có rất nhiều ô trống (NA). Trong dịch tễ học, chúng được chia làm 3 cơ chế:
MCAR – Missing Completely At Random: Một số giá trị bị thiếu có thể xảy ra hoàn toàn ngẫu nhiên.
MAR – Missing At Random: Dữ liệu bị thiếu phụ thuộc vào các biến quan sát được khác.
MNAR – Missing Not At Random: Dữ liệu bị thiếu phụ thuộc vào chính giá trị bị thiếu.
3.2. Cảm nghĩ và tư duy của bạn.
a. Câu hỏi: Dựa vào lý thuyết Buổi 2, hãy áp định nghĩa và phân loại chính xác 3 cơ chế cho 3 cột biến số trên. Giải thích lí do.?
b. Trả lời:
Age và biến Gender thuộc nhóm
MCAR vì các giá trị bất thường như 0, 999 của
Age hay sự thiếu thống nhất của biến Gender
đến chủ yếu từ người nhập liệu hay nói cách khác là do lỗi nhập liệu,
hơn làviệc thiếu dữ liệu thật sự như MAR và MNAR.Weight thuộc nhóm MAR vì cân nặng
bị thiếu thường không ngẫu nhiên hoàn toàn mà đến từ các biến có thể
quan sát được khác(Age, Gender…).::::::::::::