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

如何从含binary与ordinal数据的nominal数据集中筛选binary数据做univariate分析及logistic回归?

针对二元数据的筛选与单变量逻辑回归解析方案

一、筛选二元数据的工具/命令

Python 环境

  • Pandas:最直接的方式是通过判断列的唯一值数量或取值范围来筛选
    import pandas as pd
    
    # 假设数据集为 df
    # 筛选唯一值数量为2的列(宽松匹配,包含yes/no、True/False等二元标识)
    binary_cols = [col for col in df.columns if df[col].nunique() == 2]
    # 严格筛选仅含0/1的二元列
    binary_cols_strict = [col for col in df.columns if set(df[col].dropna().unique()).issubset({0, 1})]
    # 提取二元数据子集
    df_binary = df[binary_cols]
    
  • Scikit-learn:可结合LabelBinarizer辅助判断,但更适合预处理阶段同步筛选,不如Pandas直接高效。

R 环境

  • Base R:通过遍历列判断唯一值属性
    # 假设数据集为 df
    # 筛选唯一值数量为2的列
    binary_cols <- names(df)[sapply(df, function(x) length(unique(x)) == 2)]
    # 严格筛选仅含0/1的列
    binary_cols_strict <- names(df)[sapply(df, function(x) all(na.omit(x) %in% c(0, 1)))]
    # 提取二元数据子集
    df_binary <- df[, binary_cols]
    
  • Dplyr:用select_if实现简洁筛选
    library(dplyr)
    df_binary <- df %>% select_if(function(x) length(unique(x)) == 2)
    

二、单变量逻辑回归的变量解析(提取P值)

Python(Statsmodels 实现)

假设已遍历二元自变量,结合二元因变量做逻辑回归,提取P值和优势比:

import statsmodels.api as sm
import numpy as np

# 假设因变量为 y(二元类型),数据集为 df
results = []
for col in binary_cols:
    X = sm.add_constant(df[col])  # 添加截距项
    model = sm.Logit(y, X).fit(disp=0)  # disp=0关闭拟合日志
    # 提取自变量的P值(排除截距项)
    p_val = model.pvalues[col]
    odds_ratio = np.exp(model.params[col])
    results.append({"变量名": col, "P值": p_val, "优势比": odds_ratio})

# 转为DataFrame查看结果
results_df = pd.DataFrame(results)

注:Sklearn的LogisticRegression默认不输出统计量,如需P值建议用Statsmodels,或手动计算Wald统计量。

R(Base R/Purrr 实现)

Base R 循环版本

# 假设因变量为 y(二元0/1类型),数据集为 df
results_list <- list()
for (col in binary_cols) {
  formula <- as.formula(paste("y ~", col))
  model <- glm(formula, data = df, family = binomial(link = "logit"))
  # 提取自变量的P值
  p_val <- summary(model)$coefficients[col, "Pr(>|z|)"]
  odds_ratio <- exp(coef(model)[col])
  results_list[[col]] <- data.frame(变量名 = col, P值 = p_val, 优势比 = odds_ratio)
}

# 合并结果为数据框
results_df <- do.call(rbind, results_list)

Purrr 简化版本(替代for循环)

library(purrr)
library(dplyr)

results_df <- map_dfr(binary_cols, function(col) {
  formula <- as.formula(paste("y ~", col))
  model <- glm(formula, data = df, family = binomial)
  tibble(
    变量名 = col,
    P值 = summary(model)$coefficients[col, 4],
    优势比 = exp(coef(model)[col])
  )
})

注:若模型出现收敛警告,需检查自变量与因变量的相关性,或确认样本量是否充足。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:16:12