### Charlson comorbidity index
ici_diag <- dia %>% subset(select = c(EMPI, Diagnosis_Name, Date, Code, Code_Type))
ici_diag <- ici_diag %>% merge(final_master %>% select(EMPI, baseline_sample_date),
by = "EMPI", all.y = TRUE)
ici_diag$Date <- as.Date(ici_diag$Date, "%m/%d/%Y")
ici_diag_pre <- subset(ici_diag, Date < baseline_sample_date)
# Leukemia and lymphoma must be extracted manually (ICD code map includes them under cancer)
leukemia <- ici_diag_pre[grep("leukemia", ici_diag_pre$Diagnosis_Name, ignore.case = TRUE), ]
leukemia <- leukemia[!grepl("lymphoma", leukemia$Diagnosis_Name, ignore.case = TRUE), ]
leukemia <- as.data.frame(table(leukemia$EMPI))
names(leukemia)[names(leukemia) == "Var1"] <- "EMPI"
names(leukemia)[names(leukemia) == "Freq"] <- "leukemia"
leukemia$leukemia[leukemia$leukemia > 0] <- 1
lymphoma <- ici_diag_pre[grep("lymphoma", ici_diag_pre$Diagnosis_Name, ignore.case = TRUE), ]
lymphoma <- lymphoma[!grepl("leukemia", lymphoma$Diagnosis_Name, ignore.case = TRUE), ]
lymphoma <- as.data.frame(table(lymphoma$EMPI))
names(lymphoma)[names(lymphoma) == "Var1"] <- "EMPI"
names(lymphoma)[names(lymphoma) == "Freq"] <- "lymphoma"
lymphoma$lymphoma[lymphoma$lymphoma > 0] <- 1
leuk_lymph <- merge(leukemia, lymphoma, by = "EMPI", all = TRUE)
# Compute comorbidity scores separately for ICD-9 and ICD-10
diag_icd9 <- subset(ici_diag_pre, Code_Type == "ICD9", select = c("EMPI", "Code"))
diag_icd10 <- subset(ici_diag_pre, Code_Type == "ICD10", select = c("EMPI", "Code"))
diag_icd9 <- diag_icd9[!(diag_icd9$Code == ""), ]
diag_icd10 <- diag_icd10[!(diag_icd10$Code == ""), ]
charlson9 <- comorbidity(x = diag_icd9, id = "EMPI", code = "Code",
map = "charlson_icd9_quan", assign0 = FALSE)
charlson10 <- comorbidity(x = diag_icd10, id = "EMPI", code = "Code",
map = "charlson_icd10_quan", assign0 = FALSE)
charlson <- merge(charlson9, charlson10, by = "EMPI", all = TRUE)
charlson[is.na(charlson)] <- 0
# Take maximum across ICD-9 / ICD-10 for each domain
charlson$ami <- pmax(charlson$mi.x, charlson$mi.y)
charlson$chf <- pmax(charlson$chf.x, charlson$chf.y)
charlson$pvd <- pmax(charlson$pvd.x, charlson$pvd.y)
charlson$cevd <- pmax(charlson$cevd.x, charlson$cevd.y)
charlson$dementia <- pmax(charlson$dementia.x, charlson$dementia.y)
charlson$copd <- pmax(charlson$cpd.x, charlson$cpd.y)
charlson$rheumd <- pmax(charlson$rheumd.x, charlson$rheumd.y)
charlson$pud <- pmax(charlson$pud.x, charlson$pud.y)
charlson$mld <- pmax(charlson$mld.x, charlson$mld.y)
charlson$diab <- pmax(charlson$diab.x, charlson$diab.y)
charlson$diabwc <- pmax(charlson$diabwc.x, charlson$diabwc.y)
charlson$hp <- pmax(charlson$hp.x, charlson$hp.y)
charlson$rend <- pmax(charlson$rend.x, charlson$rend.y)
charlson$canc <- pmax(charlson$canc.x, charlson$canc.y)
charlson$msld <- pmax(charlson$msld.x, charlson$msld.y)
charlson$metacanc <- pmax(charlson$metacanc.x, charlson$metacanc.y)
charlson$aids <- pmax(charlson$aids.x, charlson$aids.y)
charlson <- charlson %>%
subset(select = c(EMPI, ami, chf, pvd, cevd, dementia, copd, rheumd, pud, mld,
diab, diabwc, hp, rend, canc, msld, metacanc, aids))
charlson$canc <- 1 # all patients have cancer by definition
charlson <- merge(charlson, leuk_lymph, by = "EMPI", all = TRUE)
charlson[is.na(charlson)] <- 0
ages <- final_master %>% subset(select = c(EMPI, age))
charlson <- merge(charlson, ages, by.x = 1, by.y = 1)
# Weighted Charlson score with age adjustment (Quan 2011)
charlson$score <-
charlson$ami + charlson$chf + charlson$pvd + charlson$cevd +
charlson$dementia + charlson$copd + charlson$rheumd + charlson$pud +
ifelse(charlson$mld == 1 & charlson$msld == 0, 1, 0) +
ifelse(charlson$msld == 1, 3, 0) +
charlson$diab + charlson$diabwc +
charlson$hp * 2 + charlson$rend * 2 + charlson$canc * 2 +
charlson$metacanc * 4 + charlson$aids * 6 +
charlson$leukemia * 2 + charlson$lymphoma * 2 +
ifelse(charlson$age >= 50 & charlson$age < 60, 1, 0) +
ifelse(charlson$age >= 60 & charlson$age < 70, 2, 0) +
ifelse(charlson$age >= 70 & charlson$age < 80, 3, 0) +
ifelse(charlson$age >= 80, 4, 0)
# cci: categorical severity
charlson_sc <- charlson %>% subset(select = c(EMPI, score))
charlson_sc$cci <- ifelse(charlson_sc$score < 3, "mild",
ifelse(charlson_sc$score >= 3 & charlson_sc$score < 5, "moderate", "severe"))
final_master <- final_master %>% merge(charlson_sc, by = "EMPI", all.x = TRUE)