¿Qué es una serie de tiempo?

Antes de intentar contestar la pregunta de la entrada, comparto 4 gráficos.
Temperatura_MediaSpeech_recordingNYSE_returnsCaminata_Aleatória

 

Las 4 gráficas anteriores muestras series de tiempo, de un modo muy informal las series de tiempo son datos con la etiqueta del tiempo. Ejemplo, el valor de la temperatura de la ciudad con el registro de la hora en la cual fue medida o el valor de la tasa de cambio registrada junto con el dato del día en que se observó ese valor. Claro con la idea de que la medición del tiempo es regular, se realiza cada hora o cada día o cada semana.

Las series de tiempo son una herramienta fácil para hacer un modelo y pronósticos a corto plazo. La ventaja es que hay muchos datos en la red que pueden ser estudiados como series de tiempo, que van desde indicadores económicos, sísmicos, datos financieros, etc.

La cantidad de técnicas, libros, artículos y campos de estudio de las series de tiempo es amplio, basta con echarle un vistazo en la red y sobran fuentes de donde aprender sobre el tema. La perspectiva también es distinta, por un lado desde el lado de matemáticas suelen ser aspectos teóricos, desde física suelen ser métodos no siempre estándar y la perspectiva de finanzas o economía suelen ser métodos que suelen tener mucha información y versan entre teoría y ejemplos prácticos, esto último debido a que muchos datos económicos son estudiados como series de tiempo.

El motivo de escribir estas entradas es compartir ejemplos y la metodología para hacer modelos lineales, o ARIMA y un poco sobre análisis espectral de una serie. Pero principalmente dar ejemplos.

Todas las explicaciones no serán exhaustivos, pero poco a poco les dejo texto a referencias para que se consulte con mayor detalle.

El software que uso en las entrada es R project, pero bien se puede usar o replicar los ejemplos con Gretl o con Eviews .

En Python se tienen las librerías de Pandas y en C++ hay varias librerías para manejo de series de tiempo, si les es más como usar estos dos lenguajes de programación está perfecto.

La única ventaja que veo con R es que si uno no sabe programar, basta copiar y pegar el código en su computadora para replicar los ejemplos y posteriormente podrá migrar a otro software más robusto con mayor facilidad, como Python.

Los datos de los ejemplos se pueden descargar de las páginas de Robert S. Shumway y de Ruey S.Tsay. Las fuentes de algunos datos las iré comentando en cada entrada.

Series de tiempo

Las series de tiempo son una herramienta fácil para hacer pronósticos a corto plazo cuando no se tiene mucha información sobre el sistema o el problema que se analiza.

Los principales modelos de series de tiempo son Medias Móviles (Moving Averages), Autorregresivos (Autoregressions)  y combinación de ellos  Autorregresivos con Medias Móviles (ARMA). Las herramientas estadísticas básicas que se usan son la autocorrelación y la autocorrelación parcial. Estas son las herramientas básicas para hacer algunos pronósticos no tan malos.

Pero la familia de modelos y técnicas para hacer predicciones por medio de series de tiempo van desde técnicas de Maquina de Soporte Vectorial, Redes Neuronales,  Cadenas de Markov Ocultas, Técnicas Lineales (Filtro de Kalman).

Faltaría agregas a todas las técnicas anteriores los métodos no lineales y las técnicas desarrolladas desde sistemas complejos para analizar series de tiempo, que son cercanas a las técnicas desarrolladas por los geofísicos.

Pero en las entradas solo hablaré de los métodos básicos y sobre todo de ejemplos de como analizar las series. Cada una de las técnicas anteriores requieren mucho más que unas cuantas entradas para explicarlas o hablar de ellas.

Hacemos unos ejemplos con datos generados en R para mostrar lo que es un ruido blanco, una caminata aleatoria, una serie generada por un proceso de medias móviles y procesos autoregressivo.

#Ruido blanco
ruido=rnorm(1000,0,1)
plot.ts(ruido)

#Otro modo de hacer la gráfica es definiendo la series de tiempo
ruido<-ts(ruido)
plot(ruido,col="2")

#Simulación de Series Media Movil

ma<-filter(ruido,rep=c(1,6)/6,sides=2)
plot.ts(ma,main="Media Móvile",col="4")

#Simulación de autoregresivo

rg<-filter(ruido,filter=c(1,-.9),method="recursive")
plot.ts(rg,col="4",main="Autoregresivo")

#Caminata Aleatoria

ruidoW=ruido+.2;x=cumsum(ruido);xd=cumsum(ruidoW)
plot.ts(xd,col="2",main="Caminata Aleatoria")
lines(x,col="5")
lines(.2*(1:1000),lty="dashed",col="3")

Ruido_BlancoMAAutoregresivoCaminata_Ale

Hacemos el cálculo de la autocorrelación y de la autocorrelación parcial para las dos series simuladas, es decir, el modelo de Medias Móviles y el Autorregresivo.

#Cálculo de la autocorrelaciones
acf(ma[3:997],main="Modelo de Medias Móviles")
acf(rg,main="Modelo de Autoregresivo")

