Gráficos de series de tiempo y sus pronósticos con ggplot2
Si queremos presentar gráficos de series de tiempo y principalmente de los pronósticos de la serie junto con los intervalos de confianza podemos hacer uso de el paquete ggplot2 de R. Para tal propósito presento a continuación un ejemplo con la clásica serie AirPassengers.
Primero cargamos las librerías necesarias:
library(ggplot2)
library(forecast)
library(scales)
luego hacemos la transformación que requiere la serie
z = log10(AirPassengers)
Teniendo en cuenta que esta serie va de Ene-1949 a Dic-1960, podemos estar interesados en realizar un pronóstico para la serie de 12 meses, esto es, de Ene-61 a Dic-61. Entonces ajustamos un modelo arima estacional y realizamos el pronóstico:
ajust = Arima(z,order=c(0,1,1),seasonal=c(0,1,1))
pron = forecast(ajust,12,95)
pron
Point Forecast Lo 95 Hi 95 Jan 1961 2.653620 2.622368 2.684872 Feb 1961 2.629121 2.592704 2.665538 Mar 1961 2.680342 2.639407 2.721277 Apr 1961 2.692322 2.647320 2.737324 May 1961 2.706765 2.658035 2.755495 Jun 1961 2.765925 2.713733 2.818118 Jul 1961 2.826082 2.770642 2.881522 Aug 1961 2.824176 2.765670 2.882683 Sep 1961 2.746782 2.685361 2.808202 Oct 1961 2.696538 2.632335 2.760741 Nov 1961 2.633339 2.566470 2.700208 Dec 1961 2.678739 2.609306 2.748172
Ahora ampliamos nuestra serie de datos original un año, agregando NA's en el 1961:
z1 = window(z,end=c(1961,12),extend=TRUE)
Convertimos luego esta serie en un data.frame agregando una columna con el tiempo (fecha) observado y de pronóstico:
Obs = as.data.frame(z1)
names(Obs) = "serie"
Obs$fecha = as.Date(time(z1))
De forma similar procedemos con el pronóstico:
pron = as.data.frame(pron)
pron$fecha = as.Date(as.yearmon(1961 + seq(0, 11)/12))
names(pron) = c("pronostico","li95","ls95","fecha")
Unimos luego estas:
gserie = merge(Obs,pron,all.x=T)
Finalmente graficamos
ggplot(gserie,aes(x=fecha,y=serie)) +
geom_line(col='blue',size = 1) + # Serie original
geom_line(aes(y=pronostico),col='red',size = 1) + # Pronóstico puntual
geom_ribbon(aes(ymin=li95,ymax=ls95),alpha=.5) # Intervalos de confianza del 95%
Comparte esto: