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

Python新手求助:逻辑回归系数差异性检验与方差-协方差矩阵获取

Hey there! 作为Python新手刚上手第一个统计项目,能想到用Wald检验来对比逻辑回归系数,这思路很赞👍。我帮你整理了用UCLA经典数据集实现的完整步骤,包括方差-协方差矩阵的提取和Wald检验的计算,一步步来:

第一步:准备UCLA示例数据集

咱们用UCLA常用的录取预测数据集(包含录取状态、GRE成绩、GPA、本科院校排名等变量),直接用statsmodels内置的数据集就可以,不用额外下载:

import pandas as pd
import statsmodels.api as sm
from scipy.stats import chi2

# 加载内置的二元选择数据集(对应UCLA的admit数据)
df = sm.datasets.get_rdataset("BinaryChoice", "Ecdat").data
# 重命名列名方便后续操作
df = df.rename(columns={'admit': 'admit', 'gre': 'gre', 'gpa': 'gpa', 'rank': 'rank'})
# 将rank(院校排名)转换为哑变量(分类变量必须处理后才能进回归)
df = pd.get_dummies(df, columns=['rank'], drop_first=True)
第二步:拟合逻辑回归模型

先构建自变量矩阵并加入截距项,然后拟合模型:

# 构建自变量矩阵,添加截距项
X = sm.add_constant(df.drop('admit', axis=1))
y = df['admit']

# 拟合逻辑回归模型
logit_model = sm.Logit(y, X)
result = logit_model.fit()

# 查看模型整体结果(包括系数、p值等)
print(result.summary())
第三步:提取并展示参数的方差-协方差矩阵

statsmodels的回归结果对象直接提供了提取方差-协方差矩阵的方法,这个矩阵能帮我们看到参数之间的协方差关系:

# 提取方差-协方差矩阵
cov_matrix = result.cov_params()

# 打印矩阵
print("参数的方差-协方差矩阵:")
print(cov_matrix)

# 如果想更美观地展示(Jupyter环境下生效)
display(pd.DataFrame(cov_matrix).style.background_gradient(cmap='coolwarm'))
第四步:执行Wald检验判断系数差异

Wald检验的核心是检验两个系数的差值是否显著不为0,这里分两种方式实现:

方式1:手动计算(理解原理)

假设我们要对比rank_2和rank_3的系数差异,按照Wald统计量的公式手动计算:

# 指定要对比的两个参数
param1 = 'rank_2'
param2 = 'rank_3'

# 获取参数估计值
beta1 = result.params[param1]
beta2 = result.params[param2]

# 获取对应方差和协方差
var1 = cov_matrix.loc[param1, param1]
var2 = cov_matrix.loc[param2, param2]
cov = cov_matrix.loc[param1, param2]

# 计算Wald统计量
wald_stat = (beta1 - beta2)**2 / (var1 + var2 - 2*cov)

# 计算p值(服从自由度为1的卡方分布)
p_value = 1 - chi2.cdf(wald_stat, df=1)

# 输出结果
print(f"Wald检验统计量: {wald_stat:.4f}")
print(f"对应的p值: {p_value:.4f}")

# 结果解读
if p_value < 0.05:
    print(f"在0.05显著性水平下,拒绝原假设 → {param1}和{param2}的系数存在显著差异!")
else:
    print(f"在0.05显著性水平下,无法拒绝原假设 → {param1}和{param2}的系数无显著差异。")

方式2:用statsmodels内置方法(更高效)

如果不想手动计算,直接用模型结果的wald_test方法,支持自定义假设:

# 先确认模型的变量顺序,避免假设写错
print("模型变量顺序:", X.columns.tolist())

# 构造假设:这里检验rank_2 - rank_3 = 0
hypothesis = 'rank_2 - rank_3 = 0'

# 执行Wald检验
wald_test_result = result.wald_test(hypothesis)
print(wald_test_result)

这个方法会直接输出统计量、p值和自由度,适合快速验证。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:32:30