X-Git-Url: https://git.auder.net/?p=talweg.git;a=blobdiff_plain;f=pkg%2Ftests%2Ftestthat%2Ftest.Forecaster.R;h=63878278d81b40b0d3198775e0272f6514002013;hp=0986a3dfc9faa4f1703728a2c1c4c3bdb0c93ba2;hb=44a9990b6d608ffcd2e99d5193fa8b9e6cbdb436;hpb=16209589215b8300e07e3525ae5bcb236d6f7008 diff --git a/pkg/tests/testthat/test.Forecaster.R b/pkg/tests/testthat/test.Forecaster.R index 0986a3d..6387827 100644 --- a/pkg/tests/testthat/test.Forecaster.R +++ b/pkg/tests/testthat/test.Forecaster.R @@ -1,35 +1,90 @@ context("Check that forecasters behave as expected") -test_that("Average+Zero method behave as expected", +ts_data = system.file("testdata","ts_test.csv",package="talweg") +exo_data = system.file("testdata","exo_test.csv",package="talweg") +data00 <<- getData(ts_data, exo_data, input_tz="GMT", date_format="%Y-%m-%d %H:%M", + working_tz="GMT", predict_at=0, limit=Inf) +data13 <<- getData(ts_data, exo_data, input_tz="GMT", date_format="%Y-%m-%d %H:%M", + working_tz="GMT", predict_at=13, limit=Inf) +#Forecast at sunday to saturday, for monday to sunday +indices <<- seq(as.Date("2007-04-01"),as.Date("2007-04-07"),"days") + +test_that("Average method behave as expected", { - ts_data = system.file("testdata","ts",package="talweg") - exo_data = system.file("testdata","exo",package="talweg") + pred00_z = getForecast(data00, indices, "Average", "Zero", Inf, 24) + pred00_p = getForecast(data00, indices, "Average", "Persistence", Inf, 24) + for (i in seq_along(indices)) + { + #zero jump: should predict true values minus 1 + expect_identical(pred00_z$getSerie(i), rep(i,24)) + #persistence jump == 1: should predict true values + expect_identical(pred00_p$getSerie(i), rep(i%%7+1,24)) + } + + #NOTE: days become + #1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 (14h-->0h then 1h-->13h) + #No jump between days, thus zero and persistence are equivalent (and wrong) + pred13_z = getForecast(data13, indices, "Average", "Zero", Inf, 24) + pred13_p = getForecast(data13, indices, "Average", "Persistence", Inf, 24) + prediction = c(rep(-13/24,11),rep(11/24,13)) + for (i in seq_along(indices)) + { + expect_equal(pred13_z$getSerie(i), prediction ) + expect_equal(pred13_p$getSerie(i), prediction ) + } - data0 = getData(ts_data, exo_data, input_tz="GMT", date_format="%Y-%m-%d %H:%M", - working_tz="GMT", predict_at=0, limit=Inf) - #TODO: with and without shift at origin (so series values at least forst ones are required) + #A few extra checks + expect_identical( pred00_sd$getIndexInData(1), dateIndexToInteger("2007-04-01",data00) ) + expect_identical( pred13_dd$getIndexInData(3), dateIndexToInteger("2007-04-03",data13) ) + expect_identical( pred00_dd$getIndexInData(5), dateIndexToInteger("2007-04-05",data00) ) +}) + +test_that("Persistence method behave as expected", +{ + #Situation A: +Zero; always wrong + pred00_sd = getForecast(data00, indices, "Persistence", "Zero", Inf, 24, same_day=TRUE) + pred00_dd = getForecast(data00, indices, "Persistence", "Zero", Inf, 24, same_day=FALSE) + for (i in seq_along(indices)) + { + expect_identical(pred00_sd$getSerie(i), rep(i,24)) + expect_identical(pred00_dd$getSerie(i), rep(i,24)) + } - indices = ... - pred0 = getForecast(.......) + pred13_sd = getForecast(data13, indices, "Persistence", "Zero", Inf, 24, same_day=TRUE) + pred13_dd = getForecast(data13, indices, "Persistence", "Zero", Inf, 24, same_day=FALSE) + for (i in seq_along(indices)) + { + expect_identical(pred13_sd$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) ) + expect_identical(pred13_dd$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) ) + } + #Situation B: +Persistence, correct when predict_at==0 + pred00_sd = getForecast(data00, indices, "Persistence", "Persistence", Inf, 24, same_day=TRUE) + pred00_dd = getForecast(data00, indices, "Persistence", "Persistence", Inf, 24, same_day=FALSE) for (i in seq_along(indices)) { - expect_identical(....) + expect_identical(pred00_sd$getSerie(i), rep(i%%7+1,24)) + expect_identical(pred00_dd$getSerie(i), rep(i%%7+1,24)) } - data13 = getData(ts_data, exo_data, input_tz="GMT", date_format="%Y-%m-%d %H:%M", - working_tz="GMT", predict_at=13, limit=Inf) - #Attention: jours deviennent 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 (14h-->0h puis 1h-->13h) -} + pred13_sd = getForecast(data13, indices, "Persistence", "Persistence", Inf, 24, same_day=TRUE) + pred13_dd = getForecast(data13, indices, "Persistence", "Persistence", Inf, 24, same_day=FALSE) + for (i in seq_along(indices)) + { + expect_identical(pred13_sd$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) ) + expect_identical(pred13_dd$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) ) + } -test_that("Persistence+Zero method behave as expected", -{ -} + #A few extra checks + expect_identical( pred13_sd$getIndexInData(1), dateIndexToInteger("2007-04-01",data12) ) + expect_identical( pred00_dd$getIndexInData(3), dateIndexToInteger("2007-04-03",data00) ) + expect_identical( pred13_dd$getIndexInData(5), dateIndexToInteger("2007-04-05",data13) ) +}) test_that("Neighbors+Zero method behave as expected", { -} +}) test_that("Neighbors+Neighbors method behave as expected", { -} +})