Это зависит от того, какой 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
==============================================================================