# [R] leap years in temporal series command ts

Gabor Grothendieck ggrothendieck at gmail.com
Thu Feb 17 04:52:15 CET 2011

```On Wed, Feb 16, 2011 at 11:37 AM, Peter Zorglub <peter.zorglub at gmail.com> wrote:
> Ok thanks. I got now a temporal series of 2557 elements thanks to the below
> code:
>
>> seriezoo=zooreg(serie, start=as.Date("2002-01-01"))
>> seriezooTS=as.ts(seriezoo)
>
> The structure of seriezooTS is then the following one (str command):
>
>> str(seriezooTS)
>              Time-Series [1:2557] from 11688 to 14244: 0.03424657 0.03881249
> 0.03078472 0.03536114 ...
>
> When applying the "decompose" command to get a seasonal decomposition, I got
> the following message:
>
>> decompose(seriezooTS, "mult")
>              Error in decompose(seriezooTS, "mult") :
>              time series has no or less than 2 periods
>
> So, I think I have to transform the first and last days of the temporal
> series in terms of Date or some kind of POSIXct number. Am I wrong? And how
> can I do that?

You must supply it a series with equal length cycles.  You can't
decompose the years into ordinary dates since there are not a constant
number of days in a year.  You could remove one day in any leap year
or you could summarize the series into a monthly series.

library(zoo)

# sample input
z <- zooreg(1:2557, start = as.Date("2002-01-01"))

# remove Feb 29's
zz <- z[format(time(z), "%m %d") != "02 29"]

# now each year has 365 points so
# make it into a series with freq 365
TS <- ts(coredata(zz), freq = 365)
d <- decompose(TS)

# put dates (without Feb 29's) back to view
d.mts <- do.call(cbind, d[1:3])
zd <- zoo(coredata(d.mts), time(zz))
View(zd)

# alternative: create monthly series
z.ag <- aggregate(z, as.yearmon, mean)
frequency(z.ag) <- 12
t.ag <- as.ts(z.ag)
d.ag <- decompose(t.ag)

--
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com

```