Está en la página 1de 8

Modelado matemático de los sistemas ecológicos Universidad de Oviedo

Facultad de Biología Curso 2007-2008

Práctica 2: Representación de datos y ajuste de curvas

1. Lectura de datos externos


Es posible incorporar a Matlab una colección de datos almacenados en un archivo Ascii1 . Los archivos
Ascii se conocen también como archivos de texto plano o de texto sin formato, y se pueden generar con
procesadores de texto elementales, como el Bloc de Notas de Windows o con el editor incluido en la
instalación de Matlab.
En lo que sigue, supondremos que disponemos de un archivo Ascii en el que los datos están dispuestos en
forma de tabla, es decir, en cada fila hay el mismo número de columnas, y los datos de una misma fila están
separados por espacios o por comas: este es el caso del archivo datos.txt que se muestra en la Figura 1.

Figura 1: Un archivo datos.txt creado con el Bloc de Notas.

Para incorporar el contenido del archivo datos.txt a una variable de Matlab, se puede seguir uno de estos
pasos:

load datos.txt crea una matriz datos cuyas filas y columnas coinciden con
las del archivo datos.txt.
a = load(’datos.txt’) crea una matriz a cuyas filas y columnas coinciden con las
del archivo datos.txt.

Si el directorio de trabajo de Matlab no coincide con aquel en el que se encuentra el archivo, hay que indicar
la ruta completa. Por ejemplo
>> a = load(’c:\temp\datos.txt’)

1.1. Ejercicio

Utiliza un editor de texto Ascii para crear un archivo de texto con los datos del censo de EE.UU. del
Ejercicio 7.3 de la Práctica 1. Guarda el archivo con el nombre censo1.txt y después lee sus datos con
Matlab e incorpóralos a:
1
El código Ascii (American Standard Code for Information Interchange) sirve para representar caracteres. Este código asigna
a cada carácter un número de 7 bits que puede ser almacenado por la memoria del ordenador. Debido al tamaño de ese número
(7 bits) ese código consta únicamente de 128(=27 ) caracteres que incluye las letras, números y algunos caracteres habituales.

1
2

una matriz censo1,

una matriz m.

Representa los datos del censo usando la orden plot.

1.2. Ejercicio

Utiliza un editor de texto Ascii para crear un archivo de texto con los datos del censo de la población2
española publicados por el Instituto Nacional de Estadística (www.ine.es) desde 1900 hasta 1991: Guarda

Año Población Año Población


1900 18616630 1950 28117873
1910 19990669 1960 30582936
1920 21388551 1970 33956047
1930 23677095 1981 37742561
1940 26014278 1991 39433942

Cuadro 1: Población de hecho en España en el período 1900-1991

el archivo con el nombre censo2.txt y después lee sus datos con Matlab e incorpóralos a

una matriz censo2,

una matriz m.

Representa los datos del censo usando la orden plot. Añade al gráfico anterior los datos de población
siguientes:

Año Población Año Población Año Población


1996 39669394 2000 40499791 2003 42717064
1998 39852651 2001 41116842 2004 43197684
1999 40202160 2002 41837894 2005 44108530

1.3. Ejercicio

El censo de un ratón de campo (Microtus arvalis) arroja los resultados siguientes

Tiempo (meses) No de individuos


0 2
2 5
6 20
10 109

Utiliza un editor de texto Ascii para crear un archivo de texto con los datos del censo. Después, lee esos
datos con Matlab y guárdalos en una matriz.
Representa los datos con la orden plot.
2
La población de derecho está formada por los residentes habituales (presentes o ausentes). La población de hecho la componen
los residentes presentes y los transeúntes.

2
Práctica 2: Representación de datos y ajuste de curvas 3

Si en el periodo de tiempo observado admitimos que la población crece de acuerdo con la ley de Malthus
N (t) = N0 er t , t ≥ 0,
utiliza los dos primeros datos del censo para determinar N0 y r. A continuación, representa gráficamente la
curva N (·) sobre la misma gráfica en la que están los datos.
Calcula una nueva función u(·) usando los dos últimos datos del censo. Incorpora esta nueva función a la
gráfica anterior.
Analiza los resultados.

