statsmodels OLS返回的params数组元素含义咨询
理解OLS回归中Res.params返回2x2数组的含义
嘿,我来帮你搞清楚这个问题~ 你遇到的Res.params是2x2数组的情况,核心原因是你的因变量Y是一个二维数组,statsmodels的OLS会对Y的每一列单独拟合一个回归模型,所以参数数组的每一列对应一个因变量的回归结果。
先拆解你的参数数组
你得到的Res.params结果是:
array([[ 1.10000000e+01, 8.00000000e+00], [ 5.37764278e-17, 3.00000000e+00]])
这里的维度对应关系是:
- 行:对应自变量(第一行是截距项,第二行是你输入的自变量X的系数)
- 列:对应Y的每一列(也就是每个独立的因变量)
所以具体元素含义:
params[0][0]:Y第一列对应的回归截距项params[1][0]:Y第一列对应的自变量X的斜率系数(这个极小值是浮点运算的误差,实际近似0)params[0][1]:Y第二列对应的回归截距项(也就是你预期的8)params[1][1]:Y第二列对应的自变量X的斜率系数(也就是你预期的3)
为什么Y会是二维数组?
看你代码里的这行:
Y = (X * 3) + 8
你之前用sm.add_constant(X)把X变成了20行2列的数组(第一列是全1的常数项,第二列是0-19的序列),所以X*3会得到一个20x2的数组,再加8后Y依然是20x2的二维数组——相当于你同时给了两个因变量,statsmodels自然会分别拟合两个回归模型。
如何得到你预期的一维参数数组?
如果你只想拟合单个因变量,只需要基于原来的自变量(也就是X的第二列)计算Y,把Y变成一维数组即可:
import statsmodels.api as sm import numpy as np X = np.arange(0, 20) X = sm.add_constant(X) # 取X的第二列(原始自变量)计算Y,得到一维数组 Y = (X[:, 1] * 3) + 8 Res = sm.OLS(Y, X).fit() print(Res.params) # 输出会是一维数组 [8. 3.],和你预期一致
内容的提问来源于stack exchange,提问作者R.yan
相关产品推荐
相关产品推荐

