Je veux ajuster M = 2 ensembles de N = 3 observations (X, Y) en utilisant scipy.odr
en une seule étape d'ajustement, à partir de laquelle j'espère obtenir 2*M
les meilleures valeurs d'ajustement (estimations de pente et d'ordonnée à l'origine) dans chacun des M ensembles d'observations). En lisant la documentation scipy.odr
et quelques questions connexes de stackoverflow, il semble que cela devrait être possible, mais lorsque j'essaie d'utiliser l'exemple minimal suivant, le raccord ne parvient pas à converger (Reason(s) for Halting: NP < 1 or NP > N
).Ajustement ODR multidimensionnel
Je commence par une approximation assez bonne des meilleures valeurs beta
. Des idées pour lesquelles cela échoue si misérablement?
from pylab import *
from scipy import odr
x = array([[1.0,2.0,3.0],[1.1,2.1,3.1]])
y = array([[1.1,2.3,3.1],[5.9,7.0,8.2]])
sx = x*0 + .1
sy = y*0 + .1
def f(B, x):
out = x * 0
for k in range(x.shape[0]) :
out[k,:] = B[2*k] * x[k,:] + B[2*k+1]
return out
result = odr.ODR(
odr.RealData(x, y, sx = sx, sy = sy),
odr.Model(f), beta0 = array([1.,0.,1.,5.])
).run()
result.pprint()