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

基于Dataframe的OLS模型ANOVA结果自由度等数值错误排查

问题原因与解决方法

错误原因

你的Mix列是整数数值类型,statsmodels的OLS公式默认将数值型变量视为连续自变量,因此拟合的是Texture随Mix线性变化的简单线性回归模型,这时候Mix对应的自由度为1(仅对应线性项的单个参数),而非分类变量应有的11个自由度(12个水平-1)。

解决方法

有两种方式可以让statsmodels将Mix当作分类变量处理:

方式1:在OLS公式中用C()包裹变量

修改公式,明确指定Mix为分类变量:

import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols

df = pd.read_csv('contrastExampleData.csv')

# 用C(Mix)指定分类变量
mod = ols(formula='Texture ~ C(Mix)', data=df).fit()
aov_table = sm.stats.anova_lm(mod, typ=1)
print(aov_table)

方式2:提前将Mix列转换为分类类型

先把DataFrame中的Mix列转为category类型,再拟合模型:

import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols

df = pd.read_csv('contrastExampleData.csv')

# 转换为分类类型
df['Mix'] = df['Mix'].astype('category')
mod = ols(formula='Texture ~ Mix', data=df).fit()
aov_table = sm.stats.anova_lm(mod, typ=1)
print(aov_table)

经过上述处理后,Mix的自由度会变为11,得到符合预期的ANOVA结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 12:05:43