2012-10-03 42 views
5

Hola Quiero calcular los errores en pendiente e intersección que se calculan mediante la función scipy.polyfit. Tengo (+/-) incertidumbre para ydata entonces, ¿cómo puedo incluirlo para calcular la incertidumbre en pendiente e intersección? Mi código es,Cómo calcular el error para el ajuste del polinomio (en pendiente e intersección)

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

Muchas gracias

Respuesta

4

Usted podría utilizar en lugar de scipy.optimize.curve_fitpolyfit. Tiene un parámetro sigma para errores de ydata. Si usted tiene su error para cada valor de y en una secuencia yerror (de modo que yerror tiene la misma longitud que la secuencia y_d) que puede hacer:

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

Para una alternativa ver el párrafo El montaje de una ley de potencia a datos con errores en el Scipy Cookbook.

+0

Gracias por la respuesta. Sí, he visto esa función de ley de poder, pero ¿cómo puedo combinar mi error +/- junto con ydata? Por ejemplo, mi ydata se ve así, Y = 5 (+0.1, -0.4), 4.7 (+ 0.7, -0.4), ... etc. –

+0

@viralparekh ¿Tiene una desviación asimétrica de sus valores? Nunca antes lo había visto :) ¿Podría explicar un poco sobre por qué la desviación positiva es diferente de la negativa? – halex

+0

Muestra la región de confianza. entonces el 1er valor de Y está entre (5.09 y 4.59) y así sucesivamente. Solo muestra el error + ve (alto) y -ve (bajo). –

Cuestiones relacionadas