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

如何用Python对二元数据集开展MCA分析并识别影响因变量的关键变量

用Python执行MCA分析二元数据集并识别关键变量

一、前置准备

首先安装所需依赖库,prince是Python里做MCA最便捷的工具,搭配pandas处理数据、matplotlib可视化:

pip install prince pandas matplotlib

注意你提供的数据集里有重复的column 3列,先修正列名(比如改为column3_1、column3_2、column3_3),否则无法正常处理。

二、MCA分析完整流程

1. 加载与预处理数据

import pandas as pd
import prince
import matplotlib.pyplot as plt

# 加载修正列名后的数据集
data = pd.DataFrame({
    'column1': [1, 0, 0, 1],
    'column2': [1, 1, 0, 1],
    'column3_1': [0, 1, 0, 1],
    'column3_2': [0, 1, 0, 0],
    'column3_3': [0, 0, 1, 0],
    '因变量': [0, 1, 0, 1]
})

# 所有列都是二元分类变量,MCA可直接处理,无需额外编码

2. 拟合MCA模型

# 初始化MCA,保留2个主成分(方便可视化解读)
mca = prince.MCA(
    n_components=2,
    n_iter=10,
    copy=True,
    check_input=True,
    engine='sklearn'
)

# 拟合数据集
mca = mca.fit(data)

3. 提取变量关联信息

MCA通过类别点的坐标距离判断变量与因变量的关联强度:

# 获取所有变量类别的坐标
variable_coords = mca.column_coordinates(data)

# 提取因变量两个类别的坐标
target_0 = variable_coords.loc['因变量_0']
target_1 = variable_coords.loc['因变量_1']

# 计算每个变量类别与因变量两类的欧氏距离
variable_coords['与因变量1的距离'] = variable_coords.apply(lambda row: ((row[0]-target_1[0])**2 + (row[1]-target_1[1])**2)**0.5, axis=1)
variable_coords['与因变量0的距离'] = variable_coords.apply(lambda row: ((row[0]-target_0[0])**2 + (row[1]-target_0[1])**2)**0.5, axis=1)

# 筛选正负关联变量:距离因变量1更近为正向,距离0更近为负向
positive_vars = variable_coords[variable_coords['与因变量1的距离'] < variable_coords['与因变量0的距离']]
negative_vars = variable_coords[variable_coords['与因变量1的距离'] > variable_coords['与因变量0的距离']]

4. 可视化结果(直观判断关联)

plt.figure(figsize=(10, 8))

# 绘制所有变量类别点
for idx, row in variable_coords.iterrows():
    plt.scatter(row[0], row[1], label=idx)
    plt.text(row[0]+0.02, row[1]+0.02, idx)

# 标记因变量的两个类别
plt.scatter(target_0[0], target_0[1], color='red', s=100, marker='*')
plt.text(target_0[0]+0.05, target_0[1]+0.05, '因变量_0', color='red')
plt.scatter(target_1[0], target_1[1], color='green', s=100, marker='*')
plt.text(target_1[0]+0.05, target_1[1]+0.05, '因变量_1', color='green')

plt.xlabel('主成分1')
plt.ylabel('主成分2')
plt.title('MCA变量类别关联图')
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
plt.grid(True)
plt.show()

三、结果解读

  • 正向关联变量:图中靠近绿色星号(因变量_1)的类别,比如你的数据里column2_1、column3_1_1、column3_2_1,这些变量取1时,因变量更倾向于为1。
  • 负向关联变量:靠近红色星号(因变量_0)的类别,比如column1_0、column2_0、column3_3_1,这些变量取对应值时,因变量更倾向于为0。
  • 可通过mca.explained_inertia_查看主成分的解释占比,占比越高,结果的可靠性越强。

四、补充建议

如果需要更量化的关联强度,可以结合卡方检验计算每个变量与因变量的相关性,或者用phi系数(针对二元变量),与MCA的可视化结果交叉验证,提升结论可信度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 08:57:14