La descomposición de una ST implica identificar sus elementos:
La inspección gráfica puede sugerir la posibilidad de representar los datos como una realización de un proceso estocástico que puede tener todas o algunas de las siguientes componentes
\[ X_{t}=f(m_t, s_t, Y_t)=\left\{\begin{array}& m_{t} + s_t + Y_t\ \ \textrm{modelo aditivo}\\ m_{t}\cdot s_t \cdot Y_t\ \ \textrm{modelo multiplicativo} \end{array}\right. \]
donde:
Por ejemplo, consideremos la siguiente serie de tiempo, cuyos datos corresponden al total de muertes accidentales mensuales entre los años 1973 a 1978. Esta serie parece tener un comportamiento estacional cada año (un periodo de 12)
# Cargamos la librería necesaria
library(ggfortify)
# Graficamos la serie de tiempo utilizando autoplot()
autoplot(USAccDeaths)
donde vemos que la variaza parece ser constante, al igual que la media. Esta serie de tiempo representa un ejemplo de un modelo aditivo. Veamos las partes de esta serie de tiempo (sus componentes):
autoplot(stl(USAccDeaths, s.window = "periodic"), ts.colour = "blue")
donde remainder
corresponde a las fluctuaciones iiregulares, seasonal
al efecto estacional y trend
a la tenendicia.
Notamos que la gráfica de la serie de tiempo se puede considerar de “sumar” o “unir” el efecto estacional junto con las fluctuaciones irregulares, además, esta suma sigue la tendencia marcada por la gráfica en trend
.
Un ejemplo de una serie de tiempo que sigue un modelo multiplicativo es la siguiente:
autoplot(AirPassengers)
donde vemos que la dispersión (varianza) no es constante, más bien es creciente. Asimismo la media no es constante.
Podemos ver las partes de esta serie de tiempo
autoplot(stl(AirPassengers, s.window = "periodic"), ts.colour = "blue")
o como alternativa, sin utilizar la librería ggfortify
, podemos ocupar la función decompose()
Air1 <- decompose(AirPassengers)
plot(Air1)
en este caso no vemos el comportamiento como en el caso del modelo aditivo. Para esta serie de tiempo notamos que la tendencia, el ciclo estacional y las fluctuaciones irregulares produzcan en la gráfica de la serie de tiempo una dispersión o varianza creciente. Podemos emplear la transformación logarítmo para llevar este modelo multiplicativo a uno aditivo:
autoplot(log(AirPassengers))
donde ahora la dispersión o varianza no es creciente, más bien es constante (al igual que la media). Identificamos los componentes de esta serie de tiempo transformada
autoplot(stl(log(AirPassengers), s.window = "periodic"), ts.colour = "blue")
con lo cual comprobamos que el modelo multiplicativo ha sido transformado a uno logarítmico.
Además, podemos realizar la transformación del modelo multiplicativo al aditivo:
# multiplicativo y lo transformamos a aditivo manualmente
Air2 <- decompose(log(AirPassengers),type="additive")
#graficamos
plot(Air2)
o realizamos la transformación automática:
# Colocamos que el modelo es multiplicativo, de modo que la funcion
# decompose hará la transformación automática a modelo aditivo
Air3 <- decompose(AirPassengers,type="multiplicative")
plot(Air3)
Este tipo de transformaciones son útiles para la linealización de los datos y reducir la varianza de la ST.
Si la ST es de la forma \(X_{t}=m_{t}+Y_{t}\), una manera de estimar \(m_{t}\) sería vía mínimos cuadrados. Una vez estimada la componente de la tendencia podemos estimar la parte aleatoria de la siguiente manera: \(\hat{Y}_{t}=X_{t}-\hat{m_{t}}\).
Consideremos la siguiente gráfica de serie de tiempo
autoplot(uspop)
donde vemos que sólo está interactuando la tendencia y las fluctuaciones irregulares.
Generamos los años:
t= seq(1790,1970,10)
# Elevamos al cuadrado
t2 = t ** 2
después ajustamos el modelo de regresión para \(m_{t}=a_{0}+a_{1}t+a_{2}t^{2}\), pues podemos intuir que la tendencia sigue un patrón cuadrático:
regresion = lm(uspop ~ t + t2)
summary(regresion)
##
## Call:
## lm(formula = uspop ~ t + t2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -6.5997 -0.7105 0.2669 1.4065 3.9879
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.045e+04 8.431e+02 24.25 4.81e-14 ***
## t -2.278e+01 8.974e-01 -25.38 2.36e-14 ***
## t2 6.345e-03 2.387e-04 26.58 1.14e-14 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.78 on 16 degrees of freedom
## Multiple R-squared: 0.9983, Adjusted R-squared: 0.9981
## F-statistic: 4645 on 2 and 16 DF, p-value: < 2.2e-16
par(mfrow=c(1,2))
# Graficamos los datos
plot(uspop)
# Curva de ajuste del modelo
lines(t,regresion$fitted.values,col="red")
# Vemos los residuales
plot(t,regresion$residuals,col="red")
vemos que se ha ajustado la curva a la tendencia, lo cual conseguimos utilizando regresión.