BTVN 02

MỤC LỤC

  1. Cài đặt và các gói thư viện pacman, rio, tidyverse.
if (!require("pacman")) install.packages("pacman")
pacman::p_load(rio, tidyverse)
  1. Dùng hàm rio::import() để nạp file dữ liệu vào.
df_raw <- rio::import("raw_health_survey.csv")
  1. Dùng hàm summary ()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)

  1. BÀI 2: LÀM SẠCH DỮ LIỆU.

2.1. 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""Female".
  • Lưu tất cả vào một bảng dữ liệu mới tên là 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", "…
  • Các giá trị vô lý của hai biến AgeWeight được chuyển thành “NA”.
  • Các giá trị thiếu thống nhất của biến Gender được chuẩn hóa thành hai nhóm thống nhất là MaleFemale.
  • Sau khi làm sạch, dữ liệu được mã hóa thống nhất, đồng nhất và dễ dàng tiến hành cho các bước nghiên cứu tiếp theo. Việc làm sạch số liệu không chỉ giúp đảm bảo chất lượng dữ liệu mà kết quả nghiên cứu thu được có độ tin cậy cao hơn.

  1. BÀI 3: KHOẢNG TRỐNG TỬ THẦN.

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:

  • 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.
  • Phân loại cơ chế cho 3 cột biến số:
    • Biến 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.
    • Biến 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…).

::::::::::::