Abortos otoñales: análisisde series temporales (IV)

En los tres números anteriores hemos introducido las series temporales. Para recordar diremos que una serie temporal [1] es una secuencia de datos medidos en determinados momentos y ordenados cronológicamente. Nos interesa especialmente su análisis porque podemos describir o explicar qué
ha sucedido con esa variable en el pasado y también porque queremos predecir cómo se comportará en el futuro.
Para recordar cómo podíamos matemáticamente  describir una serie temporal vimos que una serie temporal de datos es la suma (modelo aditivo) de varias componentes que podemos presentar como:

Valor observado = Tendencia + Estacionalidad + Irregular



Donde la tendencia es el comportamiento de la serie a largo plazo, la estacionalidad son los movimientos de oscilación dentro de un año y la irregularidad o valor aleatorio, son los movimientos
oscilatorios de la serie alrededor de los componentes anteriores no controlados por el modelo.

SEGUIMOS TRABAJANDO CON“TIMESERIES” EN R
Volvemos a cargar los datos con los que estuvimos trabajando y para ello, iniciaremos R y cargaremos antes el paquete “timeSeries” que nos permitirá realizar los análisis que queremos. Para ello iremos a la consola de R (donde cargamos habitualmente RCommander) e iniciaremos los paquetes “timeSeries” y “RCommander” escribiendo estas dos instrucciones:
library (timeSeries)
library (Rcmdr)
Una vez instaladas, cargaremos el archivo “abortionsmes.csv” .A estos datos les llamaremos “abortionsmes” igual que en los números anteriores. Verificaremos que los datos están cargados viendo que en RCommander, en la esquina superior izquierda, aparece la etiqueta “abortionsmes”. En los números anteriores vimos cómo descomponer nuestros datos en tres componentes: la tendencia, la estacionalidad y la componente aleatoria. Primero convertiremos nuestros datos en una serie temporal mediante la instrucción (que escribimos en la pantalla de instrucciones de RCommander):
 
abort.ts <- ts(abortionmes, frequency=12,start=c(2012,1))

Donde le decimos a R que nuestros datos “abortionsmes” son mensuales (frequency=12) y que
comienzan en el año 2012, correspondiendo el primer dato a enero de 2012 [start=c(2012, 1)].

Los componentes de las series temporales
Para descomponer la serie de datos temporales, escribiremos
en la pantalla de comandos de RCommander
la siguiente instrucción:

abort.sc <- decompose(abort.ts)
















Podemos ver que el mayor factor estacional se da para los meses de septiembre y octubre de cada año. Esto lo vimos anteriormente con un gráfico(figura 1):

plot(abort.sc)


Para desestacionalizar los datos de nuestra serie loque hicimos fue restar la componente estacional delos datos originales. Para ello ejecutaremos la siguiente instrucción en R:

abort.adj <- abort.ts – abort.sc$seasonal

Y tendremos los datos desestacionalizados. Ahora podemos hacer un gráfico de los datos desestacionalizados y de los datos originales (figura 2):

par(mfrow=c(1,2))
plot(abort.ts)
plot(abort.adj)



PREDICCIÓN DE FUTUROS VALORES
Para terminar esta serie de artículos sobre series temporales vamos a introducir cómo construir un
modelo matemático que nos permita predecir futu
ros valores o modelizar los que tenemos. Nuestraserie tiene estacionalidad y además tiene una tendencia al alza con el tiempo. Esto es interesanteya que el modelo que deberemos usar depende deestos factores.
Para modelizar esta serie, debemos primero tenerinstalado el paquete “forecast”. Para ello, iremosa la pantalla principal de R y en Paquetes/Instalarpaquete(s)…, elegiremos una localización para ladescarga, por ejemplo Spain (Madrid) y posteriormente elegiremos el paquete “forecast” de la lista.Una vez descargado, lo cargaremos en R mediante la instrucción:

