我们如何计算statsmodels OLS中的拦截和斜率?

时间:2017-07-12 15:01:24

标签: python scikit-learn linear-regression statsmodels

Here我问过如何在线性模型中计算AIC。如果我用LinearRegression()方法替换linear_model.OLS方法来获得AIC,那么我如何计算OLS线性模型的斜率和截距?

import statsmodels.formula.api as smf
regr = smf.OLS(y, X, hasconst=True).fit()

2 个答案:

答案 0 :(得分:4)

在您的示例中,您可以使用params的{​​{1}}属性,该属性将显示系数和截距。关键是您首先需要向X数据添加regr s的列向量。为什么?截距项在技术上只是列向量为1s 的系数。也就是说,截距只是一个系数,当乘以X“项”1.0时,它会产生自身。将此值添加到其他系数和要素的总和时,可以获得nx1预测值数组。

以下是一个例子。

1.0

现在实际运行回归并且除了你现在拥有的系数之外,获得系数只需要1行。

# Pull some data to use in the regression
from pandas_datareader.data import DataReader
import statsmodels.api as sm

syms = {'TWEXBMTH' : 'usd', 
        'T10Y2YM' : 'term_spread', 
        'PCOPPUSDM' : 'copper'
       }

data = (DataReader(syms.keys(), 'fred', start='2000-01-01')
        .pct_change()
        .dropna())
data = data.rename(columns = syms)
# Here's where we assign a column of 1.0s to the X data
# This is required by statsmodels
# You can check that the resulting coefficients are correct by exporting
# to Excel with data.to_clipboard() and running Data Analysis > Regression there
data = data.assign(intercept = 1.)

关于AIC上的问题,在致电y = data.usd X = data.loc[:, 'term_spread':] regr = sm.OLS(y, X, hasconst=True).fit() print(regr.params) term_spread -0.00065 copper -0.09483 intercept 0.00105 dtype: float64 之前,您还需要确保X数据也有常量。

注意:当您致电.fit时,您可以创建回归结果包装,并可以访问任何属性列表here

答案 1 :(得分:2)

对于在scikit-learn中搜索如何获得LinearRegression的斜率和截距的任何人:它有coef_ and intercept_ properties来表示这一点。

(x, y) = np.random.randn(10,2).T
from sklearn import linear_model
lr = linear_model.LinearRegression()
lr.fit(x.reshape(len(x), 1), y)
lr.coef_ # array([ 0.29387004])
lr.intercept_ # -0.17378418547919167