When your ‘golden years’ are not so golden
Peter Kamerman
25 January 2019Background
A recent article in The Lancet1 reported that the increase in life expectancy that has occurred over the past 28 years (1990 to 2017) is associated with a disproportionate relative increase in time spent in poor health compared to good health. The authors reached this conclusion after analysing data on total life expectancy and healthy life expectancy (HALE; years of good health) from the Global Burden of Diseases, Injuries, and Risk Factors Study 2017 (GBD 2017). The GBD Study, assesses mortality and disability based on 359 causes of death and disability across 195 countries and territories (GBD data are freely available for download from the Global Burden of Disease Exchange).
The figure below is taken directly from the article in The Lancet and shows years of good health and years of poor health (total life expectancy - years of good health) for females (red lines) and males (blue lines) across socio-demographic index quintiles (High SDI, High-middle SDI, Middle SDI, Middle-low SDI, Low SDI).
The figure shows an upward trend in years of good health and years of poor health over the past 28 years, for males and females across the five socio-demographic quintiles. But, it is hard to discern from the plot whether the rate of increase in years of poor health is greater than the rate of increase in years of good health, even though this was a key finding of the research. That is, the figure does not accomplish the reason for having a plot, which is to provide a visual aid for interpreting the findings.
So I decided to play with the data myself to see if I could generate more informative plots.
I approached this task by:
Recapitulating the plot from the article, but with an extra panel showing total life expectancy. I decided on this plot because I wanted to confirm that I had downloaded the correct data, and I felt that the total life expectancy panel would help contextualize changes in years of good health and years of poor health data; and by
Comparing the cumulative year-over-year percent change in years of poor health and years of good health since 1990. I felt that using the cumulative year-over-year change would allow direct comparison of the long-term trends of two variables measured on the same scale (years), but which have vastly different magnitudes (years of good health contributes 80 to 90% of total life expectancy). As an bonus, I decided to animate these plots to get a feel for the new
gganimate
API.
Download, import, and clean data
First I had to get and clean the data.
I manually downloaded the data from the Global Burden of Disease Exchange website using their query tool (as far as I know, the site does not have an API to remotely query and retrieve data). I then imported the two *.csv files I had downloaded (one for years of good health, and one for total life expectancy), and performed a cursory inspection and a basic clean-up of the data, the code and outputs of which are shown below.
############################################################
# #
# Import data #
# #
############################################################
# years of good health
<- read_csv('_data/2019-01-25-global-burden-of-disease/hale-1990-2017.csv')
hale # Life expectancy
<- read_csv('_data/2019-01-25-global-burden-of-disease/life-expectancy-1990-2017.csv')
life
############################################################
# #
# Inspect data #
# #
############################################################
skim(hale)
Name | hale |
Number of rows | 280 |
Number of columns | 9 |
_______________________ | |
Column type frequency: | |
character | 5 |
numeric | 4 |
________________________ | |
Group variables | None |
Variable type: character
skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
---|---|---|---|---|---|---|---|
measure | 0 | 1 | 30 | 30 | 0 | 1 | 0 |
location | 0 | 1 | 7 | 15 | 0 | 5 | 0 |
sex | 0 | 1 | 4 | 6 | 0 | 2 | 0 |
age | 0 | 1 | 7 | 7 | 0 | 1 | 0 |
metric | 0 | 1 | 5 | 5 | 0 | 1 | 0 |
Variable type: numeric
skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
---|---|---|---|---|---|---|---|---|---|---|
year | 0 | 1 | 2003.50 | 8.09 | 1990.00 | 1996.75 | 2003.50 | 2010.25 | 2017.00 | ▇▇▇▇▇ |
val | 0 | 1 | 60.04 | 6.72 | 45.89 | 54.15 | 60.85 | 65.50 | 71.14 | ▃▆▆▇▆ |
upper | 0 | 1 | 62.29 | 6.91 | 47.65 | 56.46 | 62.82 | 67.82 | 74.17 | ▃▆▆▇▆ |
lower | 0 | 1 | 57.48 | 6.44 | 43.96 | 51.94 | 58.66 | 62.78 | 67.61 | ▃▆▅▇▇ |
skim(life)
Name | life |
Number of rows | 280 |
Number of columns | 9 |
_______________________ | |
Column type frequency: | |
character | 5 |
numeric | 4 |
________________________ | |
Group variables | None |
Variable type: character
skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
---|---|---|---|---|---|---|---|
measure | 0 | 1 | 15 | 15 | 0 | 1 | 0 |
location | 0 | 1 | 7 | 15 | 0 | 5 | 0 |
sex | 0 | 1 | 4 | 6 | 0 | 2 | 0 |
age | 0 | 1 | 7 | 7 | 0 | 1 | 0 |
metric | 0 | 1 | 5 | 5 | 0 | 1 | 0 |
Variable type: numeric
skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
---|---|---|---|---|---|---|---|---|---|---|
year | 0 | 1 | 2003.50 | 8.09 | 1990.00 | 1996.75 | 2003.50 | 2010.25 | 2017.00 | ▇▇▇▇▇ |
val | 0 | 1 | 69.17 | 7.72 | 52.73 | 62.98 | 69.18 | 75.33 | 83.70 | ▃▇▇▇▅ |
upper | 0 | 1 | 69.45 | 7.58 | 53.21 | 63.38 | 69.59 | 75.46 | 83.86 | ▃▆▇▇▅ |
lower | 0 | 1 | 68.88 | 7.87 | 52.22 | 62.60 | 68.93 | 75.15 | 83.56 | ▃▇▇▇▅ |
############################################################
# #
# Clean data #
# #
############################################################
<- life %>%
data # Join imported datasets
bind_rows(hale) %>%
# Select required columns
select(measure, location, sex, year, metric, val) %>%
# Recode measure category labels
mutate(measure = str_replace_all(measure,
pattern = 'HALE \\(Healthy life expectancy\\)',
replacement = 'Years of good health')) %>%
mutate(measure = str_replace_all(measure,
pattern = 'Life expectancy',
replacement = 'Total life expectancy')) %>%
# Order location variable (socio-demographic quintile)
mutate(location = factor(location,
levels = c('High SDI', 'High-middle SDI',
'Middle SDI', 'Low-middle SDI',
'Low SDI'),
ordered = TRUE))
# Inspect cleaned data
glimpse(data)
## Rows: 560
## Columns: 6
## $ measure <chr> "Total life expectancy", "Total life expectancy", "Total life…
## $ location <ord> High-middle SDI, High-middle SDI, High SDI, High SDI, Low-mid…
## $ sex <chr> "Male", "Female", "Male", "Female", "Male", "Female", "Male",…
## $ year <dbl> 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2016, 2016, 2…
## $ metric <chr> "Years", "Years", "Years", "Years", "Years", "Years", "Years"…
## $ val <dbl> 72.65688, 78.81469, 78.39470, 83.60049, 65.61743, 69.43073, 6…
The data looked in good order, and only needed some minor cleaning.
Analysis
Step 1
Recapitulate the plot from the article, but with an extra panel showing total life expectancy.
I used the cleaned data to calculate the years of poor health2, and then generated separate plots for total life expectancy, years of good health, and years of poor health. For each plot, I presented the data by sex and socio-demographic index quintile.
Finally, I pieced the individual plots together and formated the visual look using html/css
(after bumping my head repeatedly against a brick wall trying to get the desired look using the patchwork
and cowplot
packages; my usual go to packages for multiplots).
############################################################
# #
# Calculate years of poor health since birth #
# #
############################################################
<- data %>%
delta # Spread the measure column
spread(key = measure,
value = val) %>%
# Calculate years unhealthy
mutate(`Years of poor health` = `Total life expectancy` - `Years of good health`) %>%
# Gather measures again
gather(key = measure,
value = val,
-location, -sex, -year, -metric)
############################################################
# #
# Plot #
# #
############################################################
# Generate separate plots for each 'measure', and save the outputs.
## Total life expectancy
<- delta %>%
le filter(measure == 'Total life expectancy') %>%
ggplot(data = .) +
aes(x = year,
y = val,
colour = sex) +
geom_line() +
scale_x_continuous(breaks = c(1990, 1995, 2000, 2005, 2010, 2017)) +
scale_y_continuous(breaks = c(50, 60, 70, 80),
limits = c(50, 85),
expand = c(0, 0)) +
scale_colour_manual(values = c('#ED0000', '#00468B')) +
labs(title = 'Total life expectancy at birth',
y = 'Years of life') +
facet_wrap(~ location,
ncol = 5) +
theme_bw(base_size = 12) +
theme(legend.title = element_blank(),
legend.position = c(0.99, 0.985),
legend.justification = c(0.99, 0.985),
legend.margin = margin(t = 0, r = 0, b = 0, l = 0, unit = 'lines'),
plot.title = element_text(size = 12, face = 'bold'),
axis.text.x = element_blank(),
axis.title.x = element_blank(),
panel.grid = element_blank(),
strip.background = element_blank())
ggsave(filename = 'le.png',
plot = le,
path = './images/posts/2019-01-25-global-burden-of-disease',
width = 8,
height = 2.2,
units = 'in')
## Years of good health
<- delta %>%
healthy filter(measure == 'Years of good health') %>%
ggplot(data = .) +
aes(x = year,
y = val,
colour = sex) +
geom_line() +
scale_x_continuous(breaks = c(1990, 1995, 2000, 2005, 2010, 2017)) +
scale_y_continuous(breaks = c(40, 50, 60, 70),
limits = c(40, 75),
expand = c(0, 0)) +
scale_colour_manual(values = c('#ED0000', '#00468B')) +
labs(title = 'Years of good health at birth',
y = 'Years of life') +
facet_wrap(~ location,
ncol = 5) +
theme_bw(base_size = 12) +
theme(legend.position = 'none',
axis.text.x = element_blank(),
axis.title.x = element_blank(),
plot.title = element_text(size = 12, face = 'bold'),
panel.grid = element_blank(),
strip.background = element_blank())
ggsave(filename = 'healthy.png',
plot = healthy,
path = './images/posts/2019-01-25-global-burden-of-disease',
width = 8,
height = 2.2,
units = 'in')
## Poor health
<- delta %>%
unhealthy filter(measure == 'Years of poor health') %>%
ggplot(data = .) +
aes(x = year,
y = val,
colour = sex) +
geom_line() +
scale_x_continuous(breaks = c(1990, 1995, 2000, 2005, 2010, 2017)) +
scale_y_continuous(breaks = c(6, 8, 10, 12),
limits = c(6, 13),
expand = c(0, 0)) +
scale_colour_manual(values = c('#ED0000', '#00468B')) +
labs(title = 'Years of poor health at birth',
x = 'Year',
y = 'Years of life') +
facet_wrap(~ location,
ncol = 5) +
theme_bw(base_size = 12) +
theme(legend.position = 'none',
plot.title = element_text(size = 12, face = 'bold'),
axis.text.x = element_text(angle = 45,
hjust = 1,
vjust = 1.1),
panel.grid = element_blank(),
strip.background = element_blank())
ggsave(filename = 'unhealthy.png',
plot = unhealthy,
path = './images/posts/2019-01-25-global-burden-of-disease',
width = 8,
height = 2.75,
units = 'in')
Revised figure 1: Trends of total life expectancy at birth, years of good health at birth, and years of poor health at birth by SDI quintile and sex, 1990-2017.
SDI=Socio-demographic index
Comparing my figure to the figure from the article, I was satisfied that I had reproduced the original figure (but with a total life expectancy panel). From Revised figure 1, it is clear that total life expectancy, years of good health, and years of poor health increased over time for both sexes, and across all socio-demographic quintiles. Although the trend curves for males and females are roughly parallel for all three measures (with the curves for females shifted upwards relative to those of their male counterparts), there is a progressive reduction in the magnitude of this male/female difference as you move from High SDI countries to Low SDI countries, particularly for total life expectancy and years of good health.
I feel that presenting total life expectancy data in the figure added value. For example, with the addition of total life expectancy data, it is apparent that in Low SDI countries, total life expectancy has consistently been slightly greater in females than in males, yet years of good health in males and females over the same time-period is almost identical. So, the marginally greater total life expectancy in females must reflect more years of poor health compared to males.
Step 2
Compare cumulative year-over-year percent change in years of poor health and years of good health for the past 28 years.
There were several ways I could have analysed and plotted these data. For example, I could have used: sequential year-over-year percent change data, mean-centered data, or the yearly absolute difference between years of good health and years of poor health. But I chose to use cumulative year-over-year percent change because I felt it was the best option for presenting the data. As a relative measure, it corrects for the very large absolute difference between years of good health and years of poor health (~ 38 to 57 years in 1990, depending on SDI quintile and sex), and allows the assessment of the cumulative effect the yearly fluctuations in years of good health and years of poor health.
############################################################
# #
# Plot animated versions of the total #
# life expectancy data for males and females #
# #
############################################################
# Males
<- delta %>%
le_male filter(sex == 'Male') %>%
filter(measure == 'Total life expectancy') %>%
ggplot(data = .) +
aes(x = year,
y = val) +
geom_line(colour = '#00468B') +
scale_x_continuous(breaks = c(1990, 1995, 2000, 2005, 2010, 2017)) +
scale_y_continuous(breaks = c(50, 60, 70, 80),
limits = c(50, 85),
expand = c(0, 0)) +
labs(title = 'Total life expectancy at birth',
y = 'Years of life') +
facet_wrap(~ location,
ncol = 5) +
theme_bw(base_size = 12) +
theme(legend.title = element_blank(),
legend.position = c(0.99, 0.985),
legend.justification = c(0.99, 0.985),
legend.margin = margin(t = 0, r = 0, b = 0, l = 0, unit = 'lines'),
plot.title = element_text(size = 12, face = 'bold'),
axis.text.x = element_blank(),
axis.title.x = element_blank(),
panel.grid = element_blank(),
strip.background = element_blank()) +
transition_reveal(year)
<- animate(plot = le_male,
le_male fps = 10,
nframes = 150,
duration = 15,
end_pause = 50,
res = 150,
width = 8,
height = 2.2,
units = 'in')
anim_save(filename = 'le_male.gif',
animation = le_male,
path = './images/posts/2019-01-25-global-burden-of-disease')
# Females
<- delta %>%
le_female filter(sex == 'Female') %>%
filter(measure == 'Total life expectancy') %>%
ggplot(data = .) +
aes(x = year,
y = val) +
geom_line(colour = '#ED0000') +
scale_x_continuous(breaks = c(1990, 1995, 2000, 2005, 2010, 2017)) +
scale_y_continuous(breaks = c(50, 60, 70, 80),
limits = c(50, 85),
expand = c(0, 0)) +
labs(title = 'Total life expectancy at birth',
y = 'Years of life') +
facet_wrap(~ location,
ncol = 5) +
theme_bw(base_size = 12) +
theme(legend.title = element_blank(),
legend.position = c(0.99, 0.985),
legend.justification = c(0.99, 0.985),
legend.margin = margin(t = 0, r = 0, b = 0, l = 0, unit = 'lines'),
plot.title = element_text(size = 12, face = 'bold'),
axis.text.x = element_blank(),
axis.title.x = element_blank(),
panel.grid = element_blank(),
strip.background = element_blank()) +
transition_reveal(year)
<- animate(plot = le_female,
le_female fps = 10,
nframes = 150,
duration = 15,
end_pause = 50,
res = 150,
width = 8,
height = 2.2,
units = 'in')
anim_save(filename = 'le_female.gif',
animation = le_female,
path = './images/posts/2019-01-25-global-burden-of-disease')
############################################################
# #
# General processing that will be useful #
# for several plots down the line #
# #
############################################################
# Generate a version of the delta dataframe with the measure column spread
<- delta %>%
delta_spread # Spread the measures column
spread(key = measure,
value = val)
# Extract 1990 values for each measure and for each subgroup
<- delta_spread %>%
baseline_1990 group_by(location, sex) %>%
# Extract 1990 values
filter(year == 1990) %>%
# Rename columns
rename(`Total life expectancy 1990` = `Total life expectancy`,
`Years of good health 1990` = `Years of good health`,
`Years of poor unhealth 1990` = `Years of poor health`) %>%
# Remove unneeded column
select(-metric, -year)
# Join baseline_1990 to delta_spread
%<>%
delta_spread left_join(baseline_1990)
############################################################
# #
# Cumulative year-on-year percent change for #
# 'years of good health' and 'years of poor health' #
# #
############################################################
%<>%
delta_spread # Year-over-year change for each subgroup
group_by(location, sex) %>%
mutate(p_yoy_good_health = 100 * ((`Years of good health` -
lag(`Years of good health`)) / lag(`Years of good health`)),
p_yoy_poor_health = 100 * ((`Years of poor health` -
lag(`Years of poor health`)) / lag(`Years of poor health`))) %>%
# Remove lag calc <NA> for 1990, and add cumulative yoy change for each subgroup
mutate(p_yoy_good_health = ifelse(year == 1990,
yes = 0,
no = p_yoy_good_health),
p_yoy_poor_health = ifelse(year == 1990,
yes = 0,
no = p_yoy_poor_health)) %>%
mutate(p_cum_yoy_good_health = cumsum(p_yoy_good_health),
p_cum_yoy_poor_health = cumsum(p_yoy_poor_health)) %>%
ungroup()
############################################################
# #
# Plot year-on-year percent change for #
# 'years of good health' and 'years of poor health' #
# #
############################################################
# Males
<- delta_spread %>%
perc_male filter(sex == 'Male') %>%
# Gather cum_yoy_* columns
gather(key = 'key',
value = 'value',
%>%
p_cum_yoy_good_health, p_cum_yoy_poor_health) # Plot
ggplot(data = .) +
aes(x = year,
y = value,
colour = key) +
geom_line() +
scale_x_continuous(breaks = c(1990, 1995, 2000, 2005, 2010, 2017)) +
scale_y_continuous(limits = c(-5, 20),
breaks = c(-5, 0, 5, 10, 15, 20)) +
scale_colour_manual(labels = c('years of\ngood health', 'Years of\npoor health'),
values = c('#56B4E9', '#E69F00')) +
labs(title = "Cumulative year-over-year percent change in 'years of good health' and 'years of poor health'",
x = 'Year',
y = "Cumulative change (%)") +
facet_wrap(~ location,
ncol = 5) +
theme_bw(base_size = 12) +
theme(legend.title = element_blank(),
legend.position = c(0.13, 0.985),
legend.justification = c(0.99, 0.985),
legend.margin = margin(t = 0, r = 0, b = 0, l = 0, unit = 'lines'),
plot.title = element_text(size = 12, face = 'bold'),
axis.text.x = element_text(angle = 45,
hjust = 1,
vjust = 1.1),
panel.grid = element_blank(),
strip.background = element_blank()) +
transition_reveal(year)
<- animate(plot = perc_male,
perc_male fps = 10,
nframes = 150,
duration = 15,
end_pause = 50,
res = 150,
width = 8,
height = 2.75,
units = 'in')
anim_save(filename = 'perc_male.gif',
animation = perc_male,
path = './images/posts/2019-01-25-global-burden-of-disease')
# Females
<- delta_spread %>%
perc_female filter(sex == 'Female') %>%
gather(key = 'key',
value = 'value',
%>%
p_cum_yoy_good_health, p_cum_yoy_poor_health) # Plot
ggplot(data = .) +
aes(x = year,
y = value,
colour = key) +
geom_line() +
scale_x_continuous(breaks = c(1990, 1995, 2000, 2005, 2010, 2017)) +
scale_y_continuous(limits = c(-5, 20),
breaks = c(-5, 0, 5, 10, 15, 20)) +
scale_colour_manual(labels = c('Years of\ngood health', 'Years of\npoor health'),
values = c('#56B4E9', '#E69F00')) +
labs(title = "Cumulative year-over-year percent change in 'years of good health' and 'years of poor health'",
x = 'Year',
y = "Cumulative change (%)") +
facet_wrap(~ location,
ncol = 5) +
theme_bw(base_size = 12) +
theme(legend.title = element_blank(),
legend.position = c(0.13, 0.985),
legend.justification = c(0.99, 0.985),
legend.margin = margin(t = 0, r = 0, b = 0, l = 0, unit = 'lines'),plot.title = element_text(size = 12, face = 'bold'),
axis.text.x = element_text(angle = 45,
hjust = 1,
vjust = 1.1),
panel.grid = element_blank(),
strip.background = element_blank()) +
transition_reveal(year)
<- animate(plot = perc_female,
perc_female fps = 10,
nframes = 150,
duration = 15,
end_pause = 50,
res = 150,
width = 8,
height = 2.75,
units = 'in')
anim_save(filename = 'perc_female.gif',
animation = perc_female,
path = './images/posts/2019-01-25-global-burden-of-disease')
Females
Males
Figure 3: Total life expectancy (top panel for each sex), and the cumulative year-over-year percent change in years of good health and years of poor health (bottom panel for each sex) for females (top two panels) and males (bottom two panels), and each SDI quintile.
SDI=Socio-demographic index
I’m quite pleased with the way the plots of cumulative year-over-year percent change in years of good health and years of poor health came out. I think that compared to the original figure from the publication, it is now much clearer how the relative rate of growth in years of good health and years of poor health has changed over the past three decades. That is, you can now see one of the key finds of the paper, and you can now appreciate the relative changes in the rate of growth in years of good health and years of poor health over time and between SDI quintiles.
While total life expectancy has followed a relatively smooth upward trajectory between 1990 and 2017 (for both sexes and across SDI quintiles), the relative rate of growth of years of good health and years of poor health to this increase in total life expectancy has see significant shifts over time. And, these shifts are not consistent across SDI quintiles.
At the two extremes are the High and Low SDI quintiles. The High SDI quintile has seen a dramatic increase in the cumulative year-over-year percent change in years of poor health relative to years of good health, with the two curves separating as early as the early 1990s in males and early 2000s in females. The faster rate of growth in years of poor health than years of good health means that years of poor health is contributing proportionately more to the rise in total life expectancy than years of good health is. In the Low SDI quintile, we see the opposite trend, with the years of poor healthy and years of good health curves tracking each other until the mid-1990s in females and mid-2000s for males, after which the cumulative rate of growth in years of good health outstripped that for years of poor health. The long-term trends in the Low SDI quintile are desirable, while those in the High SDI quintile are not.
The remaining quintiles show a graded shift in cumulative year-over-year percent change in years of good health and years of poor health from the situation in the High SDI quintile to the Low SDI quintile.
Hopefully you find the analysis useful. If you have any suggestions on how to improve the blog post, please DM me on Twitter (@painblogR), send me an email (peter.kamerman@gmail.com), or log an issue on the painblogR github repo for this site (kamermanpr/painblogr-build).
Session information
sessionInfo()
## R version 4.0.4 (2021-02-15)
## Platform: x86_64-apple-darwin17.0 (64-bit)
## Running under: macOS Catalina 10.15.7
##
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRblas.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRlapack.dylib
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] skimr_2.1.3 magrittr_2.0.1 geojsonio_0.9.4
## [4] lubridate_1.7.10 xml2_1.3.2 sp_1.4-5
## [7] leaflet_2.0.4.1 highcharter_0.8.2 flexdashboard_0.5.2
## [10] gganimate_1.0.7 gdtools_0.2.3 ggiraph_0.7.8
## [13] svglite_2.0.0 pander_0.6.3 knitr_1.31
## [16] forcats_0.5.1 stringr_1.4.0 dplyr_1.0.5
## [19] purrr_0.3.4 readr_1.4.0 tidyr_1.1.3
## [22] tibble_3.1.0 ggplot2_3.3.3 tidyverse_1.3.0
##
## loaded via a namespace (and not attached):
## [1] colorspace_2.0-0 ellipsis_0.3.1 class_7.3-18 rgdal_1.5-23
## [5] base64enc_0.1-3 fs_1.5.0 rstudioapi_0.13 httpcode_0.3.0
## [9] farver_2.1.0 fansi_0.4.2 rlist_0.4.6.1 jsonlite_1.7.2
## [13] broom_0.7.5 dbplyr_2.1.0 rgeos_0.5-5 compiler_4.0.4
## [17] httr_1.4.2 backports_1.2.1 assertthat_0.2.1 lazyeval_0.2.2
## [21] cli_2.3.1 tweenr_1.0.1 htmltools_0.5.1.1 prettyunits_1.1.1
## [25] tools_4.0.4 igraph_1.2.6 gtable_0.3.0 glue_1.4.2
## [29] geojson_0.3.4 V8_3.4.0 Rcpp_1.0.6 cellranger_1.1.0
## [33] jquerylib_0.1.3 vctrs_0.3.6 crul_1.1.0 crosstalk_1.1.1
## [37] xfun_0.22 rvest_1.0.0 lifecycle_1.0.0 jqr_1.2.0
## [41] zoo_1.8-9 scales_1.1.1 hms_1.0.0 yaml_2.2.1
## [45] quantmod_0.4.18 curl_4.3 sass_0.3.1 stringi_1.5.3
## [49] highr_0.8 maptools_1.0-2 e1071_1.7-4 TTR_0.24.2
## [53] boot_1.3-27 repr_1.1.3 rlang_0.4.10 pkgconfig_2.0.3
## [57] systemfonts_1.0.1 evaluate_0.14 lattice_0.20-41 sf_0.9-7
## [61] htmlwidgets_1.5.3 labeling_0.4.2 tidyselect_1.1.0 geojsonsf_2.0.1
## [65] R6_2.5.0 magick_2.7.0 generics_0.1.0 DBI_1.1.1
## [69] pillar_1.5.1 haven_2.3.1 foreign_0.8-81 withr_2.4.1
## [73] units_0.7-0 xts_0.12.1 modelr_0.1.8 crayon_1.4.1
## [77] uuid_0.1-4 KernSmooth_2.23-18 utf8_1.2.1 rmarkdown_2.7
## [81] progress_1.2.2 grid_4.0.4 readxl_1.3.1 data.table_1.14.0
## [85] reprex_1.0.0 digest_0.6.27 classInt_0.4-3 webshot_0.5.2
## [89] munsell_0.5.0 viridisLite_0.3.0 kableExtra_1.3.4 bslib_0.2.4
GBD 2017 DALYs and HALE Collaborators. Global, regional, and national disability-adjusted life-years (DALYs) for 359 diseases and injuries and healthy life expectancy (HALE) for 195 countries and territories, 1990-2017: a systematic analysis for the Global Burden of Disease Study 2017. Lancet 392:1859–1922, 2018. doi: 10.1016/S0140-6736(18)32335-3.↩︎
years of poor health = total life expectancy - years of good health↩︎