2017-10-02 4 views
1

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() 

Répondre

0

Le message d'erreur n'a rien à voir avec vos valeurs de départ. Je ne suis pas sûr si le ODR peut gérer ces données, car il est pratiquement x,y,z. Mon interprétation est qu'il compte les membres de x et y, qui est N=2 chacun (tableaux, mais néanmoins) et compare cela à vos paramètres libres, qui est NP=4, donc NP>N.