Как установить перехват на 0 с помощью statsmodel - для множественной линейной регрессии - PullRequest
0 голосов
/ 18 января 2019

Несколько лет назад было сообщение об этом, но было включено только быстрое исправление. Указание константы в линейной регрессии Statsmodels?

Быстрым решением было запустить сначала и вычесть уравнение перехвата, а затем запустить снова. Утомительно, если вы бегаете снова и снова.

Я бы подумал, что вы могли бы передать параметр, указывающий, что перехват будет установлен на ноль. Также открыт для использования других пакетов статистики помимо statsmodels.

1 Ответ

0 голосов
/ 18 января 2019

Это зависит от того, какой API вы используете.Если вы используете statsmodels.api, вам нужно явно добавить константу в вашу модель, добавив столбец 1 s в exog.Если вы этого не сделаете, то перехвата не будет.

import pandas as pd
import statsmodels.formula.api as smf
import statsmodels.api as sm

df = pd.DataFrame({'x': range(0,10)}).assign(y=lambda x: x+8)

# Fit y = B*x, no intercept
res1 = sm.OLS(endog=df.y, exog=df.x).fit()
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
x              2.2632      0.269      8.421      0.000       1.655       2.871
==============================================================================


# fit y = B*x + C, by adding a column of ones
res2 = sm.OLS(endog=df.y, exog=df[['x']].assign(intercept=1)).fit()
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
x              1.0000   8.64e-16   1.16e+15      0.000       1.000       1.000
intercept      8.0000   4.61e-15   1.73e+15      0.000       8.000       8.000
==============================================================================

Если вместо этого вы используете smf api, вы можете добавить -1 в формулу Пэтси, которая скажет ей:удалить константу:

res3 = smf.ols('y ~ x -1', data=df).fit()
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
x              2.2632      0.269      8.421      0.000       1.655       2.871
==============================================================================
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...