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

Statsmodels逻辑回归的方差分析(Anova)实现方法问询

嘿,这个问题我之前也折腾过!Statsmodels里确实没有直接给逻辑回归的ANOVA实现,但咱们可以用**似然比检验(Likelihood Ratio Test)**来实现等效的分析——这其实就是广义线性模型场景下,替代线性ANOVA的标准方法,核心是通过对比嵌套模型的拟合优度,判断自变量(或一组自变量)是否对模型有显著贡献。

下面给你三种实用的实现方式:

方法1:手动计算似然比检验(理解原理必备)

先拟合全模型和简化模型,再手动计算检验统计量和p值,适合搞清楚背后的逻辑:

from statsmodels.formula.api import logit
import statsmodels.api as sm
from scipy.stats import chi2

# 用内置数据集举例(心脏病数据)
data = sm.datasets.get_rdataset('heart', 'survival').data

# 1. 拟合包含所有自变量的全模型
full_model = logit(formula="status ~ age + sex + trestbps + chol", data=data).fit()

# 2. 拟合去掉目标自变量的简化模型(比如去掉chol)
reduced_model = logit(formula="status ~ age + sex + trestbps", data=data).fit()

# 3. 计算似然比统计量、自由度和p值
lr_stat = -2 * (reduced_model.llf - full_model.llf)  # llf是对数似然值
df_diff = full_model.df_model - reduced_model.df_model  # 模型自由度差
p_value = chi2.sf(lr_stat, df_diff)  # 卡方分布求p值

print(f"似然比统计量: {lr_stat:.3f}")
print(f"自由度: {df_diff}")
print(f"p值: {p_value:.3f}")

如果p值小于你的显著性水平(比如0.05),就说明被去掉的自变量对模型有显著贡献,相当于线性ANOVA里的组间差异显著。

方法2:用Statsmodels自带的compare_lr_test方法(最简洁)

其实Statsmodels的模型对象已经内置了对比嵌套模型的方法,不用手动计算:

# 直接用两个模型调用compare_lr_test
lr_result = full_model.compare_lr_test(reduced_model)

print(f"似然比统计量: {lr_result[0]:.3f}")
print(f"自由度: {lr_result[1]}")
print(f"p值: {lr_result[2]:.3f}")

这个方法和手动计算的结果完全一致,日常用这个最省心。

方法3:针对分类变量的“ANOVA式”整体检验

如果你的自变量是多水平分类变量(比如胸痛类型、组别),想检验这个变量整体是否显著,就拟合包含该分类变量的模型和不包含的模型,再做似然比检验——这完全对应线性ANOVA中检验分类变量主效应的逻辑:

# 拟合包含分类变量cp(胸痛类型)的全模型
full_model_with_cp = logit(formula="status ~ age + sex + cp", data=data).fit()
# 拟合去掉cp的简化模型
reduced_model_no_cp = logit(formula="status ~ age + sex", data=data).fit()

# 做检验
lr_result = full_model_with_cp.compare_lr_test(reduced_model_no_cp)
print(f"胸痛类型变量的整体显著性检验:")
print(f"似然比统计量: {lr_result[0]:.3f}")
print(f"自由度: {lr_result[1]}")
print(f"p值: {lr_result[2]:.3f}")

这里的自由度差等于分类变量的水平数减1(因为分类变量会被编码成k-1个虚拟变量)。

几个关键注意点
  • 必须用嵌套模型:简化模型必须是全模型去掉某些自变量得到的,不能对比非嵌套模型;
  • 逻辑回归的“ANOVA”本质是似然比检验,和线性ANOVA的方差分解原理不同,但作用完全一致——判断自变量是否能显著提升模型拟合效果;
  • 如果要一次性检验多个自变量,只要构建对应去掉这些自变量的简化模型即可,核心逻辑不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:35:01