@@ -23,29 +23,45 @@ prediction_cards_filepath = case_when(
23
23
TRUE ~ prediction_cards_filename
24
24
)
25
25
26
- forecasters = c(get_covidhub_forecaster_names(designations = " primary" ),
27
- " COVIDhub-baseline" )
26
+ forecasters = unique( c(get_covidhub_forecaster_names(designations = c( " primary" , " secondary " ) ),
27
+ " COVIDhub-baseline" , " COVIDhub-trained_ensemble " ) )
28
28
locations = covidHubUtils :: hub_locations
29
29
30
30
# also includes "us", which is national level data
31
31
state_geos = locations %> %
32
32
filter(nchar(.data $ geo_value ) == 2 ) %> %
33
33
pull(.data $ geo_value )
34
34
signals = c(" confirmed_incidence_num" ,
35
- " deaths_incidence_num" )
35
+ " deaths_incidence_num" ,
36
+ " confirmed_admissions_covid_1d" )
36
37
37
38
predictions_cards = get_covidhub_predictions(forecasters ,
38
39
signal = signals ,
40
+ ahead = 1 : 28 ,
39
41
geo_values = state_geos ,
40
42
verbose = TRUE ,
41
- use_disk = TRUE )
43
+ use_disk = TRUE ) %> %
44
+ filter(! (incidence_period == " epiweek" & ahead > 4 ))
45
+
46
+ predictions_cards = predictions_cards %> %
47
+ filter(! is.na(target_end_date )) %> %
48
+ filter(target_end_date < today())
49
+
50
+ # For hospitalizations, drop all US territories except Puerto Rico and the
51
+ # Virgin Islands; HHS does not report data for any territories except PR and VI.
52
+ territories <- c(" as" , " gu" , " mp" , " fm" , " mh" , " pw" , " um" )
42
53
predictions_cards = predictions_cards %> %
43
- filter(! is.na(predictions_cards $ target_end_date ))
44
- predictions_cards = predictions_cards %> % filter(target_end_date < today())
54
+ filter(! (geo_value %in% territories & data_source == " hhs" ))
45
55
46
- # Only accept forecasts made Monday or earlier
56
+ # For epiweek predictions, only accept forecasts made Monday or earlier.
57
+ # target_end_date is the date of the last day (Saturday) in the epiweek
58
+ # For daily predictions, accept any forecast where the target_end_date is later
59
+ # than the forecast_date.
47
60
predictions_cards = predictions_cards %> %
48
- filter(target_end_date - (forecast_date + 7 * ahead ) > = - 2 )
61
+ filter(
62
+ (incidence_period == " epiweek" & target_end_date - (forecast_date + 7 * ahead ) > = - 2 ) |
63
+ (incidence_period == " day" & target_end_date > forecast_date )
64
+ )
49
65
50
66
# And only a forecaster's last forecast if multiple were made
51
67
predictions_cards = predictions_cards %> %
@@ -56,7 +72,7 @@ class(predictions_cards) = c("predictions_cards", class(predictions_cards))
56
72
57
73
print(" Saving predictions..." )
58
74
saveRDS(predictions_cards ,
59
- file = " predictions_cards.rds " ,
75
+ file = prediction_cards_filepath ,
60
76
compress = " xz" )
61
77
print(" Predictions saved" )
62
78
@@ -76,7 +92,10 @@ err_measures = c(wis = weighted_interval_score,
76
92
underprediction = underprediction ,
77
93
sharpness = sharpness ,
78
94
ae = absolute_error ,
79
- coverage_functions )
95
+ coverage_functions ,
96
+ value_20 = get_quantile_prediction_factory(0.2 ),
97
+ value_50 = get_quantile_prediction_factory(0.5 ),
98
+ value_80 = get_quantile_prediction_factory(0.8 ))
80
99
81
100
nation_predictions = predictions_cards %> % filter(geo_value == " us" )
82
101
state_predictions = predictions_cards %> % filter(geo_value != " us" )
@@ -91,22 +110,54 @@ state_scores = evaluate_covid_predictions(state_predictions,
91
110
geo_type = " state" )
92
111
93
112
source(" score.R" )
94
- print(" Saving state confirmed incidence..." )
95
- save_score_cards(state_scores , " state" , signal_name = " confirmed_incidence_num" ,
96
- output_dir = opt $ dir )
97
- print(" Saving state deaths incidence..." )
98
- save_score_cards(state_scores , " state" , signal_name = " deaths_incidence_num" ,
99
- output_dir = opt $ dir )
113
+ if ( " confirmed_incidence_num" %in% unique(state_scores $ signal )) {
114
+ print(" Saving state confirmed incidence..." )
115
+ save_score_cards(state_scores , " state" , signal_name = " confirmed_incidence_num" ,
116
+ output_dir = opt $ dir )
117
+ } else {
118
+ warning(" State confirmed incidence should generally be available. Please
119
+ verify that you expect not to have any cases incidence forecasts" )
120
+ }
121
+ if ( " deaths_incidence_num" %in% unique(state_scores $ signal )) {
122
+ print(" Saving state deaths incidence..." )
123
+ save_score_cards(state_scores , " state" , signal_name = " deaths_incidence_num" ,
124
+ output_dir = opt $ dir )
125
+ } else {
126
+ warning(" State deaths incidence should generally be available. Please
127
+ verify that you expect not to have any deaths incidence forecasts" )
128
+ }
129
+ if ( " confirmed_admissions_covid_1d" %in% unique(state_scores $ signal )) {
130
+ print(" Saving state hospitalizations..." )
131
+ save_score_cards(state_scores , " state" , signal_name = " confirmed_admissions_covid_1d" ,
132
+ output_dir = opt $ dir )
133
+ }
134
+
100
135
101
136
print(" Evaluating national forecasts" )
102
137
# COVIDcast does not return national level data, using CovidHubUtils instead
138
+
103
139
nation_scores = evaluate_chu(nation_predictions , signals , err_measures )
104
140
105
- print(" Saving nation confirmed incidence..." )
106
- save_score_cards(nation_scores , " nation" ,
107
- signal_name = " confirmed_incidence_num" , output_dir = opt $ dir )
108
- print(" Saving nation deaths incidence..." )
109
- save_score_cards(nation_scores , " nation" , signal_name = " deaths_incidence_num" ,
110
- output_dir = opt $ dir )
141
+ if ( " confirmed_incidence_num" %in% unique(state_scores $ signal )) {
142
+ print(" Saving nation confirmed incidence..." )
143
+ save_score_cards(nation_scores , " nation" ,
144
+ signal_name = " confirmed_incidence_num" , output_dir = opt $ dir )
145
+ } else {
146
+ warning(" Nation confirmed incidence should generally be available. Please
147
+ verify that you expect not to have any cases incidence forecasts" )
148
+ }
149
+ if ( " deaths_incidence_num" %in% unique(state_scores $ signal )) {
150
+ print(" Saving nation deaths incidence..." )
151
+ save_score_cards(nation_scores , " nation" , signal_name = " deaths_incidence_num" ,
152
+ output_dir = opt $ dir )
153
+ } else {
154
+ warning(" Nation deaths incidence should generally be available. Please
155
+ verify that you expect not to have any deaths incidence forecasts" )
156
+ }
157
+ if ( " confirmed_admissions_covid_1d" %in% unique(state_scores $ signal )) {
158
+ print(" Saving nation hospitalizations..." )
159
+ save_score_cards(nation_scores , " nation" , signal_name = " confirmed_admissions_covid_1d" ,
160
+ output_dir = opt $ dir )
161
+ }
111
162
112
163
print(" Done" )
0 commit comments