如何将Stepmix LCA分析结果保存为DataFrame或Excel文件?
解决StepMix潜在类别分析结果转DataFrame并保存为Excel的问题
StepMix的StepMix对象无法直接用pd.DataFrame()转换,得先从模型中提取具体结果组件,再转为DataFrame后保存。以下是具体操作步骤:
1. 提取核心结果组件
提取样本类别归属结果
获取每个样本的类别归属概率和最终分类标签:
import pandas as pd # 提取每个样本的类别概率(每行对应1个样本,每列对应1个类别) class_probs = pd.DataFrame( model.predict_proba(dataframe), columns=[f"Class_{i}_Prob" for i in range(model.n_components)] ) # 提取每个样本的最终分类类别 class_assignments = pd.DataFrame( model.predict(dataframe), columns=["Assigned_Class"] )
提取模型参数
根据你使用的潜在类别分析类型(分类型/连续型指标),提取对应参数:
- 分类型指标(
measurement="categorical"):
# 提取每个类别下各指标的条件概率 categorical_params = pd.DataFrame( model.get_params()["measurement"]["params"], index=[f"Class_{i}" for i in range(model.n_components)] ) # 可选:给列名添加指标和选项标签,比如对应原始数据的指标和选项: # categorical_params.columns = ["var1_opt1", "var1_opt2", "var2_opt1", "var2_opt2"]
- 连续型指标(
measurement="continuous"):
# 提取每个类别下各指标的均值 mean_params = pd.DataFrame( model.get_params()["measurement"]["means"], index=[f"Class_{i}" for i in range(model.n_components)], columns=dataframe.columns # 用原始数据列名作为指标名 ) # 提取每个类别下各指标的方差 var_params = pd.DataFrame( model.get_params()["measurement"]["vars"], index=[f"Class_{i}" for i in range(model.n_components)], columns=dataframe.columns )
提取类别先验概率
prior_probs = pd.DataFrame( model.get_params()["structural"]["prior"], index=[f"Class_{i}" for i in range(model.n_components)], columns=["Prior_Probability"] )
2. 保存到Excel文件
用pd.ExcelWriter将不同结果保存到同一Excel的不同工作表:
with pd.ExcelWriter("LCA_results.xlsx") as writer: # 保存原始数据+样本分类结果+类别概率 pd.concat([dataframe, class_assignments, class_probs], axis=1).to_excel(writer, sheet_name="Sample_Results", index=False) # 保存类别先验概率 prior_probs.to_excel(writer, sheet_name="Prior_Probabilities") # 根据模型类型保存参数 # 分类型模型参数 # categorical_params.to_excel(writer, sheet_name="Conditional_Probs") # 连续型模型参数 # mean_params.to_excel(writer, sheet_name="Class_Means") # var_params.to_excel(writer, sheet_name="Class_Variances")
额外提示
- 若不确定模型测量类型,可通过
model.get_params()["measurement"]["name"]查看,返回"categorical"或"continuous"。 - 模型拟合指标(如BIC、AIC)可直接从
model.bic_、model.aic_获取,转为DataFrame后单独保存即可。
内容的提问来源于stack exchange,提问作者CORals
相关产品推荐
相关产品推荐

