2017-07-06 64 views
0

我正在使用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() 

謝謝!

+0

你能告訴我們一個數據集? – MishaVacic

+0

你需要看數字還是滿足以下要求? 每個數據點是測量值的平均值x,y值,非對稱不確定度來自爲該數據點測量的最大值和最小值。 所以我得到了類似的東西; 平均值x,最大值x,最小值x,平均值y,最大值y,最小值 – jm22b

+0

這並不理想,但在實驗中存在實驗限制 – jm22b

回答

1

我只會給你用隨機數據的解決方案,我不能打擾導入數據

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 
+0

我不認爲這回答了我的問題 - 這是如何考慮到數據點的不對稱不確定性? – jm22b

+0

您可以根據需要創建sx和sy。例如,如果第一點爲-4.936(平均)-4.934(最大)-4.938(min),則該值爲0.002。 – MishaVacic

+0

這是一個罕見的具有對稱不確定性的數據點。他們大多數不是那樣的。例如,第二個數據點; -4.211(平均)-4.210(最大)-4.213(分) – jm22b