X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=pkg%2Ftests%2Ftestthat%2Ftest.Forecaster.R;h=a02e6e94b66e0e8bbca095383b95335284a9f7ef;hb=ff5df8e310b73883565761ab4b1aa5a0672e9f27;hp=63878278d81b40b0d3198775e0272f6514002013;hpb=44a9990b6d608ffcd2e99d5193fa8b9e6cbdb436;p=talweg.git diff --git a/pkg/tests/testthat/test.Forecaster.R b/pkg/tests/testthat/test.Forecaster.R index 6387827..a02e6e9 100644 --- a/pkg/tests/testthat/test.Forecaster.R +++ b/pkg/tests/testthat/test.Forecaster.R @@ -6,85 +6,136 @@ data00 <<- getData(ts_data, exo_data, input_tz="GMT", date_format="%Y-%m-%d %H:% 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 +#Forecast at sunday to saturday (series 7 to 1), for monday to sunday (series 1 to 7) indices <<- seq(as.Date("2007-04-01"),as.Date("2007-04-07"),"days") +pred_order = c(7,1:6) #will facilitate tests test_that("Average method behave as expected", { - pred00_z = getForecast(data00, indices, "Average", "Zero", Inf, 24) - pred00_p = getForecast(data00, indices, "Average", "Persistence", Inf, 24) - for (i in seq_along(indices)) + pred00_z = computeForecast(data00, indices, "Average", "Zero", Inf, 24) + pred00_p = computeForecast(data00, indices, "Average", "Persistence", Inf, 24) + for (i in 1:7) { #zero jump: should predict true values minus 1 - expect_identical(pred00_z$getSerie(i), rep(i,24)) + expect_equal( pred00_z$getSerie(i), rep(pred_order[i],24) ) #persistence jump == 1: should predict true values - expect_identical(pred00_p$getSerie(i), rep(i%%7+1,24)) + expect_equal( pred00_p$getSerie(i), rep(i,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)) + #No jump between days, thus zero and persistence are equivalent (and correct) + pred13_z = computeForecast(data13, indices, "Average", "Zero", Inf, 24) + pred13_p = computeForecast(data13, indices, "Average", "Persistence", Inf, 24) + for (i in 1:7) { - expect_equal(pred13_z$getSerie(i), prediction ) - expect_equal(pred13_p$getSerie(i), prediction ) + expect_equal( pred13_z$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) ) + expect_equal( pred13_p$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) ) } #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) ) + expect_equal( pred00_p$getIndexInData(2), dateIndexToInteger("2007-04-02",data00) ) + expect_equal( pred00_z$getIndexInData(2), dateIndexToInteger("2007-04-02",data00) ) + expect_equal( pred13_p$getIndexInData(5), dateIndexToInteger("2007-04-05",data13) ) + expect_equal( pred13_z$getIndexInData(5), dateIndexToInteger("2007-04-05",data13) ) }) 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)) + #Situation A: +Zero; (generally) correct if jump, wrong otherwise + pred00_sd = computeForecast(data00, indices, "Persistence", "Zero", Inf, 24, same_day=TRUE) + pred00_dd = computeForecast(data00, indices, "Persistence", "Zero", Inf, 24, same_day=FALSE) + for (i in 1:7) { - expect_identical(pred00_sd$getSerie(i), rep(i,24)) - expect_identical(pred00_dd$getSerie(i), rep(i,24)) + expect_equal(pred00_sd$getSerie(i), rep(pred_order[i],24)) + expect_equal(pred00_dd$getSerie(i), rep(pred_order[i],24)) } - 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)) + pred13_sd = computeForecast(data13, indices, "Persistence", "Zero", Inf, 24, same_day=TRUE) + pred13_dd = computeForecast(data13, indices, "Persistence", "Zero", Inf, 24, same_day=FALSE) + for (i in 2:6) { - 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) ) ) + expect_equal(pred13_sd$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) ) + expect_equal(pred13_dd$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) ) } + #boundaries are special cases: OK if same day, quite wrong otherwise + expect_equal(pred13_sd$getSerie(1), c( rep(1,11), rep(2,13) ) ) + expect_equal(pred13_dd$getSerie(1), c( rep(1,11), rep(-5,13) ) ) + expect_equal(pred13_sd$getSerie(7), c( rep(7,11), rep(1,13) ) ) + expect_equal(pred13_dd$getSerie(7), c( rep(7,11), rep(8,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)) + #Situation B: +Persistence, (generally) correct + pred00_sd = computeForecast(data00, indices, "Persistence", "Persistence", Inf, 24, + same_day=TRUE) + pred00_dd = computeForecast(data00, indices, "Persistence", "Persistence", Inf, 24, + same_day=FALSE) + for (i in 3:7) { - expect_identical(pred00_sd$getSerie(i), rep(i%%7+1,24)) - expect_identical(pred00_dd$getSerie(i), rep(i%%7+1,24)) + expect_equal(pred00_sd$getSerie(i), rep(i,24)) + expect_equal(pred00_dd$getSerie(i), rep(i,24)) } + #boundaries are special cases: OK if same day, quite wrong otherwise + expect_equal(pred00_sd$getSerie(1), rep(1,24) ) + expect_equal(pred00_dd$getSerie(1), rep(8,24) ) + expect_equal(pred00_sd$getSerie(2), rep(2,24) ) + expect_equal(pred00_dd$getSerie(2), rep(-5,24) ) - 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)) + pred13_sd = computeForecast(data13, indices, "Persistence", "Persistence", Inf, 24, + same_day=TRUE) + pred13_dd = computeForecast(data13, indices, "Persistence", "Persistence", Inf, 24, + same_day=FALSE) + for (i in 2:6) { - 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) ) ) + expect_equal(pred13_sd$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) ) + expect_equal(pred13_dd$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) ) } + #boundaries are special cases: OK if same day, quite wrong otherwise + expect_equal(pred13_sd$getSerie(1), c( rep(1,11), rep(2,13) ) ) + expect_equal(pred13_dd$getSerie(1), c( rep(1,11), rep(-5,13) ) ) + expect_equal(pred13_sd$getSerie(7), c( rep(7,11), rep(1,13) ) ) + expect_equal(pred13_dd$getSerie(7), c( rep(7,11), rep(8,13) ) ) #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) ) + expect_equal( pred00_sd$getIndexInData(3), dateIndexToInteger("2007-04-03",data00) ) + expect_equal( pred00_dd$getIndexInData(6), dateIndexToInteger("2007-04-06",data00) ) + expect_equal( pred13_sd$getIndexInData(3), dateIndexToInteger("2007-04-03",data13) ) + expect_equal( pred13_dd$getIndexInData(6), dateIndexToInteger("2007-04-06",data13) ) }) -test_that("Neighbors+Zero method behave as expected", +test_that("Neighbors method behave as expected", { -}) + #Situation A: +Zero; correct if jump, wrong otherwise + pred00 = computeForecast(data00, indices, "Neighbors", "Zero", Inf, 24, simtype="mix") + for (i in 1:7) + expect_equal(pred00$getSerie(i), rep(pred_order[i],24)) -test_that("Neighbors+Neighbors method behave as expected", -{ + pred13 = computeForecast(data13, indices, "Persistence", "Zero", Inf, 24, simtype="mix") + for (i in 1:7) + expect_equal(pred13$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) ) + + #Situation B: +Neighbors, always predict bad (small, averaged) jump + pred00 = computeForecast(data00, indices, "Neighbors", "Neighbors", Inf, 24, simtype="endo") + #Concerning weights, there are 12+(1 if i>=2) gaps at -6 and 90-12+(i-2 if i>=3) gaps at 1 + #Thus, predicted jump is respectively + # (12*-6+78)/90 = 0.06666667 + # (13*-6+78)/91 = 0 + # (13*-6+79)/92 = 0.01086957 + # (13*-6+80)/93 = 0.02150538 + # (13*-6+81)/94 = 0.03191489 + # (13*-6+82)/95 = 0.04210526 + # (13*-6+83)/96 = 0.05208333 + jumps = c(0.06666667, 0, 0.01086957, 0.02150538, 0.03191489, 0.04210526, 0.05208333) + for (i in 1:7) + expect_equal(pred00$getSerie(i), rep(pred_order[i]+jumps[i],24)) + + #Next lines commented out because too unpredictable results (tendency to flatten everything...) +# pred13 = computeForecast(data13, indices, "Neighbors", "Neighbors", Inf, 24, simtype="endo") +# for (i in 1:7) +# expect_equal(pred13$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) ) + + #A few extra checks + expect_equal( pred00$getIndexInData(1), dateIndexToInteger("2007-04-01",data00) ) + expect_equal( pred00$getIndexInData(4), dateIndexToInteger("2007-04-04",data00) ) + expect_equal( pred13$getIndexInData(1), dateIndexToInteger("2007-04-01",data13) ) + expect_equal( pred13$getIndexInData(4), dateIndexToInteger("2007-04-04",data13) ) })