ANALISIS DE SERIES DE TIEMPO
Para este ejercicio usaremos datos de comida en mexico del año 2004 a 2021
library(readr)
comida <- read_csv("comida.csv")## Rows: 214 Columns: 2
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## dbl (2): Mes, comida
##
## 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(comida)head(comida[ ,2])## # A tibble: 6 x 1
## comida
## <dbl>
## 1 51
## 2 65
## 3 43
## 4 38
## 5 66
## 6 64
Tenemos un vector numerico llamado “comida”
Grafiquemos los datos
plot(comida)Ahora transformaremos este vector numerico a un objeto de serie de tiempo
comida.ts <- ts(comida[, 2], start = c(2004,1), frequency = 12)Datos: comida 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(comida.ts)## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2004 51 65 43 38 66 64 52 41 76 50 53 41
## 2005 52 51 68 51 62 51 40 34 62 55 59 45
## 2006 47 47 57 41 51 40 42 34 50 61 57 52
## 2007 46 50 43 39 38 47 34 40 49 56 55 43
## 2008 47 52 41 49 46 43 39 38 51 54 51 46
## 2009 53 51 48 41 44 40 36 37 45 55 54 42
## 2010 46 55 44 42 43 47 40 38 54 48 53 41
## 2011 47 51 46 42 43 43 38 38 45 50 50 37
## 2012 44 48 47 43 46 44 38 39 49 54 51 37
## 2013 48 49 47 56 48 49 43 45 52 56 56 47
## 2014 55 57 56 54 57 56 49 51 56 66 58 54
## 2015 59 62 58 67 61 66 54 59 65 70 65 56
## 2016 58 65 60 59 59 62 54 52 63 69 65 56
## 2017 62 68 67 64 65 67 63 59 66 73 72 62
## 2018 68 71 68 65 71 69 64 67 74 78 71 66
## 2019 70 72 78 72 72 74 69 66 76 81 74 68
## 2020 77 76 71 77 96 92 100 89 84 80 79 73
## 2021 77 83 81 78 81 79 76 72 76 78
Ahora grafiquemos con respecto al tiempo
plot(comida.ts)Ahora para hacer una comparacion entre los meses de cada año todos los eneros por ejemplo seran una poblacion buscando comida
esto lo haremos a traves de un grafico de caja y bigote
boxplot(comida.ts ~ cycle(comida.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 \]
comida.ts.desc <- decompose(comida.ts)
plot(comida.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 comida.ts se observa que la serie no es estacionaria. Presenta una tendencia aparentemente lineal y una estacionalidad muy marcada. Además, la amplitud de las fluctuaciones aumenta con el tiempo por lo que la variabilidad tampoco es constante. 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: 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(comida.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(comida.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)Las funciones de autocovarianza y autocorrelaciones
Transformamos la serie del consumo de gasolina de manera que un modelo estacionario sea apropiado para la serie transformada. El siguiente código se puede utilizar para representar el correlograma de la serie. El correlograma es una representación gráfica de las autocorrelaciones ρ(k) , es decir, las correlaciones entre xt y xt+k en función de k
y = dif12.dif1.x
acf(y)Analisis de serie de tiempo utilizando datos de google trends
En este caso usare datos de busquedas de la palabra revolucion desde 2004