Estoy tratando de encajar algunos puntos de datos con y incertidumbres en python. Los datos están etiquetados en python como x, y y yerr. Necesito hacer un ajuste lineal en esa información en la escala loglog. Como referencia, si los resultados aptos son adecuadamente, comparo los resultados de pitón con los de SciDAVisCómo incluir correctamente las incertidumbres en el ajuste con python
que probé curve_fit con
def func(x, a, b):
return np.exp(a* np.log(x)+np.log(b))
popt, pcov = curve_fit(func, x, y,sigma=yerr)
, así como kmpfit con
def funcL(p, x):
a,b = p
return (np.exp(a*np.log(x)+np.log(b)))
def residualsL(p, data):
a,b=p
x, y, errorfit = data
return (y-funcL(p,x))/errorfit
a0=1
b0=0.1
p0 = [a0,b0]
fitterL = kmpfit.Fitter(residuals=residualsL, data=(x,y,yerr))
fitterL.parinfo = [{}, {}]
fitterL.fit(params0=p0)
y cuando Estoy tratando de ajustar los datos con uno de esos sin incertidumbres (es decir, establecer yerr = 1), todo funciona bien y los resultados son idénticos a los de scidavis. Pero si configuro el yerr a las incertidumbres del archivo de datos, obtengo algunos resultados inquietantes. En python obtengo, por ejemplo, a = 0,86 y en scidavis a = 0,14. Leí algo acerca de que los errores están incluidos como ponderaciones. ¿Debo cambiar algo para calcular el ajuste correctamente? ¿O qué estoy haciendo mal?
edición: aquí es un ejemplo de un archivo de datos (x, y, yerr)
3.942387e-02 1.987800e+00 5.513165e-01
6.623142e-02 7.126161e+00 1.425232e+00
9.348280e-02 1.238530e+01 1.536208e+00
1.353088e-01 1.090471e+01 7.829126e-01
2.028446e-01 1.023087e+01 3.839575e-01
3.058446e-01 8.403626e+00 1.756866e-01
4.584524e-01 7.345275e+00 8.442288e-02
6.879677e-01 6.128521e+00 3.847194e-02
1.032592e+00 5.359025e+00 1.837428e-02
1.549152e+00 5.380514e+00 1.007010e-02
2.323985e+00 6.404229e+00 6.534108e-03
3.355974e+00 9.489101e+00 6.342546e-03
4.384128e+00 1.497998e+01 2.273233e-02
y el resultado:
in python:
without uncertainties: a=0.06216 +/- 0.00650 ; b=8.53594 +/- 1.13985
with uncertainties: a=0.86051 +/- 0.01640 ; b=3.38081 +/- 0.22667
in scidavis:
without uncertainties: a = 0.06216 +/- 0.08060; b = 8.53594 +/- 1.06763
with uncertainties: a = 0.14154 +/- 0.005731; b = 7.38213 +/- 2.13653
Gracias por su respuesta. De hecho, cambia el resultado un poco, pero lamentablemente todavía está muy lejos del resultado scidavis ... –
¿Podría publicar algunos datos y el resultado de scidavis para que los que no tengamos instalado scidavis podamos experimentar? – unutbu
ver mi edición anterior. lamentablemente no puedo agregar imágenes todavía :( –