如何在线性回归中修正y截距值?

问题描述 投票:1回答:2

我正在尝试使用scipy的linregress()在我的数据中使用最小的方形线,如下所示:

from scipy import stats
import numpy as np

y = [30, 60, 19, 28, 41, 49, 62, 75, 81]
x = np.arange(0,9)

grad, intercept, r_value, p_value, std_err = stats.linregress(x,y)

但是,我还想在特定点修复y截距。

理想情况下,我打算将其修复为y列表中的第一个值。换句话说,我真正想做的是我想要最合适的线来传递y列表中的第一个值,在我的例子中是30。

但似乎Scipy决定对我进行y拦截。

如何在scipy的线性回归方法中将y截距固定为特定值?

PS:我也试过使用statsmodels的OLS,但它只允许我留在y-intercept = 0或者让它为我决定最好的拦截。

python numpy scipy linear-regression statsmodels
2个回答
2
投票

在statsmodels中你可以移动y使原点为零并排除截距:

res = OLS(y - 30., x).fit()

其中x包含没有截距的回归量(一列)。然后解释是我们预测偏离30。

y_predicted = 30 + res.predict(...)

假设常数固定在移位值,几乎所有统计量,如bse,t值,p值和拟合统计量(如rsquared)都与位置偏移无关。


0
投票

在诸如抛物线的多项式方程中:

Y = a + bX + cX ^ 2

当X = 0时,则Y = a,因此如果您拟合多项式并且可以对a使用固定值,则可以使Y截距等于您希望的任何值。再次使用抛物线的示例,如果您将数据拟合到等式中:

Y = 7.5 + bX + cX ^ 2

那么上面等式的拟合截距将是7.5。

© www.soinside.com 2019 - 2024. All rights reserved.