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

为何Statsmodels OLS在完全多重共线性(虚拟变量陷阱)下仍能估计参数?

问题描述

假设存在如下DataFrame(df):

ib     c   d1   d2
0   1.14    1   1   0
1   1.0     1   1   0
2   0.71    1   1   0
3   0.6     1   1   0
4   0.66    1   1   0
5   1.0     1   1   0
6   1.26    1   1   0
7   1.29    1   1   0
8   1.52    1   1   0
9   1.31    1   1   0
10  0.89    1   0   1

其中d1与d2完全共线性,且全1列c恰好等于d1 + d2,三者构成经典的虚拟变量陷阱(完全多重共线性)。运行如下OLS回归代码:

import statsmodels.api as sm
reg = sm.OLS(df['ib'], df[['c', 'd1', 'd2']]).fit().summary()
reg

理论上完全共线性会导致模型无法估计参数,但实际却得到了包含回归参数的输出结果,请问原因是什么?

原因解释

这是因为statsmodels的OLS实现并没有因设计矩阵不满秩直接报错,而是做了针对性处理:

  • 当检测到完全多重共线性时,它会使用Moore-Penrose广义逆矩阵替代普通矩阵逆运算,以此计算出一组可行的参数估计值。
  • statsmodels会自动识别共线性变量,对无法唯一确定的参数标记为NaN(表示该参数不可识别),但仍会输出其他可识别参数的估计结果。
  • 你这里的c是全1列,而d1 + d2恰好等于c,相当于引入了冗余的截距类变量,但statsmodels不会主动移除冗余项,而是通过广义逆处理秩亏问题,因此最终能输出部分有效的参数估计结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:20:29