1.4. Ejercicio

Los datos del censo de una población de paramecios son


Tiempo (meses) No de individuos
0 5
1 25
2 130
3 340
4 375
5 375

Guarda los datos en un archivo de texto e incorpóralos a una matriz de Matlab.


Representa gráficamente los datos: pinta una poligonal que pase por ellos. ¿Cuál parece ser el modelo de
crecimiento de la población?

2. Ajuste de curvas por mínimos cuadrados

2.1. El ajuste lineal y el coeficiente de correlación

Dada una colección de puntos del plano (t1 , N1 ), (t2 , N2 ), . . . , (tn , Nn ), y una recta N (t) = a + b t, es posible
calcular el error puntual
ei = N (ti ) − Ni ,
que expresa la diferencia entre el valor de la recta en ti y el valor de la ordenada Ni . Así, la suma de los
cuadrados de los errores
n n
2 1 X 2 1 X
S (a, b) = ei = (a + b ti − Ni )2
n n
i=1 i=1
sirve como medida de lo bien —o lo mal— que la recta N (t) = a + b t aproxima a la colección de puntos:

valores grandes de S 2 (a, b) indican que el modelo de ajuste mediante una recta —ajuste lineal— es
poco adecuado;
valores pequeños de S 2 (a, b) indican que el modelo de ajuste lineal puede ser adecuado.

El inconveniente del coeficiente S 2 (a, b) es que depende de las unidades de medida, y por tanto es sensible a
los cambios de escala. Se puede utilizar como medida del ajuste el valor de
n
1 X
(a + b ti − Ni )2
S 2 (a, b) n
i=1
= n ,
S 2 (N̄ , 0) 1 X
(N̄ − Ni )2
n
i=1

c 2005 Pablo Pérez



4

donde N̄ representa la media de los valores de {N1 , . . . , Nn }, esto es


N1 + . . . + Nn
N̄ = .
n
S 2 (a, b)
Se puede probar que no depende de las unidades de medida.
S 2 (N̄ , 0)

2.2. Ejercicio

Tiempo (meses) Población (miles)


1 5,1
2 7
3 8,9
4 11,1
5 13,2
6 14,8
7 17
8 18,9
9 21,1
10 23,1
¿Cuál de las siguientes rectas
N (t) = 1 + 3t, N (t) = 3 + 2t
ajusta mejor a la colección de puntos, en el sentido de los mínimos cuadrados? ¿Cuál es el coeficiente de
correlación para cada una de esas rectas?
Representa los datos y ambas rectas en una misma gráfica.

2.3. Cálculo de la recta de ajuste de mínimos cuadrados

Dada una colección de puntos del plano (t1 , N1 ), (t2 , N2 ), . . . , (tn , Nn ), los valores de a y de b de la recta
N (t) = a + b t que mejor se ajusta a esos datos en el sentido de los mínimos cuadrados, es decir, para la cual
n n
2 1 X 2 1 X
S (a, b) = ei = (a + b ti − Ni )2
n n
i=1 i=1

toma el menor valor posible, se obtienen imponiendo las condiciones


∂S 2
(a, b) = 0,
∂a

∂S 2
(a, b) = 0,
∂b
de donde se deduce  n
X
  n
X

 n ti  a Ni
 
 

 i=1     i=1
   = 


n
 X Xn  n
 X 
2 
ti ti N i ti
  
b
i=1 i=1 i=1
Así, basta resolver este sistema para encontrar los valores de a y de b. Una vez calculados, conviene determinar
el valor del cociente
S 2 (a, b)
;
S 2 (N̄ , 0)

4
Práctica 2: Representación de datos y ajuste de curvas 5

además, se puede probar que


