Análisis de series temporales con R (III): Autocorrelación

Índice de Contenidos

Siguiendo con el tema de series temporales y el análisis de estacionariedad y raíces unitarias, en esta entrada vamos a tratar el concepto de la autocorrelación, cómo calcular la función de autocorrelación (ACF) y autocorrelación parcial (PACF) en el lenguaje de  programación R así como graficar un correlograma.

¿Qué es la autocorrelación en las series temporales?

Es un término estadístico que se utiliza para describir la presencia o ausencia de correlación en los datos de las series temporales, indicando, si las observaciones pasadas influyen en las actuales.

Por tanto, se puede decir que la autocorrelación hace referencia cuando los valores que toman una variable en el tiempo no son independientes entre sí, sino que un valor determinado depende de los valores anteriores.

El problema de la autocorrelación se denomina también frecuentemente de “correlación serial”.

Para medir la autocorrelación se suele usar:

  • La función de autocorrelación
  • La función de autocorrelación parcial

La función de autocorrelación (ACF)

  • Mide la correlación entre dos variables separadas por k periodos.
  • Mide el grado de asociación lineal que existe entre dos variables del mismo proceso estocástico.

La función de autocorrelación parcial (PACF)

  • Mide la correlación entre dos variables separadas por k periodos cuando no se considera la dependencia creada por los retardos intermedios existentes entre ambas.
  • Mide la autocorrelación que existe entre dos variables separadas k períodos descontando los posibles efectos debidos a variables intermedias.

La función ACF es usada para identificar el proceso de media móvil (MA) en un modelo ARIMA; mientras que la función PACF se usa para identificar los valores de la parte del proceso autoregresivo (AR).

Los gráficos generados a partir de estas funciones se denominan correlogramas, los cuales contienen bandas con un intervalo de confianza del 95%.

Vamos a trabajar con el dataset “lynx” que viene por defecto en R.

Este dataset contiene el número de linces atrapados cada año en Canadá, entre los períodos de 1821 y 1934.

data(lynx)

Linces <- lynx
class(Linces)
## [1] "ts"
head(Linces)
## [1]  269  321  585  871 1475 2821
plot(Linces)

plot of chunk unnamed-chunk-27

Aplicamos ACF:

acf(Linces, lag.max =20, plot =F)
## 
## Autocorrelations of series 'Linces', by lag
## 
##      0      1      2      3      4      5      6      7      8      9 
##  1.000  0.711  0.214 -0.189 -0.433 -0.502 -0.400 -0.148  0.218  0.501 
##     10     11     12     13     14     15     16     17     18     19 
##  0.514  0.283 -0.029 -0.303 -0.450 -0.461 -0.346 -0.098  0.223  0.426 
##     20 
##  0.404

Donde “lag.max” indica el número máximo de retardos para el cual se calculará.

Para ver el gráfico:

acf(Linces, lag.max =20, plot =T)

plot of chunk unnamed-chunk-29

En este caso, se omite la primera barra ya que corresponde a la autocorrelación con la misma observación, retraso/lag =0. Por ende, la segunda y tercera barra son significativas.

Si miramos la función de autocorrelación parcial:

pacf(Linces, lag.max =20, plot =F)
## 
## Partial autocorrelations of series 'Linces', by lag
## 
##      1      2      3      4      5      6      7      8      9     10 
##  0.711 -0.588 -0.039 -0.250 -0.094 -0.052  0.119  0.301  0.055 -0.081 
##     11     12     13     14     15     16     17     18     19     20 
## -0.089 -0.040 -0.099 -0.014 -0.113 -0.108 -0.006  0.116 -0.016 -0.018

Graficamos:

pacf(Linces, lag.max =20, plot =T)

plot of chunk unnamed-chunk-31

En este otro caso, la primera barra corresponde al primer retraso. La primera barra es entonces muy significativa, la segunda también pero en otro sentido al ser negativa.

Si comparamos lo anterior, con unos datos generados aleatoriamente y que tienen una distribución normal, (con media y varianza constantes) podemos observar que las funciones tanto ACF y PACF no son significativas:

datos <- ts(rnorm(800))
plot(datos)

plot of chunk unnamed-chunk-32

acf(datos, lag.max = 20, plot=T)

plot of chunk unnamed-chunk-33

pacf(datos, lag.max =20, plot =T)

plot of chunk unnamed-chunk-33

Para para aprender más casos prácticos de R para finanzas, ve a la página de finanzas cuantitativas.

Facebook
Twitter
LinkedIn

4 respuestas

    1. Hola Sergio!

      Gracias por tu comentario.

      La función ts() convierte un objeto a serie temporal, tal y como lo hago en la entrada, cuando genero una serie de datos aleatorios:

      datos <- ts(rnorm(800))

      Con esto, hago que esos datos sean de tipo "time series".

      Hay que tener presente que con ts(), necesitamos que los datos estén distribuidos de manera regular en la escala temporal utilizada, por ejemplo, si trabajamos con datos diarios, necesitamos que siempre haya un dato por día. Si este no es el caso y la serie temporal se compone de observaciones distribuidas de manera irregular en el tiempo, se deberá utilizar la función zoo().

      Los principales argumentos de la función ts() son:
      - data, equivale al vector o matriz de los valores de la serie temporal.
      - start, corresponde a la fecha de la primera observación.
      - end, corresponde a la fecha de la última observación. Se especifica de la misma manera que "start".
      - frequency, equivale al número de observaciones por unidad de tiempo.
      - class, por defecto es "ts" utilizado para una sola serie temporal, si se trabaja con varias series temporales c("mts", "ts", "matrix").

      Si retomamos el ejemplo anterior y quisiéramos construir una serie temporal de datos mensuales, con inicio en agosto de 1950:

      datos <- ts(rnorm(800), start=c(1950,8), frequency=12)

      Espero haberte ayudado. Cualquier duda o pregunta no dudes en escribir.

      Saludos,

      Conney

  1. Hola Conney, excelente explicación, he buscado por muchos lugares para entender estas funciones y ahora lo tengo muy claro, muchas gracias por eso, un consulta, usted tiene algun tutorial como estos pero para completar el modelo ARIMA? o sea ya lo has casi terminado, pero me encantaría ver la predicción hecha con el modelo. Gracias

  2. Hola. es posible que puedas indicar como hacer en Rstudio una simulación de una serie ARIMA con el método de monte carlo para analizar su estacionariedad .

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Picture of Conney Marulanda López
Conney Marulanda López
Analista de Mercado. Certificada en el examen de Asesor Financiero de la CNMV por la Universidad Carlos III de Madrid. Apasionada por los mercados financieros, el emprendimiento y las nuevas tecnologías.
Artículos relacionados
Actualizado octubre 5, 2025

Valor en Riesgo (VaR) con R

Actualizado agosto 7, 2019

Análisis y optimización de portafolios con R (II)

Actualizado agosto 6, 2019

Análisis y optimización de portafolios con R (I)

Suscríbete y accede a contenido exclusivo, análisis semanales y oportunidades reales.
Sin spam. Sin humo. Solo lo que te interesa para que tomes mejores decisiones financieras. Te puedes borrar cuando quieras. Tu privacidad es sagrada.

Responsable: Conney Marulanda López. Finalidad de la recogida y tratamiento de los datos personales: 
Gestionar la solicitud que realizas en este formulario de contacto. 
Legitimación: Consentimiento. 
Destinatarios: Los datos personales serán tratados a través de los servidores de esta web, gestionados por un hosting español: Raiola Networks. No se cederá ni comunicará a ningún tercero tus datos, excepto en los casos legalmente previstos o cuando la prestación de un servicio implique la necesidad de una relación contractual con un Encargado de Tratamiento. 
Derechos: Podrás ejercer tus derechos de acceso, rectificación, limitación y suprimir los datos en info@finanzaszone.com así como el derecho a presentar una reclamación ante una autoridad de control.
Información adicional: En Política de privacidad de finanzaszone.com, encontrarás información adicional sobre la recopilación y el uso de su información personal, incluida información sobre acceso, conservación, rectificación, eliminación, seguridad, y otros temas.