result = sm.OLS(gold_lookback, silver_lookback ).fit()
得到结果后,我该如何获得系数和常量?
换句话说,如果
y = ax + c
,
如何获取值 a
和 c
?
result = sm.OLS(gold_lookback, silver_lookback ).fit()
得到结果后,我该如何获得系数和常量?
换句话说,如果
y = ax + c
,
如何获取值 a
和 c
?
params
属性来获取系数。import statsmodels.api as sm
import numpy as np
np.random.seed(1)
X = sm.add_constant(np.arange(100))
y = np.dot(X, [1,2]) + np.random.normal(size=100)
result = sm.OLS(y, X).fit()
print(result.params)
将打印一个numpy数组 [0.89516052 2.00334187]
- 分别为截距和斜率的估计值。
如果您想要更多信息,可以使用对象result.summary()
,其中包含3个详细的模型描述表格。
sm.add_constant()
的工作原理:它接受一个矩阵(或向量,就像我的情况一样),并在最左边添加一个全为1的列。对应于这一列的系数就是截距。 - David Daledf = pd.read_html(result.summary().tables[1].as_html(),header=0,index_col=0)[0]
然后
a=df['coef'].values[1]
c=df['coef'].values[0]
在@IdiotTom的回答中补充细节。
您可以使用:
head = pd.read_html(res.summary2().as_html())[0]
body = pd.read_html(res.summary2().as_html())[1]
import statsmodels.api as sm
# sm.__version__ is '0.13.1'
df = pd.DataFrame({'x': [0, 1,2,3,4],
'y': [0.1, 0.2, 0.5, 0.5, 0.8]
})
sm.OLS.from_formula(formula='y~x-1', data=df).fit().params
输出以下pd.Series
:
x 0.196667
dtype: float64
允许拦截项(通过将公式从y~x-1
更改为y~x
)会更改输出,以包括拦截项,名称为Intercept
:
Intercept 0.08
x 0.17
dtype: float64
系数以字典形式保存在result.params
数据框中,它是一个pandas的Series
。其中,常数项存储为Intercept
,正如其他人所指出的那样。变量项按其变量名称存储。因此,如果您的模型是y ~ x
,回归系数将作为result.params['Intercept']
(即b
)和result.params['x']
(即a
)可用于方程y = a*x + b
。