Commit | Line | Data |
---|---|---|
6d97bfec BA |
1 | context("Check that forecasters behave as expected") |
2 | ||
44a9990b BA |
3 | ts_data = system.file("testdata","ts_test.csv",package="talweg") |
4 | exo_data = system.file("testdata","exo_test.csv",package="talweg") | |
5 | data00 <<- getData(ts_data, exo_data, input_tz="GMT", date_format="%Y-%m-%d %H:%M", | |
6 | working_tz="GMT", predict_at=0, limit=Inf) | |
7 | data13 <<- getData(ts_data, exo_data, input_tz="GMT", date_format="%Y-%m-%d %H:%M", | |
8 | working_tz="GMT", predict_at=13, limit=Inf) | |
defcae03 | 9 | #Forecast at sunday to saturday (series 7 to 1), for monday to sunday (series 1 to 7) |
44a9990b | 10 | indices <<- seq(as.Date("2007-04-01"),as.Date("2007-04-07"),"days") |
defcae03 | 11 | pred_order = c(7,1:6) #will facilitate tests |
44a9990b BA |
12 | |
13 | test_that("Average method behave as expected", | |
6d97bfec | 14 | { |
99f83c9a BA |
15 | pred00_z = computeForecast(data00, indices, "Average", "Zero", Inf, 24) |
16 | pred00_p = computeForecast(data00, indices, "Average", "Persistence", Inf, 24) | |
17 | for (i in 1:7) | |
44a9990b BA |
18 | { |
19 | #zero jump: should predict true values minus 1 | |
99f83c9a | 20 | expect_equal( pred00_z$getSerie(i), rep(pred_order[i],24) ) |
44a9990b | 21 | #persistence jump == 1: should predict true values |
99f83c9a | 22 | expect_equal( pred00_p$getSerie(i), rep(i,24) ) |
44a9990b BA |
23 | } |
24 | ||
25 | #NOTE: days become | |
26 | #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) | |
99f83c9a BA |
27 | #No jump between days, thus zero and persistence are equivalent (and correct) |
28 | pred13_z = computeForecast(data13, indices, "Average", "Zero", Inf, 24) | |
29 | pred13_p = computeForecast(data13, indices, "Average", "Persistence", Inf, 24) | |
30 | for (i in 1:7) | |
44a9990b | 31 | { |
99f83c9a BA |
32 | expect_equal( pred13_z$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) ) |
33 | expect_equal( pred13_p$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) ) | |
44a9990b | 34 | } |
613a986f | 35 | |
44a9990b | 36 | #A few extra checks |
99f83c9a BA |
37 | expect_equal( pred00_p$getIndexInData(2), dateIndexToInteger("2007-04-02",data00) ) |
38 | expect_equal( pred00_z$getIndexInData(2), dateIndexToInteger("2007-04-02",data00) ) | |
39 | expect_equal( pred13_p$getIndexInData(5), dateIndexToInteger("2007-04-05",data13) ) | |
40 | expect_equal( pred13_z$getIndexInData(5), dateIndexToInteger("2007-04-05",data13) ) | |
44a9990b BA |
41 | }) |
42 | ||
43 | test_that("Persistence method behave as expected", | |
44 | { | |
99f83c9a | 45 | #Situation A: +Zero; (generally) correct if jump, wrong otherwise |
3ddf1c12 BA |
46 | pred00_sd = computeForecast(data00, indices, "Persistence", "Zero", Inf, 24, |
47 | same_day=TRUE) | |
48 | pred00_dd = computeForecast(data00, indices, "Persistence", "Zero", Inf, 24, | |
49 | same_day=FALSE) | |
99f83c9a | 50 | for (i in 1:7) |
44a9990b | 51 | { |
99f83c9a BA |
52 | expect_equal(pred00_sd$getSerie(i), rep(pred_order[i],24)) |
53 | expect_equal(pred00_dd$getSerie(i), rep(pred_order[i],24)) | |
44a9990b | 54 | } |
613a986f | 55 | |
3ddf1c12 BA |
56 | pred13_sd = computeForecast(data13, indices, "Persistence", "Zero", Inf, 24, |
57 | same_day=TRUE) | |
58 | pred13_dd = computeForecast(data13, indices, "Persistence", "Zero", Inf, 24, | |
59 | same_day=FALSE) | |
99f83c9a | 60 | for (i in 2:6) |
44a9990b | 61 | { |
99f83c9a BA |
62 | expect_equal(pred13_sd$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) ) |
63 | expect_equal(pred13_dd$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) ) | |
44a9990b | 64 | } |
99f83c9a BA |
65 | #boundaries are special cases: OK if same day, quite wrong otherwise |
66 | expect_equal(pred13_sd$getSerie(1), c( rep(1,11), rep(2,13) ) ) | |
67 | expect_equal(pred13_dd$getSerie(1), c( rep(1,11), rep(-5,13) ) ) | |
68 | expect_equal(pred13_sd$getSerie(7), c( rep(7,11), rep(1,13) ) ) | |
69 | expect_equal(pred13_dd$getSerie(7), c( rep(7,11), rep(8,13) ) ) | |
613a986f | 70 | |
99f83c9a | 71 | #Situation B: +Persistence, (generally) correct |
af3b84f4 BA |
72 | pred00_sd = computeForecast(data00, indices, "Persistence", "Persistence", Inf, 24, |
73 | same_day=TRUE) | |
74 | pred00_dd = computeForecast(data00, indices, "Persistence", "Persistence", Inf, 24, | |
75 | same_day=FALSE) | |
99f83c9a | 76 | for (i in 3:7) |
613a986f | 77 | { |
99f83c9a BA |
78 | expect_equal(pred00_sd$getSerie(i), rep(i,24)) |
79 | expect_equal(pred00_dd$getSerie(i), rep(i,24)) | |
613a986f | 80 | } |
99f83c9a BA |
81 | #boundaries are special cases: OK if same day, quite wrong otherwise |
82 | expect_equal(pred00_sd$getSerie(1), rep(1,24) ) | |
83 | expect_equal(pred00_dd$getSerie(1), rep(8,24) ) | |
84 | expect_equal(pred00_sd$getSerie(2), rep(2,24) ) | |
85 | expect_equal(pred00_dd$getSerie(2), rep(-5,24) ) | |
613a986f | 86 | |
af3b84f4 BA |
87 | pred13_sd = computeForecast(data13, indices, "Persistence", "Persistence", Inf, 24, |
88 | same_day=TRUE) | |
89 | pred13_dd = computeForecast(data13, indices, "Persistence", "Persistence", Inf, 24, | |
90 | same_day=FALSE) | |
99f83c9a | 91 | for (i in 2:6) |
44a9990b | 92 | { |
99f83c9a BA |
93 | expect_equal(pred13_sd$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) ) |
94 | expect_equal(pred13_dd$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) ) | |
44a9990b | 95 | } |
99f83c9a BA |
96 | #boundaries are special cases: OK if same day, quite wrong otherwise |
97 | expect_equal(pred13_sd$getSerie(1), c( rep(1,11), rep(2,13) ) ) | |
98 | expect_equal(pred13_dd$getSerie(1), c( rep(1,11), rep(-5,13) ) ) | |
99 | expect_equal(pred13_sd$getSerie(7), c( rep(7,11), rep(1,13) ) ) | |
100 | expect_equal(pred13_dd$getSerie(7), c( rep(7,11), rep(8,13) ) ) | |
6d97bfec | 101 | |
44a9990b | 102 | #A few extra checks |
99f83c9a BA |
103 | expect_equal( pred00_sd$getIndexInData(3), dateIndexToInteger("2007-04-03",data00) ) |
104 | expect_equal( pred00_dd$getIndexInData(6), dateIndexToInteger("2007-04-06",data00) ) | |
105 | expect_equal( pred13_sd$getIndexInData(3), dateIndexToInteger("2007-04-03",data13) ) | |
106 | expect_equal( pred13_dd$getIndexInData(6), dateIndexToInteger("2007-04-06",data13) ) | |
44a9990b | 107 | }) |
6d97bfec | 108 | |
99f83c9a | 109 | test_that("Neighbors method behave as expected", |
6d97bfec | 110 | { |
99f83c9a | 111 | #Situation A: +Zero; correct if jump, wrong otherwise |
3ddf1c12 BA |
112 | pred00 = computeForecast(data00, indices, "Neighbors", "Zero", Inf, 24, |
113 | simtype="mix") | |
99f83c9a BA |
114 | for (i in 1:7) |
115 | expect_equal(pred00$getSerie(i), rep(pred_order[i],24)) | |
6d97bfec | 116 | |
3ddf1c12 BA |
117 | pred13 = computeForecast(data13, indices, "Persistence", "Zero", Inf, 24, |
118 | simtype="mix") | |
99f83c9a BA |
119 | for (i in 1:7) |
120 | expect_equal(pred13$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) ) | |
121 | ||
122 | #Situation B: +Neighbors, always predict bad (small, averaged) jump | |
3ddf1c12 BA |
123 | pred00 = computeForecast(data00, indices, "Neighbors", "Neighbors", Inf, 24, |
124 | simtype="endo") | |
125 | #Concerning weights, there are 12+(1 if i>=2) gaps at -6 and 90-12+(i-2 if i>=3) gaps | |
126 | #at 1. Thus, predicted jump is respectively | |
99f83c9a BA |
127 | # (12*-6+78)/90 = 0.06666667 |
128 | # (13*-6+78)/91 = 0 | |
129 | # (13*-6+79)/92 = 0.01086957 | |
130 | # (13*-6+80)/93 = 0.02150538 | |
131 | # (13*-6+81)/94 = 0.03191489 | |
132 | # (13*-6+82)/95 = 0.04210526 | |
133 | # (13*-6+83)/96 = 0.05208333 | |
134 | jumps = c(0.06666667, 0, 0.01086957, 0.02150538, 0.03191489, 0.04210526, 0.05208333) | |
135 | for (i in 1:7) | |
136 | expect_equal(pred00$getSerie(i), rep(pred_order[i]+jumps[i],24)) | |
137 | ||
3ddf1c12 BA |
138 | #Next lines commented out because too unpredictable results |
139 | #(tendency to flatten everything...) | |
140 | # pred13 = computeForecast(data13, indices, "Neighbors", "Neighbors", Inf, 24, | |
141 | # simtype="endo") | |
99f83c9a BA |
142 | # for (i in 1:7) |
143 | # expect_equal(pred13$getSerie(i), c( rep(i,11), rep(i%%7+1,13) ) ) | |
144 | ||
145 | #A few extra checks | |
146 | expect_equal( pred00$getIndexInData(1), dateIndexToInteger("2007-04-01",data00) ) | |
147 | expect_equal( pred00$getIndexInData(4), dateIndexToInteger("2007-04-04",data00) ) | |
148 | expect_equal( pred13$getIndexInData(1), dateIndexToInteger("2007-04-01",data13) ) | |
149 | expect_equal( pred13$getIndexInData(4), dateIndexToInteger("2007-04-04",data13) ) | |
44a9990b | 150 | }) |