library(data.table)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:data.table':
##
## between, first, last
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(lubridate)
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:data.table':
##
## hour, isoweek, mday, minute, month, quarter, second, wday, week,
## yday, year
## The following object is masked from 'package:base':
##
## date
library(ggplot2)
library(viridis)
## Loading required package: viridisLite
library(reshape2)
##
## Attaching package: 'reshape2'
## The following objects are masked from 'package:data.table':
##
## dcast, melt
Load conditional severity rates at county-level for CA counties
df <- read.csv('county_age_severity_rates_v6.csv', stringsAsFactors = FALSE)
df$County <- gsub('city', 'City', df$County)
df = df %>% filter(State == "California") %>% group_by(FIPS, County) %>%
summarise(
total_population = sum(population_in_age_group),
wtd_critical_case_rate = weighted.mean(critical_case_rate, population_in_age_group),
wtd_acute_case_rate = weighted.mean(severe_cases_rate, population_in_age_group)) %>%
mutate(
wtd_prop_hosp_in_icu = wtd_critical_case_rate/(wtd_critical_case_rate+wtd_acute_case_rate)) %>%
select(County, total_population, wtd_prop_hosp_in_icu)
## Adding missing grouping variables: `FIPS`
df = df %>% mutate(County = gsub(' County', '', County))
df
## # A tibble: 58 x 4
## # Groups: FIPS [58]
## FIPS County total_population wtd_prop_hosp_in_icu
## <int> <chr> <int> <dbl>
## 1 6001 Alameda 1643700 0.286
## 2 6003 Alpine 1146 0.331
## 3 6005 Amador 37829 0.344
## 4 6007 Butte 227075 0.324
## 5 6009 Calaveras 45235 0.343
## 6 6011 Colusa 21464 0.294
## 7 6013 Contra Costa 1133247 0.298
## 8 6015 Del Norte 27424 0.310
## 9 6017 El Dorado 186661 0.312
## 10 6019 Fresno 978130 0.290
## # … with 48 more rows
Join in bed data
acute_beds_dt = fread('acute_byFIPS.csv')
icu_beds_dt = fread('icu_byFIPS.csv')
bed_dt = merge(acute_beds_dt, icu_beds_dt, by = "FIPS")
df_w_beds = merge(df, bed_dt, by="FIPS", all.x = TRUE)
df_w_beds
## FIPS County total_population wtd_prop_hosp_in_icu num_acute_beds
## 1 6001 Alameda 1643700 0.2856003 898
## 2 6003 Alpine 1146 0.3311264 NA
## 3 6005 Amador 37829 0.3435048 0
## 4 6007 Butte 227075 0.3237516 290
## 5 6009 Calaveras 45235 0.3430493 25
## 6 6011 Colusa 21464 0.2938068 NA
## 7 6013 Contra Costa 1133247 0.2981919 698
## 8 6015 Del Norte 27424 0.3099784 0
## 9 6017 El Dorado 186661 0.3123548 118
## 10 6019 Fresno 978130 0.2896567 859
## 11 6021 Glenn 27897 0.3041234 0
## 12 6023 Humboldt 135768 0.3065415 126
## 13 6025 Imperial 180216 0.2972695 48
## 14 6027 Inyo 18085 0.3455569 0
## 15 6029 Kern 883053 0.2734385 672
## 16 6031 Kings 150075 0.2680675 0
## 17 6033 Lake 64148 0.3205475 17
## 18 6035 Lassen 31185 0.2844235 20
## 19 6037 Los Angeles 10098052 0.2902536 8967
## 20 6039 Madera 155013 0.2977537 73
## 21 6041 Marin 260295 0.3233580 296
## 22 6043 Mariposa 17540 0.3417553 0
## 23 6045 Mendocino 87422 0.3189308 52
## 24 6047 Merced 269075 0.2811274 164
## 25 6049 Modoc 8938 0.3364453 4
## 26 6051 Mono 14174 0.2511204 13
## 27 6053 Monterey 433212 0.2966013 355
## 28 6055 Napa 140530 0.3218895 156
## 29 6057 Nevada 99092 0.3403488 0
## 30 6059 Orange 3164182 0.2961512 2403
## 31 6061 Placer 380077 0.3232071 146
## 32 6063 Plumas 18699 0.3337423 9
## 33 6065 Riverside 2383286 0.2992569 1584
## 34 6067 Sacramento 1510023 0.2928058 1090
## 35 6069 San Benito 59416 0.2802747 33
## 36 6071 San Bernardino 2135413 0.2715110 1738
## 37 6073 San Diego 3302833 0.2947189 2524
## 38 6075 San Francisco 870044 0.3031638 771
## 39 6077 San Joaquin 732212 0.2869450 170
## 40 6079 San Luis Obispo 281455 0.3232393 163
## 41 6081 San Mateo 765935 0.3040809 561
## 42 6083 Santa Barbara 443738 0.3163412 171
## 43 6085 Santa Clara 1922200 0.2884449 1318
## 44 6087 Santa Cruz 273765 0.2932217 68
## 45 6089 Shasta 179085 0.3285431 289
## 46 6091 Sierra 2930 0.3552292 NA
## 47 6093 Siskiyou 43540 0.3355520 25
## 48 6095 Solano 438530 0.2944692 314
## 49 6097 Sonoma 501317 0.3130815 378
## 50 6099 Stanislaus 539301 0.2897179 360
## 51 6101 Sutter 95872 0.3127271 0
## 52 6103 Tehama 63373 0.3203325 0
## 53 6105 Trinity 12862 0.3332495 0
## 54 6107 Tulare 460477 0.2844952 336
## 55 6109 Tuolumne 53932 0.3444248 59
## 56 6111 Ventura 848112 0.3000556 143
## 57 6113 Yolo 214977 0.2929764 51
## 58 6115 Yuba 75493 0.2817576 175
## num_icu_beds
## 1 170
## 2 NA
## 3 0
## 4 43
## 5 6
## 6 NA
## 7 142
## 8 0
## 9 28
## 10 221
## 11 0
## 12 24
## 13 8
## 14 0
## 15 133
## 16 0
## 17 4
## 18 0
## 19 1828
## 20 10
## 21 34
## 22 0
## 23 10
## 24 24
## 25 0
## 26 2
## 27 43
## 28 66
## 29 0
## 30 441
## 31 20
## 32 0
## 33 280
## 34 236
## 35 8
## 36 369
## 37 505
## 38 215
## 39 34
## 40 27
## 41 89
## 42 48
## 43 266
## 44 6
## 45 50
## 46 NA
## 47 4
## 48 70
## 49 56
## 50 54
## 51 0
## 52 0
## 53 0
## 54 29
## 55 6
## 56 53
## 57 8
## 58 24
Merge in current hospitalizations (3/30)
# CA Hospitalizations on 3/30
hosp = fread('data/nigam_hospital_data_0330.csv')[,.(County, original_hosp = `COVID-19 Positive Patients March 30 2020`)]
df_w_beds_hosp = as.data.table(merge(df_w_beds, hosp, by = 'County', all.x = TRUE))
df_w_beds_hosp
## County FIPS total_population wtd_prop_hosp_in_icu num_acute_beds
## 1: Alameda 6001 1643700 0.2856003 898
## 2: Alpine 6003 1146 0.3311264 NA
## 3: Amador 6005 37829 0.3435048 0
## 4: Butte 6007 227075 0.3237516 290
## 5: Calaveras 6009 45235 0.3430493 25
## 6: Colusa 6011 21464 0.2938068 NA
## 7: Contra Costa 6013 1133247 0.2981919 698
## 8: Del Norte 6015 27424 0.3099784 0
## 9: El Dorado 6017 186661 0.3123548 118
## 10: Fresno 6019 978130 0.2896567 859
## 11: Glenn 6021 27897 0.3041234 0
## 12: Humboldt 6023 135768 0.3065415 126
## 13: Imperial 6025 180216 0.2972695 48
## 14: Inyo 6027 18085 0.3455569 0
## 15: Kern 6029 883053 0.2734385 672
## 16: Kings 6031 150075 0.2680675 0
## 17: Lake 6033 64148 0.3205475 17
## 18: Lassen 6035 31185 0.2844235 20
## 19: Los Angeles 6037 10098052 0.2902536 8967
## 20: Madera 6039 155013 0.2977537 73
## 21: Marin 6041 260295 0.3233580 296
## 22: Mariposa 6043 17540 0.3417553 0
## 23: Mendocino 6045 87422 0.3189308 52
## 24: Merced 6047 269075 0.2811274 164
## 25: Modoc 6049 8938 0.3364453 4
## 26: Mono 6051 14174 0.2511204 13
## 27: Monterey 6053 433212 0.2966013 355
## 28: Napa 6055 140530 0.3218895 156
## 29: Nevada 6057 99092 0.3403488 0
## 30: Orange 6059 3164182 0.2961512 2403
## 31: Placer 6061 380077 0.3232071 146
## 32: Plumas 6063 18699 0.3337423 9
## 33: Riverside 6065 2383286 0.2992569 1584
## 34: Sacramento 6067 1510023 0.2928058 1090
## 35: San Benito 6069 59416 0.2802747 33
## 36: San Bernardino 6071 2135413 0.2715110 1738
## 37: San Diego 6073 3302833 0.2947189 2524
## 38: San Francisco 6075 870044 0.3031638 771
## 39: San Joaquin 6077 732212 0.2869450 170
## 40: San Luis Obispo 6079 281455 0.3232393 163
## 41: San Mateo 6081 765935 0.3040809 561
## 42: Santa Barbara 6083 443738 0.3163412 171
## 43: Santa Clara 6085 1922200 0.2884449 1318
## 44: Santa Cruz 6087 273765 0.2932217 68
## 45: Shasta 6089 179085 0.3285431 289
## 46: Sierra 6091 2930 0.3552292 NA
## 47: Siskiyou 6093 43540 0.3355520 25
## 48: Solano 6095 438530 0.2944692 314
## 49: Sonoma 6097 501317 0.3130815 378
## 50: Stanislaus 6099 539301 0.2897179 360
## 51: Sutter 6101 95872 0.3127271 0
## 52: Tehama 6103 63373 0.3203325 0
## 53: Trinity 6105 12862 0.3332495 0
## 54: Tulare 6107 460477 0.2844952 336
## 55: Tuolumne 6109 53932 0.3444248 59
## 56: Ventura 6111 848112 0.3000556 143
## 57: Yolo 6113 214977 0.2929764 51
## 58: Yuba 6115 75493 0.2817576 175
## County FIPS total_population wtd_prop_hosp_in_icu num_acute_beds
## num_icu_beds original_hosp
## 1: 170 59
## 2: NA NA
## 3: 0 0
## 4: 43 4
## 5: 6 0
## 6: NA 0
## 7: 142 24
## 8: 0 0
## 9: 28 6
## 10: 221 10
## 11: 0 0
## 12: 24 1
## 13: 8 19
## 14: 0 NA
## 15: 133 15
## 16: 0 2
## 17: 4 0
## 18: 0 0
## 19: 1828 559
## 20: 10 1
## 21: 34 10
## 22: 0 NA
## 23: 10 2
## 24: 24 1
## 25: 0 0
## 26: 2 0
## 27: 43 11
## 28: 66 3
## 29: 0 26
## 30: 441 91
## 31: 20 19
## 32: 0 0
## 33: 280 60
## 34: 236 40
## 35: 8 NA
## 36: 369 67
## 37: 505 129
## 38: 215 42
## 39: 34 20
## 40: 27 1
## 41: 89 53
## 42: 48 19
## 43: 266 153
## 44: 6 1
## 45: 50 1
## 46: NA NA
## 47: 4 0
## 48: 70 15
## 49: 56 7
## 50: 54 17
## 51: 0 0
## 52: 0 0
## 53: 0 0
## 54: 29 5
## 55: 6 1
## 56: 53 25
## 57: 8 2
## 58: 24 3
## num_icu_beds original_hosp
print(paste("Counties with nonzero hospitalizations: ", df_w_beds_hosp[original_hosp>0, .N]))
## [1] "Counties with nonzero hospitalizations: 39"
For now, only project hospitalizations for counties with nonzero hospitalizations. Projecting hospitalizations for other counties requires stronger assumptions about testing and/or fatality rates in order to estimate hospitalizations.
Will now project 21-day time series of cumulative hospitalizations with doubling times of 6, 10, 14
start_date = '2020-03-30'
num_days_to_project = 21
doubling_times = c(7,10,14)
dts_cross_dates = as.data.table(expand.grid(
doubling_times,
as.Date('2020-03-30') + seq(0, num_days_to_project)
))
setnames(dts_cross_dates, c('doubling_time', 'date'))
long_dt = merge(
df_w_beds_hosp[original_hosp>0][, i:=1],
dts_cross_dates[,i:=1],
by = 'i',
allow.cartesian = TRUE
)[,i:=NULL]
long_dt[, days_since_start_date := as.numeric(date - as.Date(start_date)), by=.I]
long_dt[, est_hosp := original_hosp * 2^(days_since_start_date/doubling_time)]
long_dt[, `:=`(
est_acute_hosp = (1-wtd_prop_hosp_in_icu) * est_hosp,
est_icu_hosp = wtd_prop_hosp_in_icu * est_hosp
)]
long_dt
## County FIPS total_population wtd_prop_hosp_in_icu num_acute_beds
## 1: Alameda 6001 1643700 0.2856003 898
## 2: Alameda 6001 1643700 0.2856003 898
## 3: Alameda 6001 1643700 0.2856003 898
## 4: Alameda 6001 1643700 0.2856003 898
## 5: Alameda 6001 1643700 0.2856003 898
## ---
## 2570: Yuba 6115 75493 0.2817576 175
## 2571: Yuba 6115 75493 0.2817576 175
## 2572: Yuba 6115 75493 0.2817576 175
## 2573: Yuba 6115 75493 0.2817576 175
## 2574: Yuba 6115 75493 0.2817576 175
## num_icu_beds original_hosp doubling_time date days_since_start_date
## 1: 170 59 7 2020-03-30 0
## 2: 170 59 10 2020-03-30 0
## 3: 170 59 14 2020-03-30 0
## 4: 170 59 7 2020-03-31 1
## 5: 170 59 10 2020-03-31 1
## ---
## 2570: 24 3 10 2020-04-19 20
## 2571: 24 3 14 2020-04-19 20
## 2572: 24 3 7 2020-04-20 21
## 2573: 24 3 10 2020-04-20 21
## 2574: 24 3 14 2020-04-20 21
## est_hosp est_acute_hosp est_icu_hosp
## 1: 59.000000 42.149585 16.850415
## 2: 59.000000 42.149585 16.850415
## 3: 59.000000 42.149585 16.850415
## 4: 65.141281 46.536915 18.604367
## 5: 63.234634 45.174806 18.059828
## ---
## 2570: 12.000000 8.618909 3.381091
## 2571: 8.075401 5.800096 2.275305
## 2572: 24.000000 17.237818 6.762182
## 2573: 12.861282 9.237518 3.623763
## 2574: 8.485281 6.094489 2.390792
Estimate hospital census using LOS values
ICU_LOS = 9
ACUTE_LOS = 7
# function from Shiny app
get_hospitalizations = function(cumulative_cases, los, doubling_time) {
days_to_hospitalization = 0
# project back los + days to hospitalization days
back_vec = c(rep(NA, los + days_to_hospitalization), cumulative_cases)
for (i in (los + days_to_hospitalization):1) {
back_vec[i] = back_vec[i + 1]/2^(1/doubling_time)
}
# get indices of original vectors
original_start = los + days_to_hospitalization + 1
original_end = los + days_to_hospitalization + length(cumulative_cases)
stopifnot(all.equal(back_vec[original_start:original_end], cumulative_cases))
stopifnot(length(back_vec) == original_end)
# get indices of vectors shifted by days to hospitalization
shifted_start = original_start - days_to_hospitalization
shifted_end = original_end - days_to_hospitalization
# subtract off for length of stay
return_vec = back_vec[shifted_start:shifted_end] - back_vec[(shifted_start - los):(shifted_end - los)]
return(list(result = return_vec, back_vec = back_vec[1:los]))
}
# use on our data
long_dt[,icu_census := get_hospitalizations(est_icu_hosp, ICU_LOS, doubling_time=6), by = c('County', 'doubling_time')]
long_dt[,acute_census := get_hospitalizations(est_acute_hosp, ACUTE_LOS, doubling_time=6), by = c('County', 'doubling_time')]
long_dt[County == "Santa Clara" & doubling_time == 7]
## County FIPS total_population wtd_prop_hosp_in_icu num_acute_beds
## 1: Santa Clara 6085 1922200 0.2884449 1318
## 2: Santa Clara 6085 1922200 0.2884449 1318
## 3: Santa Clara 6085 1922200 0.2884449 1318
## 4: Santa Clara 6085 1922200 0.2884449 1318
## 5: Santa Clara 6085 1922200 0.2884449 1318
## 6: Santa Clara 6085 1922200 0.2884449 1318
## 7: Santa Clara 6085 1922200 0.2884449 1318
## 8: Santa Clara 6085 1922200 0.2884449 1318
## 9: Santa Clara 6085 1922200 0.2884449 1318
## 10: Santa Clara 6085 1922200 0.2884449 1318
## 11: Santa Clara 6085 1922200 0.2884449 1318
## 12: Santa Clara 6085 1922200 0.2884449 1318
## 13: Santa Clara 6085 1922200 0.2884449 1318
## 14: Santa Clara 6085 1922200 0.2884449 1318
## 15: Santa Clara 6085 1922200 0.2884449 1318
## 16: Santa Clara 6085 1922200 0.2884449 1318
## 17: Santa Clara 6085 1922200 0.2884449 1318
## 18: Santa Clara 6085 1922200 0.2884449 1318
## 19: Santa Clara 6085 1922200 0.2884449 1318
## 20: Santa Clara 6085 1922200 0.2884449 1318
## 21: Santa Clara 6085 1922200 0.2884449 1318
## 22: Santa Clara 6085 1922200 0.2884449 1318
## County FIPS total_population wtd_prop_hosp_in_icu num_acute_beds
## num_icu_beds original_hosp doubling_time date days_since_start_date
## 1: 266 153 7 2020-03-30 0
## 2: 266 153 7 2020-03-31 1
## 3: 266 153 7 2020-04-01 2
## 4: 266 153 7 2020-04-02 3
## 5: 266 153 7 2020-04-03 4
## 6: 266 153 7 2020-04-04 5
## 7: 266 153 7 2020-04-05 6
## 8: 266 153 7 2020-04-06 7
## 9: 266 153 7 2020-04-07 8
## 10: 266 153 7 2020-04-08 9
## 11: 266 153 7 2020-04-09 10
## 12: 266 153 7 2020-04-10 11
## 13: 266 153 7 2020-04-11 12
## 14: 266 153 7 2020-04-12 13
## 15: 266 153 7 2020-04-13 14
## 16: 266 153 7 2020-04-14 15
## 17: 266 153 7 2020-04-15 16
## 18: 266 153 7 2020-04-16 17
## 19: 266 153 7 2020-04-17 18
## 20: 266 153 7 2020-04-18 19
## 21: 266 153 7 2020-04-19 20
## 22: 266 153 7 2020-04-20 21
## num_icu_beds original_hosp doubling_time date days_since_start_date
## est_hosp est_acute_hosp est_icu_hosp icu_census acute_census
## 1: 153.0000 108.8679 44.13207 28.52903 60.37278
## 2: 168.9257 120.1999 48.72575 31.21193 65.76598
## 3: 186.5091 132.7115 53.79759 34.13899 71.61144
## 4: 205.9227 146.5254 59.39736 37.33132 77.94287
## 5: 227.3571 161.7771 65.58000 40.81171 84.79587
## 6: 251.0226 178.6164 72.40619 44.60473 92.20789
## 7: 277.1514 197.2085 79.94292 48.73683 100.21822
## 8: 306.0000 217.7359 88.26413 53.23649 108.86793
## 9: 337.8514 240.3999 97.45151 58.13430 120.19994
## 10: 373.0182 265.4230 107.59519 63.46312 132.71150
## 11: 411.8455 293.0507 118.79472 70.06896 146.52537
## 12: 454.7143 323.5543 131.16000 77.36241 161.77713
## 13: 502.0452 357.2329 144.81238 85.41502 178.61643
## 14: 554.3029 394.4171 159.88583 94.30583 197.20853
## 15: 612.0000 435.4717 176.52827 104.12208 217.73587
## 16: 675.7028 480.7998 194.90301 114.96010 240.39989
## 17: 746.0364 530.8460 215.19037 126.92624 265.42299
## 18: 823.6909 586.1015 237.58943 140.13793 293.05074
## 19: 909.4285 647.1085 262.32000 154.72481 323.55425
## 20: 1004.0905 714.4657 289.62476 170.83005 357.23286
## 21: 1108.6058 788.8341 319.77166 188.61166 394.41705
## 22: 1224.0000 870.9435 353.05654 208.24416 435.47173
## est_hosp est_acute_hosp est_icu_hosp icu_census acute_census
Example plot
ggplot(long_dt[County %in% c('Alameda', 'Santa Clara', 'San Mateo', 'San Francisco')],
aes(x=date, y=icu_census, color=factor(doubling_time))) + geom_line() +
facet_wrap(~County, ncol=2)
Create county-level output
# Filter to rows for Apr 7 and Apr 14
date1 = '2020-04-07'
date2 = '2020-04-14'
filtered_dt = long_dt[date %in% c(as.Date(date1), as.Date(date2))]
#Subset columns
filtered_dt = filtered_dt[,.(County, num_acute_beds, num_icu_beds, doubling_time, date, acute_census = round(acute_census), icu_census = round(icu_census))]
filtered_dt
## County num_acute_beds num_icu_beds doubling_time date acute_census
## 1: Alameda 898 170 7 2020-04-07 47
## 2: Alameda 898 170 10 2020-04-07 28
## 3: Alameda 898 170 14 2020-04-07 18
## 4: Alameda 898 170 7 2020-04-14 93
## 5: Alameda 898 170 10 2020-04-14 46
## ---
## 230: Yuba 175 24 10 2020-04-07 1
## 231: Yuba 175 24 14 2020-04-07 1
## 232: Yuba 175 24 7 2020-04-14 5
## 233: Yuba 175 24 10 2020-04-14 2
## 234: Yuba 175 24 14 2020-04-14 1
## icu_census
## 1: 22
## 2: 14
## 3: 10
## 4: 44
## 5: 22
## ---
## 230: 1
## 231: 1
## 232: 2
## 233: 1
## 234: 1
# pivot ICU data to wide table
icu_wide = as.data.table(dcast(filtered_dt, County + num_icu_beds ~ date + doubling_time, value.var = c('icu_census')))
icu_wide = icu_wide[,.(
County,
April_7_ICU_LB = get(paste(date1, doubling_times[3], sep='_')),
April_7_ICU_M = get(paste(date1, doubling_times[2], sep='_')),
April_7_ICU_UB = get(paste(date1, doubling_times[1], sep='_')),
April_14_ICU_LB = get(paste(date2, doubling_times[3], sep='_')),
April_14_ICU_M = get(paste(date2, doubling_times[2], sep='_')),
April_14_ICU_UB = get(paste(date2, doubling_times[1], sep='_')),
ICU_Utilization_UB = get(paste(date2, doubling_times[1], sep='_'))/num_icu_beds
)]
icu_wide
## County April_7_ICU_LB April_7_ICU_M April_7_ICU_UB April_14_ICU_LB
## 1: Alameda 10 14 22 13
## 2: Butte 1 1 2 1
## 3: Contra Costa 4 6 9 5
## 4: El Dorado 1 2 2 1
## 5: Fresno 2 2 4 2
## 6: Humboldt 0 0 0 0
## 7: Imperial 3 5 7 4
## 8: Kern 2 3 5 3
## 9: Kings 0 0 1 0
## 10: Los Angeles 97 138 214 123
## 11: Madera 0 0 0 0
## 12: Marin 2 3 4 2
## 13: Mendocino 0 1 1 0
## 14: Merced 0 0 0 0
## 15: Monterey 2 3 4 2
## 16: Napa 1 1 1 1
## 17: Nevada 5 8 12 7
## 18: Orange 16 23 36 20
## 19: Placer 4 5 8 5
## 20: Riverside 11 15 24 14
## 21: Sacramento 7 10 15 9
## 22: San Bernardino 11 15 24 14
## 23: San Diego 23 32 50 29
## 24: San Francisco 8 11 17 10
## 25: San Joaquin 3 5 8 4
## 26: San Luis Obispo 0 0 0 0
## 27: San Mateo 10 14 21 12
## 28: Santa Barbara 4 5 8 5
## 29: Santa Clara 26 38 58 33
## 30: Santa Cruz 0 0 0 0
## 31: Shasta 0 0 0 0
## 32: Solano 3 4 6 3
## 33: Sonoma 1 2 3 2
## 34: Stanislaus 3 4 6 4
## 35: Tulare 1 1 2 1
## 36: Tuolumne 0 0 0 0
## 37: Ventura 4 6 10 6
## 38: Yolo 0 0 1 0
## 39: Yuba 1 1 1 1
## County April_7_ICU_LB April_7_ICU_M April_7_ICU_UB April_14_ICU_LB
## April_14_ICU_M April_14_ICU_UB ICU_Utilization_UB
## 1: 22 44 0.25882353
## 2: 2 3 0.06976744
## 3: 9 19 0.13380282
## 4: 2 5 0.17857143
## 5: 4 8 0.03619910
## 6: 0 1 0.04166667
## 7: 7 15 1.87500000
## 8: 5 11 0.08270677
## 9: 1 1 Inf
## 10: 213 423 0.23140044
## 11: 0 1 0.10000000
## 12: 4 8 0.23529412
## 13: 1 2 0.20000000
## 14: 0 1 0.04166667
## 15: 4 8 0.18604651
## 16: 1 3 0.04545455
## 17: 12 23 Inf
## 18: 35 70 0.15873016
## 19: 8 16 0.80000000
## 20: 24 47 0.16785714
## 21: 15 31 0.13135593
## 22: 24 47 0.12737127
## 23: 50 99 0.19603960
## 24: 17 33 0.15348837
## 25: 8 15 0.44117647
## 26: 0 1 0.03703704
## 27: 21 42 0.47191011
## 28: 8 16 0.33333333
## 29: 58 115 0.43233083
## 30: 0 1 0.16666667
## 31: 0 1 0.02000000
## 32: 6 12 0.17142857
## 33: 3 6 0.10714286
## 34: 6 13 0.24074074
## 35: 2 4 0.13793103
## 36: 0 1 0.16666667
## 37: 10 20 0.37735849
## 38: 1 2 0.25000000
## 39: 1 2 0.08333333
## April_14_ICU_M April_14_ICU_UB ICU_Utilization_UB
# pivot Acute data to wide table
acute_wide = as.data.table(dcast(filtered_dt, County + num_acute_beds ~ date + doubling_time, value.var = c('acute_census')))
acute_wide = acute_wide[,.(
County,
April_7_Acute_LB = get(paste(date1, doubling_times[3], sep='_')),
April_7_Acute_M = get(paste(date1, doubling_times[2], sep='_')),
April_7_Acute_UB = get(paste(date1, doubling_times[1], sep='_')),
April_14_Acute_LB = get(paste(date2, doubling_times[3], sep='_')),
April_14_Acute_M = get(paste(date2, doubling_times[2], sep='_')),
April_14_Acute_UB = get(paste(date2, doubling_times[1], sep='_')),
Acute_Utilization_UB = get(paste(date2, doubling_times[1], sep='_'))/num_acute_beds
)]
acute_wide
## County April_7_Acute_LB April_7_Acute_M April_7_Acute_UB
## 1: Alameda 18 28 47
## 2: Butte 1 2 3
## 3: Contra Costa 7 11 19
## 4: El Dorado 2 3 5
## 5: Fresno 3 5 8
## 6: Humboldt 0 0 1
## 7: Imperial 6 9 15
## 8: Kern 5 7 12
## 9: Kings 1 1 2
## 10: Los Angeles 173 266 438
## 11: Madera 0 0 1
## 12: Marin 3 5 7
## 13: Mendocino 1 1 2
## 14: Merced 0 0 1
## 15: Monterey 3 5 9
## 16: Napa 1 1 2
## 17: Nevada 7 11 19
## 18: Orange 28 43 71
## 19: Placer 6 9 14
## 20: Riverside 18 28 46
## 21: Sacramento 12 19 31
## 22: San Bernardino 21 33 54
## 23: San Diego 40 61 100
## 24: San Francisco 13 20 32
## 25: San Joaquin 6 10 16
## 26: San Luis Obispo 0 0 1
## 27: San Mateo 16 25 41
## 28: Santa Barbara 6 9 14
## 29: Santa Clara 47 73 120
## 30: Santa Cruz 0 0 1
## 31: Shasta 0 0 1
## 32: Solano 5 7 12
## 33: Sonoma 2 3 5
## 34: Stanislaus 5 8 13
## 35: Tulare 2 2 4
## 36: Tuolumne 0 0 1
## 37: Ventura 8 12 19
## 38: Yolo 1 1 2
## 39: Yuba 1 1 2
## County April_7_Acute_LB April_7_Acute_M April_7_Acute_UB
## April_14_Acute_LB April_14_Acute_M April_14_Acute_UB Acute_Utilization_UB
## 1: 26 46 93 0.103563474
## 2: 2 3 6 0.020689655
## 3: 10 18 37 0.053008596
## 4: 3 4 9 0.076271186
## 5: 4 8 16 0.018626310
## 6: 0 1 2 0.015873016
## 7: 8 15 29 0.604166667
## 8: 7 12 24 0.035714286
## 9: 1 2 3 Inf
## 10: 244 431 876 0.097691536
## 11: 0 1 2 0.027397260
## 12: 4 7 15 0.050675676
## 13: 1 1 3 0.057692308
## 14: 0 1 2 0.012195122
## 15: 5 8 17 0.047887324
## 16: 1 2 4 0.025641026
## 17: 11 19 38 Inf
## 18: 39 70 141 0.058676654
## 19: 8 14 28 0.191780822
## 20: 26 46 93 0.058712121
## 21: 17 31 62 0.056880734
## 22: 30 53 108 0.062140391
## 23: 56 99 201 0.079635499
## 24: 18 32 65 0.084306096
## 25: 9 16 31 0.182352941
## 26: 0 1 1 0.006134969
## 27: 23 40 81 0.144385027
## 28: 8 14 29 0.169590643
## 29: 67 118 240 0.182094082
## 30: 0 1 2 0.029411765
## 31: 0 1 1 0.003460208
## 32: 7 12 23 0.073248408
## 33: 3 5 11 0.029100529
## 34: 7 13 27 0.075000000
## 35: 2 4 8 0.023809524
## 36: 0 1 1 0.016949153
## 37: 11 19 39 0.272727273
## 38: 1 2 3 0.058823529
## 39: 1 2 5 0.028571429
## April_14_Acute_LB April_14_Acute_M April_14_Acute_UB Acute_Utilization_UB
Combine the Acute and ICU data
combined_data = merge(icu_wide, acute_wide, by = 'County')
combined_data
## County April_7_ICU_LB April_7_ICU_M April_7_ICU_UB April_14_ICU_LB
## 1: Alameda 10 14 22 13
## 2: Butte 1 1 2 1
## 3: Contra Costa 4 6 9 5
## 4: El Dorado 1 2 2 1
## 5: Fresno 2 2 4 2
## 6: Humboldt 0 0 0 0
## 7: Imperial 3 5 7 4
## 8: Kern 2 3 5 3
## 9: Kings 0 0 1 0
## 10: Los Angeles 97 138 214 123
## 11: Madera 0 0 0 0
## 12: Marin 2 3 4 2
## 13: Mendocino 0 1 1 0
## 14: Merced 0 0 0 0
## 15: Monterey 2 3 4 2
## 16: Napa 1 1 1 1
## 17: Nevada 5 8 12 7
## 18: Orange 16 23 36 20
## 19: Placer 4 5 8 5
## 20: Riverside 11 15 24 14
## 21: Sacramento 7 10 15 9
## 22: San Bernardino 11 15 24 14
## 23: San Diego 23 32 50 29
## 24: San Francisco 8 11 17 10
## 25: San Joaquin 3 5 8 4
## 26: San Luis Obispo 0 0 0 0
## 27: San Mateo 10 14 21 12
## 28: Santa Barbara 4 5 8 5
## 29: Santa Clara 26 38 58 33
## 30: Santa Cruz 0 0 0 0
## 31: Shasta 0 0 0 0
## 32: Solano 3 4 6 3
## 33: Sonoma 1 2 3 2
## 34: Stanislaus 3 4 6 4
## 35: Tulare 1 1 2 1
## 36: Tuolumne 0 0 0 0
## 37: Ventura 4 6 10 6
## 38: Yolo 0 0 1 0
## 39: Yuba 1 1 1 1
## County April_7_ICU_LB April_7_ICU_M April_7_ICU_UB April_14_ICU_LB
## April_14_ICU_M April_14_ICU_UB ICU_Utilization_UB April_7_Acute_LB
## 1: 22 44 0.25882353 18
## 2: 2 3 0.06976744 1
## 3: 9 19 0.13380282 7
## 4: 2 5 0.17857143 2
## 5: 4 8 0.03619910 3
## 6: 0 1 0.04166667 0
## 7: 7 15 1.87500000 6
## 8: 5 11 0.08270677 5
## 9: 1 1 Inf 1
## 10: 213 423 0.23140044 173
## 11: 0 1 0.10000000 0
## 12: 4 8 0.23529412 3
## 13: 1 2 0.20000000 1
## 14: 0 1 0.04166667 0
## 15: 4 8 0.18604651 3
## 16: 1 3 0.04545455 1
## 17: 12 23 Inf 7
## 18: 35 70 0.15873016 28
## 19: 8 16 0.80000000 6
## 20: 24 47 0.16785714 18
## 21: 15 31 0.13135593 12
## 22: 24 47 0.12737127 21
## 23: 50 99 0.19603960 40
## 24: 17 33 0.15348837 13
## 25: 8 15 0.44117647 6
## 26: 0 1 0.03703704 0
## 27: 21 42 0.47191011 16
## 28: 8 16 0.33333333 6
## 29: 58 115 0.43233083 47
## 30: 0 1 0.16666667 0
## 31: 0 1 0.02000000 0
## 32: 6 12 0.17142857 5
## 33: 3 6 0.10714286 2
## 34: 6 13 0.24074074 5
## 35: 2 4 0.13793103 2
## 36: 0 1 0.16666667 0
## 37: 10 20 0.37735849 8
## 38: 1 2 0.25000000 1
## 39: 1 2 0.08333333 1
## April_14_ICU_M April_14_ICU_UB ICU_Utilization_UB April_7_Acute_LB
## April_7_Acute_M April_7_Acute_UB April_14_Acute_LB April_14_Acute_M
## 1: 28 47 26 46
## 2: 2 3 2 3
## 3: 11 19 10 18
## 4: 3 5 3 4
## 5: 5 8 4 8
## 6: 0 1 0 1
## 7: 9 15 8 15
## 8: 7 12 7 12
## 9: 1 2 1 2
## 10: 266 438 244 431
## 11: 0 1 0 1
## 12: 5 7 4 7
## 13: 1 2 1 1
## 14: 0 1 0 1
## 15: 5 9 5 8
## 16: 1 2 1 2
## 17: 11 19 11 19
## 18: 43 71 39 70
## 19: 9 14 8 14
## 20: 28 46 26 46
## 21: 19 31 17 31
## 22: 33 54 30 53
## 23: 61 100 56 99
## 24: 20 32 18 32
## 25: 10 16 9 16
## 26: 0 1 0 1
## 27: 25 41 23 40
## 28: 9 14 8 14
## 29: 73 120 67 118
## 30: 0 1 0 1
## 31: 0 1 0 1
## 32: 7 12 7 12
## 33: 3 5 3 5
## 34: 8 13 7 13
## 35: 2 4 2 4
## 36: 0 1 0 1
## 37: 12 19 11 19
## 38: 1 2 1 2
## 39: 1 2 1 2
## April_7_Acute_M April_7_Acute_UB April_14_Acute_LB April_14_Acute_M
## April_14_Acute_UB Acute_Utilization_UB
## 1: 93 0.103563474
## 2: 6 0.020689655
## 3: 37 0.053008596
## 4: 9 0.076271186
## 5: 16 0.018626310
## 6: 2 0.015873016
## 7: 29 0.604166667
## 8: 24 0.035714286
## 9: 3 Inf
## 10: 876 0.097691536
## 11: 2 0.027397260
## 12: 15 0.050675676
## 13: 3 0.057692308
## 14: 2 0.012195122
## 15: 17 0.047887324
## 16: 4 0.025641026
## 17: 38 Inf
## 18: 141 0.058676654
## 19: 28 0.191780822
## 20: 93 0.058712121
## 21: 62 0.056880734
## 22: 108 0.062140391
## 23: 201 0.079635499
## 24: 65 0.084306096
## 25: 31 0.182352941
## 26: 1 0.006134969
## 27: 81 0.144385027
## 28: 29 0.169590643
## 29: 240 0.182094082
## 30: 2 0.029411765
## 31: 1 0.003460208
## 32: 23 0.073248408
## 33: 11 0.029100529
## 34: 27 0.075000000
## 35: 8 0.023809524
## 36: 1 0.016949153
## 37: 39 0.272727273
## 38: 3 0.058823529
## 39: 5 0.028571429
## April_14_Acute_UB Acute_Utilization_UB
Write to CSV
fwrite(combined_data, 'data/ca_county_projections.csv')