我想用来自.fitted
的{{1}}列为不同的broom::augment()
模型增加数据帧,以便以后可以比较预测。我为每个模型的lm()
列(重命名),但是.fitted
还添加了augment()
.rownames
等列。因此,当我为第二个模型运行.se.fit
时,我会得到
错误:列
augment()
必须具有唯一的名称
对于.rownames
中我不感兴趣的每一列。
我最终从augment()
中取消了我不感兴趣的每一列。每次调用augment()
之后,都必须这样做。
augment()
我知道我可以改用{r}
require(tidyverse)
require(broom)
require(ISLR)
lm.obj <- lm(mpg ~ horsepower, data = Auto)
Auto <- Auto %>%
augment(x = lm.obj) %>%
rename(mpg_pred_linear = .fitted)
qd.obj <- lm(mpg ~ horsepower + I(horsepower^2), Auto)
Auto <- Auto %>%
augment(x = qd.obj) %>%
rename(mpg_pred_quad = .fitted)
,但是在教学过程中,我已经使用predict.lm()
来创建预测,并且我希望学生能保持一致。
我找不到augment()
中没有允许自定义列名的选项吗?还是选择输出列?
我不确定这是否是我需要解决的问题,还是应该将其作为问题提交。请在您认为合适的时候提出建议(或责备)。
答案 0 :(得分:0)
一种选择是将rename_at()
与函数start_with()
一起使用,以标识刚刚用augment()
添加的所有列,并对所有列进行重命名:
lm.obj <- lm(Petal.Width ~ Sepal.Width, data = iris)
iris <- iris %>%
augment(x = lm.obj) %>%
rename_at(vars(starts_with('.')), funs(paste0('mod1', .)))
colnames(iris)
# [1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species" "mod1.fitted" "mod1.se.fit"
# [8] "mod1.resid" "mod1.hat" "mod1.sigma" "mod1.cooksd" "mod1.std.resid"
这样,您可以迭代几次:
qd.obj <- lm(Petal.Width ~ Species + I(Petal.Length^2), iris)
iris <- iris %>%
augment(x = qd.obj) %>%
rename_at(vars(starts_with('.')), funs(paste0('mod2', .)))