2014-07-11 7 views
5

Ho bisogno dell'aiuto di voi ragazzi per decomporre i miei dati mensili che hanno stagionalità, ma non funziona perché i valori NA non vengono rimossi. Potrebbe esserci un altro problema. Si prega di guardare i miei dati e gli errori come di seguito.Dividi stagionale di dati mensili, incluso NA in r

ts.monthly<-ts(monthly$rBC.median, frequency=12, start=c(2006, 4)) 
    ts.monthly 
     Jan  Feb  Mar  Apr  May  Jun 
    2006         5.1656479 6.2847959 19.4833690 
    2007 1.4252665 2.9127775 2.8912652 7.5326158 8.6182227 23.2129310 
    2008   NA 1.8200842 1.3488755 2.0700927 5.3541366 8.6916708 
    2009 1.2531161 1.5075780 2.4955524 10.6724704 10.1367162 16.0362127 
    2010 0.8850190 2.4974866 1.8459976 9.2297697 3.8203789 7.1492986 
    2011 2.6990434 0.4570701 1.3787403 5.8739804 4.1669501 13.2228535 
    2012   NA 2.0670538 1.3758499 11.7306663 4.1248775 12.3604423 
       Jul  Aug  Sep  Oct  Nov  Dec 
    2006 9.8028986 7.8167810 2.1333807 2.5777504 1.9022561 2.7254065 
    2007 4.2121577 8.8604768 12.0017155 4.0978332 1.6053110   NA 
    2008 5.7338211 9.7432563 4.6548508 1.3589789 0.9650082 1.2788504 
    2009 11.7632775 11.2299683 1.6229679 1.0333217 1.0481580 1.0734208 
    2010 3.5996501 4.3245873 4.4586863 1.6403104 2.8622518 1.2564256 
    2011 3.0463918 7.1515472 6.5613683 1.3715623 1.9757217 5.4901524 
    2012 11.1010563 3.6220968 2.2597341 

    ts.monthly=na.omit(ts.monthly) 
    Error in na.omit.ts(ts.monthly) : time series contains internal NAs 
    ts.monthly.com<-decompose(ts.monthly) 
    Error in na.omit.ts(x) : time series contains internal NAs 
    ts.monthly$seasonal 
    Error in ts.monthly$seasonal : $ operator is invalid for atomic vectors 

Non capisco perché na.omit non funziona .. come posso trattare questo NA ??

Infine, dopo aver usato una funzione "decomponi", voglio prendere solo "trend" senza stagionalità, quindi applicare lo stimatore di pendenza di sen per ottenere una pendenza per l'andamento lineare. Funzionerà??

Grazie mille per il vostro aiuto.

risposta

6

riempimento Prova nei valori mancanti usando un filtro di Kalman stagionale impiegando na.StructTS dal pacchetto zoo primo:

library(zoo) 
decompose(na.StructTS(ts.monthly)) 

zoo ha molte altre na. funzioni così: na.aggregate, na.approx, na.fill, na.locf, na.spline, na.StructTS, na.trim.

+0

Oh, funziona bene !! Molte grazie!! – user2928318

+0

Ora, voglio usare i dati che la stagionalità è stata rimossa per ottenere un calo della tendenza lineare. Penso che la pendenza di sen (non parametrica) sia una buona scelta. Ma non sono sicuro di poter usare direttamente "ts.monthly $ trend" per ottenere la pendenza. Voglio dire, non so quali valori in "ts.monthly $ trend" significano. Ha la stessa unità dei miei dati iniziali (ts.monthly $ x) ?? Hai qualche buona idea per ottenere una pendenza per un trend lineare robusto? – user2928318

1

Il software X-13ARIMA-SEDILI, raggiungibile con l'R-package seasonal, gestisce i valori mancanti e la decomposizione di stagione in un unico passaggio:

library(seasonal) 

# a monthly time series with some missing values 
AirPassengersNA <- AirPassengers 
AirPassengersNA[c(2, 24)] <- NA 

m <- seas(AirPassengersNA, na.action = na.x13) 
head(m$data) 

     final seasonal seasonaladj trend irregular adjustfac 
[1,] 122.5860 0.9029705 122.5860 122.6289 0.9996500 0.9136445 
[2,] 123.8615 0.9492046 123.8615 123.8656 0.9999671 0.9408045 
[3,] 125.0191 1.0701984 125.0191 125.3132 0.9976535 1.0558387 
[4,] 127.4633 1.0028864 127.4633 126.6222 1.0066428 1.0120561 
[5,] 127.2526 0.9494692 127.2526 126.8592 1.0031006 0.9508650 
[6,] 126.0700 1.0771444 126.0700 126.1723 0.9991886 1.0708339 
0

ho lottato con questo per un tempo troppo lungo.

Basta usare na.locf dal pacchetto zoo sul tuo oggetto ts. na.locf restituisce un oggetto ts, quindi non ci sono preoccupazioni su un tipo di oggetto modificato.

Usa:

library(zoo) 
    season_ts <- na.locf(season_ts) 

dove season_ts è l'oggetto ts.