繁体   English   中英

从适合 purrr 的模型中提取残差

[英]Extract residuals from models fit in purrr

我将我的数据分组并为每组拟合了一个模型,我希望得到每组的残差。 我可以使用 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) 

你很接近 - 但你应该使用map()而不是map_dbl()因为你需要返回一个列表而不是一个向量。

diamond_mods <- diamonds %>%
  group_by(cut) %>%
  nest() %>%
  mutate(
    model = map(data, fit_mod),
    tidied = map(model, tidy),
    resid = map(model, residuals)
  ) 

使用dplyrdevel版本,我们可以在按 'cut' 分组后condense执行此操作

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]>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM