Here我问过如何在线性模型中计算AIC。如果我用LinearRegression()
方法替换linear_model.OLS
方法来获得AIC,那么我如何计算OLS线性模型的斜率和截距?
import statsmodels.formula.api as smf
regr = smf.OLS(y, X, hasconst=True).fit()
答案 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