Выбирать столбец, только если уровни факторов больше 1 по значению столбца группы - PullRequest
0 голосов
/ 20 июня 2019

Я использую более тысячи биномиальных моделей, использующих мурлыканье в наборе данных о присутствии видов (присутствие / отсутствие 1/0).

Когда я получаю сообщение об ошибке:

Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
  contrasts can be applied only to factors with 2 or more levels

Я хочу включить в модель только столбцы с уровнем фактора> 1.

Но: для этого мне нужноуровень фактора для соответствующих значений присутствия (1/0)

Это работает только для комбинированных уровней фактора присутствия.

grp  |pres | V1 | V2 |V3
grp1 |0    |10  |9   |10
grp1 |0    |9   |9   |10
grp1 |1    |8   |7   |10
grp1 |1    |5   |9   |10
...
grp2 |0    |10  |7   |8

Набор данных сгруппирован и вложен в столбец grp.

Мой код удаляет столбец V3, но не столбец V2, поскольку объединенные уровни факторов для pres = 1 и 2. равны 2. Это прерывает расчет модели.

library(tidyverse)

nested %>% 
    mutate(glm = map(.f = function(x) { 

    y <- x %>%
        mutate_all(factor) %>%
        droplevels(., except = c(1,2)) %>%
        select_if(function(col) all(col == .$pres) | nlevels(droplevels(col)) > 1) %>% 
      mutate_all(as.ordered)

      glm(pres ~ ., data = y, family = binomial(), na.action = "na.fail")

    }, .x = .$data))

Я не могу воспроизвести(сбой) рабочего набора данных, но ошибка появляется только тогда, когда один из столбцов предиктора имеет только 1 уровень.

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