我有两个坐标分别为x_1,2和y_1,2的点。 y是一个测量值,具有不确定性。
我可以很容易地计算出适合这两点的直线。
我还可以估计与斜率和截距相关的不确定性。
我想计算/画一个置信带。
通常,我会通过以下方式做到这一点:

serr = np.sqrt(np.sum(residuals**2)/(n - 2))
t = stats.t.ppf(1-0.05/2, n - 2)
confint = t * serr * np.sqrt(1./n + (x - np.mean(x))**2/np.sum((x-np.mean(x))**2))


由于自由度为0,n = 2,因此无法使用标准误差和学生分布的标准方法。
有没有其他方法可以使用与斜率和截距相关的不确定性来估计(和显示)置信区间?
谢谢

最佳答案

我想这应该是“简单”的错误传播。您将y-错误传播到斜率和截距中,在此必须注意这些错误将被关联。利用已知的误差和相关性,可以计算出y对给定x的误差

我会这样:

import matplotlib.pyplot as plt

import numpy as np

"""
y = a + b x
"""
xl = [ 1, 2 ] ### x1 , x2
yl = [ .6, 1.8 ] ### y1 , y2
yerr = [ .5, .3 ] ### s1, s2

b = ( yl[1] - yl[0] ) / ( xl[1] - xl[0] ) ###  deltaX / deltaY
a = yl[0] - b * xl[0]

xnp = np.linspace( -.5, 3, 200 )
ynp = np.fromiter( ( a + b * x for x in xnp ), np.float)

"""
Joel Tellinghuisen
J. Phys. Chem. A 2001, 105, 3917-3921

transformation of errors provides
(a)     ( s1^2 ( 1 + x1 / delatX )^2 + s2^2 ( x1 / deltaX )^2       , -s1^2 ( 1 + x1 / deltaX ) / deltaX - s2^2 x1 / deltaX^2   )
( ) ->  (                                                                                                                       )
(b)     ( -s1^2 ( 1 + x1 / deltaX ) / deltaX - s2^2 x1 / deltaX^2   , ( s1^2 + s2^2 ) / deltaX^2                                )

from this we calculate  sy^2 = sa^2+ sb^2 x^2 + 2 sab^2 x:
"""

def sy( x ):
    s1, s2 = yerr
    x1, x2 = xl
    dx = x2 - x1
    out  = ( s1 * ( 1 + x1 / dx ) )**2
    out += ( s2 * x1 / dx  )**2
    out += ( s1**2 + s2**2 ) / dx**2 * x**2
    out -= 2 * ( s2**2 * x1 / dx**2 + s1**2 * (  1 + x1 / dx ) / dx ) * x
    return np.sqrt( out )

ynpbp = np.fromiter( ( a + b * x + sy(x) for x in xnp ), np.float)
ynpbm = np.fromiter( ( a + b * x - sy(x) for x in xnp ), np.float)
ye = np.fromiter( ( sy(x) for x in xnp ), np.float)


fig = plt.figure()
ax = fig.add_subplot( 1, 1, 1 )
ax.errorbar( xl, yl, yerr=yerr, marker='s', ls='' )
ax.plot( xnp, ynp )
ax.plot( xnp, ynpbp )
ax.plot( xnp, ynpbm )
ax.plot( xnp, ye )
ax.grid()
plt.show()


这给了我以下情节

python - 对具有不确定性的两个数据点进行线性拟合的置信区间-LMLPHP

关于python - 对具有不确定性的两个数据点进行线性拟合的置信区间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58837553/

10-12 13:44