Broom :: augment():是否可以自定义列名称或指定输出列?

时间:2019-03-26 19:49:06

标签: r broom

我想用来自.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()中没有允许自定义列名的选项吗?还是选择输出列?

我不确定这是否是我需要解决的问题,还是应该将其作为问题提交。请在您认为合适的时候提出建议(或责备)。

1 个答案:

答案 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', .)))