2011-02-11 13 views
9

Sto usando R per alcune analisi statistiche delle serie temporali. Ho provato Googling in giro, ma non riesco a trovare risposte definitive. Qualcuno che ne sa di più per favore mi indica la giusta direzione?Qual è la migliore pratica di gestione delle serie temporali in R?

Esempio:

Diciamo che voglio fare una regressione lineare di due serie storiche. Le serie temporali contengono dati giornalieri, ma potrebbero esserci lacune qua e là quindi le serie temporali non sono regolari. Ovviamente voglio solo confrontare i punti dati in cui entrambe le serie temporali contengono dati. Questo è quello che faccio al momento di leggere i file CSV in una cornice di dati:

library(zoo) 
apples <- read.csv('/Data/apples.csv', as.is=TRUE) 
oranges <- read.csv('/Data/oranges.csv', as.is=TRUE) 
apples$date <- as.Date(apples$date, "%d/%m/%Y") 
oranges$date <- as.Date(oranges$date, "%d/%m/%Y") 
zapples <- zoo(apples$close,apples$date) 
zoranges <- zoo(oranges$close,oranges$date) 
zdata <- merge(zapples, zoranges, all=FALSE) 
data <- as.data.frame(zdata) 

Esiste un modo impermeabile di fare questo?

Inoltre, come posso suddividere i dati, ad esempio selezionare le voci in data con date entro un determinato periodo?

+2

Il codice non è corretto, e non abbiamo i file CSV ... forse alcuni dati fittizi? –

+0

Ho corretto gli errori di battitura nel codice. Ma non riesco davvero a vedere il punto nei dati fittizi. Prendi tutti i dati casuali e inseriscili in un file csv a due colonne e assegna un nome a una colonna e l'altro vicino. – c00kiemonster

+9

Il motivo è che la tua domanda non è considerata di bassa qualità e quindi i risponditori possono facilmente eseguire il codice e più risponditori lo eseguono utilizzando lo stesso input. Dal momento che questo è qualcosa che puoi fare da solo senza conoscere la risposta alla domanda è generalmente considerato come la tua responsabilità di fornire questo. –

risposta

11

Provare qualcosa in questo senso. Ciò presuppone che le date siano nella colonna 1. Il pacchetto dyn può essere utilizzato per trasformare lm, glm e molte funzioni di tipo di regressione simili a quelle che accettano serie zoo. Scrivi dyn$lm al posto di lm come mostrato:

library(dyn) # also loads zoo 
fmt <- "%d/%m/%Y" 
zapples <- read.zoo('apples.csv', header = TRUE, sep = ",", format = fmt) 
zoranges <- read.zoo('oranges.csv', header = TRUE, sep = ",", format = fmt) 
zdata <- merge(zapples, zoranges) 
dyn$lm(..whatever.., zdata) 

Non è necessario all = FALSE dal lm ignorerà righe con AN sotto l'impostazione di default del suo argomento na.action.

La funzione window.zoo può essere utilizzata per tagliare i dati.

A seconda di ciò che si vuole fare si potrebbe anche voler guardare i pacchetti xts e quantmod.

+0

Non avevo idea del pacchetto dyn, davvero molto bello. – c00kiemonster

+1

+1 per il pacchetto dyn –

6

Perché hai convertito entrambi i frame di dati in zoo quindi unisci e converti in frame dati? Se vuoi un frame di dati, esegui questa linea dopo il tuo read.csv().

data <- merge(apples, oranges, by = "date") 

Ed ecco come impostare il sottoinsieme.

subset(data, date < slicemax & date > slicemin) 
Problemi correlati