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

如何生成适配glm.nb与stepaic的负二项回归变量交互分析公式?

解决负二项回归公式构建问题

我来帮你搞定这个公式构建的问题!你已经完成了交互项的生成工作,现在只需要把目标变量、主效应和交互项正确拼接成glm.nb和stepAIC能识别的公式对象就可以了。

问题分析

你当前代码里的target_formula<- target_col ~ interactions + combinations存在两个问题:

  • interactions是字符向量,直接放在公式里不会被解析成对应的变量名
  • combinations没有定义,程序不知道它指代什么

下面是具体的解决方案:

方案1:基于你已生成的交互项列构建公式

你已经通过combn生成了两两交互的乘积列,我们可以直接提取这些列的名称,和主效应变量一起拼成公式:

library(dplyr)
library(purrr)
library(stringr)
library(MASS)  # stepAIC需要这个包
library(nycflights13)

df <- nycflights13::weather
interactions <- c("hour","dewp","humid","wind_dir","wind_speed")
target_col <- "temp"

# 生成交互项列(保留你的原有代码)
out <- combn(interactions, 2, function(x) {
  df %>% 
    dplyr::select(x) %>% 
    transmute(!! str_c(x, collapse="_") := reduce(., `*`))
}, simplify = FALSE) %>% 
  bind_cols() %>% 
  bind_cols(df, .)

# 提取交互项的列名
interaction_names <- names(out)[!names(out) %in% names(df)]

# 构建公式字符串并转换为公式对象
formula_str <- paste(target_col, "~", paste(c(interactions, interaction_names), collapse = " + "))
target_formula <- as.formula(formula_str)

# 拟合负二项模型并进行逐步回归
model <- glm.nb(target_formula, data = out)
model_step <- stepAIC(model)

方案2:直接在公式中定义交互项(更简洁,无需额外生成列)

其实glm系列函数支持直接在公式中用:表示交互项,你不需要提前生成乘积列,这样代码更简洁:

library(dplyr)
library(MASS)
library(nycflights13)

df <- nycflights13::weather
interactions <- c("hour","dewp","humid","wind_dir","wind_speed")
target_col <- "temp"

# 生成所有两两交互项的公式字符串(比如hour:dewp, hour:humid...)
interaction_terms <- combn(interactions, 2, function(x) paste(x, collapse = ":"))

# 拼接主效应和交互项,构建完整公式
formula_str <- paste(target_col, "~", paste(c(interactions, interaction_terms), collapse = " + "))
target_formula <- as.formula(formula_str)

# 建模和逐步回归
model <- glm.nb(target_formula, data = df)
model_step <- stepAIC(model)

关键说明

  • 无论哪种方案,都需要用as.formula()把字符串转换成公式对象,这样glm.nb才能正确解析变量
  • stepAIC属于MASS包,记得提前加载
  • 方案2的好处是不需要修改原数据集,直接通过公式语法定义交互项,更符合R的建模习惯

内容的提问来源于stack exchange,提问作者Stat.Enthus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:37:50