Извлечение остатков из моделей, подходящих в мурлыканье - PullRequest
1 голос
/ 19 февраля 2020

Я сгруппировал свои данные и подогнал модель для каждой группы, и я хотел бы иметь остатки для каждой группы. Я вижу остатки для каждой модели с помощью средства просмотра RStudio, но не могу понять, как их извлечь. Извлечение одного набора остатков может быть сделано как diamond_mods[[3]][[1]][["residuals"]], но как я могу использовать purrr для извлечения набора из каждой группы (вместе с метлой, чтобы в конечном итоге получить хороший кусок)?

Ниже показано, как далеко я получил:

library(tidyverse)
library(purrr)
library(broom)


fit_mod <- function(df) {
  lm(price ~ poly(carat, 2, raw = TRUE), data = df)
}

diamond_mods <- diamonds %>%
  group_by(cut) %>%
  nest() %>%
  mutate(
    model = map(data, fit_mod),
    tidied = map(model, tidy)
    #resid = map_dbl(model, "residuals") #this was my best try, it doesn't work
  ) %>%
  unnest(tidied) 

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

С devel версией dplyr мы можем сделать это в condense после группировки по 'cut'

library(dplyr)
library(ggplot2)
library(broom)
diamonds %>%
   group_by(cut) %>%
   condense(model = fit_mod(cur_data()),
            tidied = tidy(model), 
            resid = model[["residuals"]])
# A tibble: 5 x 4
# Rowwise:  cut
#  cut       model  tidied           resid         
#  <ord>     <list> <list>           <list>        
#1 Fair      <lm>   <tibble [3 × 5]> <dbl [1,610]> 
#2 Good      <lm>   <tibble [3 × 5]> <dbl [4,906]> 
#3 Very Good <lm>   <tibble [3 × 5]> <dbl [12,082]>
#4 Premium   <lm>   <tibble [3 × 5]> <dbl [13,791]>
#5 Ideal     <lm>   <tibble [3 × 5]> <dbl [21,551]>
1 голос
/ 19 февраля 2020

Вы были близки - но вы должны использовать map() вместо map_dbl(), так как вам нужно вернуть список, а не вектор.

diamond_mods <- diamonds %>%
  group_by(cut) %>%
  nest() %>%
  mutate(
    model = map(data, fit_mod),
    tidied = map(model, tidy),
    resid = map(model, residuals)
  ) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...