Ошибка в групповой регрессии с использованием функции карты - PullRequest
1 голос
/ 02 августа 2020

Групповая регрессия работает хорошо, модель1 с «делать». Но недавно было сказано, что do заменено, и предлагается использовать "через", но в файле справки не приводится никаких примеров. Model2 приводится в справке «do», и она хорошо работает без «map» или «cross». Я не понимаю, как регрессия проходит по этим группам без карты. Когда я пытался использовать карту в model3, я получаю ошибки. Model4 приведена в книге Хэдли R для науки о данных с использованием разделения и хорошей работы. Как указать функции карты считать список "данными". Есть предложения?

library(purrr)
#> Warning: package 'purrr' was built under R version 3.6.3
library(tidyverse)
#> Warning: package 'tidyverse' was built under R version 3.6.3
#> Warning: package 'ggplot2' was built under R version 3.6.3
#> Warning: package 'tidyr' was built under R version 3.6.3
#> Warning: package 'dplyr' was built under R version 3.6.3
#> Warning: package 'stringr' was built under R version 3.6.3
#> Warning: package 'forcats' was built under R version 3.6.3
model1 = mtcars %>%
  group_by(cyl) %>%
  do(mod = lm(mpg ~ disp, data = .))
model1
#> # A tibble: 3 x 2
#> # Rowwise: 
#>     cyl mod   
#>   <dbl> <list>
#> 1     4 <lm>  
#> 2     6 <lm>  
#> 3     8 <lm>

## from "do" help file 
model2 = mtcars %>%
  nest_by(cyl) %>%
  mutate(mod = list(lm(mpg ~ disp, data = data)))
model2
#> # A tibble: 3 x 3
#> # Rowwise:  cyl
#>     cyl                data mod   
#>   <dbl> <list<tbl_df[,10]>> <list>
#> 1     4           [11 x 10] <lm>  
#> 2     6            [7 x 10] <lm>  
#> 3     8           [14 x 10] <lm>

## using map
model3 = mtcars %>% nest_by(cyl) %>% 
  mutate(fit = map(data, ~lm(mpg ~ disp, data = .)))
#> Error: Problem with `mutate()` input `fit`.
#> x numeric 'envir' arg not of length one
#> i Input `fit` is `map(data, ~lm(mpg ~ disp, data = .))`.
#> i The error occured in row 1.

##model4
model4 = mtcars %>% 
  split(.$cyl) %>% 
  map(~lm(mpg ~ disp, data = .))
model4
#> $`4`
#> 
#> Call:
#> lm(formula = mpg ~ disp, data = .)
#> 
#> Coefficients:
#> (Intercept)         disp  
#>     40.8720      -0.1351  
#> 
#> 
#> $`6`
#> 
#> Call:
#> lm(formula = mpg ~ disp, data = .)
#> 
#> Coefficients:
#> (Intercept)         disp  
#>   19.081987     0.003605  
#> 
#> 
#> $`8`
#> 
#> Call:
#> lm(formula = mpg ~ disp, data = .)
#> 
#> Coefficients:
#> (Intercept)         disp  
#>    22.03280     -0.01963

Создано 02.08.2020 с помощью пакета . (v0.3.0)

1 Ответ

0 голосов
/ 02 августа 2020

Это может быть проблема с атрибутом rowwise, мы могли бы ungroup

library(dplyr)
library(purrr)
mtcars %>% 
     nest_by(cyl) %>% # // creates the rowwise attribute
     ungroup %>% # // remove the rowwise
     mutate(fit = map(data, ~lm(mpg ~ disp, data = .)))
# A tibble: 3 x 3
#    cyl                data fit   
#  <dbl> <list<tbl_df[,10]>> <list>
#1     4           [11 × 10] <lm>  
#2     6            [7 × 10] <lm>  
#3     8           [14 × 10] <lm>  
...