Introducción
En el marco de nuestro esfuerzo de poder dotar nuestra herramienta multipanel sobre ODS de un indicador fiable y unánimemente aceptado para medir el nivel de salud de una población, estamos testando la viabilidad de utilizar la Esperanza de Vida en los municipios par los que estén disponibles los microdatos de mortalidad (más de 10.000 hab.).
Para ello hemos adaptado el método de PHE, utilizando su Life Expectancy Calculator, básicamente limitando el último grupo de edad a más de 85 años en lugar de 90, siguiendo el criterio del Minsiterio de Sanidad (i el de la Conselleria de Sanitat en Catalunya).
El Life Expectancy Calculator de PHE
La aplicación creada por Public Health England utiliza le
metodología de Sullivan(para saber más sobre esa metodología ver Health Expectancy Calculation by the Sullivan Method: A
Practical Guide, C.Jagger, H.Van Oyen, J.M.Robine, 2014), como
veremos, con algunas especificidaes. A partir de esta aplicación, que no
es más que un workseet de Excel, PHE ha creado la
función phe_life_expectancy()
para poder utilizar la
aplicación con R
La función phe_life_expectancy()
para calcular la
esperanza de vida se alinea pues con la metodología de la
Calculadora de esperanza de vida de Public Health
England’s (PHE)* disponible en la página web Fingertips Technical Guidance.
La función phe_life_expectancy()
es para una tabla de
vida abreviada que utiliza intervalos de edad de 5 años con un
intervalo de edad final de más de 90
años. La tabla se ha completado utilizando los métodos
descritos por Chiang. La Oficina Nacional de Estadística* (UK) utiliza
esta estructura y metodología de edad para producir la esperanza de vida
a nivel de autoridades nacionales y locales1.
La esperanza de vida no se puede calcular si los años persona, \(L_x\), en un intervalo de edad dado es 0. Tampoco se calculará si el total de años persona es inferior a 5,0, ya que se considera que éste es el tamaño mínimo para un cálculo robusto de la esperanza de vida2. Los recuentos de muertes cero no son un problema, salvo el intervalo de edad final: debe haber al menos una muerte en el intervalo final para que los cálculos sean posibles.
La metodología es pues la clásica para el cálculo de la Esperanza de Vida, con alguna peculiaridad respecto al método Sullivan. Una de esas la acabamos de ver y es la limitación a la edad de 90 años como último intervalo. Cosa que nos obligará a crear una función de R ad hoc para poder trabajar con intervalos diferentes: en España el Ministerio de Sanidad trabaja con la edad de 85 años como último intervalo.
Los pasos metodológicos para la creación de la tabla de vida
Analizando el PHE Calculator, hemos podido definir la metodología que utiliza, paso por paso, para crear la tabla de vida:
La función ax que indica como se distribuyen las muertes en cada período
Esta función puede calcularse con un plus de cálculo. Sin embargo -y esta es otra peculiaridad de la metodología PHE que permite simplificar el trabajo- sin perder precisión, En lugar de poner todos los valores de \(a_x\) iguales a 0.5, pone \(a_{x0}\) igual a 0.1 y el resto, iguales a 0.5, ya que es la configuración que aproximadamente suele generarse en la realidad.
Función amplitud del intervalo en años (nx)
La aplicación de PHE pone un primer intervalo = 1, a 0 años, un segundo = 4, de 1 a 4 años, y el resto de intervalos són quinquenales hasta el último que se pone así: \[n_\omega=\frac{\frac{1}{a_\omega}}{m_\omega}\]
Función de probabilidad de muerte (qx)
\[{}_nq_x=if({}_nd_x > \frac{\frac{P_x}{n_x}}{a_x})=> 1; else => \frac{n_x·{}_nm_x}{(1+n_x·(1-a_x)·{}_nm_x)}\] Última línia: \[q_\omega=1\]
Función de superviventes (lx): Los que sobreviven al principio del intervalo
\[l_x=(1-q_{x-1})·l_{x-1}\]
Función de defunciones en la cohorte hipotética durante el intervalo (dx)
Esa función no se utiliza en el método Sullivan:
\[d_x=l_x-l_{x+1}\]
La funció de anys persones (Lx)
\[L_x=n_x·(l_{x+1}+a_x·d_x)\]
Última línia: \[L_\omega=l_\omega /m_\omega\]
Funció nombre total d’anys persona
\[T_x=\sum_\omega^0l_x\]
Esperanza de vida (ex)
\[e_x=if(l_x=0)=>1;else=> \frac{T_x}{lx} \]
Càlculo de la esperanza de vida sobre datos del municipio de Barcelona con metodologia de PH England e intervalo abierto a partir de 85 años
A partir de aqui, vamos a manipular los datos de población i mortalidad para poderles aplicar las fórmulas explicadas.
Obtención y procesamiento de los datos para obtener una tabla de mortalitat para el municipio de Barcelona
Los datos de población año en año (2021 i 2022) se pueden descargar del IDESCAT.
Les defunciones por edad y sexo se pueden descargar en esta dirección del IDESCAT.
# ==================================================
# ESPERANÇA DE VIDA - CIUTAT DE BARCELONA - ANY 2021
# ==================================================
# Població estimada a 1 de juliol de 2012
bcnedat21 <- readxl::read_xlsx("INE_21-22_33721.xlsx",
skip = 8) %>%
filter(grepl("^[0-9]", ...1)) %>%
rename(Edat= ...1) %>%
mutate(Edat= as.integer(str_extract(Edat, "^[0-9]+")),
Homes=(`1 de enero de 2022...4`+`1 de enero de 2021...5`) / 2,
Dones=(`1 de enero de 2022...6`+`1 de enero de 2021...7`) / 2,
Total=(`1 de enero de 2022...2`+`1 de enero de 2021...3`) / 2
) %>%
select(1,8:10)
bcnmort21 <- read.csv("t269mun_080193202100.csv",
sep = ";",
skip = 5,
header = TRUE) %>%
filter(grepl("^[0-9]", X)) %>%
rename(Edat= X) %>%
mutate(Edat= as.integer(str_extract(Edat, "^[0-9]+"))) %>%
#select(1,3) %>%
rename(Homes.def=Homes,
Dones.def=Dones,
Total.def=Total)
tabMort <- bcnmort21 %>% inner_join(bcnedat21, by= "Edat")
tabMort <- tabMort %>% mutate(catEdat= case_match(Edat,
0~ "0",
c(1:4)~ "01-04",
c(5:9)~ "05-09",
c(10:14)~ "10-14",
c(15:19)~ "15-19",
c(20:24)~ "20-24",
c(25:29)~ "25-29",
c(30:34)~ "30-34",
c(35:39)~ "35-39",
c(40:44)~ "40-44",
c(45:49)~ "45-49",
c(50:54)~ "50-54",
c(55:59)~ "55-59",
c(60:64)~ "60-64",
c(65:69)~ "65-69",
c(70:74)~ "70-74",
c(75:79)~ "75-79",
c(80:84)~ "80-84",
#c(85:89)~ "85-89",
.default = "85+"),
nx= case_match(Edat, #nx: diff. amb grup successiu
0~ 1,
c(1:4)~ 4,
c(5:9)~ 5,
c(10:14)~ 5,
c(15:19)~ 5,
c(20:24)~ 5,
c(25:29)~ 5,
c(30:34)~ 5,
c(35:39)~ 5,
c(40:44)~ 5,
c(45:49)~ 5,
c(50:54)~ 5,
c(55:59)~ 5,
c(60:64)~ 5,
c(65:69)~ 5,
c(70:74)~ 5,
c(75:79)~ 5,
c(80:84)~ 5,
#c(85:89)~ 85,
.default = NA)) %>%
group_by(catEdat,nx) %>%
summarise(across(2:7, sum)) %>%
rename(age = catEdat) %>%
tidyr::pivot_longer(
cols = 3:8, names_to = "cat", values_to = "value"
) %>%
mutate(genere= str_extract(cat, "[^\\.]+"),
cat = case_match(cat,
c("Homes.def", "Dones.def","Total.def")~
"Defuncions",
c("Homes","Dones","Total")~ "Pop")) %>%
tidyr::pivot_wider(names_from = cat, values_from = value)
tabMbcn <- tabMort %>%
mutate(ax= ifelse(age=="0",0.1,0.5),
mx= Defuncions / Pop,
nx= ifelse(age== "85+", 1/ax/mx, nx)) %>%
rename(ndx=Defuncions,
Px=Pop)
tabMbcn %>%
DT::datatable() %>%
DT::formatCurrency(c('mx'), currency = "", dec.mark = ",", digits = 6)
Creación y aplicación de una función ad hoc para elaborar de la tabla de vida
Trabajando con muy pocas iteraciones no sería necesario crear una función ad hoc. Sin embargo, en el marco de nuestro trabajo de elaborar indicadores municipales este paso es importante. Para Catalunya, por ejemplo, habría que realizar más de 120 iteraciones (una para cada municipio de 10.000 habitantes del que están disponibles datos de mortalidad). Por ello hemos creado una fórmula que aplique pasa a paso la metodología PHE adaptándola a la especificidad que queremos obtener.
A bajo se encuentra la función exp_vida()
que
aplicaremos para obtener la Esperanza de Vida de Barcelona,
permitiéndonos la iteración por genero.
#====================================
# FUNCION exp_vida()
# PARA EL CÁLCULO DE TABLAS DE VIDA
#====================================
exp_vida <- function(data, age, nx, ndx, ax, mx, Px) {
# CALCULAR qx
data$qx <- ifelse(ndx > data$Px/data$nx/data$ax, 1,
data$nx*data$mx / (1 + (data$nx * (1-data$ax) * data$mx))
)
data$qx[nrow(data)] <- 1 # Sullivan
#-----------------------------------------------------
# CALCULAR lx
# És praxi comuna començar amb una chort de 100.000
data$lx <- c(100000, rep(NA,nrow(data)-1))
for (i in 2:length(data$lx)) {
data$lx[i] <- (1-data$qx[i-1])*data$lx[i-1]
}
#-----------------------------------------------------
# CALCULAR dx
data$dx <- c(rep(NA,nrow(data)))
for (i in 1:length(data$dx)) {
data$dx[i] <- round(data$lx[i] - data$lx[i+1])
}
# Todos los que sobreviven al principio mueren durant el intervalo
data$dx[nrow(data)] <-
round(data$lx[nrow(data)])
#-----------------------------------------------------
# CALCULAR Lx
data$Lx <- c(rep(NA, nrow(data)))
for (i in 1:length(data$Lx)) {
data$Lx[i] <-
data$nx[i] * (data$lx[i+1] +
data$ax[i] * data$dx[i])
}
# Última línia
data$Lx[nrow(data)] <-
data$lx[nrow(data)] / data$mx[nrow(data)]
#----------------------------------------------------
# CALCULAR Tx
data$Tx <- rev(cumsum(rev(data$Lx)))
#---------------------------------------------------
# ESPERANZA DE VIDA
data$ex <-
round(ifelse(data$lx == 0, 1, data$Tx / data$lx),2)
#----------------------------------------------------
return(data)
}
Creación de las tablas de vida por género, filtración de los datos referentes al primer año de vida y fusión en un solo dataframe
La función creada nos permite iterar por género usando
lapply()
.
# Iteración de la función filtrando per sexp con 'lapply'
e0_Bcn <- lapply(unique(tabMbcn$genere), function(x) FUN= {
filtre <- tabMbcn[tabMbcn$genere == x, ]
exp_vida(
data= filtre,
age = filtre$age,
nx= filtre$nx,
ndx = filtre$ndx,
ax= filtre$ax,
mx= filtre$mx,
Px= filtre$Px
)[1, ]
}) %>%
bind_rows()
e0_Bcn %>%
DT::datatable() %>%
DT::formatCurrency(
columns=c('mx', 'qx'), currency = "", dec.mark = ",", digits= 6) %>%
#DT::formatRound(columns=c('Lx','Tx'), digits=0) %>%
DT::formatCurrency(
c('Lx','Tx'), currency = "", interval = 3, mark = ".", dec.mark = ",",
digits = 0) %>%
DT::formatCurrency(
c('ax'), currency = "", dec.mark = ",", digits = 1) %>%
DT::formatCurrency(c('ex'), currency = "", dec.mark = ",", digits = 2)
Esperança de vida calculada
e0_Bcn %>%
select(1,3,13) %>%
flextable() %>%
width(width = 2) %>%
set_header_labels(
age= "Edat", genere= "Gènere", ex= "Esperança de Vida"
) %>%
add_header_lines(
"Esperança de vida al néixer - Ciutat de Barcelona - Any 2021 -Dades Calculades amb la metodologia 'PHE'"
)
Esperança de vida al néixer - Ciutat de Barcelona - Any 2021 -Dades Calculades amb la metodologia 'PHE' | ||
---|---|---|
Edat | Gènere | Esperança de Vida |
0 | Homes | 80.90 |
0 | Dones | 87.29 |
0 | Total | 84.27 |
EV Publicada per l’Ajuntament de Barcelona
Esperança de vida al néixer - Ciutat de Barcelona - Any 2021 - Dades publicades per l'Ajuntament de Barcelona | |
---|---|
genere | value |
dones | 87.1 |
homes | 80.9 |
total | 84.2 |
Conclusión
La función creada nos va a permitir iterar los datos de mortalidad de los municipios catalanes para generar el indicador de esperanza de vida.
Office for National Statistics Report. Life expectancy at birth by health and local authorities in the United Kingdom, 1998 to 2000 (3-year aggregate figures.) Health Statistics Quarterly 2002;13:83-90↩︎
Toson B, Baker A. Life expectancy at birth: methodological options for small populations. National Statistics Methodological Series No 33. HMSO 2003.↩︎