When stratifying a cohort, it is generally desirable to calculate SMRs for different levels of a strata (such as a time-dependent exposure).
LTASR provides options to stratify a cohort by a fixed strata defined within the person file, or by a time-dependent exposure variable with information found in a separate history file.
For example, below will strata the example person and history file,
included in LTASR, by a cumulative exposure variable
exposure_level
:
#Define exposure cutpoints
<- exp_strata(var = 'exposure_level',
exp cutpt = c(-Inf, 0, 10000, 20000, Inf),
lag = 10)
#Read in and format person file
<- person_example %>%
person mutate(dob = as.Date(dob, format='%m/%d/%Y'),
pybegin = as.Date(pybegin, format='%m/%d/%Y'),
dlo = as.Date(dlo, format='%m/%d/%Y'))
#Read in and format history file
<- history_example %>%
history mutate(begin_dt = as.Date(begin_dt, format='%m/%d/%Y'),
end_dt = as.Date(end_dt, format='%m/%d/%Y'))
#Stratify cohort
<- get_table_history(persondf = person,
py_table rateobj = us_119ucod_19602020,
historydf = history,
exps = list(exp))
This creates the following table (top 6 rows):
ageCat | CPCat | gender | race | exposure_levelCat | pdays | _o55 | _o52 |
---|---|---|---|---|---|---|---|
[15,20) | [1970,1975) | F | W | (-Inf,0] | 746 | 1 | 0 |
[25,30) | [1970,1975) | M | N | (-Inf,0] | 55 | 0 | 0 |
[25,30) | [1970,1975) | M | W | (-Inf,0] | 1472 | 0 | 0 |
[25,30) | [1975,1980) | M | W | (-Inf,0] | 323 | 0 | 0 |
[30,35) | [1970,1975) | M | N | (-Inf,0] | 1023 | 0 | 0 |
[30,35) | [1975,1980) | M | N | (-Inf,0] | 803 | 0 | 0 |
smr_minor
and smr_major
will calculate SMRs
for the entire cohort that is read in.
To calculate SMRs separately for each strata of
exposure_levelCat
, one option would be to create separate
person-year tables for each level:
#Subset py_table to the highest exposed group
<- py_table %>%
py_table_high filter(exposure_levelCat == '(2e+04, Inf]')
<- smr_minor(py_table_high, us_119ucod_19602020)
smr_minor_table_high <- smr_major(smr_minor_table_high, us_119ucod_19602020) smr_major_table_high
minor | Description | observed | expected | smr | lower | upper |
---|---|---|---|---|---|---|
52 | Other diseases of the nervous system and sense org | 0 | 0.01 | 0 | 366.81 | |
55 | Ischemic heart disease | 0 | 0.06 | 0 | 61.13 |
major | Description | observed | expected | smr | lower | upper |
---|---|---|---|---|---|---|
16 | Diseases of the heart (Major) | 0 | 0.06 | 0 | 61.13 |
These results can be saved through repeated calls to
write_csv()
. This can be tedious for strata with many
levels.
Alternatively, the below code will loop through each level of the a
variable (defined by var
) and outputs results into an excel
file (using the writexl
library) with a separate tab for
each strata level:
#Define the name of the person year table (py_table)
#and the variable to calcualte SMRs accross
<- py_table
pyt <- 'exposure_levelCat'
var
#Loop through levels of the above variable
<- unique(pyt[var][[1]])
lvls <-
smr_minors map(lvls,
~ {
%>%
pyt filter(!!sym(var) == .x) %>%
smr_minor(us_119ucod_19602020)
%>%
}) setNames(lvls)
<-
smr_majors map(smr_minors,
~ smr_major(., us_119ucod_19602020))%>%
setNames(names(smr_minors))
#Save results
library(writexl)
write_xlsx(smr_minors, 'C:/SMR_Minors_by_exp.xlsx')
write_xlsx(smr_majors, 'C:/SMR_Majors_by_exp.xlsx')