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

使用Statsmodels构建OLS模型,如何让Anova结果显示原自变量列名?

解决OLS模型公式构建与系数列名显示问题

你遇到的核心问题是没正确利用statsmodels公式接口的特性——当指定data参数后,公式里可以直接引用数据框的列名,不需要用anovaData["col1"]这种写法,这也是导致系数列名显示异常的原因。

正确的公式构建方式

有两种简单方法能实现你想要的效果,让系数列名显示为真实列名:

方法1:手动拼接自变量列名

如果自变量列不多,直接在公式里用+连接所有自变量:

import statsmodels.api as sm
from statsmodels.formula.api import ols

# 直接用列名构建公式,data参数指定数据集
model = ols('col1 ~ col2 + col3 + col4 + col5', data=anovaData).fit()

方法2:通过列表动态生成公式

如果自变量列较多或者已经存在列表里,可以用字符串拼接生成公式:

import statsmodels.api as sm
from statsmodels.formula.api import ols

# 自变量列名列表
indep_vars = ['col2', 'col3', 'col4', 'col5']
# 动态拼接公式字符串
formula = f'col1 ~ {" + ".join(indep_vars)}'
# 拟合模型
model = ols(formula, data=anovaData).fit()

为什么你之前的写法会导致列名异常?

你之前的代码ols('anovaData["col1"] ~ anovaData[y]', data=anovaData)相当于直接在公式里传入了一个数组对象,statsmodels无法识别这个数组里每个列的原始名称,只能用anovaData[y][0]这种索引形式标记系数。而当你在公式里直接使用列名时,statsmodels会自动从data参数指定的数据集中提取对应列,并保留列名作为系数的标签,输出就会和你期望的一致。

验证输出

拟合完成后运行print(model.summary()),就能得到你想要的系数列名格式:

====================================================================================
coef	std err	t	P>|t|	[0.025	0.975]
------------------------------------------------------------------------------------
Intercept	-0.0177	0.013	-1.319	0.190	-0.044	0.009
col2	0.0003	0.001	0.211	0.833	-0.002	0.003
col3	-0.0007	0.000	-3.829	0.000	-0.001	-0.000
col4	0.0032	0.001	2.853	0.005	0.001	0.005
col5	-0.0008	0.000	-2.162	0.032	-0.002	-7.22e-05

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 07:27:29