Análisis básico de series de tiempo
para este primer ejemplo usaremos datos del consumo de combustible en españa de los años 1966 hasta 1977
gas = scan("http://verso.mat.uam.es/~joser.berrendero/datos/gas6677.dat")
Grafiquemos los datos
plot(gas)
Para tratar este vector numerico como una serie de tiempo, utilizaremos el comando ts (time-series objects)
gas.ts <- ts(gas, start = c (1966,1), frequency = 12 )
frequency = 12 meses es un anio (un ciclo ) start = inicio enero de 1966
print(gas.ts)
## Jan Feb Mar Apr May Jun Jul Aug Sep
## 1966 92.718 91.380 111.643 118.888 119.432 127.796 158.943 178.013 143.385
## 1967 113.661 108.224 142.256 129.835 150.735 149.554 185.792 201.758 166.565
## 1968 135.951 126.615 146.647 165.822 163.365 169.294 215.538 233.427 184.402
## 1969 154.844 143.552 171.573 188.322 192.756 195.296 252.288 268.379 218.810
## 1970 179.759 173.821 211.387 210.551 218.371 232.057 294.173 312.700 251.891
## 1971 193.916 188.375 236.187 249.037 235.957 258.980 321.085 334.562 276.932
## 1972 225.010 225.742 265.159 271.986 290.953 285.108 362.687 386.347 314.205
## 1973 268.578 256.063 312.041 326.741 315.157 353.016 403.662 451.098 356.811
## 1974 289.186 296.881 302.589 334.091 325.790 337.782 423.297 454.172 353.727
## 1975 317.760 298.188 363.429 350.203 372.149 371.877 472.458 485.517 406.223
## 1976 352.200 334.938 372.891 397.388 385.657 416.961 492.480 512.209 411.514
## 1977 363.367 342.979 384.936 421.718 402.877 427.615 538.254 528.007
## Oct Nov Dec
## 1966 127.179 114.403 124.900
## 1967 148.048 131.581 141.315
## 1968 178.432 155.179 163.355
## 1969 203.545 172.148 198.381
## 1970 235.560 202.876 224.383
## 1971 258.269 233.532 251.755
## 1972 292.124 261.740 291.810
## 1973 352.566 305.580 410.614
## 1974 353.413 315.272 341.902
## 1975 377.262 329.794 384.350
## 1976 392.380 369.671 400.243
## 1977
Ahora que tenemos una variable que es un objeto orientado a tiempo, podemos tener una grafica en la cual se entienda la periodicidad de los aumentos del consumo de gas per capita
plot(gas.ts)
Ahora haremos una comparacion interanual del aumento del consumo de combustible
boxplot (gas.ts ~ cycle(gas.ts))
Entendamos los ciclos del comportamiento de consumo de gasolina per capita
cycle(gas.ts)
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 1966 1 2 3 4 5 6 7 8 9 10 11 12
## 1967 1 2 3 4 5 6 7 8 9 10 11 12
## 1968 1 2 3 4 5 6 7 8 9 10 11 12
## 1969 1 2 3 4 5 6 7 8 9 10 11 12
## 1970 1 2 3 4 5 6 7 8 9 10 11 12
## 1971 1 2 3 4 5 6 7 8 9 10 11 12
## 1972 1 2 3 4 5 6 7 8 9 10 11 12
## 1973 1 2 3 4 5 6 7 8 9 10 11 12
## 1974 1 2 3 4 5 6 7 8 9 10 11 12
## 1975 1 2 3 4 5 6 7 8 9 10 11 12
## 1976 1 2 3 4 5 6 7 8 9 10 11 12
## 1977 1 2 3 4 5 6 7 8
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:
gas.ts.desc <- decompose(gas.ts)
plot(gas.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 gas.ts se observa que la serie no es estacionaria. La serie presenta una tendencia aparentemente lineal y una estacionalidad muy marcada (el consumo aumenta los meses de verano). 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.
Estabilizacion de la varianza
Antes de hacer la estabilizacion de la varianza, transformaremos nuestra serie a una logaritmica
plot(log(gas.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(gas.ts)
dif1.x <- diff(x)
plot(dif1.x)
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)
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)
Siempre se tiene que ρ(0)=1 . Las líneas discontinuas representan las bandas de confianza de ρ(k) de nivel 95% bajo la hipótesis de que la serie es un ruido blanco (incorrelada). En el ejemplo las autocorrelaciones más significativas son las correlaciones entre la observación de un mes y la del mes siguiente, y la observación de un mes con la del mismo mes del año siguiente.
En este caso usare datos de busquedas de la palabra revolucion desde 2004