La modelización univariante de una serie temporal (útiles para conocer las características de una serie temporal de tendencia, ciclo, estacionalidad, o para predecir), pero no tienen en cuenta la interrelación entre distintas variables (variable objeto de estudio con otras variables relevantes), y por lo tanto su utilidad puede verse limitada
Para resolver estas limitaciones se presentan los modelos multivariantes, que son modelos que sí tienen en cuenta la interrelación entre variables de distintas series temporales, luego estos modelos contienen varias series temporales.
Concretamente estudian la relación entre una variable de interés y una serie de variables explicativas (que influyen en la variable de interés). En el marco multivariante se considera el pasado tanto de la variable que se quiere explicar, como el de las variables que están relacionadas con dicha variable.
Los modelos multivariantes de series temporales son una generalización de los modelos univariantes, la diferencia está en que en vez de una sola variable hay n variables (en vez de una serie, hay varias series).
El análisis de series temporales multivariadas considera simultáneamente series temporales múltiples.
En general, mucho más complicado que el análisis de series de tiempo univariante, especialmente cuando el número de series consideradas es grande.
Toma de decisiones. Los objetivos del análisis de series temporales multivariadas incluyen, por lo tanto:
Sea \(\mathbf{z_t} = (z_{1t},\cdots, z_{kt})\) una serie de tiempo \(k\)-dimensional observada igualmente puntos de tiempo espaciados.
Por ejemplo, dejemos que
\(z_{1t}\) sea el real bruto interno trimestral de EE. UU. (GDP)
\(z_{2t}\) la tasa de desempleo
civil trimestral de EE. UU.
Mediante el estudio de \(z_{1t}\) y \(z_{2t}\) conjuntamente, Se puede evaluar la dependencia temporal y contemporánea entre el PIB y la tasa de desempleo.
library(tseries)
library(vars)
library(highcharter)
library(dplyr)
library(ggfortify)
library(plotly)
data("USeconomic")
class(USeconomic)
## [1] "mts" "ts"
USeconomic%>%DT::datatable()
plot(USeconomic)
hchart(USeconomic)%>%hc_add_theme(hc_theme_538())
s<-autoplot(USeconomic, main = "Series", xlab = "Tiempo", ylab="Useconomic", ts.colour="blue")
ggplotly(s)
## Warning: `group_by_()` is deprecated as of dplyr 0.7.0.
## Please use `group_by()` instead.
## See vignette('programming') for more help
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_warnings()` to see where this warning was generated.
data(Canada)
plot(Canada)
hchart(Canada) %>% hc_add_theme(hc_theme_economist()) %>% hc_title(text="Canada")
autoplot(Canada)
b<-autoplot(Canada)+
xlab("Tiempo")+
ggtitle("Series de tiempo Canada")
ggplotly(b)
Estadísticamente hablando, una serie temporal \(k\)-dimensional \(\textbf{z}_t = (z_{1t},..., z_{kt})'\) es un vector aleatorio que consta de \(k\) variables aleatorias.
Los modelos SARIMAX (auto regresivos integrados de medias móviles estacional con variables explicativas) son una estructura matemática que contiene todas las bondades de un modelo SARIMA adicionalmente, pueden capturar información sobre variables exógenas que permiten a entender y pronosticar la variable de interés. Para una única variable de interés \(y\), y una única variable independiente \(x\).
El modelo que describe su relación es
\[\begin{align}y_t = \beta_1 & x_t+\cdots+ \beta_{k} x_{t_{k-1}}+ \phi_1 y_{t-1}+\cdots+\phi_p y_{t-p}+\\ &\theta_1 z_{t-1}+\cdots \theta_{q} z_{t-q} + z_t \end{align}\]
Si bien esto parece sencillo, una desventaja es que el coeficiente covariable es difícil de interpretar.
El valor de \(\beta\) no es el efecto en \(y_t\) cuando la \(x_t\) se incrementa en uno (ya que está en regresión).
La presencia de valores rezagados de la variable de respuesta en el lado derecho de la ecuación significa que \(\beta\) solo puede interpretarse condicionalmente en el valor de los valores anteriores de la variable de respuesta, lo cual es poco intuitivo.
Cargamos las dos series de tiempo
rec = scan("SARIMAX/recruit.dat")
soi=scan("SARIMAX/soi.dat")
También podemos estar interesados en analizar varias series de tiempo a la vez. La Figura muestra los valores mensuales de una serie ambiental llamada Southern Índice de oscilación (SOI) y recluitment asociado (número de peces nuevos)
rec1<-ts(rec, start = c(1950,1), end = c(1986,9), frequency = 12)
soi1<-ts(soi, start = c(1950,1), end = c(1986,9), frequency = 12)
soi.rec<-cbind(rec1, soi1)
autoplot(soi.rec)
hchart(soi.rec)
Ambas series tienen una duración de 453 meses.que van a lo largo de los años 1950-1987. El SOI mide los cambios en la presión del aire, relacionado con las temperaturas de la superficie del mar en el Océano Pacífico central. El central El Pacífico se calienta cada tres a siete años debido al efecto de El Niño, que tiene sido culpado, en particular, por las inundaciones de 1997 en las porciones del medio oeste de los Estados Unidos.
Ambas series tienden a exhibir repetitivos comportamiento, con ciclos que se repiten regularmente y que son fácilmente visibles. Este comportamiento periódico es de interés porque los procesos subyacentes de interés pueden ser regular y la tasa o frecuencia de oscilación que caracteriza el comportamiento de la serie subyacente ayudaría a identificarlos.
También se puede comentar que los ciclos del SOI se repiten a un ritmo más rápido que los de la serie Serie de recruitmen. La serie Recruitment también muestra varios tipos de oscilaciones, una frecuencia más rápida que parece repetirse cada 12 meses y una frecuencia más lenta que parece repetirse aproximadamente cada 50 meses.
Los dos las series también tienden a estar algo relacionadas; es fácil imaginar que de alguna manera La población de peces depende del SOI. Quizás incluso una relación rezagada existe, con los cambios de señalización SOI en la población de peces. Esta posibilidad
autoplot(stl(soi1, s.window = "periodic"))
autoplot(stl(rec1, s.window = "periodic"))
z<-ts(rec, start = c(1950,1), end = c(1986,9), frequency = 12)
plot(z)
hchart(z)
Descomposición de la serie Recruitment
autoplot(stl(z, s.window = "periodic"))
par(mfrow=c(3,3))
plot(z)
acf(z,lag.max = 40)
pacf(z, lag.max = 40)
plot(diff(z))
acf(diff(z), lag.max = 40)
pacf(diff(z), lag.max = 40)
plot(diff(diff(z), 12))
acf(diff(diff(z), 12), lag.max = 40)
pacf(diff(diff(z), 12),lag.max = 40)
par(mfrow=c(1,3))
plot(diff(diff(z), 12))
acf(diff(diff(z), 12), lag.max = 40)
pacf(diff(diff(z), 12),lag.max = 40)
adf.test(diff(z))
## Warning in adf.test(diff(z)): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: diff(z)
## Dickey-Fuller = -9.6547, Lag order = 7, p-value = 0.01
## alternative hypothesis: stationary
pp.test(diff(z))
## Warning in pp.test(diff(z)): p-value smaller than printed p-value
##
## Phillips-Perron Unit Root Test
##
## data: diff(z)
## Dickey-Fuller Z(alpha) = -239.6, Truncation lag parameter = 5, p-value
## = 0.01
## alternative hypothesis: stationary
adf.test(diff(diff(z), 12))
## Warning in adf.test(diff(diff(z), 12)): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: diff(diff(z), 12)
## Dickey-Fuller = -6.5087, Lag order = 7, p-value = 0.01
## alternative hypothesis: stationary
pp.test(diff(diff(z), 12))
## Warning in pp.test(diff(diff(z), 12)): p-value smaller than printed p-value
##
## Phillips-Perron Unit Root Test
##
## data: diff(diff(z), 12)
## Dickey-Fuller Z(alpha) = -275.66, Truncation lag parameter = 5, p-value
## = 0.01
## alternative hypothesis: stationary
sd(diff(z))
## [1] 10.87691
sd(diff(diff(z), 12))
## [1] 14.0919
library(forecast)
## Registered S3 methods overwritten by 'forecast':
## method from
## autoplot.Arima ggfortify
## autoplot.acf ggfortify
## autoplot.ar ggfortify
## autoplot.bats ggfortify
## autoplot.decomposed.ts ggfortify
## autoplot.ets ggfortify
## autoplot.forecast ggfortify
## autoplot.stl ggfortify
## autoplot.ts ggfortify
## fitted.ar ggfortify
## fortify.ts ggfortify
## residuals.ar ggfortify
auto.arima(z)
## Series: z
## ARIMA(1,1,0)(0,0,2)[12]
##
## Coefficients:
## ar1 sma1 sma2
## 0.3698 0.0733 0.1644
## s.e. 0.0447 0.0495 0.0451
##
## sigma^2 estimated as 95.78: log likelihood=-1626.92
## AIC=3261.83 AICc=3261.92 BIC=3278.18
modelo1<-stats::arima(z,
order=c(1,1,0),
seasonal=list(order=c(0,1,1),
period=12),fixed = c(NA,NA))
modelo1
##
## Call:
## stats::arima(x = z, order = c(1, 1, 0), seasonal = list(order = c(0, 1, 1),
## period = 12), fixed = c(NA, NA))
##
## Coefficients:
## ar1 sma1
## 0.2869 -1.000
## s.e. 0.0463 0.059
##
## sigma^2 estimated as 80.68: log likelihood = -1568.53, aic = 3143.05
tt <- modelo1$coef[which(modelo1$coef!=0)]/sqrt(diag(modelo1$var.coef))
1 - pt(abs(tt),(modelo1$nobs - length(modelo1$coef[which(modelo1$coef!=0)])))
## ar1 sma1
## 6.951388e-10 0.000000e+00
BIC del modelo
BIC(modelo1)
## [1] 3155.229
Residuales
et<-residuals(modelo1)
x1.fit <- fitted(modelo1)
par(mfrow=c(3,2))
plot(z,type="l",lty=2)
lines(x1.fit,type="l",col="red")
plot(scale(et),type="l",main="Residuales")
abline(h=2*sqrt(var(scale(et))),col="red",lty=2)
abline(h=-2*sqrt(var(scale(et))),col="red",lty=2)
acf(et)
pacf(et)
#qqPlot(scale(et))
acf(abs(et)) #Mide Estructura Heterocedástica
\(H_o: r1=r2=r3=...=rlag=0\)
$H_a: $
Box.test(et,lag=12,type="Ljung-Box")
##
## Box-Ljung test
##
## data: et
## X-squared = 15.768, df = 12, p-value = 0.2021
\(H_o:\) Datos provienen de una Dist. Normal \(H_a\): Los datos no provienen de una Dist. Normal
jarque.bera.test(et)
##
## Jarque Bera Test
##
## data: et
## X-squared = 107.44, df = 2, p-value < 2.2e-16
\(H_o:\) Residuales exhiben un comport. de Aleatoriedad \(H_a:\) Residuales no exhiben estructura (Tendencia, o cualquier otro comportamiento predecible)
runs.test(as.factor(sign(et)), alternative="two.sided")
##
## Runs Test
##
## data: as.factor(sign(et))
## Standard Normal = -1.5563, p-value = 0.1196
## alternative hypothesis: two.sided
autoplot(modelo1)
plot(forecast(modelo1,h=12, fan=F))
lines(fitted(modelo1), col="red")
lines(ts(rec, start = c(1950,1),frequency = 12),col="green")
El problema básico que estamos considerando es la descripción y el modelado de la relación entre dos series de tiempo.\
En la relación entre dos series de tiempo \(y_t\) y \(x_t\) La serie \(y_t\) puede estar relacionado con retrasos pasados de la serie \(x\) .
La función de correlación cruzada de muestra (CCF) es útil para identificar retrasos de la variable \(x\) que podrían ser predictores útiles de \(y_t\)
En R, el CCF de muestra se define como el conjunto de correlaciones de muestra entre \(x_{t+h}\) y \(y_t\) para \(h = 0, ± 1, ± 2, ± 3\), y así sucesivamente. Un valor negativo para \(h\) es una correlación entre la \(x-\)variable en un momento anterior y la variable y en el tiempo \(t\). Por ejemplo, considere \(h= −2\). El valor CCF daría la correlación entre \(x_{t-2}\) y \(y_t\) .
Cuando uno o más \(x_{t+h}\) , con \(h\) negativo , son predictores de \(y_t\), a veces se dice que \(x\) lleva a \(y\)} .
Cuando uno o más \(x_{t+h}\) , con \(h\) positivo , son predictores de \(y_t\), a veces se dice que \(x\) se retrasa \(y\)
En algunos problemas, el objetivo puede ser identificar qué variable está liderando y cuál está retrasada.
Por lo tanto, generalmente veremos qué sucede con los valores negativos de en la parcela CCF.
\(\texttt{ccf(x-variable name, y-variable name)}\).
Si desea especificar cuántos retrasos mostrar, agregue ese número como argumento del comando. Por ejemplo,
\(\texttt {ccf(x, y, 50) dará el CCF para valores de = 0, ± 1, ..., ± 50.}\)
Ejemplo
Índice de oscilación meridional y poblaciones de peces en el hemisferio sur.\
Se describe la relación entre una medida del clima llamada y “recruitment”, una medida de la población de peces en el hemisferio sur. Los datos son estimaciones mensuales para \(n = 453\) meses.
hchart(soi.rec)
funcion de correlación cruzada
ccfvalues<-ccf(soi,rec,20)
ccfvalues
##
## Autocorrelations of series 'X', by lag
##
## -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10
## -0.108 -0.198 -0.253 -0.222 -0.149 -0.092 -0.076 -0.103 -0.175 -0.267 -0.369
## -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1
## -0.476 -0.560 -0.598 -0.599 -0.527 -0.297 -0.146 -0.042 0.011 0.025 -0.013
## 2 3 4 5 6 7 8 9 10 11 12
## -0.086 -0.154 -0.228 -0.259 -0.232 -0.144 -0.017 0.094 0.154 0.174 0.162
## 13 14 15 16 17 18 19 20
## 0.118 0.043 -0.057 -0.129 -0.156 -0.131 -0.049 0.060