首页 > 解决方案 > 为什么除第一个(截距)之外的所有系数在 OLS 回归模型中都获得非常接近零(e^-17 或低)的值?

问题描述

我使用statsmodels包在 python 中编写了以下代码,以创建OLS回归模型。我用不同的数据集尝试了代码,得到的模型除了第一个(截距)系数外,所有系数值都接近于零。代码可能有什么问题?

data1 = pandas.concat([Y, X], axis = 1)
dta = lagmat2ds(data1, mxlg, trim='both', dropex=1)
dtaown = sm.add_constant(dta[:, 0:(mxlg + 1)], prepend = False)
dtajoint = sm.add_constant(dta[:, 0:], prepend = False)
res2down = sm.OLS(dta[:, 0], dtaown).fit()
res2djoint = sm.OLS(dta[:, 0], dtajoint).fit()

这里的smstatsmodels.api 作为 sm并且对于样本测试,您可以考虑数据集sm.datasets.spector

标签: pythonpython-3.xlinear-regressionstatsmodels

解决方案


您的数据的结构方式 - 您正在建模YY|lag Y|constant. 请注意,OLS文档(https://www.statsmodels.org/dev/generated/statsmodels.regression.linear_model.OLS.html)指出 -

除非您使用公式,否则模型不会添加任何常数。

所以你看到的第一个值不是截距,而是拟合系数Yvs Y- 这将是1.0

您可以尝试检查是否获得了合理的结果是Y从这样的预测变量中排除 -

res2down = sm.OLS(dta[:, 0], dtaown[:, 1:]).fit()

推荐阅读