Effects of cervical cancer mortality trends on life expectancy
Since the 1960s, mortality, and also incidence, from cervical cancer has
decreased greatly in Sweden, as well as other high-income countries, and
screening with Pap tests, which may detect even precancerous lesions, is
said to be the most important factor
in this decline (Danielsson et al. 2012).
During the same period, life expectancy among Swedish females has
increased about 9 years. One might ask how much the decrease in cervical
cancer mortality has contributed to this increase.
One way to assess this question is to take a life table for a recent year, and add the difference between age-specific cervical cancer mortality rates for the early 1960s and recent rates to the age-specific total morality rates used to calculate risks of death, and then recalculate the life table with the new death rates. This shows what the life table had looked like if cervical cancer mortality had stayed the same for the last 50 years, while recent age-specific mortality rates from all other causes had been as they actually are. To do these calculations, you need:
- Recent data for age-specific number of deaths (due to all causes) and population at risk. This can be obtained from Statistics Sweden (2023) for single years of age.
- Data for age-specific number of deaths due to cervical cancer and population at risk from recent years as well as the 1960s. This can be obtained from WHO (2022) in 5-year age groups.
- Some software which can be used to calculate life tables from vectors of population at risk and deaths. In this post, my LifeTable package for Julia will be used.
All files used in the analysis below are available in a
gist.
The CSV file with cervical cancer
mortality
has been generated using my mortchartgen
scripts scripts. With the files
in the gist available (and LifeTable installed), include("cervclt.jl")
will calculate a life table for Swedish females in 2013, and then a new
life table with difference between cervical mortality rates 1960 and
2013 added to the 2013 mortality rates. The Julia file contains the
following code:
using DataFrames, LifeTable
cerv = readtable("cervc4290rate2.csv")
fse13r = readtable("fse13.csv")
fse13 = DataFrame(age = collect(0:105),
pop = [fse13r[2][1:105]; sum(fse13r[2][106:111])],
dths = [fse13r[3][1:105]; sum(fse13r[3][106:111])])
fse13lt = PeriodLifeTable(fse13, 2)
cerv60 = transpose(convert(Array, cerv[10, 12:23]))
cerv13 = transpose(convert(Array, cerv[63, 12:23]))
cervdiff = cerv60 .- cerv13
cervdiff5 = map((x)->fill(x, 5), cervdiff)
cervdiffyr = [fill(0, 25); vcat(cervdiff5...); fill(0, 21)]
fse13mc60 = fse13lt[2] .+ cervdiffyr
fse13c60 = DataFrame(age = fse13[1], mort = fse13mc60)
fse13ltc60 = PeriodLifeTable(fse13c60, 2, true, "rate")
The files from Statistics Sweden (2023) contain ages up to 110 years; ages over 105 are summed together due to a very small population (line 5–6). Only cervical cancer mortality rates from 25–29 to 80–84 years are included (line 8–9): the contribution of other age groups to cervical cancer mortality is small, and inclusion of these would create some technical complications due to differing age formats. The array of differences in cervical cancer mortality is expanded to have the same length as the array of total mortality (line 11–12).
After the script has run, round(fse13lt[:e][1], 2)
gives the life
expectancy at birth in the life table calculated from the actual 2013
rates, rounded to two decimals. This should return 83.71
, which is the
same as in the life expectancy column in the precalculated table
available from Statistics Sweden (2023). On the other hand,
round(fse13ltc60[:e][1], 2)
gives the life expectancy at birth given
2013 rates plus the difference in cervical cancer from 1960, and should
return 83.55
. So, if the decline in cervical cancer mortality since
1960, presumably due to Pap smears and other factors, had not occurred,
life expectancy among Swedish females would have been about 1.9 months
shorter.
The difference in mortality rates can be visualized (with PyPlot):
using PyPlot
plot(fse13lt[:age][26:85],log(fse13lt[:m][26:85]),
label = "2013")
plot(fse13lt[:age][26:85],log(fse13ltc60[:m][26:85]),
label = "2013 with 1960 cervical rates")
xlim(25,84)
xlabel("age")
ylabel("log(rate)")
legend(loc=2)
title("Total mortality, Swedish females 25\u201384")
The decline in cervical mortality makes significant differences to total mortality mainly at younger ages, where mortality already is low, which explains the modest effect on life expectancy.
It may be questioned whether trends in age-specific mortality rates from other causes would have stayed the same if trends in cervical cancer mortality had been different. The data is about so-called underlying causes, for which exactly one is reported for each death. The interpretation of this can be problematic if there are complex dependencies between different causes of death. This should be less of a problem for cervical cancer than for causes mainly occurring at older ages, where people often suffer from multiple diseases. However, there might be correlations between cervical cancer and risk factors for certain other causes of deaths, so that women who would have died from cervical cancer without e.g. Pap smears, have increased (or perhaps decreased) mortality rates from some other causes, compared to the general population.