修复 statsmodels ols 中的拦截
Fixing the intercept in statsmodels ols
在 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 *)
因为我在线性概率模型中使用它,有没有办法将截距固定为 0.5?
您可以分两步重现此行为:
- 从目标中减去
predefined_intercept
- 不截距拟合 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)
输出:
x 0.671561
y -2.315076
z 4.759542
查看官方 example notebook on formulas 以获得详细解释和更多信息。
在 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 *)
因为我在线性概率模型中使用它,有没有办法将截距固定为 0.5?
您可以分两步重现此行为:
- 从目标中减去
predefined_intercept
- 不截距拟合 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)
输出:
x 0.671561
y -2.315076
z 4.759542
查看官方 example notebook on formulas 以获得详细解释和更多信息。