BÀI 1: KHÁM BỆNH CHO DỮ LIỆU THÔ

Nhiệm vụ:

Cài đặt và tải các gói thư viện pacman, rio, tidyverse.

#install.packages("pacman")
pacman::p_load(rio,tidyverse)

Dùng hàm rio::import() để nạp file dữ liệu vào.

df <- rio::import("C:/Users/84383/Desktop/R Coursera/raw_health_survey.csv")

Dùng hàm summary() và glimpse() để kiểm tra tổng quan.

summary(df)
##        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)
## 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", "…

#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ì?

Trả lời: Trong biến Age, max là 999 vô lí. Trong biến Gender, người nhập liệu không thống nhất cách gọi nam/nữ, 1/0, M/F

BÀI 2: LÀM SẠCH DỮ LIỆU (DATA CLEANING)

Nhiệm vụ:

#Dùng ngữ pháp dplyr (mutate, filter, ifelse, case_when) để dọn dẹp. Đổi các lỗi tuổi vô lí thành NA. Đưa biến Gender về một chuẩn duy nhất là “Male” và “Female”. Lưu tất cả vào một bảng dữ liệu mới tên là df_clean.

library(dplyr)
df_clean <- df %>%
  mutate(
    Age = ifelse(Age > 100, NA, Age), #đổi lỗi tuổi

    Gender = case_when(
      Gender %in% c("1","M","nam") ~ "Male",
      Gender %in% c("0","F","nu") ~ "Female",
      TRUE ~ NA_character_ #đưa biến Gender về 1 kiểu
    )
  )

#Kiểm tra lại

summary(df_clean)
##        ID              Age           Gender            Heart_Rate    
##  Min.   :  1.00   Min.   : 0.00   Length:250         Min.   : 50.00  
##  1st Qu.: 63.25   1st Qu.:37.00   Class :character   1st Qu.: 68.50  
##  Median :125.50   Median :45.00   Mode  :character   Median : 76.00  
##  Mean   :125.50   Mean   :45.16                      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   :3                          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

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

Trả lời: Về biến Age, số liệu hợp lí và đảm bảo không gây nhiễu khi phân tích số liệu. Biến Gender đồng nhất sẽ giúp bộ số liệu rõ ràng và không gây khó khăn khi đọc kết quả sau này.

BÀI 3: KHOẢNG TRỐNG TỬ THẦN (MISSING DATA)

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

Trả lời: MCAR – Missing Completely At Random: Lỗi khách quan ngẫu nhiên khi lấy mẫu, không liên quan đến đặc điểm sinh học của bệnh nhân. MAR – Missing At Random: Mất dữ liệu liên quan đến biến khác MNAR – Missing Not At Random: Mất dữ liệu do chính giá trị đó, không phải ngẫu nhiên mất mà do nguyên nhân chủ quan.