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

如何基于DAG结构字符串拟合多组logistic回归模型

R语言实现DAG依赖提取与批量模型拟合

以下是可直接运行的完整实现方案:


1. 前置准备

首先安装并加载所需依赖包:

# 安装依赖(仅需运行一次)
install.packages("nnet")
install.packages("stringr")
# 加载包
library(nnet)
library(stringr)

2. 解析DAG字符串提取依赖关系

通过正则匹配拆分DAG字符串,按因变量聚合所有对应的自变量:

# 你的DAG字符串
t <- "dag{D<-{G}; A<-{D}; A<-{G}; A<-{Q}}"
# 提取所有边的因变量和自变量
matches <- str_match_all(t, "(\\w+)<-\\{(\\w+)\\}")[[1]]
# 按因变量分组聚合自变量
dep_list <- split(matches[,3], matches[,2])
# 去重每个因变量的自变量列表
dep_list <- lapply(dep_list, unique)

运行后dep_list的结构为:

> dep_list
$A
[1] "D" "G" "Q"
$D
[1] "G"

和需求中的依赖关系完全一致。

3. 批量拟合模型并存储

遍历依赖列表,根据因变量的类别数自动选择模型:

  • 因变量唯一值为2:拟合二项logistic回归
  • 因变量唯一值≥3:拟合多分类logistic回归
# 假设你的数据集名为mydata,先确保所有分类变量为因子类型
mydata$Q <- as.factor(mydata$Q)
mydata$D <- as.factor(mydata$D)
mydata$G <- as.factor(mydata$G)
mydata$A <- as.factor(mydata$A)

# 初始化模型存储列表
model_list <- list()

# 遍历每个因变量拟合模型
for (y in names(dep_list)) {
  # 拼接公式
  formula <- as.formula(paste0(y, " ~ ", paste(dep_list[[y]], collapse = " + ")))
  # 统计因变量类别数
  y_levels <- length(unique(mydata[[y]]))
  # 选择模型
  if (y_levels == 2) {
    model <- glm(formula, data = mydata, family = binomial)
  } else {
    model <- multinom(formula, data = mydata)
  }
  # 存入列表,用因变量做列表名方便调用
  model_list[[y]] <- model
}

4. 结果调用

拟合完成后可直接通过因变量名调取对应模型:

# 调取A的二项回归模型
model_list[["A"]]
# 调取D的多分类回归模型
model_list[["D"]]

输出结果和你给出的示例代码m1、m2完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:39:04