starting a daily time series in R

后端 未结 4 731
忘掉有多难
忘掉有多难 2020-11-27 17:12

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 n

相关标签:
4条回答
  • 2020-11-27 17:39

    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))
    
    0 讨论(0)
  • 2020-11-27 17:41

    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)
    

    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.

    0 讨论(0)
  • 2020-11-27 17:44
    series <- ts(visitors, frequency=365, start=c(2014, 152)) 
    

    152 number is 01-06-2014 as it start from 152 number because of frequency=365 To forecast for 60 days, h=60.

    forecast(arimadata , h=60)
    
    0 讨论(0)
  • 2020-11-27 17:49

    Here's how I created a time series when I was given some daily observations with quite a few observations missing. @gavin-simpson gave quite a big help. Hopefully this saves someone some grief.

    The original data looked something like this:

    library(lubridate)
    set.seed(42)
    minday = as.Date("2001-01-01")
    maxday = as.Date("2005-12-31")
    dates <- seq(minday, maxday, "days")
    dates <- dates[sample(1:length(dates),length(dates)/4)] # create some holes
    df <- data.frame(date=sort(dates), val=sin(seq(from=0, to=2*pi, length=length(dates))))
    

    To create a time-series with this data I created a 'dummy' dataframe with one row per date and merged that with the existing dataframe:

    df <- merge(df, data.frame(date=seq(minday, maxday, "days")), all=T)
    

    This dataframe can be cast into a timeseries. Missing dates are NA.

    nts <- ts(df$val, frequency=365, start=c(year(minday), as.numeric(format(minday, "%j"))))
    plot(nts)
    

    0 讨论(0)
提交回复
热议问题