我有一个非常简单的3个数据点的情况,我想使用y=a0 + a1x
或np.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 贝叶斯估计协方差矩阵
答案 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()