library(forecast)

Y ya podremos comenzar a usar este paquete.


Función Holt-Winters
Vamos a usar una función denominada Holt-Winters. Es una función que modeliza mediante un al
goritmo exponencial suavizado, teniendo en cuenta que nuestros datos tienen tendencia y estacionalidad. Esta función estima el nivel, la pendiente yla estacionalidad de los datos en un determinadomomento del tiempo. El suavizado está controlado por tres parámetros: alfa, beta y gamma paralas estimaciones del nivel, de la pendiente b delcomponente de la tendencia y de la componenteestacional, respectivamente, en un momento deltiempo. Estos tres parámetros (alfa, beta y gamma) oscilan entre 0 y 1, de forma que un valor cercano a 0 significa que el valor de las últimas observaciones tiene poco peso específico en la predicción o modelización.
Para hacer predicciones con nuestros datos primero transformamos la serie temporal original en su
logaritmo (para tener una mejor linealidad y predicción) con la instrucción log(abortionmes.ts).
Luego, usaremos la función HoltWinters(), para poder hacer predicciones. Si escribimos en la pantalla de instrucciones de RCommander:

logabortionmes<-log(abortionmes.ts)

Transformamos los datos. Luego con:

abortionmes.forecast<-HoltWinters(logabortionmes)

Aplicamos la función HoltWinters() a los datos transformados y con:

abortionmes.forecast

Estimamos los parámetros alfa, beta y gamma. Esta es la salida que nos da RCommander:

> abortionmes.forecast
Holt-Winters exponential smoothing with trend and
additive seasonal component.
Call:
HoltWinters(x = logabortionmes)
Smoothing parameters:
 alpha: 0.4491101
 beta : 0
 gamma: 0.5925443

El valor alfa = 0,45 es relativamente bajo indicando que la estimación del nivel en cada momento
está basada en las observaciones recientes y en algunas observaciones más distantes en el tiempo. El valor beta = 0, indica que la estimación de la pendiente de la componente de la tendencia no cambia con el tiempo. Contrariamente, el valor de gamma = 0,59 es moderadamente alto indicando que la componente estacional en cada momento está basada en las observaciones más recientes.

Gráficos
Podemos ver un gráfico de los valores originales y los estimados con esta función mediante:
plot(abortionmes.forecast)



Obteniendo el gráfico que se observa en la figura 3. Podemos ver que las predicciones de incrementos de abortos en el otoño son bastante acertadas con esta función.
Para hacer predicciones futuras no incluidas en la serie original de datos, usaremos la función “forecast.HoltWinters()”. Nuestros datos originales eran desde enero de 2012 hasta agosto de 2015. Si queremos predecir los abortos entre septiembre de 2015 y marzo de 2016 (7 meses) y ver una gráfica, podemos escribir:






abortionmes.forecast2<-forecast.
HoltWinters(abortionmes.forecast, h=7)
plot.forecast(abortionmes.forecast2)



Y obtendremos el gráfico que se representa en la figura 4. Los valores predichos están en la línea azul y las bandas gris oscura y gris clara son los valores de los intervalos de confianza 80 % y 95 % respectivamente, con lo que tenemos un método que nos permite predecir qué va a ocurrir en nuestra granja con diferentes parámetros.


Documento para descargar: abortionsmes.csv

Comentarios

  1. El análisis estadístico me parece muy elegante. Obviamente, de cara al veterinario entiendo que habría que analizar qué componentes o variables influyen en esos resultados para tratar de cambiar la tendencia. Los análisis retrospectivos nos ayudan a ese ejercicio y, mi opinión, es que en este caso el análisis prospectivo o de "forecast" nos pone sobreaviso de lo que es posible que pase; pero como profesionales hemos de tomar medidas correctoras para evitarlo. Insisto gracias por el artículo y enhorabuena.

    ResponderEliminar

Publicar un comentario

Entradas populares