我正在使用因子变量对嵌套数据进行回归。如果一个分组数据具有一个因子级别,则回归失败并抛出错误"对比度仅可应用于具有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?
在我的实际数据中,我有许多因子变量有几十个级别,即使其中一个分组数据具有恒定的因子级别,回归也会失败。因此,我不想删除变量,因为我也会失去对其他分组数据的见解。
答案 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)
}
然后,您只能保留具有可变性的列。