我们如何计算 statsmodels OLS 中的截距和斜率?
Posted
技术标签:
【中文标题】我们如何计算 statsmodels OLS 中的截距和斜率?【英文标题】:How we can compute intercept and slope in statsmodels OLS? 【发布时间】:2017-12-17 02:19:30 【问题描述】:Here我问如何在线性模型中计算 AIC。如果我将LinearRegression()
方法替换为linear_model.OLS
方法以获得AIC,那么如何计算OLS 线性模型的斜率和截距?
import statsmodels.formula.api as smf
regr = smf.OLS(y, X, hasconst=True).fit()
【问题讨论】:
【参考方案1】:在您的示例中,您可以使用regr
的params
属性,它将显示系数和截距。他们的关键是您首先需要将1.0
s 的列向量添加到您的 X 数据中。为什么?截距项在技术上只是 1s 列向量的系数。也就是说,截距只是一个系数,当乘以 1.0 的 X“项”时,它会产生自身。当您将此添加到其他系数和特征的总乘积中时,即可获得您的 nx1 预测值数组。
下面是一个例子。
# 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.)
现在实际运行回归并获得系数只需要 1 行,除了你现在拥有的。
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
因此,关于您在 AIC 上的问题,您需要确保 X 数据在那里也有一个常数,然后再致电 .fit
。
注意:当您调用.fit
时,您会创建一个回归结果包装器,并且可以访问任何属性列表here。
【讨论】:
好。看起来 X 和数据是相等的。顺便说一句,term_spread 是否显示斜率? 在这种情况下,X
和 data
不相等,但接近。 X
是 data
的子集,不包括因变量 usd
。在这种多元回归的情况下,有两个斜率,因为您有两个 X
变量,term_spread
和 copper
。【参考方案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
【讨论】:
以上是关于我们如何计算 statsmodels OLS 中的截距和斜率?的主要内容,如果未能解决你的问题,请参考以下文章
使用 statsmodels 忽略多个 OLS 回归中的缺失值
statsmodels 中的面板 OLS(因为它在 Pandas 中已被弃用?)
AttributeError:模块“statsmodels.formula.api”没有属性“OLS”