仅当因子水平按组列值超过1时才选择列

时间:2019-06-20 19:50:12

标签: r tidyverse

我正在使用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级的情况下才会出现错误。

0 个答案:

没有答案