/ / Corretta imputazione per un oggetto zooregionale? - r, serie temporali, frequenza, zoo, imputazione

Corretta imputazione per un oggetto zooregionale? - r, serie temporali, frequenza, zoo, imputazione

Il mio obiettivo è imputare le NA in un oggetto di serie storica zooregistratore. Lo schema delle serie temporali è ciclico. Il mio codice è:

#load libraries required
library("zoo")

# create sequence every 15 minutes from 1st Dec to 20th Dec, 2018
timeStamp <- seq.POSIXt(from=as.POSIXct("2018-01-01 00:00:00", tz="UTC"), to=as.POSIXct("2018-01-20 23:45:00", tz="UTC"), by = "15 min")
# data which increases from 12am to 12pm, then decreases till 12 am of next day, for 20 days
readings <- rep(c(seq(1,48,1), seq(48,1,-1)), 20)
dF <- data.frame(timeStamp=timeStamp, readings=readings)

# create a regular zooreg object, frequency is 1 day( 4 readings * 24 hours)
readingsZooReg <- zooreg(dF$readings, order.by  = dF$timeStamp, frequency = 4*24)
plot(readingsZooReg)

# force some data to be NAs
window(readingsZooReg, start = as.POSIXct("2018-01-14 00:00:00", tz="UTC"), end = as.POSIXct("2018-01-16 23:45:00", tz="UTC")) <- NA
plot(readingsZooReg)


# plot imputed values
plot(na.approx(readingsZooReg))

Le trame sono: Serie a tempo pieno, aggiunte NA, serie temporali imputate

Qui sto usando volutamente lo zoo, dal momento che le serie temporali su cui lavoro sono irregolari (es. Solare, pozzi petroliferi, ecc.)

1) Il mio utilizzo di "zooreg" è corretto? O sarebbe sufficiente un oggetto "zoo"?
2) La mia variabile di frequenza è giusta?
3) Perché ho vinto "t na.approx work?" Ho anche provato na.StructTs, lo script R si blocca.
4) Esiste una soluzione che utilizza qualsiasi altro pacchetto? xts, ts, ecc.?

risposte:

0 per risposta № 1

Il tuo attuale esempio di serie temporali è a serie temporali regolari. (un irregolare le serie temporali avrebbero fasi temporali con diverse distanze temporali tra le osservazioni)

Per esempio.:

  • 10:00:10, 10:00:20, 10:00:30, 10:00:40, 10:00:50 (spazi regolari)
  • 10:00:10, 10:00:17, 10:00:33, 10:00:37, 10:00:50 (spazi irregolari)

Se hai davvero bisogno di gestire serie temporali irregolari, zoo è il tuo andare al pacchetto. Altrimenti puoi anche usare altre classi di serie temporali come XTS e ts.

Circa la frequenza:

Di solito imposti la frequenza di una serie temporalesecondo un valore in cui ti aspetti che i pattern si ripetano. (nel tuo esempio potrebbe essere 96). Nella vita reale questo è spesso 1 giorno, 1 settimana, 1 mese, .... ma può anche essere diverso da questi come 1,5 giorni. (ad esempio, se si hanno pattern di ritorno giornalieri e osservazioni di 1 minuto, si imposta la frequenza su 1440).

na.approx dello zoo funziona perfettamente. Sta facendo esattamente quello che ci si aspetta. Un'interpolazione tra i punti 0 prima del gap e 0 alla fine del gap darà una linea retta a 0. Naturalmente questo probabilmente non è il risultato che ci si aspetta, perché non tiene conto della stagionalità. Ecco perché G. Grothendieck ti suggerisce na.StructTS come metodo da scegliere. (questo metodo di solito è migliore per la stagionalità)

La scelta migliore se non sei legato allo zoo, in questo caso specifico, sarà l'utilizzo na.seadec dal pacchetto imputesTS (un pacchetto dedicato esclusivamente all'imputazione delle serie temporali).

Ti ho aggiunto un esempio anche con i bei grafici del imputeTS pacchetto

library(imputeTS)
yourTS <- ts(coredata(readingsZooReg), frequency = 96)
plotNA.distribution(yourTS)
imputedTS <- na.seadec(yourTS)
plotNA.imputations(yourTS, imputedTS)

Di solito imputesTS funziona anche perfettamente con le serie temporali dello zoo come input. L'ho solo cambiato ts di nuovo, perché qualcosa con il tuo oggetto zoo sembra strano ... è anche il motivo per cui na.StructTS dallo zoo si rompe. Forse qualcuno con una conoscenza migliore può aiutare qui.

Attenzione, se davvero dovresti avere un tempo irregolarele serie non usano altri pacchetti / funzioni di imputazione rispetto allo zoo. Perché tutti presuppongono che i dati siano spaziati regolarmente e daranno risultati di conseguenza.