prophet/R/tests/testthat/test_metrics.R
Nagi Teramo 14d5028a73 Implement metrics for time series forecasts (#384)
* Add metrics for model validation

* Update to reflect comments on Github

* Change all_metrics() implementation to more sophisticated style

* Update metrics functions

* Remove redundant argument

* Use v0.3 files for diagnostics.R and prophet.R

* Use v0.3 file for man/predict.prophet.Rd

* Change the interface and do some refactoring
2018-01-05 16:05:58 -08:00

60 lines
1.8 KiB
R

library(prophet)
context("Prophet metrics tests")
## Makes R CMD CHECK happy due to dplyr syntax below
globalVariables(c("y", "yhat"))
DATA <- head(read.csv('data.csv'), 100)
DATA$ds <- as.Date(DATA$ds)
test_that("metrics_tests_using_model", {
# Create dummy model
m <- prophet(DATA)
# Create metric data
forecast <- predict(m, NULL)
df <- na.omit(dplyr::inner_join(m$history, forecast, by="ds"))
# Check all metrics wether it is equal to its definition
y <- df$y
yhat <- df$yhat
expect_equal(me(m), mean(y-yhat))
expect_equal(mse(m), mean((y-yhat)^2))
expect_equal(rmse(m), sqrt(mean((y-yhat)^2)))
expect_equal(mae(m), mean(abs(y-yhat)))
expect_equal(mpe(m), 100*mean((y-yhat)/y))
expect_equal(mape(m), 100*mean(abs((y-yhat)/y)))
answer <- data.frame(
me=me(m),
mse=mse(m),
rmse=rmse(m),
mae=mae(m),
mpe=mpe(m),
mape=mape(m)
)
expect_equal(all_metrics(m), answer)
})
test_that("metrics_tests_using_simulated_historical_forecast", {
#skip_if_not(Sys.getenv('R_ARCH') != '/i386')
# Create dummy model
m <- prophet(DATA)
# Run simulated historical forecast
df <- simulated_historical_forecasts(m, horizon = 3, units = 'days', k = 2, period = 3)
# Check all metrics wether it is equal to its definition
y <- df$y
yhat <- df$yhat
expect_equal(me(df=df), mean(y-yhat))
expect_equal(mse(df=df), mean((y-yhat)^2))
expect_equal(rmse(df=df), sqrt(mean((y-yhat)^2)))
expect_equal(mae(df=df), mean(abs(y-yhat)))
expect_equal(mpe(df=df), 100*mean((y-yhat)/y))
expect_equal(mape(df=df), 100*mean(abs((y-yhat)/y)))
answer <- data.frame(
me=me(df=df),
mse=mse(df=df),
rmse=rmse(df=df),
mae=mae(df=df),
mpe=mpe(df=df),
mape=mape(df=df)
)
expect_equal(all_metrics(df=df), answer)
})