Расчет начала для stl () - PullRequest
       0

Расчет начала для stl ()

0 голосов
/ 15 декабря 2010

Я читаю еженедельные данные из файла данных .csv. Пример данных:

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

Мой вопрос таков: есть ли лучший / более чистый способ создания статима (запуск необходим для вышеуказанного объекта ts)? Обратите внимание, что это еженедельные данные, которые могут начинаться или не начинаться в первую неделю года.

Спасибо
Билл

1 Ответ

3 голосов
/ 16 декабря 2010

Вы можете использовать пакет zoo, чтобы упростить это:

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)

С другой стороны, вместо того, чтобы форсировать его в течение 366 дней, вы можете использовать cal.yr в пакете Epi:

library(Epi)
z2 <- read.zoo(File, header = TRUE, sep = ",", FUN = cal.yr, format = fmt)
as.ts(z2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...