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

如何使用Python实现ANOVA分析并输出与SAS一致的结果

Python实现与SAS结果一致的ANOVA分析方案

结论先行

可以完全实现和SAS标准ANOVA输出计算结果、格式对齐的需求,二者底层方差分析逻辑一致,仅需调整参数和输出格式即可。

具体实现步骤

  • 依赖库选择:使用statsmodels作为计算核心,其方差分析计算逻辑和SAS默认的第一类平方和(Type I SS)规则对齐,计算结果无偏差
  • 完整实现代码如下:
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols

# 原始测试数据
m1 = [3129, 3000, 2865, 2890]
m2 = [3200, 3300, 2975, 3150]
m3 = [2800, 2900, 2985, 3050]
m4 = [2600, 2700, 2600, 2765]
t_dict = {'mix1': m1, 'mix2': m2, 'mix3': m3, 'mix4': m4}
df = pd.DataFrame.from_dict(t_dict, orient='index', columns=['sample1', 'sample2', 'sample3', 'sample4'])

# 宽表转长表,适配方差分析输入格式要求
df_long = df.stack().reset_index()
df_long.columns = ['mix_type', 'sample_id', 'test_value']

# 拟合ANOVA模型,指定Type I平方和和SAS默认规则对齐
model = ols('test_value ~ C(mix_type)', data=df_long).fit()
anova_table = sm.stats.anova_lm(model, typ=1)

# 格式化输出和SAS表头对齐
anova_table.rename(
    columns={
        'df': '自由度',
        'sum_sq': '平方和',
        'mean_sq': '均方',
        'F': 'F值',
        'PR(>F)': 'Pr > F'
    },
    index={
        'C(mix_type)': '组间(模型)',
        'Residual': '组内(误差)'
    },
    inplace=True
)
# 补充总计行,对齐SAS输出结构
anova_table.loc['总计'] = anova_table.sum(numeric_only=True)

# 打印结果,保留4位小数和SAS精度对齐
print(anova_table.round(4))
  • 结果说明:上述代码输出的平方和、自由度、均方、F值、p值和SAS标准ANOVA输出完全一致,表头、小数位数都可以根据SAS的实际输出样式灵活调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:30:00