S 2 (a, b)
0≤ ≤ 1;
S 2 (N̄ , 0)
así cuanto mas próximo esté el cociente a 0, más adecuado es el modelo de ajuste. No obstante, es más
habitual utilizar el coeficiente de correlación
S 2 (a, b)
R2 = 1 − .
S 2 (N̄ , 0)

Valores de R2 cercanos a 1 indican un buen ajuste del modelo lineal, mientras que valores cercanos a 0 indican
un mal ajuste del modelo lineal. En la práctica, podemos convenir en aceptar el modelo lineal N (t) = a + b t
si para a y b el coeficiente de correlación R2 es mayor que 0,9.

2.4. Ejercicio

Determina la recta que mejor se ajusta, en el sentido de los mínimos cuadrados, a los datos del Ejercicio 2.2.
Analiza la bondad del ajuste.
Representa gráficamente los datos y la recta de mejor ajuste mínimo-cuadrático.

2.5. Ejercicio

Determina la recta de mejor ajuste en el sentido de los mínimos cuadrados para los datos del censo de Estados
Unidos de 1790 1890. Analiza la bondad del ajuste.
Representa gráficamente los datos y la recta de mejor ajuste mínimo-cuadrático.

2.6. Ajuste mínimo cuadrático mediante curvas del tipo N (t) = N0 er (t−t0 )

Se trata de encontrar los valores de N0 y de r para los cuales la suma


n
X n
X
S 2 (N0 , r) = e2i = (N0 er (ti −t0 ) − Ni )2
i=1 i=1

sea lo mas pequeña posible.


Se podría pensar en imponer condiciones del tipo

∂S 2
(N0 , r) = 0,
∂N0

∂S 2
(N0 , r) = 0,
∂r
pero resolver estas ecuaciones es muy complicado, porque no se trata de un sistema lineal.
Una forma de abordar el problema consiste en aplicar la transformación

t ←→ T = t − t0 , N ←→ N̂ = ln N

tanto a los datos como a la función de ajuste, esto es, considerar que los datos no son

(t1 , N1 ), (t2 , N2 ), . . . , (tn , Nn ),

sino
(T1 , N̂1 ), (T2 , N̂2 ), . . . , (Tn , N̂n ), con Ti = ti − t0 y N̂i = ln Ni

c 2005 Pablo Pérez



6

y que la función de ajuste es

N̂ (T ) = ln N (t) = ln(N0 er (t−t0 ) ) = ln N0 + ln er T = ln N0 + r T ≡ A + B T, (con A = ln N0 y B = r),

que es una recta. Así que estamos en el caso anterior:



X n   n
X

 n Ti  A N̂i
 
 
 i=1   i=1 
   = 
  
 X n X n   n
 X 
Ti Ti2 N̂i Ti
   
B
i=1 i=1 i=1

Una vez calculados A y B, basta hacer

N0 = eA , r = B.

Después, es conveniente calcular


n
X n
X
S 2 (N0 , r) = e2i = (N0 er (ti −t0 ) − Ni )2
i=1 i=1

para analizar la bondad del ajuste (también se puede analizar la bondad del ajuste lineal de los datos
transformados).

2.7. Ejercicio

Ajusta mediante una exponencial los datos del censo del ratón de campo (Microtus arvalis) del Ejercicio 1.3.
Analiza la bondad del ajuste.
Representa gráficamente los datos y la exponencial de ajuste mínimo-cuadrático.

2.8. Ejercicio

Determina la exponencial de mejor ajuste en el sentido de los mínimos cuadrados para los datos del censo
de Estados Unidos. Analiza la bondad del ajuste.
Representa gráficamente los datos y la exponencial de ajuste mínimo-cuadrático.

2.9. Ajuste mínimo cuadrático mediante sigmoides

La solución del problema 


N
N ′ = r (1 − ) N, t ≥ t0

K
 N (t ) = N
0 0

es la sigmoide
N0 K
N (t) = .
N0 + (K − N0 ) e−r (t−t0 )
Por tanto, el ajuste mínimo cuadrático de una colección de datos

