En Scipy, ¿cómo y por qué curve_fit calcula la covarianza de las estimaciones de los parámetros?
he estado usandoscipy.optimize.leastsq
para ajustar algunos datos. Me gustaría obtener algunos intervalos de confianza en estas estimaciones, por lo que veo en elcov_x
salida, pero la documentación es muy poco clara en cuanto a qué es esto y cómo obtener la matriz de covarianza para mis parámetros a partir de esto.
En primer lugar dice que es un jacobiano, pero en elnotas también dice que "cov_x
es una aproximación jacobiana al hessiano "por lo que no es en realidad un jacobiano sino un hessiano que utiliza una aproximación del jacobiano. ¿Cuál de estas afirmaciones es correcta?
En segundo lugar esta frase para mí es confusa:
Esta matriz se debe multiplicar por la varianza residual para obtener la covarianza de las estimaciones de los parámetros.curve_fit
.
De hecho, voy a ver el código fuente decurve_fit
donde lo hacen
s_sq = (func(popt, *args)**2).sum()/(len(ydata)-len(p0))
pcov = pcov * s_sq
que corresponde a multiplicarcov_x
pors_sq
pero no puedo encontrar esta ecuación en ninguna referencia. ¿Alguien puede explicar por qué esta ecuación es correcta? Mi intuición me dice que debería ser al revés ya quecov_x
se supone que es un derivado (jacobiano o hessiano), así que estaba pensando:cov_x * covariance(parameters) = sum of errors(residuals)
dóndesigma(parameters)
es lo que quiero.
¿Cómo conecto la cosa que curve_fit está haciendo con lo que veo en, por ejemplo? wikipedia:http://en.wikipedia.org/wiki/Propagation_of_uncertainty#Non-linear_combinations