Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从符合purrr的模型中提取残差_R_Dplyr_Purrr_Broom - Fatal编程技术网

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

从符合purrr的模型中提取残差,r,dplyr,purrr,broom,R,Dplyr,Purrr,Broom,我将我的数据分组,并为每组拟合一个模型,我希望得到每组的残差。我可以通过RStudio的查看器看到每个模型的残差,但我不知道如何提取它们。提取一组残差可以像diamond_mods[[3][[1][[“残差”]]]那样完成,但是如何使用purrr从每个组中提取残差集(连同扫帚一起以一个漂亮的TIBLE结束) 以下是我取得的成绩: library(tidyverse) library(purrr) library(broom) fit_mod <- function(df) { lm

我将我的数据分组,并为每组拟合一个模型,我希望得到每组的残差。我可以通过RStudio的查看器看到每个模型的残差,但我不知道如何提取它们。提取一组残差可以像
diamond_mods[[3][[1][[“残差”]]]
那样完成,但是如何使用purrr从每个组中提取残差集(连同扫帚一起以一个漂亮的TIBLE结束)

以下是我取得的成绩:

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) 
库(tidyverse)
图书馆(purrr)
图书馆(扫帚)
适合度(单位:mod%)
嵌套()%>%
变异(
模型=地图(数据、拟合和模型),
整洁=地图(模型,整洁)
#resid=map_dbl(模型,“residuals”)#这是我最好的尝试,它不起作用
) %>%
不干净(整洁)

您很接近-但是您应该使用
map()
而不是
map\u dbl()
,因为您需要返回列表而不是向量

diamond_mods <- diamonds %>%
  group_by(cut) %>%
  nest() %>%
  mutate(
    model = map(data, fit_mod),
    tidied = map(model, tidy),
    resid = map(model, residuals)
  ) 
diamond_mods%
分组依据(切割)%>%
嵌套()%>%
变异(
模型=地图(数据、拟合和模型),
整洁=地图(模型,整洁),
残差=地图(模型,残差)
) 

使用
devel
版本的
dplyr
,我们可以在按“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]>
库(dplyr)
图书馆(GG2)
图书馆(扫帚)
钻石%>%
分组依据(切割)%>%
压缩(模型=拟合模型(cur\u data()),
整洁=整洁(模型),
残差=模型[[“残差”]]
#一个tibble:5x4
#罗维:切
#切割模型整理剩余物
#                           
#1公平
#2好
#3非常好
#4溢价
#5理想

我得检查一下
压缩()。我到现在还不知道这种情况。@jazzurro现在,它比多次调用
map
要容易得多,因为它的行为类似于
tibble
,我们可以按名称调用以前创建的列是的,这非常有用。我想这会在下一次更新中出现?我明天会花点时间来学习这个功能。@jazzurro它将在下一个版本中出现。另外,
summary\u at/muttate\u at
etc正在取代
summary/mutate/filter
中的
哇,真的吗?这对我来说似乎是一个很大的变化。我需要根据此更改更改我的代码。谢谢你。