Я использую более тысячи биномиальных моделей, использующих мурлыканье в наборе данных о присутствии видов (присутствие / отсутствие 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 уровень.