Bắt đầu ngayBắt đầu miễn phí

Mô hình hóa tương tác (2)

Trong bài này, bạn sẽ so sánh hiệu năng của mô hình có tương tác mà bạn đã fit ở bài trước với mô hình chỉ gồm hiệu ứng chính (main effects). Vì bộ dữ liệu này nhỏ, chúng ta sẽ dùng cross-validation để mô phỏng việc dự đoán trên dữ liệu ngoài mẫu.

Bạn sẽ bắt đầu dùng gói dplyr để tính toán.

  • mutate() (docs) thêm cột mới vào một tbl (một loại data frame)
  • group_by() (docs) chỉ định cách nhóm các hàng trong một tbl
  • summarize() (docs) tính các thống kê tóm tắt của một cột

Bạn cũng sẽ dùng pivot_longer() của tidyr (docs) để gộp nhiều cột thành các cặp khóa-giá trị. Data frame alcohol và các công thức fmla_addfmla_interaction đã được nạp sẵn.

Bài tập này là một phần của khóa học

Học có giám sát với R: Hồi quy

Xem khóa học

Hướng dẫn bài tập

  • Dùng kWayCrossValidation() (docs) để tạo kế hoạch chia cho cross-validation 3 fold.
    • Đối số đầu tiên là số hàng cần chia.
    • Đối số thứ hai là số lượng fold cho cross-validation.
    • Bạn có thể đặt đối số thứ 3 và thứ 4 của hàm là NULL.
  • Xem và chạy mã mẫu để lấy dự đoán cross-validation 3 fold của mô hình không có tương tác và gán vào cột pred_add.
  • Lấy dự đoán cross-validation của mô hình có tương tác. Gán dự đoán vào cột pred_interaction.
    • Mã mẫu cho bạn thấy quy trình.
    • Dùng cùng splitPlan mà bạn đã tạo.
  • Điền vào chỗ trống để
    • pivot_longer các cột dự đoán thành một cột duy nhất pred.
    • thêm một cột phần dư (kết quả thực tế - giá trị dự đoán).
    • tính RMSE của các dự đoán cross-validation cho từng loại mô hình.
  • So sánh các giá trị RMSE. Dựa trên các kết quả này, bạn nên dùng mô hình nào?

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

# alcohol is available
summary(alcohol)

# Both the formulae are available
fmla_add
fmla_interaction

# Create the splitting plan for 3-fold cross validation
set.seed(34245)  # set the seed for reproducibility
splitPlan <- ___(___(___), ___, ___, ___)

# Sample code: Get cross-val predictions for main-effects only model
alcohol$pred_add <- 0  # initialize the prediction vector
for(i in 1:3) {
  split <- splitPlan[[i]]
  model_add <- lm(fmla_add, data = alcohol[split$train, ])
  alcohol$pred_add[split$app] <- predict(model_add, newdata = alcohol[split$app, ])
}

# Get the cross-val predictions for the model with interactions
alcohol$pred_interaction <- 0 # initialize the prediction vector
for(i ___ ___) {
  split <- ___
  model_interaction <- lm(___, data = alcohol[split$train, ])
  alcohol$___[split$app] <- predict(___, newdata = alcohol[split$app, ])
}

# Get RMSE
alcohol %>% 
  pivot_longer(cols=c('pred_add', 'pred_interaction'), names_to='modeltype', values_to='pred') %>%
  mutate(residuals = ____) %>%      
  group_by(modeltype) %>%
  summarize(rmse = ___(___(___)))
Chỉnh sửa và Chạy Mã