Forecast with ggplot2 and funggcast function

前端 未结 3 1684
挽巷
挽巷 2021-02-06 17:46

On this website, Mr. Davenport published a function to plot an arima forecast with ggplot2 on the example of an arbitrary dataset, he published here. I can follow h

3条回答
  •  面向向阳花
    2021-02-06 18:18

    This is a bump on a rather old post, but there's a fuction in github that produces some nice results.

    Here's the code as it was on Aug 03, 2016:

    function(forec.obj, data.color = 'blue', fit.color = 'red', forec.color = 'black',
                               lower.fill = 'darkgrey', upper.fill = 'grey', format.date = F)
    {
        serie.orig = forec.obj$x
        serie.fit = forec.obj$fitted
        pi.strings = paste(forec.obj$level, '%', sep = '')
    
         if(format.date)
            dates = as.Date(time(serie.orig))
        else
            dates = time(serie.orig)
    
        serie.df = data.frame(date = dates, serie.orig = serie.orig, serie.fit = serie.fit)
    
        forec.M = cbind(forec.obj$mean, forec.obj$lower[, 1:2], forec.obj$upper[, 1:2])
        forec.df = as.data.frame(forec.M)
        colnames(forec.df) = c('forec.val', 'l0', 'l1', 'u0', 'u1')
    
        if(format.date)
            forec.df$date = as.Date(time(forec.obj$mean))
        else
            forec.df$date = time(forec.obj$mean)
    
        p = ggplot() + 
            geom_line(aes(date, serie.orig, colour = 'data'), data = serie.df) + 
            geom_line(aes(date, serie.fit, colour = 'fit'), data = serie.df) + 
            scale_y_continuous() +
            geom_ribbon(aes(x = date, ymin = l0, ymax = u0, fill = 'lower'), data = forec.df, alpha = I(0.4)) + 
            geom_ribbon(aes(x = date, ymin = l1, ymax = u1, fill = 'upper'), data = forec.df, alpha = I(0.3)) + 
            geom_line(aes(date, forec.val, colour = 'forecast'), data = forec.df) + 
            scale_color_manual('Series', values=c('data' = data.color, 'fit' = fit.color, 'forecast' = forec.color)) + 
            scale_fill_manual('P.I.', values=c('lower' = lower.fill, 'upper' = upper.fill))
    
        if (format.date)
            p = p + scale_x_date()
    
        p
    }
    

提交回复
热议问题