Para este ejercicio usaremos datos de las busquedas de año nuevo en el periodo de 2004-2020. Estos datos se encuentran disponibles en: https://trends.google.es/trends/explore?date=all&geo=MX&q=a%C3%B1o%20nuevo
library(readr)
NEWYEAR <- read_csv("NEWYEAR.csv")
## Rows: 214 Columns: 2
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr (2): Mes, año nuevo
##
## 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.
#gas <- scan("http://verso.mat.uam.es/~joser.berrendero/datos/gas6677.dat")
head(NEWYEAR[, 2])
## # A tibble: 6 x 1
## `año nuevo`
## <chr>
## 1 18
## 2 1
## 3 0
## 4 1
## 5 0
## 6 0
tenemos un vector numerico llamado “NEWYEAR”
Grafiquemos los datos
plot(NEWYEAR[, 2])
## Warning in xy.coords(x, y, xlabel, ylabel, log): NAs introducidos por coerción
Ahora transformaremos este vector numerico a un objeto de serie de tiempo
NEWYEAR.ts <- ts(NEWYEAR[, 2], start = c(2004,1), frequency = 12 )
datos: (NEWYEAR[, 2]) empieza la serie de tiempo (start): enero de 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(NEWYEAR.ts)
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2004 5 3 2 3 2 2 3 2 3 3 27 22
## 2005 6 7 3 3 7 3 2 3 11 13 21 26
## 2006 8 7 3 3 3 3 7 3 7 7 11 23
## 2007 5 17 3 3 3 3 3 3 11 7 21 23
## 2008 9 13 3 3 3 3 1 3 7 11 13 24
## 2009 10 7 3 3 3 3 3 3 7 7 17 31
## 2010 9 17 3 3 3 7 3 3 11 7 13 33
## 2011 12 21 7 7 3 3 3 3 7 7 13 36
## 2012 14 11 7 3 3 3 3 3 7 7 17 29
## 2013 12 13 7 3 3 3 3 3 7 7 13 35
## 2014 15 11 7 3 3 3 3 3 7 7 17 34
## 2015 16 17 3 3 3 3 3 3 7 7 17 4
## 2016 22 13 7 7 3 3 3 3 7 11 17 33
## 2017 20 7 3 3 3 3 3 3 7 7 17 32
## 2018 19 27 3 7 3 3 3 7 11 7 21 28
## 2019 18 21 3 3 3 3 3 3 11 11 17 25
## 2020 30 11 7 7 7 7 3 3 7 11 17 24
## 2021 34 27 7 7 7 7 7 7 7 7
Ahora grafiquemos con respecto al tiempo
plot(NEWYEAR.ts)
Ahora para hacer una comparacion entre los meses de cada anio todos los eneros por ejemplo seran una poblacion
esto lo haremos a traves de un grafico de caja y bigote
boxplot(NEWYEAR.ts ~ cycle(NEWYEAR.ts))
Componentes estructurales de una serie de tiempo:
Serie observada = Tendencia + Efecto Estacional + Residuos
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
$$
NEWYEAR.ts.desc <- decompose(NEWYEAR.ts)
plot(NEWYEAR.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).
En el gráfico de NEWYEAR.ts se observa que la serie no es estacionaria. La serie presenta una tendencia aparentemente lineal y una estacionalidad muy marcada (las busquedas aumentan en el mes de diciembre). 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: 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(NEWYEAR.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(NEWYEAR.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)