Bù dữ liệu dựa trên mô hình

Xử lý dữ liệu khuyết bằng Imputation trong R

Michal Oleszak

Machine Learning Engineer

Bù dữ liệu dựa trên mô hình

  • Bù từng biến bằng mô hình thống kê phù hợp.
  • Có thể tính đến các quan hệ đã biết trong dữ liệu.
Xử lý dữ liệu khuyết bằng Imputation trong R

Quy trình bù dựa trên mô hình

  • Lặp qua các biến.
  • Với mỗi biến, tạo mô hình giải thích biến đó.
  • Dùng mô hình dự đoán giá trị thiếu.
  • Lặp qua các biến và bù tại vị trí ban đầu bị thiếu.
Xử lý dữ liệu khuyết bằng Imputation trong R

Bù dữ liệu theo từng bước

Một data frame với bốn biến (A, B, C và D) và năm hàng, dữ liệu giả. Hai biến (A và C) có hai giá trị thiếu mỗi biến, ở các hàng khác nhau.

Xử lý dữ liệu khuyết bằng Imputation trong R

Bù dữ liệu theo từng bước

Một data frame với bốn biến (A, B, C và D) và năm hàng, dữ liệu giả. Giá trị thiếu ở A đã được bù.

  1. Dự đoán giá trị thiếu của A.
Xử lý dữ liệu khuyết bằng Imputation trong R

Bù dữ liệu theo từng bước

Một data frame với bốn biến (A, B, C và D) và năm hàng, dữ liệu giả. Giá trị thiếu ở cả A và C đã được bù.

  1. Dự đoán giá trị thiếu của A.
  2. Xem dữ liệu đã bù ở A như quan sát và dự đoán giá trị thiếu của C.
Xử lý dữ liệu khuyết bằng Imputation trong R

Bù dữ liệu theo từng bước

Một data frame với bốn biến (A, B, C và D) và năm hàng, dữ liệu giả. Giá trị thiếu ở C đã được bù.

  1. Dự đoán giá trị thiếu của A.
  2. Xem dữ liệu đã bù ở A như quan sát và dự đoán giá trị thiếu của C.
  3. Xem dữ liệu đã bù ở C như quan sát và dự đoán lại A tại các vị trí ban đầu bị thiếu.
  4. Lặp đến khi hội tụ.
Xử lý dữ liệu khuyết bằng Imputation trong R

Chọn mô hình như thế nào

Mô hình cho mỗi biến phụ thuộc vào kiểu biến:

  • Biến liên tục - hồi quy tuyến tính
  • Biến nhị phân - hồi quy logistic
  • Biến phân loại - hồi quy logistic đa thức
  • Biến đếm - hồi quy Poisson
Xử lý dữ liệu khuyết bằng Imputation trong R

Bù bằng hồi quy tuyến tính đơn

HeightWeight trong nhanes bằng mô hình tuyến tính:

library(simputation)
nhanes_imp <- impute_lm(nhanes, Height + Weight ~ .)

Kiểm tra xem chúng đã được bù chưa:

nhanes_imp %>% 
  is.na() %>% 
  colSums()
Age     Gender     Weight     Height   Diabetes    TotChol      Pulse PhysActive 
  0          0         32         30          1         85         32         26
Xử lý dữ liệu khuyết bằng Imputation trong R

Thực hành bù bằng hồi quy tuyến tính

Khởi tạo giá trị thiếu bằng hotdeck và lưu vị trí thiếu:

nhanes_imp <- hotdeck(nhanes)
missing_height <- nhanes_imp$Height_imp
missing_weight <- nhanes_imp$Weight_imp

Lặp qua HeightWeight 5 lần, bù tại các vị trí ban đầu bị thiếu:

for (i in 1:5) {
  nhanes_imp$Height[missing_height] <- NA
  nhanes_imp <- impute_lm(nhanes_imp, Height ~ Age + Gender + Weight)
  nhanes_imp$Weight[missing_weight] <- NA
  nhanes_imp <- impute_lm(nhanes_imp, Weight ~ Age + Gender + Height)
}
Xử lý dữ liệu khuyết bằng Imputation trong R

Phát hiện hội tụ



for (i in 1:5) {

  nhanes_imp$Height[missing_height] <- NA
  nhanes_imp <- impute_lm(nhanes, Height ~ Age + Gender + Weight)
  nhanes_imp$Weight[missing_weight] <- NA
  nhanes_imp <- impute_lm(nhanes, Weight ~ Age + Gender + Height)


}
Xử lý dữ liệu khuyết bằng Imputation trong R

Phát hiện hội tụ

diff_height <- c()
diff_weight <- c()
for (i in 1:5) {

  nhanes_imp$Height[missing_height] <- NA
  nhanes_imp <- impute_lm(nhanes, Height ~ Age + Gender + Weight)
  nhanes_imp$Weight[missing_weight] <- NA
  nhanes_imp <- impute_lm(nhanes, Weight ~ Age + Gender + Height)


}
Xử lý dữ liệu khuyết bằng Imputation trong R

Phát hiện hội tụ

diff_height <- c()
diff_weight <- c()
for (i in 1:5) {
  prev_iter <- nhanes_imp
  nhanes_imp$Height[missing_height] <- NA
  nhanes_imp <- impute_lm(nhanes, Height ~ Age + Gender + Weight)
  nhanes_imp$Weight[missing_weight] <- NA
  nhanes_imp <- impute_lm(nhanes, Weight ~ Age + Gender + Height)


}
Xử lý dữ liệu khuyết bằng Imputation trong R

Phát hiện hội tụ

diff_height <- c()
diff_weight <- c()
for (i in 1:5) {
  prev_iter <- nhanes_imp
  nhanes_imp$Height[missing_height] <- NA
  nhanes_imp <- impute_lm(nhanes, Height ~ Age + Gender + Weight)
  nhanes_imp$Weight[missing_weight] <- NA
  nhanes_imp <- impute_lm(nhanes, Weight ~ Age + Gender + Height)
  diff_height <- c(diff_height, mapc(prev_iter$Height, nhanes_imp$Height))
  diff_weight <- c(diff_weight, mapc(prev_iter$Weight, nhanes_imp$Weight))
}
Xử lý dữ liệu khuyết bằng Imputation trong R

Phát hiện hội tụ

Biểu đồ đường với hai đường cho các biến Pulse và TotChol. Trục x là số lần lặp; trục y là phần trăm thay đổi tuyệt đối trung bình của giá trị bù qua các lần lặp. Sau lần lặp đầu, cả hai biến đều thay đổi. Từ lần 2 trở đi, không còn thay đổi.

Xử lý dữ liệu khuyết bằng Imputation trong R

Luyện tập bù bằng hồi quy tuyến tính!

Xử lý dữ liệu khuyết bằng Imputation trong R

Preparing Video For Download...