Sunteți pe pagina 1din 3

A priori, no conocemos los valores de a y b .

Para unos valores fijos de a y b ,


cometeremos un error en la medición j-ésima que será
exactamente: . Vemos que no existe un criterio unívoco para
encontrar a y b , dado que no existe ninguna recta que pase por todos los
pares . Para cualquier elección de **a* y b , nuestro modelo cometerá un
error al estimar alguno de los puntos medidos.

Podemos escoger los valores de a y b para los que el error máximo cometido es
menor, o aquellos para los que el error medio cometido es menor, o según otros
muchos criterios. Es bastante habitual en estadística buscar los valores de a y b que
hacen mínimo el error cuadrático total :

La función find_fit de SAGE permite ajustar un modelo cualquiera de tal forma


que se minimice el error cuadrático. La función acepta dos argumentos: los datos y
el modelo.

 Los datos deben ser una lista con todas las mediciones. Cada
elemento de la lista es una lista o tupla con los valores de las variables
en una medición. La última variable es la variable dependiente.
 El modelo es una función simbólica de varias variables que
representan las variables independientes y de otras variables que
representan los parámetros del modelo.

Aparte, acepta otros valores opcionales como parameters y variables para


indicar a find_fit cuál es la variable dependiente y cuáles son los parámetros del
modelo (más información en la documentación de find_fit ).

sage: var('T P a b')


(T, P, a, b)
sage: #Importante: marcamos nuestro modelo como dependiente de la
variable P
sage: #El resto de variables simbólicas se toman como parametros
sage: modelo(P) = a + b*P
sage: #find_fit devuelve los valores de los parametros
sage: #que minimizan el error cuadratico
sage: #Al pasar el argumento solution_dict=True,
sage: #devuelve los valores optimos como un diccionario
sage: parametros = find_fit(datos, modelo, solution_dict=True)
sage: print parametros
{b: 1.9017835212187804, a: 155.29648352710586}
sage: #Sustituimos los valores de a y b en el modelo
sage: modelo_ajustado = modelo.subs(parametros)
sage: print modelo_ajustado
sage: #Dibujamos los puntos originales y la recta a+b*P
sage: ajuste = plot(modelo_ajustado,(P,20,30),rgbcolor=(0,1,0))
sage: grafica = puntos + ajuste
sage: grafica.show(axes_labels=('Presion','Temperatura'))
P |--> 1.9017835212187804*P + 155.29648352710586

Usar el modelo
Hemos establecido el modelo:

Ahora podemos utilizarlo para predecir la temperatura a la que hervirá el agua a una
cierta presión.Por ejemplo, esperamos que si un día la presión es de 24.5 mmHg,
el agua hervirá a:

sage: modelo_ajustado(P=24.5)
201.890179796966

Ejemplo de ajuste no lineal


No es difícil demostrar que los parámetros que minimizan el error cuadrático en un
modelo lineal son únicos. Sin embargo, cuando usamos modelos no lineales, puede
haber varios mínimos de la función de error cuadrático total. En general, la
minimización es más complicada, y puede que el algoritmo no consiga encontrar los
valores óptimos de a y b sin ayuda. Esta vez no vamos a usar datos reales, sino
datos generados usando números aleatorios. Se trata de ver qué tal ajustamos un
modelo en un caso en el que conocemos cómo fueron generados los datos.

Obtenemos los datos usando la fórmula , y


sumando un número aleatorio extraído según una distribución normal de media 0 y
varianza 0.1:

sage: #Fijamos una semilla de numeros aleatorios para asegurar


sage: #que todas obtenemos el mismo resultado
sage: set_random_seed(123)
sage: datos = [(i, 0.8+1.5*i+1.2*sin(2*i-0.2) + 0.1*normalvariate(0,1))
... for i in srange(0, 4*pi, 0.4)]
sage: puntos = point(datos)
sage: puntos.show(axes_labels=('x','y'))

Tratamos ahora de ajustar a estos datos un modelo del tipo:

S-ar putea să vă placă și