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

时间:2017-12-16 06:13:56

标签: python numpy scipy linear-regression statsmodels

我尝试使用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或让它为我决定最好的拦截。

2 个答案:

答案 0 :(得分:2)

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

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

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

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

几乎所有的统计量,如bse,tvalues,pvalues和像rsquared这样的拟合统计量,都与位置偏移无关,假设常量固定在移位值上。

答案 1 :(得分:0)

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

Y = a + bX + cX ^ 2

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

Y = 7.5 + bX + cX ^ 2

然后上式的拟合截距为7.5。