我正在使用purrr在物种存在数据集(存在/不存在1/0)上运行超过2000个二项式模型。
出现错误时:
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级的情况下才会出现错误。