如何基于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
相关产品推荐
相关产品推荐

