ANALISIS DE SERIES DE TIEMPO
Para este ejercicio usaremos datos de busquedas de “licuado” en mexico del año 2004 a 2021
library(readr)
licuado <- read_csv("licuado.csv")## Rows: 214 Columns: 2
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## dbl (2): Mes, licuado
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
View(licuado)head(licuado[ ,2])## # A tibble: 6 x 1
## licuado
## <dbl>
## 1 51
## 2 0
## 3 37
## 4 32
## 5 13
## 6 13
Tenemos un vector numerico llamado “licuado”
Grafiquemos los datos
plot(licuado)Ahora transformaremos este vector numerico a un objeto de serie de tiempo
licuado.ts <- ts(licuado[, 2], start = c(2004,1), frequency = 12)Datos: “licuado” Empieza la serie de tiempo (start): 2004 Cada año se compone de un ciclo de 12 meses: frequency = 12
Ahora vemos los datos que ya son una serie d tiempo
print(licuado.ts)## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2004 51 0 37 32 13 13 30 12 19 10 0 0
## 2005 9 0 17 16 22 0 0 7 0 27 11 20
## 2006 5 11 4 10 13 14 5 12 11 3 14 12
## 2007 7 10 8 25 14 23 15 20 12 13 15 5
## 2008 15 11 15 23 17 19 18 12 18 21 11 11
## 2009 12 19 18 24 16 22 23 20 12 11 9 13
## 2010 18 16 22 20 32 25 32 16 25 15 20 18
## 2011 25 25 26 32 27 22 26 24 22 19 21 16
## 2012 27 21 26 25 35 32 31 31 23 26 20 25
## 2013 30 42 33 40 47 37 40 38 35 34 38 28
## 2014 46 55 53 45 56 53 57 55 47 49 47 33
## 2015 66 67 61 65 64 67 68 59 59 55 51 46
## 2016 64 62 67 68 65 71 66 46 52 50 50 44
## 2017 51 76 70 63 62 66 66 64 49 53 59 38
## 2018 67 72 68 73 70 68 71 72 56 55 47 40
## 2019 71 69 80 74 71 71 69 66 56 57 61 46
## 2020 66 70 68 82 89 100 85 83 63 66 67 49
## 2021 77 90 90 89 75 78 69 71 71 70
Ahora grafiquemos con respecto al tiempo
plot(licuado.ts)Ahora para hacer una comparacion entre los meses de cada año todos los eneros por ejemplo seran una poblacion buscando “licuado”
esto lo haremos a traves de un grafico de caja y bigote
boxplot(licuado.ts ~ cycle(licuado.ts))DECOMPOSICION DE SERIES DE TIEMPO
En este modelo, la serie observada es el resultado de sumar una tendencia que representa el comportamiento a largo plazo de la serie, un efecto estacional que describe sus fluctuaciones periódicas y un componente residual que describe las variaciones a corto plazo, normalmente impredecibles.
Con R es muy sencillo obtener una descomposición estructural de este tipo. Se usa el comando decompose:
$$
serie observada = Tendencia + efecto estacional + residuos
$$
licuado.ts.desc <- decompose(licuado.ts)
plot(licuado.ts.desc, xlab="year")Esta descomposición se basa en métodos elementales:
la tendencia se calcula con una media móvil,
el efecto estacional se calcula promediando los valores de cada unidad de tiempo para todos los periodos (por ejemplo, todos los meses de enero si la serie es mensual) y luego centrando el resultado. Finalmente,
los residuos se obtienen restando a la serie observada las dos componentes anteriores.
La descomposicion solo es totalmente adecuada si se dispone de un número completo de periodos (por ejemplo, un múltiplo de 12 si la serie es mensual).
TRANSFORMACIONES BASICAS DE UNA SERIE
En el gráfico de licuado.ts se observa que la serie no es estacionaria ya que el consumo va en aumento con el tiempo por lo que la variabilidad tampoco es constante.. La serie presenta una tendencia aparentemente lineal y una estacionalidad muy marcada. Sin embargo, muchos modelos importantes de series temporales corresponden a series estacionarias (es decir, sin tendencia ni estacionalidad y con variabilidad constante). Antes de ajustar un modelo estacionario tenemos que transformar la serie original.
Estabilización de la varianza: Para estabilizar la variabilidad se suelen tomar logaritmos. Esta transformación funcionará bien cuando la variabilidad sea aproximadamente proporcional al nivel de la serie. Representamos la serie transformada mediante
plot(log(licuado.ts))Eliminacion de la tendencia: Una forma sencilla de eliminar una tendencia aproximadamente lineal es diferenciar la serie, es decir, considerar la serie de diferencias entre una observación y la anterior en lugar de la serie original. Si xt es una serie contenida en x, para calcular:
\[ \nabla x_t = x_t -x_{t-1} \]
x <- log(licuado.ts)
dif1.x <- diff(x)
plot(dif1.x)Eliminación de estacionalidad: Para eliminar la estacionalidad de una serie mensual se pueden tomar diferencias estacionales de orden 12. Si xt es la serie que queremos desestacionalizar, se trata de calcular:
\[ \nabla_{12} x_t = x_t - x_{t-12} \]
dif12.dif1.x <- diff(dif1.x, lag=12)
plot(dif12.dif1.x)