Метла :: augment (): есть ли способ настроить имена столбцов или указать выходные столбцы? - PullRequest
0 голосов
/ 26 марта 2019

Я хочу дополнить фрейм данных столбцами .fitted из 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() для создания предсказаний, и я хотел последовательности для моих учеников.

Есть ли в * 1028 варианты, которые я не нахожу, которые позволяют настраивать имена столбцов? Или выбор выходных столбцов?

Я не уверен, что это проблема, с которой мне просто нужно справиться, или я должен вместо этого представить ее как проблему. Пожалуйста, советуйте (или наказывайте), как считаете нужным.

1 Ответ

0 голосов
/ 26 марта 2019

Один из вариантов - использовать 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', .)))
...