如何计算线性函数拟合后梯度的误差?
我现在正在把一个线性函数应用到距离和时间的图表上,以便计算一个粒子的速度...
velocity, intercept = numpy.polyfit(time, displacement, 1)
那么我该如何估算这个速度测量的误差呢?
2 个回答
0
你的时间值是不是均匀分布的?如果是的话,你可以通过下面的方法简单地计算速度:
velocitiy_between = (displacement[1:]-displacement[:-1])/(time[1:]-time[:-1])
这些速度现在不是在你的数据点上定义,而是在数据点之间定义的。接下来,你可以通过下面的方法给每个数据点分配它左边和右边的平均值:
velocity = (velocity_between[1:]+velocity_between[:-1])/2.0
这样,你就能得到一个包含所有内部数据点速度的数组,可以用来和你的拟合结果进行比较。
如果你的时间值不是均匀分布的,你仍然可以使用这个方法。不过,你需要根据数据的密度给你的误差分配额外的权重,以考虑到相邻点之间的斜率更容易被准确估计的事实。同时,邻居之间的平均值也会受到与邻居距离的影响。
如果你对第二种情况需要更多细节,随时留言哦。
2
你试过 scipy.stats.linregress 吗?
from scipy import stats
import numpy as np
coefficients = numpy.polyfit(time, displacement, 1)
fitted_data = np.poly1d(coefficients)
slope, intercept, r_value, p_value, std_err = stats.linregress(fitted_data, displacement)