7.2 Prepare diabetic eye disease code dictionary

7.2.1 Define keywords

Define inclusion keywords.

inclusion_keyword_patterns <- 
  "macul|retin|ophthalmic manifestation|ophthalmic complication|cataract|glaucoma|eye disease|diabetic iritis"

Define inclusion keywords for case.

inclusion_keyword_patterns_case <- "diabetic|diabetes|diabet retinopathy"

Define exclusion keywords.

exclusion_keyword_patterns <-
  " no maculopathy|^normal |translocation|cataract screen|retinol|incretin|diabetic retinopathy screening|retinal screening|steroid|drug induced|ratiation induced|branch of|vocational asses|electroretinography|buckling|tamponade|biopsy|retinopexy|cretin|glaucoma screen|pigment|fundoscopy|migraine|Commotio retinae|berlin|angiography|melanocytic macule|melanotic macule|acute retinal necrosis|radiation retinopathy|solar retinopathy|retinal dialysis|toxic maculopathy|eruption|retinacul|Acitretin|tretinoin|alopecia|branch of retinal artery$|rash"

exclusion_keywords <- c("O/E - retina", "Retinal photography", "Retinoscopy", 
                                   "Senile macular disorder screen", "Digital imaging of retina", 
                                   "[SO]Retina", "Retinal scan - laser", "Macula", "Retina",
                                   "Retinitis", "Fundus flavimaculatus", "Macula observation",
                                    "Superior temporal branch of retinal vein", "Senile macular disorder screening",
                                   "Retinal vein", "Branch of Retinal vein","Retinal artery","Limiting membrane of retina",
                                  "Nerve fibre layer of retina","Inferior temporal quadrant of retina","Central retinal vein",
                                  "Secondary syphilitic chorioretinitis", "Maculopapular", "Parafoveal retina", "Retinal structure",
                                   "Tomaculous neuropathy", "CMV retinitis", "Choroidal and retinal structures", "Retinal arteriole")

Define exclusion keywords for case.

exclusion_keyword_patterns_case <- "non-diab|non diab"

7.2.2 Define codes

Define inclusion codes.

inclusion_code_patterns <- "^F42"
inclusion_codes <- c("F4407")

Define exclusion codes.

exclusion_code_patterns <- c("^hg1|^hh51|^j24|^kaA|^m[5-7]")

7.2.3 Create diabetic eye disease code dictionary

Create eye disease code dictionary.

eye_disease_dict <- full_dict %>% 
  filter(grepl(inclusion_keyword_patterns, term_description, ignore.case = T) |
           grepl(inclusion_code_patterns, code, ignore.case = T) |
           code %in% inclusion_codes) %>%
  filter(!grepl(global_exclusion_keyword_patterns, term_description, ignore.case = T) &
         !grepl(exclusion_keyword_patterns, term_description, ignore.case = T) &
           !grepl(exclusion_code_patterns, code, ignore.case = F) &
         !(term_description %in% exclusion_keywords))

Get terms that actually occur in the PC data.

eye_disease_actual <- eye_disease_dict %>%
  filter(code %in% terms_actual$code)

Create diabetic eye disease code dictionary.

dm_eye_disease_dict <- 
  eye_disease_actual %>% 
  filter(grepl(inclusion_keyword_patterns_case, term_description, ignore.case=T) & 
           !grepl(exclusion_keyword_patterns_case, term_description, ignore.case=T))

Review unique terms.

dr_pc_review <- dm_eye_disease_dict %>%
  distinct(code, term_description) %>%
  distinct(code, .keep_all = T)

See if there are any additional mapped terms. For diabetic retinopathy, there are none.

dr_terms_map <- left_join(dm_eye_disease_dict, read_map) %>%
  filter(!is.na(mapped_code)) %>%
  filter(!(mapped_code %in% dm_eye_disease_dict$code)) %>%
  arrange(code) %>%
  select(-terminology_note) %>%
  left_join(full_dict %>%
              dplyr::rename(mapped_code = code, mapped_description = term_description,
                            mapped_terminology=terminology)) %>%
  group_by(mapped_code) %>%
  slice(1) %>%
  distinct() 
dr_terms_map

Generate non-diabetic eye disease code dictionary.

nondm_eye_disease_dict <-
  eye_disease_actual %>% filter(!(code %in% dm_eye_disease_dict$code))

Review non-diabetic eye disease terms.

nondm_eye_review <- nondm_eye_disease_dict %>%
  distinct(code, term_description) %>%
  distinct(code, .keep_all = T)

See if there are any additional mapped terms.

nondm_eye_disease_terms_map <- left_join(nondm_eye_disease_dict, read_map) %>%
  filter(!is.na(mapped_code)) %>%
  filter(!(mapped_code %in% nondm_eye_disease_dict$code)) %>%
  arrange(code) %>%
  select(-terminology_note) %>%
  left_join(full_dict %>%
              dplyr::rename(mapped_code = code, mapped_description = term_description,
                            mapped_terminology=terminology)) %>%
  group_by(mapped_code) %>%
  slice(1) %>%
  distinct()  %>%
  filter(!grepl("hypertensive", mapped_description))
nondm_eye_disease_terms_map

Combine the new terms with the original non-diabetic eye disease dictionary.

nondm_eye_disease_dict_final <- rbind(nondm_eye_disease_dict,
                 nondm_eye_disease_terms_map %>%
                   select(code = mapped_code, term_description = mapped_description, 
                          terminology = mapped_terminology, terminology_note)
)

Save diabetic eye disease code dictionary and non-diabetic eye disease code dictionary.

saveRDS(dm_eye_disease_dict,"generated_data/dm_eye_disease_dict.RDS")
saveRDS(nondm_eye_disease_dict_final,"generated_data/nondm_eye_disease_dict.RDS")