【发布时间】:2018-09-26 16:43:37
【问题描述】:
我正在使用因子变量对嵌套数据进行回归。如果一个分组数据具有一个因子水平,则回归失败并抛出错误“对比只能应用于具有 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?
在我的真实数据中,我有许多具有数十个水平的因子变量,即使其中一个分组数据具有恒定的因子水平,回归也会失败。因此,我不想删除变量,因为我也会失去对其他分组数据的洞察力。
【问题讨论】:
-
tryCatch(lm(...))? -
你能告诉我如何在代码中做到这一点吗?
-
tryCatch(lm(reformulate(X, Y), data = df), error = function(e) NULL)其他一切都一样.. 或function(e) NA如果您想保持分组级别 -
@rawr:成功了。谢谢!