为什么即使我设置fit_intercept = False,我的回归模型仍会返回截距?

时间:2018-11-11 13:24:37

标签: python statistics regression statsmodels

基本上,我试图在没有截距的情况下基于数据帧运行回归,因此我将拟合截距设置为false,但是以下代码产生的参数包括截距。有人知道为什么会这样吗?

model2 = smf.ols('Y ~ X', data=df_final)
result2 = model2.fit(cov_type = 'HAC', cov_kwds = {'maxlags':5}, fit_intercept= False)
result2.params

Intercept    0.032649
X            0.014521
dtype: float64

1 个答案:

答案 0 :(得分:2)

使用公式运行OLS模型时,默认情况下会添加拦截器。省略拦截项的一种方法是在公式中添加-1

import pandas as pd
import numpy as np
import statsmodels.formula.api as smf

df = pd.DataFrame({'X': np.random.randint(0, 100, size=20),
                   'Y': np.random.randint(0, 100, size=20)})

model = smf.ols('Y ~ X - 1', data=df)
result = model.fit()

拟合的模型现在仅包含一个参数(对于X):

X    0.691876
dtype: float64

如果您不使用公式api,则OLS模型不包含拦截器,因此您不必担心它(在这种情况下,您需要将其显式添加到数据中)

我不确定您从何处获得fit_intercept参数,因为我在statsmodels documentationsource code中找不到对它的任何引用。也许您正在考虑使用scikit-learn进行线性回归,它确实使用参数来控制截距