Series Temporales

Angelo Santana

El siguiente archivo recoge datos mensuales de temperatura y precipitación medidos en el aeropuerto de Los Rodeos en Tenerife:

TF=read_excel("datos/losRodeosMensual.xlsx")

Para que R entienda estos datos como una serie temporal podemos proceder de dos formas:

TF.ts=ts(TF[,-1],start=c(1941,8),freq=12)

library(zoo)
TF.zoo=zoo(TF[,-1], order.by=TF$fecha)

Nos restringimos a los datos a partir de 1973, en que hay un registro casi completo en todas las variables:

Representamos la temperatura media de un mes frente a la temperatura media del mes anterior:

Representamos la temperatura media de un mes frente a la temperatura media de hace dos meses:

Representamos la temperatura media de un mes frente a la temperatura media de hace tres meses:

Representamos la temperatura media de un mes frente a la temperatura media de hace un año:

Modelos estacionarios

Corresponden a series temporales constantes en media y varianza, y con función de autocorrelación dependiente exclusivamente de la separación entre observaciones y no de cuando se producen éstas.

El patrón de estos modelos se identifica mediante la función de autocorrelación y la función de autocorrelación parcial.

Función de autocorrelación

Función de autocorrelación parcial

Serie diferenciada y desestacionalizada: correlograma

Serie diferenciada y desestacionalizada: correlograma parcial

El modelo AR(1) es de la forma:

\[X_{t}=\phi_{1}X_{t-1}+\varepsilon_{t}\]

Básicamente es un modelo de regresión simple en el que el valor de \(X\) en el instante \(t\) depende del valor de la misma variable en el instante \(t-1\).

Las variables \(\varepsilon_t\) se presuponen normales e incorreladas.

El modelo AR(2) es de la forma:

\[X_{t}=\phi_{1}X_{t-1}+\phi_{2}X_{t-2}+\varepsilon_{t}\]  

En general, el modelo AR(p) es de la forma:

\[X_{t}=\phi_{1}X_{t-1}+\phi_{2}X_{t-2}+\dots+\phi_{p}X_{t-p}+\varepsilon_{t}\]

Estimación del modelo AR(1)

El modelo AR(1) podría estimarse por mínimos cuadrados, como cualquier modelo de regresión:

## 
## Call:
## lm(formula = tempMedia ~ tempMedia1, data = tf73)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.0730 -1.4884 -0.2003  1.3217  7.5296 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  3.73480    0.45769    8.16 2.41e-15 ***
## tempMedia1   0.77466    0.02727   28.40  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.941 on 535 degrees of freedom
##   (1 observation deleted due to missingness)
## Multiple R-squared:  0.6012, Adjusted R-squared:  0.6005 
## F-statistic: 806.7 on 1 and 535 DF,  p-value: < 2.2e-16

o utilizando máxima verosimilitud teniendo en cuenta la autocorrelación en la serie:

arim73=arima(tf73$tempMedia,order=c(1,0,0))
arim73
## 
## Call:
## arima(x = tf73$tempMedia, order = c(1, 0, 0))
## 
## Coefficients:
##          ar1  intercept
##       0.7773    16.4983
## s.e.  0.0272     0.3732
## 
## sigma^2 estimated as 3.765:  log likelihood = -1120.51,  aic = 2247.02

Calidad del ajuste:

tsdiag(arim73)

Arima(2,1,1)

arim73=arima(tf73$tempMedia,order=c(2,1,1))
arim73
## 
## Call:
## arima(x = tf73$tempMedia, order = c(2, 1, 1))
## 
## Coefficients:
##           ar1     ar2     ma1
##       -0.1125  0.2365  0.3199
## s.e.   0.1460  0.0492  0.1461
## 
## sigma^2 estimated as 3.876:  log likelihood = -1125.77,  aic = 2259.53

Modelo arima estacional

sarim73=arima(tf73$tempMedia, order = c(1,1,1),
      seasonal = list(order = c(2, 1, 0), period = 12))
sarim73
## 
## Call:
## arima(x = tf73$tempMedia, order = c(1, 1, 1), seasonal = list(order = c(2, 1, 
##     0), period = 12))
## 
## Coefficients:
##          ar1      ma1     sar1     sar2
##       0.2016  -0.9339  -0.6237  -0.3362
## s.e.  0.0562   0.0320   0.0430   0.0418
## 
## sigma^2 estimated as 1.747:  log likelihood = -895.47,  aic = 1800.94

Asociación entre series temporales: correlación cruzada

Correlación cruzada entre temperatura y precipitación medias:

TF73=TF.ts[-c(1:377),]
TF73=TF73[-c(539,540),]
ccf(TF73[,2],TF73[,5])

Periodograma

Estudio de los componentes de frecuencia de una serie temporal:

prd=spectrum(TF73[,2])

prd$freq[which.max(prd$spec)]
## [1] 0.08333333
1/12
## [1] 0.08333333

Versión suavizada del espectro:

Más información