计算线性回归的斜率和截距误差

时间:2019-06-23 08:33:42

标签: python numpy scipy linear-regression

我有一个非常简单的3个数据点的情况,我想使用y=a0 + a1xnp.polyfit通过这些点进行线性拟合scipy.stats.linregress

对于进一步的误差传播,我需要斜率和截距中的误差。我到目前为止还不是统计学专家,但是在科学的一面,我只知道标准差不会在斜率和截距上分开。 Polyfit可能会估计协方差矩阵,但这不适用于仅3个数据点。

例如,使用qtiplot时,会产生斜率和截距误差。

B (y-intercept) = 9,291335740072202e-12 +/- 2,391260092282606e-13
A (slope) = 2,527075812274368e-12 +/- 6,878180102259077e-13

在python中计算这些的合适方法是什么?

编辑:

np.polyfit(x, y, 1, cov=True)

产生

  

ValueError:的数据点数必须超过订单+ 2   贝叶斯估计协方差矩阵

1 个答案:

答案 0 :(得分:0)

scipy.stats.linregress为您提供斜率,截距,相关系数,p值和标准误差。拟合线没有与坡度或截距相关的误差,该误差与点与线的距离有关。 Have a read through this to clear up the point

一个例子...

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

points = np.array([[1, 3], [2, 4], [2, 7]])
slope, intercept, r_value, p_value, std_err = stats.linregress(points)

print("slope = ", slope)
print("intercept = ", intercept)
print("R = ", r_value)
print("p = ", p_value)
print("Standard error = ", std_err)

for xy in points:
    plt.plot(xy[0], xy[1], 'ob')

x = np.linspace(0, 10, 100)
y = slope * x + intercept
plt.plot(x, y, '-r')

plt.grid()
plt.show()