如何在R中获得回归输出忽略数据中的一个因子水平?

时间:2018-04-16 20:37:33

标签: r dplyr lm purrr

我正在使用因子变量对嵌套数据进行回归。如果一个分组数据具有一个因子级别,则回归失败并抛出错误"对比度仅可应用于具有2个或更多级别的因子"。例如:

data <- mtcars %>% mutate(am = if_else(carb==1, 1,am),
                          am=as.factor(am))

data_carb <- data %>%
  group_by(carb) %>% 
  nest()

X <- c("cyl", "disp", "hp" , "drat", "wt", "qsec", "vs", "am", "gear")
Y <- "mpg"

generic_model <- function(df) {
  lm(reformulate(X, Y), data = df)
}

modelondata <-  data_carb %>% 
  mutate(model = data %>% map(generic_model),
         coeff  = model %>% map(broom::tidy)) %>% 
  unnest(coeff, .drop = TRUE)

如何将变量保持为因子并获得至少那些因子水平大于1的分组数据的输出,即对于carb!= 1?

在我的实际数据中,我有许多因子变量有几十个级别,即使其中一个分组数据具有恒定的因子级别,回归也会失败。因此,我不想删除变量,因为我也会失去对其他分组数据的见解。

1 个答案:

答案 0 :(得分:2)

如果您创建了一个删除具有“固定”因子的列的函数

,该怎么办?
drop_fixed_factors <- function(x) {
  x %>% keep(~!is.factor(.x) | length(unique(.x))>2)
}

然后做了类似的事

generic_model <- function(df) {
  good_data <- df[X] %>% drop_fixed_factors()
  lm(reformulate(names(good_data), Y), data = df)
}

然后,您只能保留具有可变性的列。