You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言多项逻辑回归出现‘groups are empty’警告求助

解决R语言多项逻辑回归的空分组警告问题

问题根源

你遇到的警告是因为原始数据中的id是因子类型——虽然你通过子集化删除了a/b/c/d对应的观测,但因子变量的「水平(levels)」并没有自动删除。这些空水平依然存在于数据的因子属性中,当multinom建模时检测到训练集里这些水平没有对应数据,就会抛出警告。

你可以先运行以下代码验证这一点:

levels(train$id)

输出里肯定还能看到a/b/c/d这几个水平。

解决方法

方法1:子集化后清理因子水平

在子集化数据后,用droplevels()函数移除没有观测的空因子水平,再进行抽样和建模:

# 子集化数据
data <- subset(data, !(id %in% c('a','b', 'c', 'd')))
# 清理空因子水平
data$id <- droplevels(data$id)

# 后续抽样与建模步骤
set.seed(1)
sample <- sample(c(TRUE, FALSE), nrow(data), replace=TRUE, prob=c(0.7,0.3))
train  <- data[sample, ]
test <- data[!sample, ]
model <- multinom(id ~ x + y + z, data=train, maxit = 1000)

方法2:直接转换为字符再转回因子

如果确认不再需要旧的因子水平,可以将id先转成字符型,再重新转为因子,自动过滤空水平:

data$id <- as.factor(as.character(data$id))

方法3:建模前单独处理训练集

如果不想修改原始子集化后的data,也可以在建模前单独清理训练集的id因子水平:

train$id <- droplevels(train$id)
model <- multinom(id ~ x + y + z, data=train, maxit = 1000)

预防措施

后续处理因子型变量时,只要做了子集化、筛选等删除部分观测的操作,都建议用droplevels()清理无效水平,避免类似的警告或分析误差。

内容的提问来源于stack exchange,提问作者BeginnersMindTruly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 17:15:03