Converting zoo to ts before forecasting

Ruben picture Ruben · Sep 17, 2013 · Viewed 7.5k times · Source

I am struggling to convert a zoo objects to a ts object.

I have a huge data.frame "test" with quarterly hour data, which looks like this:

date <- c("2010-07-04 09:45:00", "2010-07-04 10:00:00", "2010-07-04 10:15:00", "2010-07-04 10:30:00", "2010-07-04 10:45:00", "2010-07-04 11:00:00")
nrv <- c("-147.241", "-609.778", "-432.289", "-340.418", "-73.96" ,  "-533.108")
tt <- c("3510.7", "3608.5", "3835.7", "4003.7", "4018.8", "4411.9")
test <- data.frame(date,nrv,tt)
test

I want to make some predictions (mostly ARIMA) and thought the forecastpackage would be a good idea for that. First of I formated the data away from characters.

test$date <- strptime(test$date,format="%Y-%m-%d %H:%M")
test$nrv <- as.numeric(as.character(test$nrv))
test$tt <- as.numeric(as.character(test$tt))
str(test) #date is POSIXlt object

Since I needed to do an interpolation and construct lags, I also used the zoo package using the date variable as index, which worked great. The `zoo package was recommended to me while dealing with time series data.

library(zoo)
test.zoo <- zoo(test[,2:3],test[,1])
test.zoo #date is now the Index and and the zoo objects works nicely

But then I realized that forecasting only seems to work with ts objects. (Is that true?)

When I tried to convert the zoo object to a ts object, my time index disappeared. I think this might be due to not using a proper frequency. However I am somewhat lost as to what would be a working frequency for this dataset and with ts objects in general.

test.ts <- as.ts(test.zoo)
test.ts

How do I convert this zoo object back to a ts object I can use for forecasting? Thanks!

Answer

Rob Hyndman picture Rob Hyndman · Sep 18, 2013

The forecast package only works with ts objects as you suspected.

You can use test.ts with the forecast package. For example

plot(forecast(test.ts[,1]))