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

