基本上,我试图在没有截距的情况下基于数据帧运行回归,因此我将拟合截距设置为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
答案 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 documentation或source code中找不到对它的任何引用。也许您正在考虑使用scikit-learn进行线性回归,它确实使用参数来控制截距