Предсказать вероятности из моделей glm после purrr :: map с новым набором данных - PullRequest
1 голос
/ 05 июля 2019

Я заменяю r для цикла на purrr::map, и предсказываю вероятности новым набором данных.

Используя цикл for, я смог получить предсказанные вероятности для разных подгрупп с новым набором данных.Я пытаюсь воспроизвести тот же анализ с purrr::map, что и новый пользователь R, но просто не уверен, где найти соответствующие инструкции.

library(tidyverse)
data("mtcars")
newdata <- expand.grid(mpg = 10:34)
output <- setNames(data.frame(matrix(ncol = 3, nrow = 0)), 
              c("mpg", "am", "pr_1"))
for (i in c(0, 1)) { 
md_1 <- glm(vs ~ mpg, data = filter(mtcars, am == i), family ="binomial")
  pr_1 <- predict(md_1, newdata, type = "response")
  output_1 <- data.frame(newdata, am = i, pr_1)
  output <- bind_rows(output_1, output)
}
# Try purrr::map
my_predict<-mtcars %>% 
split(.$am) %>% 
map(~glm(vs~mpg, family = "binomial", data = .x)) 
# then? predict(my_predict, newdata, type="response") not working 

Я ожидаю новый набор данных с предсказанными вероятностями для разных подгрупп, как и в цикле for выше.

1 Ответ

2 голосов
/ 05 июля 2019

Мы могли бы использовать новый group_split, чтобы разделить фрейм данных по группам (am), а затем использовать map_df, чтобы создать новую модель для каждой группы и получить прогнозные значения, основанные на этом.

library(tidyverse)

mtcars %>% 
  group_split(am) %>%
  map_df(~{
  model <- glm(vs~mpg, family = "binomial", data = .)
  data.frame(newdata,am = .$am[1], pr_1 = predict(model,newdata, type = "response"))
}) 

#   mpg am         pr_1
#1   10  0 0.0000831661
#2   11  0 0.0002519053
#3   12  0 0.0007627457
#4   13  0 0.0023071316
#5   14  0 0.0069567757
#6   15  0 0.0207818241
#7   16  0 0.0604097519
#8   17  0 0.1630222293
#9   18  0 0.3710934960
#10  19  0 0.6412638468
#.....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...