################################################################## ### Functions to estimate probabilities and delays from OSIRIS ### ################################################################## #30/10/2020: nieuw pad voor files ##################### ### Read the data ### ##################### # files <- list.files("___UITZONDERINGSGROND_6___", full.names = TRUE) # files <- c(files, list.files("___UITZONDERINGSGROND_6___", full.names = TRUE)) files <- list.files("___UITZONDERINGSGROND_6___", full.names = TRUE) files <- c(files, list.files("___UITZONDERINGSGROND_6___", full.names = TRUE)) files <- list.files("/rivm/r/COVID-19/Surveillance/Data/OSIRIS/Geschoond/Previous", full.names = TRUE) files <- c(files, list.files("/rivm/r/COVID-19/Surveillance/Data/OSIRIS/Geschoond", full.names = TRUE)) files <- files[grepl(files, pattern = "rds")] filedates <- as.Date( substr(files, regexpr("[[:digit:]]{8}", files), regexpr("[[:digit:]]{8}", files) + 7), "%Y%m%d") if(exists("analysisdate")) { file.name <- files[filedates == analysisdate] filedate <- analysisdate } else { file.name <- files[filedates %>% which.max] filedate <- max(filedates) } dataOsiris <- readRDS(file.name) ########################## ### Symptom to hospital ### ########################### get_S2H_probs <- function() { dataOsiris %>% filter(ZIE1eZiekteDt < as.Date("2020-03-20")) %>% select(NCOVpatZhs, Leeftijdsgroep) %>% separate(Leeftijdsgroep, c("onder", "boven")) %>% filter(onder != "Niet") %>% mutate(onder = as.numeric(onder), age_class = floor(onder / 10), age_class = if_else(age_class > 8, 8, age_class)) %>% group_by(age_class) %>% summarise(totaalS2Hp = n(), hospS2Hp = sum(NCOVpatZhs == "J", na.rm = T), probS2H = hospS2Hp/totaalS2Hp) %>% select(totaalS2Hp, hospS2Hp, probS2H) %>% as.list() } get_S2H_delays <- function() { dataOsiris %>% select(ZIE1eZiekteDt, NCOVdat1ezkhopn, Leeftijdsgroep) %>% filter(!is.na(ZIE1eZiekteDt) & !is.na(NCOVdat1ezkhopn)) %>% mutate(interval = as.numeric(NCOVdat1ezkhopn - ZIE1eZiekteDt)) %>% filter(interval >= 0 & interval < 31) %>% separate(Leeftijdsgroep, c("onder", "boven")) %>% filter(onder != "Niet") %>% mutate(onder = as.numeric(onder), age_class = floor(onder / 10), age_class = if_else(age_class > 8, 8, age_class)) %>% group_by(age_class) %>% summarise(meanS2H = mean(interval), varS2H = var(interval), pS2H = 1 - meanS2H/varS2H, rS2H = meanS2H * (1-pS2H)/pS2H) %>% select(meanS2H, pS2H, rS2H) %>% as.list() } ######################## ### Symptom to death ### ######################## get_S2D_delays <- function() { dataOsiris %>% filter(Ziekenhuisopname != "Ja" & ICU != "Ja") %>% select(ZIE1eZiekteDt, ZIEDtOverlijden) %>% filter(!is.na(ZIE1eZiekteDt) & !is.na(ZIEDtOverlijden)) %>% mutate(interval = as.numeric(ZIEDtOverlijden - ZIE1eZiekteDt)) %>% filter(interval >= 0) %>% summarise(meanS2D = mean(interval), varS2D = var(interval), pS2D = 1 - meanS2D/varS2D, rS2D = meanS2D * (1-pS2D)/pS2D) %>% select(meanS2D, pS2D, rS2D) %>% as.list() } get_S2D_probs <- function() { dataOsiris %>% filter(Ziekenhuisopname != "Ja" & ICU != "Ja") %>% select(Overleden, Leeftijdsgroep) %>% separate(Leeftijdsgroep, c("onder", "boven")) %>% filter(onder != "Niet") %>% mutate(onder = as.numeric(onder), age_class = floor(onder / 10), age_class = if_else(age_class > 8, 8, age_class)) %>% group_by(age_class) %>% summarise(totaalS2Dp = n(), gestorvenS2D = sum(Overleden == "Ja"), probS2D = gestorvenS2D/totaalS2Dp) %>% select(totaalS2Dp, gestorvenS2D, probS2D) %>% as.list() } ######################## ### incidence curves ### ######################## inc_osiris_report <- function(ages = FALSE, wROAZ = "all") { dataOsiris %>% select(ZIE1eZiekteDt) %>% filter(ZIE1eZiekteDt <= filedate) %>% mutate(sympdag = as.numeric(ZIE1eZiekteDt - as.Date("2020-02-12"))) %>% pull(sympdag) %>% tabulate() } inc_osiris_hosp <- function(ages = FALSE, wROAZ = "all") { if(is.numeric(wROAZ)) { wROAZ <- sort(unique(ROAZdata$Regio_ROAZ))[-9][wROAZ] } if(wROAZ == "all") { if(ages) { hospdata <- dataOsiris %>% select(NCOVdat1ezkhopn, Leeftijdsgroep) %>% filter(NCOVdat1ezkhopn <= filedate) %>% separate(Leeftijdsgroep, c("onder", "boven")) %>% filter(onder != "Niet") %>% mutate(onder = as.numeric(onder), age_class = floor(onder / 10), age_class = if_else(age_class > 8, 8, age_class)) %>% group_by(age_class) %>% mutate(hospdag = as.numeric(NCOVdat1ezkhopn - as.Date("2020-02-12"))) toreturn <- lapply(0:8, function(x) tabulate(hospdata %>% filter(age_class == x) %>% pull(hospdag), nbins = as.numeric(filedate - as.Date("2020-02-12")))) names(toreturn) <- c("[0,10)", "[10,20)", "[20,30)", "[30,40)", "[40,50)", "[50,60)", "[60,70)", "[70,80)", "[80,Inf]") return(toreturn) } else { dataOsiris %>% select(NCOVdat1ezkhopn) %>% filter(NCOVdat1ezkhopn <= filedate) %>% mutate(hospdag = as.numeric(NCOVdat1ezkhopn - as.Date("2020-02-12"))) %>% pull(hospdag) %>% tabulate(nbins = as.numeric(filedate - as.Date("2020-02-12"))) } } else { if(ages) { hospdata <- dataOsiris %>% filter(ROAZ == wROAZ) %>% select(NCOVdat1ezkhopn, Leeftijdsgroep) %>% filter(NCOVdat1ezkhopn <= filedate) %>% separate(Leeftijdsgroep, c("onder", "boven")) %>% filter(onder != "Niet") %>% mutate(onder = as.numeric(onder), age_class = floor(onder / 10), age_class = if_else(age_class > 8, 8, age_class)) %>% group_by(age_class) %>% mutate(hospdag = as.numeric(NCOVdat1ezkhopn - as.Date("2020-02-12"))) toreturn <- lapply(0:8, function(x) tabulate(hospdata %>% filter(age_class == x) %>% pull(hospdag), nbins = as.numeric(filedate - as.Date("2020-02-12")))) names(toreturn) <- c("[0,10)", "[10,20)", "[20,30)", "[30,40)", "[40,50)", "[50,60)", "[60,70)", "[70,80)", "[80,Inf]") return(toreturn) } else { dataOsiris %>% filter(ROAZ == wROAZ) %>% select(NCOVdat1ezkhopn) %>% filter(NCOVdat1ezkhopn <= filedate) %>% mutate(hospdag = as.numeric(NCOVdat1ezkhopn - as.Date("2020-02-12"))) %>% pull(hospdag) %>% tabulate(nbins = as.numeric(filedate - as.Date("2020-02-12"))) } } } inc_osiris_mort <- function(ages = FALSE, wROAZ = "all") { if(is.numeric(wROAZ)) { wROAZ <- sort(unique(ROAZdata$Regio_ROAZ))[-9][wROAZ] } if(wROAZ == "all") { if(ages) { mortdata <- dataOsiris %>% select(ZIEDtOverlijden, Leeftijdsgroep) %>% filter(ZIEDtOverlijden <= filedate) %>% separate(Leeftijdsgroep, c("onder", "boven")) %>% filter(onder != "Niet") %>% mutate(onder = as.numeric(onder), age_class = floor(onder / 10), age_class = if_else(age_class > 8, 8, age_class)) %>% group_by(age_class) %>% mutate(mortdag = as.numeric(ZIEDtOverlijden - as.Date("2020-02-12"))) toreturn <- lapply(0:8, function(x) tabulate(mortdata %>% filter(age_class == x) %>% pull(mortdag), nbins = as.numeric(filedate - as.Date("2020-02-12")))) names(toreturn) <- c("[0,10)", "[10,20)", "[20,30)", "[30,40)", "[40,50)", "[50,60)", "[60,70)", "[70,80)", "[80,Inf]") return(toreturn) } else { dataOsiris %>% select(ZIEDtOverlijden) %>% filter(ZIEDtOverlijden <= filedate) %>% mutate(mortdag = as.numeric(ZIEDtOverlijden - as.Date("2020-02-12"))) %>% pull(mortdag) %>% tabulate(nbins = as.numeric(filedate - as.Date("2020-02-12"))) } } else { if(ages) { mortdata <- dataOsiris %>% filter(ROAZ == wROAZ) %>% select(ZIEDtOverlijden, Leeftijdsgroep) %>% filter(ZIEDtOverlijden <= filedate) %>% separate(Leeftijdsgroep, c("onder", "boven")) %>% filter(onder != "Niet") %>% mutate(onder = as.numeric(onder), age_class = floor(onder / 10), age_class = if_else(age_class > 8, 8, age_class)) %>% group_by(age_class) %>% mutate(mortdag = as.numeric(ZIEDtOverlijden - as.Date("2020-02-12"))) toreturn <- lapply(0:8, function(x) tabulate(mortdata %>% filter(age_class == x) %>% pull(mortdag), nbins = as.numeric(filedate - as.Date("2020-02-12")))) names(toreturn) <- c("[0,10)", "[10,20)", "[20,30)", "[30,40)", "[40,50)", "[50,60)", "[60,70)", "[70,80)", "[80,Inf]") return(toreturn) } else { dataOsiris %>% filter(ROAZ == wROAZ) %>% select(ZIEDtOverlijden) %>% filter(ZIEDtOverlijden <= filedate) %>% mutate(mortdag = as.numeric(ZIEDtOverlijden - as.Date("2020-02-12"))) %>% pull(mortdag) %>% tabulate(nbins = as.numeric(filedate - as.Date("2020-02-12"))) } } }