Почему моя регрессионная модель возвращает перехват, даже если я установил fit_intercept = False? - PullRequest
0 голосов
/ 11 ноября 2018

По сути, я пытаюсь запустить регрессию, основанную на кадре данных, без перехвата, поэтому я установил для fit intercept значение 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 голосов
/ 13 ноября 2018

При запуске модели 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 документация или исходный код .Возможно, вы думаете о линейной регрессии, используя scikit-learn , который использует параметр для управления перехватом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...