¡Finalmente encontré la respuesta a esta pregunta tan larga! Espero que esto al menos le ahorre a alguien unas pocas horas de investigación sin esperanza para este tema. Scipy tiene una función especial llamada curve_fit en su sección de optimización. Utiliza el método de mínimos cuadrados para determinar los coeficientes y, lo mejor de todo, le da la matriz de covarianza. La matriz de covarianza contiene la varianza de cada coeficiente. Más exactamente, la diagonal de la matriz es la varianza y por enraizamiento cuadrado de los valores, ¡se puede determinar el error estándar de cada coeficiente! Scipy no tiene mucha documentación para esto, así que aquí está un código de ejemplo para una mejor comprensión:
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plot
def func(x,a,b,c):
return a*x**2 + b*x + C#Refer [1]
x = np.linspace(0,4,50)
y = func(x,2.6,2,3) + 4*np.random.normal(size=len(x)) #Refer [2]
coeff, var_matrix = curve_fit(func,x,y)
variance = np.diagonal(var_matrix) #Refer [3]
SE = np.sqrt(variance) #Refer [4]
#======Making a dictionary to print results========
results = {'a':[coeff[0],SE[0]],'b':[coeff[1],SE[1]],'c':[coeff[2],SE[2]]}
print "Coeff\tValue\t\tError"
for v,c in results.iteritems():
print v,"\t",c[0],"\t",c[1]
#========End Results Printing=================
y2 = func(x,coeff[0],coeff[1],coeff[2]) #Saves the y values for the fitted model
plot.plot(x,y)
plot.plot(x,y2)
plot.show()
- Lo que esta función devuelve es fundamental, ya que define lo que se utiliza para encajar para el modelo
- Utilizando el función para crear algunos datos arbitrarios + algo de ruido
- países de diagonal a una matriz 1D la matriz de covarianza que es sólo una matriz normal de
- Square enraizamiento la varianza para obtener el error estándar (sE)
¡Gracias por el enlace! ¡Al final no usé mpfit pero la documentación me ayudó mucho a entender curve_fit para scipy! – syntaxing