broom :: матрица возврата augment не может раскрываться

Я пытаюсь запустить метлу для увеличения на lm (y ~ poly (x, 3), data = dat).

С этой формулой broom :: augment возвращает матрицу во вложенном столбце. Когда я пытаюсь отменить вложение, это не удается из-за сообщения об ошибке, похожего на «не могу преобразовать поли ...

Я нашел аналогичный вопрос, но без ответа Попытка разложить broom :: augment data, но R не может использовать

library(rmarkdown)
library(tidyverse)
library(fs)

structure(list(a = c("2019-11-25", "2019-11-25", 
"2019-11-25", "2019-11-25", "2019-11-25"), 
b = c("laktat-felttest", "laktat-felttest", 
"laktat-felttest", "laktat-felttest", 
"laktat-felttest"), 
c = c("kai", "kai", "kai", "kai", "kai"), 
maaling = c(1, 2, 3, 4, 5), 
load = c(800, 850, 900, 1000, 1100), 
time_mm = c(5, 5, 4, 4, 4), 
time_ss = c(9, 0, 55, 35, 45), 
hr = c(125, 140, 140, 160, 172), 
rpe = c(2, 4, 4, 8, 9), 
laktat = c(2.7, 2.1, 2, 4.8, 10.2), 
time = c(309, 300, 295, 275, 285), 
x = c(2.58899676375405, 2.83333333333333, 
3.05084745762712, 3.63636363636364, 3.85964912280702), 
la_x = c(1.042875, 0.741176470588235, 
0.655555555555556, 1.32, 2.64272727272727)), 
class = c("tbl_df", "tbl", "data.frame"), 
row.names = c(NA, -5L)) ->
dat

dat %>% 
    group_by(a,b,c) %>% 
    nest() %>% 
    mutate(model = data %>% map( ., ~lm( data = ., laktat ~ poly(x, 3), na.action = "na.exclude")),
           tidied = model %>% map( ., broom::tidy ),
           glance = model %>% map(., broom::glance), 
           augment = map( model, broom::augment), 
           augment = map( augment, janitor::clean_names, "snake" )) ->
    model_tbl

##model_tbl %>% 
##    unnest(augment) 

Мне кажется, что во вложенном столбце, где есть дополнение, есть матрица. Я не знаю, как изменить это на столбцы списка.

Привет из Дании Дан Олесен


person olesendan    schedule 04.12.2019    source источник
comment
Каков именно ваш желаемый результат?   -  person ulfelder    schedule 04.12.2019
comment
Может быть model_tbl$augment[[1]]   -  person A. Suliman    schedule 04.12.2019
comment
Похоже, вы решили свою проблему @olesendan - можете ли вы добавить код, который вы использовали в качестве ответа, или добавить к своему вопросу? У меня была аналогичная проблема с поли, и я не уверен, что ваш комментарий ниже означает, что вы это сделали.   -  person jessi    schedule 24.09.2020
comment
@jessi, в чем твоя проблема? Прошло какое-то время с тех пор, как я работал над этой проблемой. Но, может быть, я смогу вам помочь, если увижу ваш код?   -  person olesendan    schedule 27.09.2020
comment
`` test ‹- mtcars%›% nest (data = -cyl)% ›% mutate (fit = map (data, ~ lm (mpg ~ disp + poly (wt, 2), data = .x)), убран = map (fit, tidy), glanced = map (fit, glance), augmented = map (fit, augment) # augmented = map (augment (fit, data =.)) # не работает w индекс вне границ) test% › % unnest (augmented) # это не работает тест $ augmented [[1]] # это работает``   -  person jessi    schedule 28.09.2020
comment
@jessi Я бы использовал следующее решение: `` mtcars% ›% nest (data = -cyl)%›% mutate (fit = map (data, ~ lm (mpg ~ disp + poly (wt, 2), data = .x)), tidied = map (fit, tidy), glanced = map (fit, glance), augmented = map (fit, augment) - ›test_fit test_fit%›% pivot_wider (augmented) - ›test_fit_wider '' после этого вы можете развернуть нужный столбец.   -  person olesendan    schedule 01.10.2020
comment
@jessi ex. `` test_fit_wider% ›% unnest_longer (col = disp)%›% unnest (cols = c (-data, -fit, -tidied, -glanced, -'poly (wt, 2) ')) `` `   -  person olesendan    schedule 01.10.2020
comment
Спасибо @olesendan - однако test_fit %>% pivot_wider(augmented) не работает Error in `$<-.data.frame`(`*tmp*`, ".name", value = "_") : replacement has 1 row, data has 0   -  person jessi    schedule 01.10.2020
comment
@jessi. виноват. вместо поворота, это должно быть так. test_fit% ›% unnest_wider (расширенный) -› test_fit_wider test_fit_wider% ›% unnest (cols = c (-data, -fit, -tidied, -glanced, -poly(wt, 2)))` `   -  person olesendan    schedule 01.10.2020
comment
О, да! это работает. unnest_wider() - это ключ   -  person jessi    schedule 01.10.2020


Ответы (1)


Проблема в функции poly(). Это вызывает странные имена столбцов. Вы можете заменить его на x + I(x^2) + I(x^3), и названия столбцов будут лучше.

dat %>% 
  group_by(a,b,c) %>% 
  nest() %>% 
  mutate(model = data %>% map( ., ~lm( data = ., laktat ~ x + I(x^2) + I(x^3), na.action = "na.exclude")),
         tidied = model %>% map( ., broom::tidy ),
         glance = model %>% map(., broom::glance), 
         augment = map( model, broom::augment),
         augment = map( augment, janitor::clean_names, "snake" )) ->
  model_tbl

Обновление:
Я только что понял проблему. Использование x + I(x^2) + I(x^3) не совсем то же самое, что poly(x, 3). Если вы используете последнее, коэффициенты не коррелируют, но если вы используете первый, они коррелируют. Не знаю, как это решить на данный момент.

person ricoderks    schedule 04.12.2019
comment
Привет, рикодерки. Спасибо за ваш ответ. На данный момент я решил свою проблему, сняв выделение с матрицы, прежде чем я открою аугменты. Что касается поли, я прочитал ответ, в котором советуют просто raw = TRUE в поли. - person olesendan; 06.12.2019