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

移除单因子变量拟合logistic模型时遇terms.formula报错求助

解决GLM拟合时的"'.' in formula and no 'data' argument"报错

报错原因

你之前的代码错误地将筛选后的数据集放在了glm函数的第二个参数位置(该位置对应weights参数),而非明确指定给data参数,导致R无法识别公式中~.对应的数据源。另外attach(dataframeX9R)属于冗余操作,反而容易引发变量名冲突。

修正方案

方案1:直接筛选变量并指定data参数

# 识别所有值数量大于1的变量
values_count <- sapply(dataframeX9R, function(x) length(unique(x)))

# 筛选需保留的变量:保留目标变量DEFBENRP + 多因子变量
keep_cols <- c("DEFBENRP", names(values_count[values_count > 1]))
keep_cols <- unique(keep_cols) # 去重避免目标变量重复

# 正确拟合逻辑回归模型
logisticmodel <- glm(DEFBENRP ~ ., data = dataframeX9R[, keep_cols], family = "binomial")

方案2:先生成筛选后的数据集再拟合

# 识别多因子变量
values_count <- sapply(dataframeX9R, function(x) length(unique(x)))

# 生成筛选后的数据集
filtered_data <- dataframeX9R[, values_count > 1]

# 确保目标变量DEFBENRP在数据集中(防止误删)
if (!"DEFBENRP" %in% colnames(filtered_data)) {
  filtered_data$DEFBENRP <- dataframeX9R$DEFBENRP
}

# 拟合模型
logisticmodel <- glm(DEFBENRP ~ ., data = filtered_data, family = "binomial")

关键注意点

  • 永远不要依赖attach()来引用数据框变量,明确通过data参数指定数据源更安全。
  • 筛选变量时务必确认目标变量DEFBENRP未被误移除(如果它本身是单因子变量,也需要保留用于建模)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 20:34:57