2010-12-15 9 views
0

私は週単位のデータを.csvデータファイルから読んでいます。データのサンプルです: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 
..... 

私のコードは次のとおりです。

> 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")) 

私の質問は:STATIM(オブジェクト上のTSに必要な開始)を構築するためのより良い/クリーナー方法はありますか?これは週のデータで、年の最初の週に開始する場合と開始しない場合があります。

おかげで、
ビル

答えて

3

あなたはこの単純化するために動物園のパッケージを使用することができます。一方

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) 

をではなく、あなたはエピでcal.yrを使用する場合があります366日にそれを強制的にパッケージ:

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

ありがとう、素晴らしい答え。私はあなたの2番目の答えが本当に好きです。しかし、as.ts(z2)ステートメントはtsの頻度を非整数(私の場合はfrequency = 52.17857)に設定します。これは、stl()からの季節/剰余値の奇妙な組み合わせを与えます。私はtemdat <-ts(z2 [、2]、start = time(z2)[1]、frequency = 52)を使いました。私は、temdatの最終日が正しくないことを認識していますが、今のところ、それは悪のほうが少ないです。 –

関連する問題