#Cálculamos las autocorrelaciones parciales

pacf(ma[3:997],main="Modelo de Medias Móviles")
pacf(rg,main="Modelo de Autorregresivo")

 ACF_MAPacf_MAACF_AutorregresivoPacf_Autorregresivo

Estas últimas gráficas dan información de como ir determinando un modelo ARMA, donde se determina la parte generada por un proceso de medias móviles y otra parte por un autorregresivo. Con un poco de cuidado se observa que el número de barras negras de la primera gráfica corresponde con el número de elementos considerados para la media móvil y el número de barras negras en la última gráfica corresponde con el número de elementos para la regresión del modelo autorregresivo.

Es por ellos la importancia de estas dos funciones, que se pueden calcular en R project prácticamente con una función base.

Hago la gráfica de datos reales y se observará que tiene similitud con el modelo de Media Móvil con la única diferencia de que los datos tendrán una tendencia. Estos datos corresponde al promedio de nacimientos en la ciudad de New York desde Enero de 1946 hasta Diciembre de 1956.

#Datos del promedio de nacimientos en NY

births <- scan("http://robjhyndman.com/tsdldata/data/nybirths.dat")
seriedetiempo_births<- ts(births, frequency=12, start=c(1946,1))

plot(seriedetiempo_births,main="Porcentaje de nacimientos", xlab="Años",ylab="Porcentaje de nacimientos",col="2")

 Porcentaje_nacimientos_NY

Lo que trato de mostrar con esta última gráfica es que los modelos ARMA son un buen modelo, para analizar cierto tipo de datos. Además en el código se observa que no se descargan los datos , sino se toman desde la página de Rob J Hyndman, esto se puede hacer desde la función scan y todas las funciones que la requieren, como read.table.

Pero la parte de “analizar datos” o las series, es análogo a pensar que tenemos una “señal ruidosa”, es decir; busca desarrollar métodos para extraer la señal y eliminar el ruido que tienen. Esa es la idea en general del análisis de series de tiempo.

Cómo ejemplo del párrafo anterior hago un pequeño  ejemplo.

#Señal y ruido
t=1:750
c=2*cos(2*pi*t/50+.6*pi)
ruido2=rnomr(750)
par(mfrow=c(3,1))
plot.ts(c, main="Ejemplo de Señal y Ruido")
plot.ts(c+ruido2,col="2")
plot.ts(c+5*ruido2,col="4")

 Señal_y_ruido

La gráfica muestra una onda y como al agregarle un ruido blanco empieza a tener una forma parecida a datos que aparecen de la naturaleza o en cierto tipo de fenómenos.

Pensar en analizar una sola serie de tiempo, esta bien; pero puede presentarse o uno se puede preguntar si dos series tiene alguna relación y más aún si los fenómenos que las generan pueden parecer relacionados. Como ejemplo, es que exista una posible relación de la temperatura de la superficie del océano Pacífico Central con datos de la población de peces,  se revisan sus gráficas.

#Datos de SOI y de Poblaciones de Peces
#Considerando que ya se cargaron los datos en R o que se está en el directorio de los tatos

soi<-ts(soi,start=c(1950,1),frequency=12)
newfish<-ts(recruiment,star=c(1950,1),frequency=12)

par(mfrow=c(2,1))
plot(soi,main="Temperatura del Pacífico Central")
plot(newfish,main="Comportamiento de la Población de Peces")

 Dos_series_SOI-NF

La gráfica muestra que no es descabellado pensar que exita una relación entre las series de tiempo. Entonces para analizar su comportamiento lo que se hacemos uso de ACF y de la Correlación -Cruzada o Covarianza de las series.

#Relación entre series
par(mfrow=c(3,1))
acf(soi,50)
acf(newfish,50)
ccf(soi,newfish,50)

 Relación_entre_series

En otras entradas explico más respecto a lo que se hace con el manejo de varias series. En esta entrada solo pretendía mostrar algunos ejemplos y hablar un poco de lo que se requiere para hacer el análisis de las series y como elegir un modelo ARIMA para describir la serie y hacer algunos pronósticos.

 Referencias:

1.-http://anson.ucdavis.edu/~shumway/

2.-https://www.otexts.org/fpp/

3.-http://www.statsoft.com/Textbook/Time-Series-Analysis

4.-http://www.medellin.unal.edu.co/~ndgirald/members.htm

5.-http://pandas.pydata.org/pandas-docs/stable/timeseries.html

6.-Analysis of financial time series

7.-Nonlinear time series analysis

Anuncios

4 comentarios sobre “¿Qué es una serie de tiempo?

    1. Nelson, gracias por el comentario. Mi única intensión con cada entrada en el blog es quitar un poco la imagen de “complicado” o “complejo” de muchos de los temas, si bien no todos son triviales, tampoco todos requieren tener un posgrado para aprenderlos y aplicarlos. Espero que sea útil el material, otra recomendación además de las referencias que dejé en las entradas es, para procesamiento de señales el libro digital de Python for Signal Processing (https://github.com/unpingco/Python-for-Signal-Processing). Saludos!!

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s