Shane
Shane

Reputation: 477

Fixing the intercept in statsmodels ols

In Python's statsmodels.formula.api, the ols functionality automatically includes and estimates an intercept:

results = sm.ols(formula="s ~ x + y + z", data=somedata).fit()
results.params
(* Intercept 0.632646, x -1.258761, y 0.465076, z 0.497991 *)

Because I'm using it in a linear probability model, is there any way to fix the intercept to 0.5?

Upvotes: 4

Views: 4549

Answers (1)

Jan K
Jan K

Reputation: 4150

You can reproduce this behavior in 2 steps:

  1. Subtract the predefined_intercept from your targets
  2. Fit OLS without intercept: include "-1" in your formula

Minimal example:

from statsmodels.formula.api import ols
import pandas as pd
import numpy as np

n_samples = 100
predefined_intercept = 0.5

somedata = pd.DataFrame(np.random.random((n_samples, 3)), columns = ['x', 'y', 'z'])
somedata['s'] = somedata['x'] - 2 * somedata['y'] + 5 * somedata['z'] - predefined_intercept

results = ols(formula="s ~ x + y + z - 1", data=somedata).fit()
print(results.params)

Output:

x    0.671561
y   -2.315076
z    4.759542

See an official example notebook on formulas for detailed explanations and more.

Upvotes: 5

Related Questions