Tracciare un oggetto serie temporale interrotto
-
20-12-2019 - |
Domanda
Considera la versione (Simplistic) di questo oggetto Zoo:
d <- c("2007-01-31", "2007-02-28", "2007-03-31", "2007-04-30", "2007-05-31", "2007-06-30", "2008-02-28", "2008-03-31", "2008-04-30", "2009-09-30", "2009-10-31", "2009-11-30", "2009-12-31", "2010-01-31")
vec <- runif(14, 0.5, 0.7)
vec.zoo = zoo(vec, order.by = as.Date(d, format = "%Y-%m-%d"))
plot(vec.zoo, ylim = c(0,1))
.
Come puoi vedere, mancano alcune date (guarda l'indice d).Tuttavia, quando traccia l'oggetto, ottengo quanto segue:
Mi rendo conto che questo è fattibile con ggplot
, tuttavia il risultato è multa multiplo anziché uno (vedere thread: link )
Vorrei essere in grado di disegnare l'oggetto dello zoo in una trama, ma lasciando uno spazio vuoto nella trama quando nessun dato è disponibile per una data specifica.Come posso farlo?
Grazie!
Soluzione
Supponendo che la frequenza dei tuoi dati sia 'mensile':
library(zoo)
library(lubridate) # for easy extraction of different components of date object
# convert 'd' to monthly data
d2 <- as.yearmon(d)
# create zoo object
z1 <- zoo(vec, order.by = d2)
# create a continuous series of monthly data, ranging from min(d) to max(d)
d3 <- as.Date(d)
tt <- as.yearmon(min(year(d)) + seq(month(min(d)) - 1, (year(max(d)) - year(min(d))) * 12)/12)
# expand z1 to a continuous series
z2 <- merge(z1, zoo(, tt))
plot(z2)
.
Altri suggerimenti
Cambia vec
per seguire:
vec <- c(runif(5, 0.5, 0.7), NA, NA, NA, runif(5, 0.5, 0.7))
Per disporre di interruzioni, le date corrispondenti a VEC devono avere valori NA, se non ci sono dati per quella data, quindi interrompere.