Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

starting a daily time series in R

Tags:

I have a daily time series about number of visitors on the web site. my series start from 01/06/2014 until today 14/10/2015 so I wish to predict number of visitor for in the future. How can I read my series with R? I'm thinking:

series <- ts(visitors, frequency=365, start=c(2014, 6))  

if yes,and after runing my time series model arimadata=auto.arima() I want to predict visitor's number for the next 6o days, how can i do this?

h=..? forecast(arimadata,h=..),  

the value of h shoud be what ? thanks in advance for your help

like image 419
max Avatar asked Oct 14 '15 14:10

max


People also ask

How do you set a time series in R?

Creating a time seriesThe ts() function will convert a numeric vector into an R time series object. The format is ts(vector, start=, end=, frequency=) where start and end are the times of the first and last observation and frequency is the number of observations per unit time (1=annual, 4=quartly, 12=monthly, etc.).

How is daily time series defined in R?

Time series in R is defined as a series of values, each associated with the timestamp also measured over regular intervals (monthly, daily) like weather forecasting and sales analysis. The R stores the time series data in the time-series object and is created using the ts() function as a base distribution.


2 Answers

The ts specification is wrong; if you are setting this up as daily observations, then you need to specify what day of the year 2014 is June 1st and specify this in start:

## Create a daily Date object - helps my work on dates inds <- seq(as.Date("2014-06-01"), as.Date("2015-10-14"), by = "day")  ## Create a time series object set.seed(25) myts <- ts(rnorm(length(inds)),     # random data            start = c(2014, as.numeric(format(inds[1], "%j"))),            frequency = 365) 

Note that I specify start as c(2014, as.numeric(format(inds[1], "%j"))). All the complicated bit is doing is working out what day of the year June 1st is:

> as.numeric(format(inds[1], "%j")) [1] 152 

Once you have this, you're effectively there:

## use auto.arima to choose ARIMA terms fit <- auto.arima(myts) ## forecast for next 60 time points fore <- forecast(fit, h = 60) ## plot it plot(fore) 

enter image description here

That seems suitable given the random data I supplied...

You'll need to select appropriate arguments for auto.arima() as suits your data.

Note that the x-axis labels refer to 0.5 (half) of a year.

Doing this via zoo

This might be easier to do via a zoo object created using the zoo package:

## create the zoo object as before set.seed(25) myzoo <- zoo(rnorm(length(inds)), inds) 

Note you now don't need to specify any start or frequency info; just use inds computed earlier from the daily Date object.

Proceed as before

## use auto.arima to choose ARIMA terms fit <- auto.arima(myts) ## forecast for next 60 time points fore <- forecast(fit, h = 60) 

The plot though will cause an issue as the x-axis is in days since the epoch (1970-01-01), so we need to suppress the auto plotting of this axis and then draw our own. This is easy as we have inds

## plot it plot(fore, xaxt = "n")    # no x-axis  Axis(inds, side = 1) 

This only produces a couple of labeled ticks; if you want more control, tell R where you want the ticks and labels:

## plot it plot(fore, xaxt = "n")    # no x-axis  Axis(inds, side = 1,      at = seq(inds[1], tail(inds, 1) + 60, by = "3 months"),      format = "%b %Y") 

Here we plot every 3 months.

like image 51
Gavin Simpson Avatar answered Oct 25 '22 14:10

Gavin Simpson


Time Series Object does not work well with creating daily time series. I will suggest you use the zoo library.

library(zoo) zoo(visitors, seq(from = as.Date("2014-06-01"), to = as.Date("2015-10-14"), by = 1)) 
like image 34
Amol Modi Avatar answered Oct 25 '22 14:10

Amol Modi