Запуск нескольких моделей glm на смешанных данных с purrr - PullRequest
0 голосов
/ 09 марта 2020

Предположим, у нас есть набор игрушечных данных:

library(tidyverse)
library(purrr)

tbl <- tibble(a = rep(c(0, 1), each = 5),
              b = rep(c(0, 1), times = 5),
              c = runif(10),
              d = rexp(10)) %>%
    mutate_at(vars(1,2), as.factor)

, где a - зависимая переменная, а b:d - независимые переменные. Идея состоит в том, чтобы запустить glm модель для каждой независимой переменной:

  • glm(a ~ b, data = tbl, family = "binomial")
  • glm(a ~ c, data = tbl, family = "binomial")
  • glm(a ~ d, data = tbl, family = "binomial")

Моя первоначальная попытка выглядит следующим образом:

tbl %>%
    pivot_longer(2:4, names_to = "key", values_to = "val") %>%
    group_split(key) %>%
    map(~ glm(a ~ val, data = .x, family = "binomial"))

Это привело к ошибке, поскольку типы данных b и c (или d) не совпадают.

Error: No common type for `b` <factor<dec08>> and `c` <double>.

Интересно, как решить эту проблему.

1 Ответ

3 голосов
/ 09 марта 2020

Без изменения формы мы можем использовать map, чтобы применить glm к различным независимым переменным, и использовать reformulate, чтобы создать формулу, такую ​​как:

purrr::map(names(tbl)[-1],~glm(reformulate(.x, 'a'),data = tbl,family = 'binomial'))

#[[1]]

#Call:  glm(formula = reformulate(.x, "a"), family = "binomial", data = tbl)

#Coefficients:
#(Intercept)           b1  
#    -0.4055       0.8109  

#Degrees of Freedom: 9 Total (i.e. Null);  8 Residual
#Null Deviance:     13.86 
#Residual Deviance: 13.46   AIC: 17.46

#...
#...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...