# Install release version from CRAN
install.packages("chmsflow")
# Install the most recent version from GitHub
devtools::install_github("Big-Life-Lab/chmsflow")1. Load packages
2. Recode medication variables for individual cycles
The medication data object must always be named cyclex_meds for the recoding scripts to function correctly. All other data for the same cycle should be stored separately under the name cyclex, as specified in recoding-variables.qmd.
# Load recodeflow and dplyr
library(recodeflow)
library(dplyr)
# Recoding basic variables from cycles 1 and 3
cycle2_medication_data <- rec_with_table(cycle2_meds, c("clinicid", "atc_101a", "mhr_101b"), variable_details = variable_details)
head(cycle2_medication_data)
cycle3_medication_data <- rec_with_table(cycle3_meds, c("clinicid", "meucatc", "npi_25b"), variable_details = variable_details)
head(cycle3_medication_data)
# Recoding derived variable acemed for cycle2. Select vars by role used to avoid writing all med variables in one line
cycle2_ace_medication_data <- rec_with_table(cycle2_meds, c("clinicid", "acemed", recodeflow:::select_vars_by_role("Drugs", variables)), variable_details = variable_details)
head(select(cycle2_ace_medication_data, clinicid, acemed))
# Recoding derived variable acemed for cycle3. Much simpler function used here.
cycle3_ace_medication_data <- rec_with_table(cycle3_meds, c("clinicid", "meucatc", "npi_25b", "acemed"), variable_details = variable_details)
head(cycle3_ace_medication_data)3. Merge recoded medication data from different cycles
# Aggregating recoded cycle3 data by clinicid
cycle3_ace_medication_data <- cycle3_ace_medication_data %>%
group_by(clinicid) %>%
summarize(
meucatc = paste(unique(meucatc), collapse = ", "), # Concatenate unique values of meucatc
npi_25b = paste(unique(npi_25b), collapse = ", "), # Concatenate unique values of npi_25b
acemed = max(as.numeric(as.character(acemed))) # Find maximum of acemed
)
head(cycle3_ace_medication_data)
# De-factorizing acemed variable in recoded cycle2 data
cycle2_ace_medication_data$acemed <- as.numeric(as.character(cycle2_ace_medication_data$acemed))
# Merging recoded cycle2 and cycle3 data, and ensuring one acemed column in the end
cycles2and3_ace_medication_data <- merge(cycle2_ace_medication_data, cycle3_ace_medication_data, by = "clinicid")
cycles2and3_ace_medication_data <- cycles2and3_ace_medication_data %>%
mutate(acemed = pmax(acemed.x, acemed.y)) %>%
select(-c(acemed.x, acemed.y))
head(cycles2and3_ace_medication_data)4. Example: Determine hypertension status by recoding medications
If your analysis requires medication variables (particularly when deriving other variables), always perform medication recoding first, before recoding any other variables.
# Cycles 1-2
# Recode medication variables first - anymed for hypertension and diab_drug for diabetes which is involved in determining hypertension status
cycle2_htn_medication_data <- rec_with_table(cycle2_meds, c("clinicid", recodeflow:::select_vars_by_role("Drugs", variables)), variable_details = variable_details)
# Create dummy medication variable by duplicating recoded medication variable
cycle2_htn_medication_data$anymed2 <- as.numeric(as.character(cycle2_htn_medication_data$anymed))
cycle2_htn_medication_data$diab_drug2 <- as.numeric(as.character(cycle2_htn_medication_data$diab_drug))
cycle2_htn_medication_data <- select(cycle2_htn_medication_data, clinicid, anymed2, diab_drug2)
# Merge medication data with rest of data
cycle2 <- merge(cycle2, cycle2_htn_medication_data, by = "clinicid")
# Recode hypertension (and diabetes) status using recoded, dummy medication variables
cycle2_htn_data <- rec_with_table(cycle2, c(recodeflow:::select_vars_by_role("Test", variables)), variable_details = variable_details)
head(cycle2_htn_data)
# Cycles 3-6
# Recode medication variables first - - anymed for hypertension and diab_drug for diabetes which is involved in determining hypertension status
cycle3_htn_medication_data <- rec_with_table(cycle3_meds, c("clinicid", "meucatc", "npi_25b", "anymed", "diab_drug"), variable_details = variable_details)
# Aggregating recoded cycle3 data by clinicid
cycle3_htn_medication_data <- cycle3_htn_medication_data %>%
group_by(clinicid) %>%
summarize(
meucatc = paste(unique(meucatc), collapse = ", "), # Concatenate unique values of meucatc
npi_25b = paste(unique(npi_25b), collapse = ", "), # Concatenate unique values of npi_25b
anymed = max(as.numeric(as.character(anymed))), # Find maximum of anymed
diab_drug = max(as.numeric(as.character(diab_drug))) # Find maximum of diab_drug
)
# Create dummy medication variable by duplicating recoded medication variable
cycle3_htn_medication_data$anymed2 <- as.numeric(as.character(cycle3_htn_medication_data$anymed))
cycle3_htn_medication_data$diab_drug2 <- as.numeric(as.character(cycle3_htn_medication_data$diab_drug))
cycle3_htn_medication_data <- select(cycle3_htn_medication_data, clinicid, anymed2, diab_drug2)
# Merge medication data with original data
# Call overall data "cyclex" in order to recode other variables afterwards
cycle3 <- merge(cycle3, cycle3_htn_medication_data, by = "clinicid")
# Recode hypertension (and diabetes) status using recoded, dummy medication variables
cycle3_htn_data <- rec_with_table(cycle3, c(recodeflow:::select_vars_by_role("Test", variables)), variable_details = variable_details)
head(cycle3_htn_data)