如何从批量单变量逻辑回归结果中提取符合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
相关产品推荐
相关产品推荐

