2013-07-21 18 views
10

Używam Scipy CurveFit do dopasowania krzywej Gaussa do danych i jestem zainteresowany analizą jakości dopasowania. Wiem, że CurveFit zwraca użyteczną matrycę pcov, z której standardowe odchylenie każdego parametru dopasowania można obliczyć jako sqrt (pcov [0,0]) dla parametru popt [0].Określenie jakości dopasowania krzywej za pomocą Pythona SciPy

np. Fragment kodu dla tego:

import numpy as np 
from scipy.optimize import curve_fit 

def gaussian(self, x, *p): 
A, sigma, mu, y_offset = p 
return A*np.exp(-(x-mu)**2/(2.*sigma**2)) + y_offset 

p0 = [1,2,3,4] #Initial guess of parameters 
popt, pcov = curve_fit(gaussian, x,y, p0) #Return co-effs for fit and covariance 

‘Parameter A is %f (%f uncertainty)’ % (popt[0], np.sqrt(pcov[0, 0])) 

To daje wskazanie niepewności parametrów dopasowania dla każdego współczynnika w okucia równanie krzywej, ale zastanawiam się, jak najlepiej uzyskać całkowitą „jakość dopasowania parametru” tak, że mogę porównaj jakość dopasowania między różnymi równaniami krzywych (np. Gaussa, Super Gaussa itd.)

Mogę po prostu obliczyć procentową niepewność w każdym współczynniku, a następnie średnią, chociaż zastanawiam się, czy istnieje lepszy sposób? Od wyszukiwania w Internecie i ze szczególnie przydatnej strony "dobroć dopasowania" Wikipedii, zauważam, że jest wiele sposobów na opisanie tego. Zastanawiam się, czy ktoś wie, czy jakieś są wbudowane w pakiety Pythona/ma jakąkolwiek ogólną radę na temat dobrych sposobów kwantyfikacji dopasowania krzywej.

Dzięki za pomoc!

+1

Myślę, że możesz chcieć [błąd standardowy szacunku] (http://onlinestatbook.com/2/regression/accuracy.html). –

+0

Zobacz także odpowiedź: Pełna wydajność z curve_fit! http://stackoverflow.com/a/16528775/680232 –

Odpowiedz

4

Możesz użyć biblioteki ODRPACK zamiast elementu curve_fit. Wynik dopasowania przez ODRPACK zawiera oszacowania niepewności dla wszystkich parametrów dopasowania na kilka różnych sposobów, w tym standardowe błędy szacowanych parametrów, których dokładnie szukasz.

Kiedyś pracowałem z curve_fit, ale miałem do czynienia z tym samym problemem: brak szacunków błędów dopasowania parametrów. Teraz używam ODRPACK.