簡體   English   中英

Scipy的odrpack中的不對稱誤差線

[英]Asymmetric error bars in Scipy's odrpack

我正在使用Scipy的odrpack將線性函數擬合到某些在x和y維度上均具有不確定性的數據。 每個數據點都有其自己的不對稱不確定性。

我可以使用對稱不確定性擬合函數,但這並不是我的數據的真實表示。

考慮到這一點,我該如何進行健身?

到目前為止,這是我的代碼。 它接收輸入數據作為命令行參數,而我正在使用的不確定性目前只是隨機數。 (同樣,正在發生兩次擬合,一個擬合為陽性數據,另一個擬合為陰性。原因與該問題無關)

import sys
import numpy as np
import scipy.odr.odrpack as odrpack

def f(B, x):
    return B[0]*x + B[1]

xdata = sys.argv[1].split(',')
xdata = [float(i) for i in xdata]
xdata = np.array(xdata)

#find indices of +/- data
zero_ind = np.where(xdata >= 0)[0][0]

x_p = xdata[zero_ind:]
x_m = xdata[:zero_ind+1]

ydata = sys.argv[2].split(',')
ydata = [float(i) for i in ydata]
ydata = np.array(ydata)

y_p = ydata[zero_ind:]
y_m = ydata[:zero_ind+1]

sx_m = np.random.random(len(x_m))
sx_p = np.random.random(len(x_p))

sy_m = np.random.random(len(y_m))
sy_p = np.random.random(len(y_p))

linear = odrpack.Model(f)

data_p = odrpack.RealData(x_p, y_p, sx=sx_p, sy=sy_p)
odr_p = odrpack.ODR(data_p, linear, beta0=[1.,2.])
out_p = odr_p.run()

data_m = odrpack.RealData(x_m, y_m, sx=sx_m, sy=sy_m)
odr_m = odrpack.ODR(data_m, linear, beta0=[1.,2.])
out_m = odr_m.run()

謝謝!

我只會為您提供隨機數據的解決方案,我不會麻煩您導入數據

import numpy as np
import scipy.odr.odrpack as odrpack
np.random.seed(1)

N = 10
x = np.linspace(0,5,N)*(-1)
y = 2*x - 1 + np.random.random(N)
sx = np.random.random(N)
sy = np.random.random(N)

def f(B, x):
    return B[0]*x + B[1]
linear = odrpack.Model(f)
# mydata = odrpack.Data(x, y, wd=1./np.power(sx,2), we=1./np.power(sy,2))
mydata = odrpack.RealData(x, y, sx=sx, sy=sy)

myodr = odrpack.ODR(mydata, linear, beta0=[1., 2.])
myoutput = myodr.run()
myoutput.pprint()

比我們得到的

Beta: [ 1.92743947 -0.94409236]
Beta Std Error: [ 0.03117086  0.11273067]
Beta Covariance: [[ 0.02047196  0.06690713]
 [ 0.06690713  0.26776027]]
Residual Variance: 0.04746112419196648
Inverse Condition #: 0.10277763521624257
Reason(s) for Halting:
  Sum of squares convergence

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM