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

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

最佳答案

在您的示例中,可以使用paramsregr属性,该属性将显示系数和截距。关键是,首先需要向X数据添加一个1.0s的列向量。为什么?从技术上讲,截距项只是1的列向量的系数,也就是说,截距只是一个系数,当乘以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的问题,在调用.fit之前,您需要确保X数据在那里也有一个常量。
注意:当您调用.fit时,您将创建一个回归结果包装器,并且可以访问任何属性列表here

关于python - 如何在statsmodels OLS中计算截距和斜率?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45061326/

10-12 18:03