En este documento se presentan simulaciones de diferentes modelos de
series de tiempo utilizando modelos espacio-estado (estado-estocástico)
y su análisis mediante filtrado y suavizado con el paquete
dlm. Se incluye la interpretación de los resultados.
La caminata aleatoria es un modelo simple de series de tiempo donde el estado subyacente se acumula a partir de ruido blanco. En este caso, agregamos ruido adicional a la observación.
# Simulación
n <- 200
v <- rnorm(n, 0, 5) # Ruido de observación
w <- rnorm(n, 0, 2) # Ruido del estado
mu <- w[1]
for(i in 2:n){
mu[i] <- mu[i-1] + w[i]
}
y1 <- mu + v
# Visualización
par(mfrow = c(2,1))
ts.plot(y1, main="Serie observada con ruido")
ts.plot(mu, main="Estado subyacente (mu)")
La serie \(y_1\) refleja la caminara aleatoria más el ruido de observación
El estado \(mu\) muestra la trayectoria subyacente sin el ruido de la observación
Se observa cómo el filtrado puede ayudar a estimar \(mu\) a partir de \(y_1\)
#install.packages("dlm")
library(dlm)
mod1 <- dlmModPoly(order = 1, dV = 5^2, dW = 2^2)
y1.filtro <- dlmFilter(y1, mod1)
y1.suave <- dlmSmooth(y1, mod1)
par(mfrow = c(1,1))
ts.plot(y1, col = "darkgrey", main="Filtrado y suavizado")
lines(dropFirst(y1.filtro$m), lty = "longdash", col = 2) # Filtro
lines(dropFirst(y1.suave$s), lty = "longdash", col = 3) # Suavizado
legend("topleft", legend=c("Observada","Filtrada","Suavizada"), col=c("darkgrey",2,3), lty=c(1,2,2))
Este filtro esta estimando el estado en el tiempo t
usando información hasta t
El suavizamiento estima el estado usando toda la información de la serie, resultando en una estimación más suave y cercana al estado real.
Este modelo permte que la serie tenga una tendencia estocástica que cambia en el tiempo.
n <- 100
v <- rnorm(n, 0, 10)
w1 <- rnorm(n, 0, 5)
w2 <- rnorm(n, 0, 1)
mu <- w1[1]
beta <- w2[1]
for(i in 2:n){
beta[i] <- beta[i-1] + w2[i]
mu[i] <- mu[i-1] + beta[i-1] + w1[i]
}
y2 <- mu + v
mod2 <- dlmModPoly(order = 2, dV = 10^2, dW = c(5,1)^2)
y2.filtro <- dlmFilter(y2, mod2)
y2.suave <- dlmSmooth(y2, mod2)
par(mfrow = c(1,1))
ts.plot(y2, col = "darkgrey", main="Tendencia lineal local")
lines(dropFirst(y2.filtro$m)[,1], lty="longdash", col=2)
lines(dropFirst(y2.suave$s)[,1], lty="longdash", col=3)
legend("topleft", legend=c("Observada","Filtrada","Suavizada"), col=c("darkgrey",2,3), lty=c(1,2,2))
mu representa la tendencia y beta es la
pendiente local.
El suavizado permite capturar la tendencia real, es decir, más suavemente que el filtro
En este caso solo estoy simulando una serie que solo tiene la componente estacional
n <- 100
v <- rnorm(n, 0, 1)
S <- c(0.5,1.2,-0.4,-1.3)
S_t <- rep(S, length.out = n)
y3 <- S_t + v
par(mfrow = c(2,1))
ts.plot(y3, main="Serie observada con estacionalidad")
ts.plot(S_t, main="Componente estacional")
La serie sigue un patrón periódico con un pequeño ruido
El estado subyacente es solo la estacionalidad.
mod3 <- dlmModSeas(4, dV=1)
y3.filtro <- dlmFilter(y3, mod3)
y3.suave <- dlmSmooth(y3, mod3)
ts.plot(y3, col="darkgrey", main="Filtrado y suavizado estacional")
lines(dropFirst(y3.filtro$m)[,1], lty="longdash", col=2)
lines(dropFirst(y3.suave$s)[,1], lty="longdash", col=3)
legend("topleft", legend=c("Observada","Filtrada","Suavizada"), col=c("darkgrey",2,3), lty=c(1,2,2))
Acá puedo extraer la estacionalidad de la serie observada
Nuevamente, el suavizamiento proporciona estimaciones más cercanas al estado verdadero
Acá puedo combinar la tendencia local y estacionalidad para capturar series más complejas.
# Ejemplo: tendencia lineal + estacionalidad fija
n <- 100
v <- rnorm(n,0,2)
w1 <- rnorm(n,0,2)
w2 <- rnorm(n,0,1)
mu <- w1[1]
beta <- w2[1]
S <- c(1,2.4,-0.8,-2.6)*20
S_t <- rep(S,length.out=n)
for(i in 2:n){
beta[i] <- beta[i-1] + w2[i]
mu[i] <- mu[i-1] + beta[i-1] + w1[i]
}
y4 <- mu + S_t + v
par(mfrow=c(3,1))
ts.plot(y4, main="Serie observada con tendencia y estacionalidad")
ts.plot(mu, main="Tendencia")
ts.plot(S_t, main="Estacionalidad")
Se observan claramente los 2 componenetes: la tendencia creciente y la estacionalidad periódica
Este tipo de modelo es muy útil para series, como por ejemplo, ventas mensuales con crecimiento.
1- Los modelos espacio - estado permiten separar componenetes de la serie de tiempo: tendencia, estacionaliedad y ruido
2- El filtro estima el estado con la información disponible hasta el
tiempo t
3- El suavizado utiliza toda la información de la serie y produce estimaciónes más precisas del estado.
4- La simulación permite comprender visualmente cómo cada componenete afecta la serie observada y cómo los métodos de estimación recuperan el estado subyacente