我想对我的数据应用3个线性模型,并提取每个模型的残差。我想知道是否有一种使用dplyr和purrr的组合来为每个模型应用相同步骤的方法:
我想保留以下内容:
这里是我想用于lm的三个不同公式。
这是我提取单个公式残差的方法:
然而,这种方法似乎并不适用于所有公式,因为我需要重写很多代码。
我想保留以下内容:
- 每个模型的
lm
对象 - 每个模型的
augment
输出 - 每个模型的残差
mpg
数据集的工作示例:library(dplyr)
library(tidyr)
library(purrr)
library(broom)
library(ggplot2)
这里是我想用于lm的三个不同公式。
f1 = hwy ~ cyl
f2 = hwy ~ displ
f3 = hwy ~ cyl + displ
lin_mod = function(formula) {
function(data) {
lm(formula, data = data)
}
}
这是我提取单个公式残差的方法:
mpg %>%
group_by(manufacturer) %>%
nest() %>%
mutate(model = map(data, lin_mod(f1)),
aug = map(model, augment),
res = map(aug, ".resid"))
然而,这种方法似乎并不适用于所有公式,因为我需要重写很多代码。
mpg %>%
group_by(manufacturer) %>%
nest() %>%
mutate(model1 = map(data, lin_mod(f1)),
aug1 = map(model1, augment),
res1 = map(aug1, ".resid"),
model2 = map(data, lin_mod(f2)),
aug2 = map(model2, augment),
res2 = map(aug2, ".resid"),
model3 = map(data, lin_mod(f3)),
aug3 = map(model3, augment),
res3 = map(aug3, ".resid"))
我该如何优雅地将此函数应用于每个公式?我想使用mutate_all或将公式放入列表中可能会有所帮助,但是我卡住了。