English · PDF 420
另一种选择是直接把变换写进模型公式中:
wday2 <- function(x) wday(x, label = TRUE) mod3 <- lm(n ~ wday2(date) * term(date), data = daily)
两种方法都是合理的。如果你想检查自己的工作,或者在可视化中使用变换后的变量,那么显式地创建变换变量会很有用。但你无法方便地使用返回多列的变换(比如样条)。把变换包含在模型函数中,当你处理许多不同的数据集时会让工作更轻松一些,因为模型是自包含的。
在上一节中,我们利用领域知识(美国学校学期如何影响出行)来改进模型。另一种将我们的知识显式地融入模型的方法,是给数据更多的表达空间。我们可以使用一个更灵活的模型,让它来捕捉我们感兴趣的模式。简单的线性趋势并不足够,所以我们可以尝试使用自然样条来拟合贯穿全年的平滑曲线:
library(splines) mod <- MASS::rlm(n ~ wday * ns(date, 5), data = daily) daily %>% data_grid(wday, date = seq_range(date, n = 13)) %>% add_predictions(mod) %>% ggplot(aes(date, pred, color = wday)) + geom_line() + geom_point()
