2010-12-15 55 views
0

Je suis en train de lire les données hebdomadaires d'un fichier de données .csv. Un échantillon des données est:Calcul du début de stl()

Date,Demand  
"Feb 08, 1991",6621  
"Feb 15, 1991",6433  
"Feb 22, 1991",6582 
"Mar 01, 1991",7224 
"Mar 08, 1991",6875 
"Mar 15, 1991",6947 
"Mar 22, 1991",7328 
"Mar 29, 1991",6777 
"Apr 05, 1991",7503 
..... 

Mon code est:

> temp<-read.table(file="E:\\Data\\Demand_00.csv",header=TRUE, sep=",") 
> stadat<-strptime(as.character(temp[,1]),"%b %d, %Y")[1] 
> statim<-as.numeric(strftime(stadat,"%Y"))+(as.numeric(strftime(stadat,"%j"))/366) 
> temdat<-ts(temp[,2],start=statim,frequency=52) 
> plot(temp2<- stl(log(temdat), "per")) 

Ma question est: Y at-il une meilleure/propre façon de construire statim (le début nécessaire dans les ts objet ci-dessus)? Notez que ce sont des données hebdomadaires qui peuvent commencer ou ne pas démarrer la première semaine de l'année.

Merci,
Bill

Répondre

3

Vous pouvez utiliser le package zoo pour simplifier:

File <- E:\\Data\\Demand_00.csv" 

library(zoo) 
fmt <- "%b %d, %Y" 

year.jul <- function(x) as.numeric(format(x, "%Y")) + 
    as.numeric(format(x, "%j"))/366 
z0 <- read.zoo(File, header = TRUE, sep = ",", FUN = as.Date, format = fmt, 
    FUN2 = year.jul) 
ts(z0, start = start(z0), frequency = 52) 

D'autre part, plutôt que de forcer dans 366 jours, vous pouvez utiliser cal.yr dans le Epi paquet:

library(Epi) 
z2 <- read.zoo(File, header = TRUE, sep = ",", FUN = cal.yr, format = fmt) 
as.ts(z2) 
+0

Merci, bonnes réponses. J'aime vraiment ta deuxième réponse. Cependant, l'instruction as.ts (z2) définit la fréquence ts sur un nombre non entier (dans mon cas, fréquence = 52.17857). Cela donne une combinaison étrange de valeurs saisonnières/restantes de stl(). J'ai utilisé temdat <-ts (z2 [, 2], début = temps (z2) [1], fréquence = 52). Je me rends compte que la date finale à temdat ne sera pas juste, mais pour l'instant, c'est le moindre des maux. –