Para explicar las funciones de autocovarianza y autocorrelación nos ayudaremos de un fichero que contiene los datos mensuales de consumo de gasolina en España entre enero de 1966 y agosto de 1977.
gas <- scan('http://verso.mat.uam.es/~joser.berrendero/datos/gas6677.dat')
plot(gas)
Procedemos a convertir los datos en una serie temporal.
gas.ts = ts(gas, start = c(1966,1), frequency = 12)
print(gas.ts)
## Jan Feb Mar Apr May Jun Jul Aug
## 1966 92.718 91.380 111.643 118.888 119.432 127.796 158.943 178.013
## 1967 113.661 108.224 142.256 129.835 150.735 149.554 185.792 201.758
## 1968 135.951 126.615 146.647 165.822 163.365 169.294 215.538 233.427
## 1969 154.844 143.552 171.573 188.322 192.756 195.296 252.288 268.379
## 1970 179.759 173.821 211.387 210.551 218.371 232.057 294.173 312.700
## 1971 193.916 188.375 236.187 249.037 235.957 258.980 321.085 334.562
## 1972 225.010 225.742 265.159 271.986 290.953 285.108 362.687 386.347
## 1973 268.578 256.063 312.041 326.741 315.157 353.016 403.662 451.098
## 1974 289.186 296.881 302.589 334.091 325.790 337.782 423.297 454.172
## 1975 317.760 298.188 363.429 350.203 372.149 371.877 472.458 485.517
## 1976 352.200 334.938 372.891 397.388 385.657 416.961 492.480 512.209
## 1977 363.367 342.979 384.936 421.718 402.877 427.615 538.254 528.007
## Sep Oct Nov Dec
## 1966 143.385 127.179 114.403 124.900
## 1967 166.565 148.048 131.581 141.315
## 1968 184.402 178.432 155.179 163.355
## 1969 218.810 203.545 172.148 198.381
## 1970 251.891 235.560 202.876 224.383
## 1971 276.932 258.269 233.532 251.755
## 1972 314.205 292.124 261.740 291.810
## 1973 356.811 352.566 305.580 410.614
## 1974 353.727 353.413 315.272 341.902
## 1975 406.223 377.262 329.794 384.350
## 1976 411.514 392.380 369.671 400.243
## 1977
plot(gas.ts)
Observamos que la serie no es estacionaria ya que presenta una tendencia creciente y una clara estacionalidad, siendo el consumo de gasolina mayor en los meses de verano.
Al ser más interesante en este caso trabajar con una serie estacionaria (sin tendencia ni estacionalidad y con variabilidad constante), pasaremos a transformar la serie original.
Estabilización de la varianza:
x = log(gas.ts)
plot(x)
Eliminación de la tendencia:
dif1.x = diff(x)
plot(dif1.x)
Eliminación de la estacionalidad:
dif12.dif1.x = diff(dif1.x, lag=12)
plot(dif12.dif1.x)
serie_estacionaria<-dif12.dif1.x
serie_estacionaria
## Jan Feb Mar Apr May
## 1967 -0.0344811884 0.0731454538 -0.1542394309 0.1446936163
## 1968 0.0555961687 -0.0221263599 -0.1265477459 0.2142504234 -0.1641868773
## 1969 -0.0148106737 -0.0045772790 0.0314341409 -0.0297421539 0.0381998394
## 1970 -0.0450647710 0.0421297888 0.0173530496 -0.0971071043 0.0131956704
## 1971 -0.0473569784 0.0046006122 0.0305246645 0.0569402883 -0.0904194419
## 1972 0.0336177909 0.0322383272 -0.0652523154 -0.0275566673 0.1213630425
## 1973 0.0293500157 -0.0509657752 0.0367741897 0.0206122704 -0.1035080285
## 1974 -0.2676219897 0.0739791720 -0.1786670175 0.0530047432 0.0109364718
## 1975 0.2773557553 -0.0898335262 0.1788157306 -0.1361089302 0.0859417343
## 1976 -0.0141266343 0.0133184648 -0.0905190829 0.1006979500 -0.0907460854
## 1977 -0.0093041201 -0.0074903660 0.0080671542 0.0276327759 -0.0157407798
## Jun Jul Aug Sep Oct
## 1967 -0.0755538673 -0.0011401681 -0.0308697430 0.0246399254 0.0020886991
## 1968 0.0435156838 0.0245301429 -0.0027090247 -0.0440679016 0.0849384973
## 1969 -0.0225586713 0.0145545561 -0.0179032978 0.0315548501 -0.0394060819
## 1970 0.0476963640 -0.0188699372 -0.0007526337 -0.0120514229 0.0052858665
## 1971 0.0323136736 -0.0222299516 -0.0199599067 0.0271975852 -0.0027395151
## 1972 -0.1133949399 0.0257171006 0.0220793979 -0.0176400653 -0.0030969582
## 1973 0.1337361406 -0.1066076351 0.0479109907 -0.0277880907 0.0608988784
## 1974 -0.0772947394 0.0916088309 -0.0407047961 -0.0154721708 0.0110803066
## 1975 -0.0368788722 0.0137123563 -0.0431364721 0.0716385191 -0.0730742792
## 1976 0.0787754761 -0.0729245413 0.0120134457 -0.0405776708 0.0263500802
## 1977 -0.0184523652 0.0636461513 -0.0584999207
## Nov Dec
## 1967 -0.0120456734 -0.0164173052
## 1968 -0.0217143730 -0.0200223522
## 1969 -0.0279042518 0.0904883948
## 1970 0.0181618356 -0.0410753940
## 1971 0.0486881384 -0.0256221785
## 1972 -0.0091441603 0.0336139812
## 1973 -0.0331995036 0.1866907294
## 1974 0.0288246422 -0.2143536023
## 1975 -0.0202701027 0.0719969907
## 1976 0.0748543521 -0.0736269369
## 1977
Una vez que tenemos una serie estacionaria, pasaremos a explicar las funciones de autocovariza y autocorrelación.
Entendemos por covarianza el valor que indica el grado de variación conjunta de dos variables aleatorias respecto a sus medias. Es el dato básico para determinar si existe una dependencia entre ambas variables. Una covarianza positiva indica que cuando una variable crece la otra variable también lo hace, es decir, tienen una relación directa. Por otro lado, una covarianza negativa indica que cuando una variable crece la otra decrece, manteniendo una relación inversa.
La función de autocovarianzas de un proceso estocástico \((Y_t)_{t\in I}\)es una función que describe las covarianzas entre las variables del proceso en cada par de instantes:
\(\gamma_{t,s}=Cov(Y_{t},Y_{t+s})= E[(Y_{t}-\mu_{t})(Y_{t+s}-\mu_{t+s})],\; \;\;\;\;t,s\in I\)
En ocasiones en una serie de tiempo acontece, que los valores que toma una variable en el tiempo no son independientes entre sí, sino que un valor determinado depende de los valores anteriores. Entendemos por correlación el valor que nos indica si dos variables están o no relacionadas. Cuantifica en una escala de -1 a 1 si la relación existente entre dos variables es negativa o positiva.
La función de autocorrelación de un proceso estocástico \((Y_t) t\in I\) es una función de dos instantes que describe las correlaciones entre las variables en un par de instantes $t, s I $cualesquiera:
\(\rho_{t,s} = Cor(Y_{t},_{t+s})=\gamma_{t,s}/{\sqrt{\gamma_{t,s}\gamma_{t}}},\;\;t,s\in I\)
Si el proceso es estacionario, los momentos de segundo orden no dependen de t.
En R, con la función ACF podremos calcular tanto la función de autocovarianza como la función de autocorrelación. Procedemos a calcular ambas funciones con los datos anteriores convertidos en serie temporal estacionaria.
autocovarianza<-acf(serie_estacionaria, type ="covariance", plot = FALSE)
autocovarianza
##
## Autocovariances of series 'serie_estacionaria', by lag
##
## 0.0000 0.0833 0.1667 0.2500 0.3333 0.4167 0.5000
## 5.85e-03 -4.04e-03 2.07e-03 -1.17e-03 7.57e-04 -9.28e-04 9.61e-04
## 0.5833 0.6667 0.7500 0.8333 0.9167 1.0000 1.0833
## -7.99e-04 5.77e-04 -6.72e-05 -7.99e-04 2.21e-03 -3.28e-03 2.55e-03
## 1.1667 1.2500 1.3333 1.4167 1.5000 1.5833 1.6667
## -1.83e-03 1.47e-03 -1.25e-03 1.45e-03 -1.71e-03 1.53e-03 -1.10e-03
## 1.7500
## 7.33e-04
plot(autocovarianza)
autocorrelacion<-acf(serie_estacionaria, type ="correlation", plot = FALSE)
autocorrelacion
##
## Autocorrelations of series 'serie_estacionaria', by lag
##
## 0.0000 0.0833 0.1667 0.2500 0.3333 0.4167 0.5000 0.5833 0.6667 0.7500
## 1.000 -0.691 0.354 -0.200 0.129 -0.159 0.164 -0.137 0.099 -0.011
## 0.8333 0.9167 1.0000 1.0833 1.1667 1.2500 1.3333 1.4167 1.5000 1.5833
## -0.137 0.378 -0.562 0.436 -0.313 0.252 -0.214 0.248 -0.293 0.262
## 1.6667 1.7500
## -0.189 0.125
plot(autocorrelacion)
El gráfico de las autocorrelaciones para diferentes valores de k (retardos) constituye el correlograma.
Existen dos formas de medir la dependencia de las variables, es decir, la correlación existente entre dos variables separadas por k periodos.
En el retardo k, es la autocorrelación entre los valores de las series que se encuentran a k intervalos de distancia.
acf <-acf(serie_estacionaria, lag.max = 12)
acf
##
## Autocorrelations of series 'serie_estacionaria', by lag
##
## 0.0000 0.0833 0.1667 0.2500 0.3333 0.4167 0.5000 0.5833 0.6667 0.7500
## 1.000 -0.691 0.354 -0.200 0.129 -0.159 0.164 -0.137 0.099 -0.011
## 0.8333 0.9167 1.0000
## -0.137 0.378 -0.562
Vemos que 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 el retardo k, es la autocorrelación entre los valores de las series que se encuentran a k intervalos de distancia, no considerando la dependencia creada por los retardos intermedios existentes entre ambas
pacf <- pacf(serie_estacionaria, lag.max = 12)
pacf
##
## Partial autocorrelations of series 'serie_estacionaria', by lag
##
## 0.0833 0.1667 0.2500 0.3333 0.4167 0.5000 0.5833 0.6667 0.7500 0.8333
## -0.691 -0.235 -0.121 -0.022 -0.162 -0.045 -0.040 -0.026 0.094 -0.201
## 0.9167 1.0000
## 0.379 -0.258