* Provide uncertainty of both a and b fit parameters.
This commit is contained in:
@@ -47,16 +47,29 @@ def linregr2d_SZ(x, y, sigma=None):
|
||||
detinv = 1.0 / (d11*d22 - d12*d21)
|
||||
a = (e1*d22 - e2*d12) * detinv
|
||||
b = (e2*d11 - e1*d21) * detinv
|
||||
|
||||
# Shiwei's old method of computing the uncertainty of the
|
||||
# y-intersect (sigma_a):
|
||||
varsum = sum((xx*d11 - d12)**2 * ww)
|
||||
var = varsum * detinv**2
|
||||
sigma = sqrt(var)
|
||||
|
||||
# New method based on NR chapter: sqrt(sigma_a2) must give
|
||||
# identical result to sigma or else something is screwy!
|
||||
sigma_a2 = d12 * (-detinv)
|
||||
sigma_b2 = d21 * (-detinv)
|
||||
|
||||
print sigma_a2
|
||||
print sigma_b2
|
||||
|
||||
return fit_result(
|
||||
fit_method='linregr2d_SZ',
|
||||
fit_model='linear',
|
||||
a=a,
|
||||
b=b,
|
||||
sigma=sigma,
|
||||
sigma_a=sqrt(sigma_a2),
|
||||
sigma_b=sqrt(sigma_b2),
|
||||
)
|
||||
|
||||
|
||||
@@ -70,7 +83,9 @@ def Test_1():
|
||||
'b': -0.82241012516149792,
|
||||
'fit_method': 'linregr2d_SZ',
|
||||
'fit_model': 'linear',
|
||||
'sigma': 0.00048320905704467775}
|
||||
'sigma': 0.00048320905704467775,
|
||||
'sigma_a': 0.00048320905704467786,
|
||||
'sigma_b': 0.080335909573397646}
|
||||
|
||||
My wlinreg tool (via 'dtextrap' shell script alias gives:
|
||||
|
||||
@@ -88,6 +103,7 @@ def Test_1():
|
||||
a = -1392.31823569246 +/- 0.000460341146124978 = -1392.31824(46)
|
||||
b = -0.822098515674071 +/- 0.0803118207916705 = -0.822(80)
|
||||
|
||||
which is close enough for this purpose!
|
||||
"""
|
||||
from wpylib.text_tools import make_matrix as mtx
|
||||
M = mtx("""
|
||||
|
||||
Reference in New Issue
Block a user