为何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
相关产品推荐
相关产品推荐

