我正在尝试使用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或者让它为我决定最好的拦截。
在statsmodels中你可以移动y使原点为零并排除截距:
res = OLS(y - 30., x).fit()
其中x包含没有截距的回归量(一列)。然后解释是我们预测偏离30。
y_predicted = 30 + res.predict(...)
假设常数固定在移位值,几乎所有统计量,如bse,t值,p值和拟合统计量(如rsquared)都与位置偏移无关。
在诸如抛物线的多项式方程中:
Y = a + bX + cX ^ 2
当X = 0时,则Y = a,因此如果您拟合多项式并且可以对a使用固定值,则可以使Y截距等于您希望的任何值。再次使用抛物线的示例,如果您将数据拟合到等式中:
Y = 7.5 + bX + cX ^ 2
那么上面等式的拟合截距将是7.5。