开始使用免费开始使用

建模交互项 (2)

在本练习中,您将把上一题中拟合的含交互项模型,与只含主效应的模型进行性能对比。由于该数据集较小,我们将使用交叉验证来模拟在样本外数据上的预测。

您将开始使用 dplyr 包进行计算。

  • mutate()文档)为 tbl(一种数据框)新增列。
  • group_by()文档)指定 tbl 中行的分组方式。
  • summarize()文档)计算列的汇总统计量。

您还将使用 tidyrpivot_longer()文档),它会将多列折叠为键值对。数据框 alcohol 以及公式 fmla_addfmla_interaction 已预加载。

本练习是课程的一部分

R 中的监督学习:回归

查看课程

练习说明

  • 使用 kWayCrossValidation()文档)创建 3 折交叉验证的划分计划。
    • 第 1 个参数是需要划分的行数。
    • 第 2 个参数是交叉验证的折数。
    • 可以将函数的第 3、4 个参数设为 NULL
  • 查看并运行示例代码,获得无交互项模型的 3 折交叉验证预测,并将其赋给列 pred_add
  • 获得含交互项模型的 3 折交叉验证预测。将预测赋给列 pred_interaction
    • 示例代码展示了具体流程。
    • 继续使用您已创建的同一个 splitPlan
  • 填空以:
    • pivot_longer 将多列预测折叠为单列 pred
    • 新增一列残差(实际结果 - 预测结果)。
    • 计算每种模型类型在交叉验证预测下的 RMSE。
  • 比较 RMSE。基于这些结果,您应该选择哪个模型?

交互式实操练习

通过完成这段示例代码来试试这个练习。

# 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 = ___(___(___)))
编辑并运行代码