(t1 , N1 ), (t2 , N2 ), . . . , (tn , Nn ),

consiste en determinar los parámetros N0 , K y r para los cuales la suma


n
X n
X
S 2 (N0 , K, r) = e2i = (N (ti ) − Ni )2
i=1 i=1

6
Práctica 2: Representación de datos y ajuste de curvas 7

sea lo mas pequeña posible.


Si se aborda el problema directamente, es decir, imponiendo las tres condiciones

∂S 2
(N0 , K, r) = 0,
∂N0

∂S 2
(N0 , K, r) = 0,
∂K

∂S 2
(N0 , K, r) = 0,
∂r

obtendríamos un sistema de ecuaciones que es muy complicado de resolver, porque no se trata de un sistema
lineal.
Se puede intentar una transformación adecuada de los datos y de la curva de ajuste, pero las transformaciones
útiles dependen de que se conozca previamente la población límite K.
Se puede recurrir a métodos numéricos para intentar obtener una solución aproximada del problema. Con
Matlab3 , se puede utilizar la orden fminsearch, que sirve para calcular mínimos locales de funciones:

v=fminsearch(S,v0) Calcula un mínimo local v de la función escalar S, mediante


un proceso iterativo que comienza en v0.

La función f puede definirse de varias formas: por ejemplo, puede estar construida mediante un M-archivo
de función. El único argumento de entrada de S puede ser un escalar o un vector; el argumento de salida
debe ser un escalar. Es decir
S : RN → R

Ejemplo

Consideremos los datos del Ejercicio 1.1 referidos al censo de Estados Unidos. Para determinar la curva

N0 K
N (t) =
N0 + (K − N0 ) e−r (t−t0 )

de mejor ajuste, basta escribir un archivo de función S.m como el que aparece a continuación (obsérvese que
se ha considerado como instante inicial t0 el primer valor del vector t de los tiempos):

S.m
function y = S(v)
%
t = [1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900 1910 1920 1930];
N = [3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76.0 92.0 106.5 123.2];
%
% Calcula el valor de la curva logistica en cada "t" y lo guarda en "NN"
NN = v(1) * v(2) ./ (v(1) + (v(2) - v(1)) * exp( -v(3)*(t-t(1)) ));
%
% Calcula la suma de los cuadrados de las desviaciones y lo guarda en "y"
y = sum((NN - N).^2);

3
Si se ha instalado la Toolbox de Optimización, también se puede utilizar la orden lsqcurvefit, que está especialmente
diseñada para resolver problemas de mínimos cuadrados.

c 2005 Pablo Pérez



8

Después, basta utilizar la orden fminsearch adecuadamente:


>> p = fminsearch(’S’,[3.9, 170, 0.5])
p =
3.9974 202.2683 0.0310
es decir, los parámetros buscados son
N0 = 3,9974, K = 202,2683, r = 0,0310
y la sigmoide es
808,5517
N (t) =
3,9974 + 198,2709 e−0,0310 (t−1790)
Finalmente, conviene analizar la bondad del ajuste y representar los puntos y la sigmoide sobre una misma
gráfica, como se muestra en la Figura 2.
140

120

100

80

60

40

20

0
1800 1850 1900

Figura 2: Ajuste mínimo cuadrático de los datos del censo de EE.UU mediante una sigmoide

2.10. Ejercicio

Determina la sigmoide que mejor se ajusta, en el sentido de los mínimos cuadrados, a los datos de población
española del Ejercicio 1.2.

2.11. Ejercicio

Utiliza la orden fminsearch para determinar la curva del tipo


N (t) = N0 er (t−t0 )
que mejor ajusta, en el sentido de los mínimos cuadrados, a los datos del Ejercicio 1.3. Analiza la bondad
del ajuste.
Compara los resultados obtenidos con los del Ejercicio 2.7.

2.12. Ejercicio

Repite el Ejercicio 2.8 utilizando en este caso la orden fminsearch. Compara los resultados obtenidos en
cada caso.

También podría gustarte