This document provides a very brief introduction to the Prophet API. For a detailed guide on using Prophet, please visit the main site at https://facebook.github.io/prophet/.

Prophet uses the normal model fitting API. We provide a prophet function that performs fitting and returns a model object. You can then call predict and plot on this model object.

First we read in the data and create the outcome variable.

library(readr)
df <- read_csv('../tests/testthat/data.csv')
#> Parsed with column specification:
#> cols(
#>   ds = col_date(format = ""),
#>   y = col_double()
#> )

We call the prophet function to fit the model. The first argument is the historical dataframe. Additional arguments control how Prophet fits the data.

m <- prophet(df)
#> Disabling daily seasonality. Run prophet with daily.seasonality=TRUE to override this.
#> Initial log joint probability = -15.5191
#> Optimization terminated normally: 
#>   Convergence detected: relative gradient magnitude is below tolerance

We need to construct a dataframe for prediction. The make_future_dataframe function takes the model object and a number of periods to forecast:

future <- make_future_dataframe(m, periods = 365)
head(future)
#>           ds
#> 1 2012-05-18
#> 2 2012-05-21
#> 3 2012-05-22
#> 4 2012-05-23
#> 5 2012-05-24
#> 6 2012-05-25

As with most modeling procedures in R, we use the generic predict function to get our forecast:

forecast <- predict(m, future)
head(forecast)
#>           ds    trend additive_terms additive_terms_lower
#> 1 2012-05-18 40.46725      -4.539132            -4.539132
#> 2 2012-05-21 39.98010      -5.454565            -5.454565
#> 3 2012-05-22 39.81772      -5.595548            -5.595548
#> 4 2012-05-23 39.65534      -5.710402            -5.710402
#> 5 2012-05-24 39.49295      -5.790313            -5.790313
#> 6 2012-05-25 39.33057      -6.139026            -6.139026
#>   additive_terms_upper    weekly weekly_lower weekly_upper    yearly
#> 1            -4.539132 0.5600457    0.5600457    0.5600457 -5.099177
#> 2            -5.454565 0.2927224    0.2927224    0.2927224 -5.747287
#> 3            -5.595548 0.3831188    0.3831188    0.3831188 -5.978666
#> 4            -5.710402 0.5051989    0.5051989    0.5051989 -6.215601
#> 5            -5.790313 0.6660785    0.6660785    0.6660785 -6.456392
#> 6            -6.139026 0.5600457    0.5600457    0.5600457 -6.699072
#>   yearly_lower yearly_upper multiplicative_terms
#> 1    -5.099177    -5.099177                    0
#> 2    -5.747287    -5.747287                    0
#> 3    -5.978666    -5.978666                    0
#> 4    -6.215601    -6.215601                    0
#> 5    -6.456392    -6.456392                    0
#> 6    -6.699072    -6.699072                    0
#>   multiplicative_terms_lower multiplicative_terms_upper yhat_lower
#> 1                          0                          0   32.50039
#> 2                          0                          0   31.12785
#> 3                          0                          0   30.81991
#> 4                          0                          0   30.69403
#> 5                          0                          0   30.29373
#> 6                          0                          0   29.64331
#>   yhat_upper trend_lower trend_upper     yhat
#> 1   39.52508    40.46725    40.46725 35.92812
#> 2   37.98965    39.98010    39.98010 34.52553
#> 3   37.95759    39.81772    39.81772 34.22217
#> 4   37.22919    39.65534    39.65534 33.94493
#> 5   36.98743    39.49295    39.49295 33.70264
#> 6   36.70625    39.33057    39.33057 33.19154

You can use the generic plot function to plot the forecast, but you must also pass the model in to be plotted:

plot(m, forecast)

plot of chunk unnamed-chunk-6

You can plot the components of the forecast using the prophet_plot_components function:

prophet_plot_components(m, forecast)

plot of chunk unnamed-chunk-7