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