当我使用 python statsmodels 在 OLS 中添加外生变量时,为什么 R-Squared 会减少

Why would R-Squared decrease when I add an exogenous variable in OLS using python statsmodels

如果我对 OLS 模型的理解是正确的,应该永远不会是这样吧?

trades['const']=1
Y = trades['ret']+trades['comms']
#X = trades[['potential', 'pVal', 'startVal', 'const']]
X = trades[['potential', 'pVal', 'startVal']]

from statsmodels.regression.linear_model import OLS
ols=OLS(Y, X)
res=ols.fit()
res.summary()

如果我打开 const,我得到 0.22 的 rsquared,关闭它,我得到 0.43。这怎么可能?

在这里查看答案Statsmodels: Calculate fitted values and R squared

Rsquared 根据模型中是否存在常量而遵循不同的定义。

具有常数的线性模型中的 Rsquared 是标准定义,它使用与仅均值模型的比较作为参考。总平方和被贬低

没有常量的线性模型中的 Rsquared 与完全没有回归变量的模型相比,或者常量的影响为零。在这种情况下,R 平方计算使用不贬值的总平方和。

由于如果我们添加或删除一个常数,定义就会改变,R 平方可以任意变化。如果我们添加额外的解释变量,实际解释的平方和将始终增加,或者如果新变量没有贡献则保持不变,