2016-06-14 21 views
0

Ich versuche zu passen ein Modell mit LMFIT verwenden, kann ich einfach Folgendes tun:Fehler gewichtete fit Unsicherheiten in LMFIT

def loss_function(params): 
    residuals = [] 
    for x, measured in ...: 
    y = predict(x, params) 
    residuals.append(y - measured) 
    return residuals 

params = Parameters() 
params.add(...) 

model = Minimizer(loss_function, params) 
result = model.minimize(method='leastsq') 

Und bekommen sehr vernünftige Ergebnisse

Jetzt habe ich auch einige Unsicherheiten verbunden mit meiner measured Variable (zB Messfehler), so möchte ich die Punkte in meinen Residuen durch den Standardfehler gewichten, der damit verbunden ist (angenommen, dass es konstant 20% des gemessenen Wertes ist). Der Code wird nun in etwa so aussehen:

Das Problem ist, dass ich jetzt völlig unzuverlässige Montageergebnisse bekomme. Warum? Wie kann ich das beheben?

+0

Können Sie Daten hinzufügen? – Cleb

Antwort

0

Was ist die Natur von "total unzuverlässig"? Sie möchten wahrscheinlich, dass die Unsicherheiten in den Daten streng positiv sind - die Verwendung von measured* 0.2 könnte negative Werte oder Nullen ermöglichen. Beachten Sie, dass, wenn im Residuum NaNs oder Infs vorhanden sind, die Anpassung nicht gut funktioniert und die Parameterwerte mit ziemlicher Sicherheit auf ihren Startwerten belassen werden.

FWIW, Sie können Argumente an die Zielfunktion übergeben (für Messungen, Unsicherheiten usw.), indem Sie das fcn_args Argument zu Minimizer verwenden.