2012-10-03 6 views
5

Hallo Ich möchte Fehler in Steigung und Achsenabschnitt berechnen, die von scipy.polyfit Funktion berechnet werden. Ich habe (+/-) Ungewissheit für Ydata, also wie kann ich es für die Berechnung der Unsicherheit in Steigung und Schnittpunkt einbeziehen? Mein Code ist,Wie berechnet man Fehler für polynomische Anpassung (in Steigung und Schnittpunkt)

from scipy import polyfit 
import pylab as plt 
from numpy import * 

data = loadtxt("data.txt") 
xdata,ydata = data[:,0],data[:,1] 


x_d,y_d = log10(xdata),log10(ydata) 
polycoef = polyfit(x_d, y_d, 1) 
yfit = 10**(polycoef[0]*x_d+polycoef[1]) 


plt.subplot(111) 
plt.loglog(xdata,ydata,'.k',xdata,yfit,'-r') 
plt.show() 

Vielen Dank

Antwort

4

Sie scipy.optimize.curve_fit statt polyfit nutzen könnten. Es hat einen Parameter sigma für Fehler von YData. Wenn Sie Ihren Fehler für jeden y-Wert in einer Folge haben yerror (so dass yerror hat die gleiche Länge wie Ihre y_d Sequenz) können Sie tun:

polycoef, _ = scipy.optimize.curve_fit(lambda x, a, b: a*x+b, x_d, y_d, sigma=yerror) 

Für eine Alternative siehe Absatz Montage ein Potenzgesetz zu Daten mit Fehlern in der Scipy Cookbook.

+0

Danke für die Antwort. Ja, ich habe diese Power-Law-Funktion gesehen, aber wie kann ich meinen +/- Fehler mit YData kombinieren? Zum Beispiel sieht meine YData aus, Y = 5 (+0,1, -0,4), 4,7 (+0,7, -0,4), etc. –

+0

@viralparekh Sie haben eine asymmetrische Abweichung Ihrer Werte? Habe das noch nie gesehen :) Könntest du ein wenig darauf eingehen, warum sich die positive Abweichung von der negativen unterscheidet? – halex

+0

Es zeigt Vertrauensbereich. Also liegt der 1. Y-Wert zwischen (5.09 und 4.59) und so weiter. Es zeigt nur + ve (hoch) und -ve (niedrig) Fehler. –

Verwandte Themen