修复 statsmodels ols 中的拦截

Sha*_*ane 3 statsmodels

在 Python 的 中statsmodels.formula.api,ols 功能会自动包含并估计一个截距:

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 *)
Run Code Online (Sandbox Code Playgroud)

因为我在线性概率模型中使用它,有没有办法将截距固定为 0.5?

Jan*_*n K 5

您可以通过 2 个步骤重现此行为:

  1. predefined_intercept从你的目标中减去
  2. 无截距拟合 OLS:在公式中包含“-1”

最小的例子:

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)
Run Code Online (Sandbox Code Playgroud)

输出:

x    0.671561
y   -2.315076
z    4.759542
Run Code Online (Sandbox Code Playgroud)

有关详细说明等,请参阅有关公式的官方示例笔记本