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

如何从批量单变量逻辑回归结果中提取符合p值阈值的变量名?

解决批量单变量逻辑回归的变量筛选问题

很高兴帮你搞定这个变量筛选的需求!首先咱们先修正一下你的uni.log2函数里的小细节——当前函数返回的是截距项和自变量两个p值,但你需要的只是自变量对应的p值,所以先把函数调整一下:

# 修正后的单变量逻辑回归函数,仅返回自变量的p值
uni.log2 <- function(x) {
  log.mod2 <- glm(Renewf ~ x, data = dt.train2, family = binomial())
  # 提取系数表中第二行(自变量x)的第4列(p值)
  return(coef(summary(log.mod2))[2, 4]) 
}

接下来,运行批量回归并保存结果:

# 对指定列批量运行单变量回归,得到带变量名的p值向量
uni_p_results <- apply(X = dt.train2[c(3:16)], MARGIN = 2, FUN = uni.log2)

现在uni_p_results是一个命名数值向量,每个元素的名字就是你的自变量名称,值对应的是该变量单变量回归的p值。接下来筛选p值<0.25的变量名就很简单了:

# 设置阈值
threshold <- 0.25
# 筛选符合条件的变量名
signif_vars <- names(which(uni_p_results < threshold))

如果之后你想直接生成多变量逻辑回归的公式,还可以用这行代码快速拼接:

# 生成多变量模型公式
multivar_formula <- as.formula(paste("Renewf ~ ", paste(signif_vars, collapse = "+"), sep = ""))
# 可以直接用这个公式建模
log.mod_multivar <- glm(multivar_formula, data = dt.train2, family = binomial())

为什么这样可行?

当你用apply对数据框的列(MARGIN=2)应用函数时,返回的结果会自动保留原数据框的列名作为向量元素的名称,所以我们可以直接通过names(which(...))提取符合阈值条件的变量名,非常方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:14:51