我正在使用Scipy的odrpack將一個線性函數擬合到一些在x和y維上都有不確定性的數據。每個數據點都有其不確定性,這是不對稱的。Scipy odrpack中的不對稱誤差條
我可以擬合使用對稱不確定性的函數,但這不是我的數據的真實表示。
我該如何執行此操作?
這是我的代碼到目前爲止。它接收輸入數據作爲命令行參數,我目前使用的不確定性只是隨機數。 (也有兩種情況發生,一種爲正數據點,另一種爲負數。原因與此問題無關)
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()
謝謝!
你能告訴我們一個數據集? – MishaVacic
你需要看數字還是滿足以下要求? 每個數據點是測量值的平均值x,y值,非對稱不確定度來自爲該數據點測量的最大值和最小值。 所以我得到了類似的東西; 平均值x,最大值x,最小值x,平均值y,最大值y,最小值 – jm22b
這並不理想,但在實驗中存在實驗限制 – jm22b