La taula de Vida com a base del càlcul de la Esperança de vida
La taula de vida Taula de Vida: definición y características, Flor de Liz Martínez, Santo Domingo 2015 és l’instrument bàsic per a l’explotació estadística de la informació biomètrica, ja que recull informació útil per calcular les probabilitats de mort i de supervivència dels individus de determinada població. Les taules de vida de la població estan generalment basades en taxes de mortalitat.
La taula de vida presenta una sèrie de tabulacions on es descriuen la probabilitat de morir, la taxa de mortalitat i el nombre de supervivents per edat o grup d’edat. Per tant, l’esperança de vida en néixer és una estimació basada en la taula de vida. Una taula de vida és un model teòric que descriu l’extinció d’una cohort hipotètica o fictícia. Permet determinar les probabilitats de sobreviure o morir a una edat exacta \(x\) o entre edats \(x\) i \(x+n\).
És un model teòric que descriu, numèricament, el procés d’extinció per mort d’un grup inicial, generalment una cohort de nadons (arrel de la taula –100,000 individus–).
Les taules de vida es caracteritzen per:
Permeten descriure el comportament de la mortalitat per edats i fer comparacions per sexe; obtenir probabilitats de mortalitat, quines són més apropiades que les taxes de mortalitat per realitzar diferents anàlisis demogràfiques; i calcular l’esperança de vida per a diferents edats o grups d’edat.
Permeten efectuar diverses aplicacions en gran varietat de problemes com ara: estimació del nivell i tendència de la mortalitat, avaluació de programes de salut, estudis per a companyies asseguradores, etc.
Normalment es creen taules de vida per a grups d’edat, on el grup més comú és quinquennal (cada 5 anys); no obstant això, a causa de les fortes diferències en mortalitat que es presenten els primers anys de vida, es recomana que el primer grup es presenti de forma individual, especialment als 0 i 1 anys.
Per construir una taula de mortalitat cal considerar una sèrie de funcions pel que fa a l’edat. Cadascuna d’aquestes funcions té moltes aplicacions dins del camp demogràfic. A continuació es detalla el comportament de cadascuna:
La funció d’edat (x)
La funció \(x\) en general s’inicia a les edats 0 i 1, per després continuar per quinquennis (5, 10, 15…) fins a l’edat límit de la població, que és l’edat en què desapareixen tots els individus de la població estudiada (màxima edat humanament possible) i es representa amb la lletra \(\omega\). Normalment \(\omega\) pot correspondre als 85, 90 o 95 anys.
Funció de supervivents (lx)
La funció \(l_x\) representa el nombre de persones de la generació inicial que van arribar amb vida a l’edat exacta \(x\). El valor \(l_0\) representa la mida de la cohort inicial (naixements) i es coneix com a “arrel de la taula”. Com que s’està treballant amb un model teòric, s’acostuma a treballar amb una arrel de 100.000 individus. Per tant, \(l_0\) = 100.000. D’altra banda, s’acostuma a representar amb \(\omega\) l’edat a què mor el darrer membre de la generació.
La funció \(lx\), tal com s’ha definit, es pot interpretar també com la probabilitat d’arribar amb vida a l’edat \(x\) per cada 100,000 habitants. Per exemple, si \(l_20\) = 88.712 individus, aleshores es pot dir que la probabilitat d’arribar amb vida als 20 anys és de 0,8871 = 88,71%.
La funció de supervivents amb el mètode Sullivan
Per aquesta i altres funcions hem seguit també el métode Sullivan utilitzant com a referència Health Expectancy Calculation by the Sullivan Method: A Practical Guide, C.Jagger, H.Van Oyen, J.M.Robine, 2014.
El farem servir perquè és àmpliament utilitzat i acceptat a nivell europeu.
Del mètode Sullivan emprarem les metodologies explicades per a les taules de mortalitat per grups d’edat, on el primer quinquenni es divideix normalment en dos períodes: un primer per a l’any 0 i un segon per al període 1-4. En aquest mètode es posa el darrer període \(n_{85}=10\).
Treballant amb aquest mètode és important tenir en compte la llargada en anys del període, \(n_x\) i les possibles variacions de la mortalitat dins del periode, que s’expliquen amb \(a_x\). Nosaltres adoptarem un valor constant d’\(a_x\) dins de cada període, 0.5, assumuint que la mortalitat s’hi distribueixi de manera homogénea.
En aquest cas \(l_x\) s’obté de de \(q_x\) línia a línia, assignant el valor de 100000 a la primera: \[l_x=l_{x-1}-(q_{x-1}·l_{x-1})\] En aquest cas no hi ha diferències entre taules anuals i taules plorianuals.
La funció de defuncions (dx)
La funció \(d_x\) representa el nombre de defuncions de la generació inicial ocorregudes entre les edats \(x\) i \(x+1\) (el nombre d’individus d’edat \(x\) que moren sense assolir l’edat \(x+1\)). Cal observar que aquestes defuncions corresponen a una cohort hipotètica, per la qual cosa se’ls anomena defuncions de la taula a diferència de les defuncions observades a la població real. De tot això es dedueix la fórmula \[d_x = l_x - l_{x+1}\] sabent que treballem amb edats simples (0, 1, 2, 3…). Quan es treballa amb grups d’edats, la funció de defuncions es denota amb \(ndx\), on \(n\) representa el nombre d’anys del grup (generalment s’utilitzen grups quinquennals –0, 1, 5, 10…–). S’interpreta com el nombre de defuncions de la generació inicial ocorregudes entre les edats \(x\) i \(x+n\). En aquest cas, la funció de defuncions es pot calcular mitjançant la fórmula \[ndx = lx - lx+n\] Per exemple, per la taula d’edats simples: \[d_0 = l_0 - l_{0+1} = l_0 - l_1 = 100000 - 99680 = 320\] \[d_1 = l_1 - l_{1+1} = l_1 - l_2 = 99680 - 99665 = 15\] \[d_2 = l_2 - l_{2+1} = l_2 - l_3 = 99665 - 99648 = 17\] … fins a \(l_{\omega}\).
I per a grups d’edat:
\({}_5d_0 = l_0 - l_{0+5} = l_0 – l_5 = 100000 - 99604 = 396\) \({}_5d_5 = l_5 – l_{5+5} = l_5 – l_{10} = 99604 - 99573 = 31\) 5d10 = l10 – l10+5 = l10 – l15 = 99573 - 99496 = 77
… fins a \({}_5d_{\omega}\).
La funció de probabilitat de mort (qx)
La taula de vida compta amb dues funcions de probabilitat binomial, és a dir, exhibeix dos i només dos resultats possibles, representats per la funció de probabilitat de mort (\(q_x\)) i la funció de probabilitat de vida (\(p_x\)):
La Funció de probabilitat de mort (\(q_x\)) representa la probabilitat associada al fet que una persona pertanyent a la cohort hipotètica mori a l’edat complerta \(x\) (mori l’any comprès entre edats \(x\) i \(x+1\)). D’acord amb el concepte de probabilitat, \(q_x\) és una relació entre \(d_x\) i \(l_x\), és a dir, una relació entre els casos desfavorables (defuncions ocorregudes a l’edat complerta \(x\)) i el total de casos (supervivents a l’edat \(x\)). Es denota per: \[q_x=\frac{d_x}{l_x}\]
Quan es treballa amb grups d’edats, la probabilitat de mort entre les edats \(x\) i \(x+n\) es representa amb \({}_nq_x\) i es calcula amb la fórmula: \[{}_nq_x= \frac{{}_nd_x}{l_x}\]
La funció probabilitat de la mort amb el mètode Sullivan
A partir de les taxes de mortalitat també podem calcular la probabilitat (condicional a haver sobreviscut) de mort en l’interval d’edat fins al començament de l’interval, \({}_nq_x\) (semplificarem la notació per evitar ambigüitats): \[q_x= \frac{n_x·m_x}{(1+n_x·0.5·m_x)}\] Nota: \(a_x=0.5\). El darrer període es posa igual a 1.
Funció de anys apersones d’edat “x” (Lx)
Funció Lx amb mètode Sullivan
\(L_x\) és el nombre de persones anys viscuts a l’edat \(x\).
En el cas de considerar \(a_x=0.5\), la fórmula seria:
\[L_x=n_x·0.5·l_x + n_x·0.5·l_{x+1}\] \[L_x=n_x·\frac {l_x + l_{x+1}}{2}\]
Funció de la taxa de mortalitat mitjana per a l’edat complerta “x” (mx)
\(m_x\) Representa la proporció mitjana d’individus que moriran per cada mil habitants dins una població, durant el trànsit entre els anys \(x\) i \(x+1\). D’acord amb això, \(m_x\) és una relació entre \(d_x\) i \(L_x\) per mil, és a dir, una relació entre els casos desfavorables (defuncions ocorregudes a l’edat complerta \(x\)) i la mitjana de casos (població censal a l’edat \(x\)) per cada mil habitants. Es calcula amb la fórmula \[m_x = \frac{d_x}{L_x} · 1000\] per a les edats simples; i \[m_x =\frac{{}_nd_x}{L_x} · 1000\] per als grups dedats.
Funció nombre total d’anys persona (Tx)
\(T_x\) és el nombre total d’anys persona (anys viscuts per cada persona) viscuts per la cohort des de l’edat \(x\) fins que tots els membres de la cohort han mort. Aquesta és la suma de nombres de la columna \(L_x\) des de l’edat \(x\) fins a l’última fila de la taula. Quan es calcula la EV en néixer és tota la columna \(L_x\).
\[T_x=\sum_x^\omega l_x\]
Funció de l’esperança de vida a l’edat “x” (ex)
\(e_x\) També anomenada expectativa de vida. Representa el nombre mitjà d’anys que resta per viure als \(l_x\) supervivents a una edat \(x\). Per a la cohort inicial \(l_0\) s’obté la funció \(e_0\), que representa l’esperança de vida en néixer. De manera general, es calcula mitjançant la fórmula: \[e_x= 0.5+\frac{\sum_\omega^xl_{x+n}}{l_x}=0.5+\frac{l_{x+1n}+l_{x+2n}...l_\omega}{l_x}\] Per exemple, per a una taula d’edats simples, imaginem una situació en què la totalitat de la cohort inicial mor als tres anys (\(x=0; \omega=3; n=1\)). Aleshores, per obtenir l’esperança de vida en néixer, el càlcul seria:
\[e_0=0.5+\frac{l_1+l_2+l_3}{l_0}\]
Esperança de vida amb taula abreujada
La fórmula anterior és aplicable a les taules completes de mortalitat, on es tenen valors per a totes les edats simples. En cas que la taula disponible sigui només una taula abreujada, cal tenir en compte les amplituds dels intervals entre edat.
El més corrent són les taules amb intervals quinquennals però amb especificació de la mortalitat del primer any i dels quatre següents, així com un interval obert al final (p. ex. 85 i més). Suposant que es compleix en tots els intervals d’edat la distribució lineal de les defuncions, els nens morts abans d’1 any viurien una mitjana de 0.5, els morts en les quatre edats següents viurien una mitjana de 2 anys i els restants una mitjana de 2,5 (en canvi els supervivents en començar l’interval obert viure a un nombre mitjà d’anys de vida que caldrà obtenir per altres mitjans o que es pot suposar de manera aproximada, ja que l’impacte de la seva determinació sobre l’ajust final dels resultats és escàs, especialment quan es calcula esperança de vida en néixer).
la fórmula de la ev per intervals és:
\[e_0=0.5+\frac{2.5· l_1+4.5·l_5+5·(l_{10}+l_{15}+l_{20}....)}{l_0} \]
Esperança de vida amb el mètode Sullivan
També es pot trobar en molts recursos; per exemple Life Expectancy Project:
\[e_x = \frac{T_x} {l_x}\]
El càlcul de l’esperança de vida amb R
Amb el package PHEindicatormethods i la funció phe_life_expectancy
El paquet R “PHEindicatormethods” té diverses funcions basades en els mètodes estadístics utilitzats per als indicadors que els analistes poden utilitzar per calcular:
- proporcions
- tarifes
- tarifes estandarditzades
- mitjanes
- esperança de vida
- índex de la desigualtat
- intervals de confiança per a aquestes estadístiques
- assignació de dades a quantils
Aquesta funció s’alinea amb la metodologia de la Calculadora d’esperança de vida de Public Health England’s (PHE) disponible a la pàgina web Fingertips Technical Guidance.
La funció phe_life_expectancy()
és per a una taula de
vida abreujada que utilitza intervals d’edat de 5 anys amb un
interval d’edat final de més de 90
anys. La taula s’ha completat utilitzant els mètodes descrits
per Chiang. L’Oficina Nacional d’Estadística (UK) utilitza
aquesta estructura i metodologia d’edat per produir l’esperança de vida
a nivell d’autoritats nacionals i locals1.
L’esperança de vida no es pot calcular si els anys persona en un interval d’edat donat és zero. Tampoc es calcularà si el total d’anys persona és inferior a 5,0, ja que es considera que aquesta és la mida mínima per a un càlcul robust de l’esperança de vida2. Els recomptes de morts zero no són un problema, tret de l’interval d’edat final: hi ha d’haver almenys una mort a l’interval de més de 90 perquè els càlculs siguin possibles.
Càlcul de l’Esperança de vida sobre dades del municipi de Barcelona amb llibreria PHEindicatormethods de PH England
EV Calculada
#---------------------------------------------------
# PROVA PREVIA DE FIABILITAT
#---------------------------------------------------
# ==================================================
# 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)
bcnedat21 <- readxl::read_xlsx("pmh-1180-8078-mun (1).xlsx",
sheet = 2,
skip = 1) %>%
filter(grepl("^[0-9]", ...1)) %>%
rename(Edat= ...1) %>%
mutate(Edat= as.integer(str_extract(Edat, "^[0-9]+")))
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 = "90 +"),
edats= case_match(Edat,
0~ 0,
c(1:4)~ 1,
c(5:9)~ 5,
c(10:14)~ 10,
c(15:19)~ 15,
c(20:24)~ 20,
c(25:29)~ 25,
c(30:34)~ 30,
c(35:39)~ 35,
c(40:44)~ 40,
c(45:49)~ 45,
c(50:54)~ 50,
c(55:59)~ 55,
c(60:64)~ 60,
c(65:69)~ 65,
c(70:74)~ 70,
c(75:79)~ 75,
c(80:84)~ 80,
c(85:89)~ 85,
.default = 90)) %>%
group_by(catEdat,edats) %>%
summarise(across(2:7, sum)) %>%
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)
le_bcn_2021 <- tabMort %>%
group_by(genere) %>%
phe_life_expectancy(deaths = Defuncions,
population = Pop,
startage = catEdat,
age_contents = unique(tabMort$catEdat),
le_age = "0") %>% # Esperança de vida al néixer
select(2:8)
flextable(le_bcn_2021[,-1]) %>%
add_header_lines(
"Esperança de vida al néixer - Ciutat de Barcelona - Any 2021 -Dades Calculades amb la libreria 'PHEindicatormethods'"
)
Esperança de vida al néixer - Ciutat de Barcelona - Any 2021 -Dades Calculades amb la libreria 'PHEindicatormethods' | |||||
---|---|---|---|---|---|
genere | value | lowercl | uppercl | pops_used | dths_used |
Dones | 86.90808 | 86.63929 | 87.17687 | 857,988 | 8,369 |
Homes | 80.76032 | 80.46297 | 81.05768 | 778,744 | 7,868 |
Total | 84.01491 | 83.80939 | 84.22042 | 1,636,732 | 16,237 |
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 |
Estimació de l’esperança de vida amb el package poputils
Referències: Bryant J (2024). poputils Demographic Analysis and Data Manipulation. R package version 0.3.4*, https://github.com/bayesiandemography/poputils.
# LLIBRERIA poputils
#--------------------
#install.packages("poputils")
library(poputils)
tabMort2 <- tabMort %>%
mutate(mx= Defuncions / Pop)
tabMort2 %>%
group_by(genere) %>%
select(1,3,4,5,6) %>%
lifeexp(mx=mx,
age = catEdat,
at=0
) %>%
flextable() %>%
width(width = 2.5) %>%
add_header_lines(
"Esperança de vida al néixer - Ciutat de Barcelona - Any 2021 -Dades Calculades amb la libreria 'poputils' per a manipulació i anàlisi de dades demogràfiques - Grup final 90+"
)
Esperança de vida al néixer - Ciutat de Barcelona - Any 2021 -Dades Calculades amb la libreria 'poputils' per a manipulació i anàlisi de dades demogràfiques - Grup final 90+ | |
---|---|
genere | ex |
Homes | 80.72191 |
Dones | 86.88569 |
Total | 83.98648 |
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+"),
edats= case_match(Edat,
0~ 0,
c(1:4)~ 1,
c(5:9)~ 5,
c(10:14)~ 10,
c(15:19)~ 15,
c(20:24)~ 20,
c(25:29)~ 25,
c(30:34)~ 30,
c(35:39)~ 35,
c(40:44)~ 40,
c(45:49)~ 45,
c(50:54)~ 50,
c(55:59)~ 55,
c(60:64)~ 60,
c(65:69)~ 65,
c(70:74)~ 70,
c(75:79)~ 75,
c(80:84)~ 80,
#c(85:89)~ 85,
.default = 85)) %>%
group_by(catEdat,edats) %>%
summarise(across(2:7, sum)) %>%
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)
tabMort2 <- tabMort %>%
mutate(mx= Defuncions / Pop,
age= factor(catEdat))
tabMort2 %>%
group_by(genere) %>%
lifeexp(mx=mx,
age = age,
at=0
) %>%
flextable() %>%
width(width = 2.5) %>%
add_header_lines(
"Esperança de vida al néixer - Ciutat de Barcelona - Any 2021 -Dades Calculades amb la libreria 'poputils' per a manipulació i anàlisi de dades demogràfiques - Grup final 85+"
)
Esperança de vida al néixer - Ciutat de Barcelona - Any 2021 -Dades Calculades amb la libreria 'poputils' per a manipulació i anàlisi de dades demogràfiques - Grup final 85+ | |
---|---|
genere | ex |
Homes | 80.86253 |
Dones | 87.26159 |
Total | 84.23899 |
Taula de vida: genere femení
## # A tibble: 19 × 9
## age genere Defuncions Pop qx lx dx Lx ex
## <fct> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0 Dones 9 5456 0.00165 100000 165. 99918. 87.3
## 2 01-04 Dones 6 24138 0.000994 99835. 99.2 399142. 86.4
## 3 05-09 Dones 4 32711 0.000611 99736. 61.0 498527. 82.5
## 4 10-14 Dones 1 33540 0.000149 99675. 14.9 498338. 77.5
## 5 15-19 Dones 2 33995 0.000294 99660. 29.3 498227. 72.5
## 6 20-24 Dones 7 40976 0.000854 99631. 85.1 497941. 67.6
## 7 25-29 Dones 6 59155 0.000507 99546. 50.5 497603. 62.6
## 8 30-34 Dones 14 62517 0.00112 99495. 111. 497198. 57.7
## 9 35-39 Dones 29 61432 0.00236 99384. 234. 496334. 52.7
## 10 40-44 Dones 43 64441 0.00333 99150. 330. 494922. 47.8
## 11 45-49 Dones 56 62744 0.00445 98819. 440. 492996. 43.0
## 12 50-54 Dones 93 58082 0.00797 98379. 784. 489933. 38.2
## 13 55-59 Dones 124 56845 0.0108 97595. 1059. 485323. 33.5
## 14 60-64 Dones 234 52654 0.0220 96536. 2121. 477358. 28.8
## 15 65-69 Dones 300 46209 0.0319 94415. 3016. 464494. 24.4
## 16 70-74 Dones 466 45395 0.0500 91399. 4573. 445466. 20.1
## 17 75-79 Dones 655 38970 0.0806 86826. 6999. 416390. 16.0
## 18 80-84 Dones 1022 31207 0.151 79828. 12057. 368173. 12.2
## 19 85+ Dones 5298 47521 1 67770. 67770. 607874. 8.97
## [1] 87.38484
tabfem2 <- tabfem %>%
mutate(Tx= ifelse(!is.na(sum(Lx)-lag(cumsum(Lx))),
sum(Lx)-lag(cumsum(Lx)), sum(Lx)),
ex2= Tx/lx)
tabfem2 # ex2 (mètode Tx/Lx) coincideix 100%
## # A tibble: 19 × 11
## age genere Defuncions Pop qx lx dx Lx ex Tx ex2
## <fct> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0 Dones 9 5456 1.65e-3 1 e5 1.65e2 9.99e4 87.3 8.73e6 87.3
## 2 01-04 Dones 6 24138 9.94e-4 9.98e4 9.92e1 3.99e5 86.4 8.63e6 86.4
## 3 05-09 Dones 4 32711 6.11e-4 9.97e4 6.10e1 4.99e5 82.5 8.23e6 82.5
## 4 10-14 Dones 1 33540 1.49e-4 9.97e4 1.49e1 4.98e5 77.5 7.73e6 77.5
## 5 15-19 Dones 2 33995 2.94e-4 9.97e4 2.93e1 4.98e5 72.5 7.23e6 72.5
## 6 20-24 Dones 7 40976 8.54e-4 9.96e4 8.51e1 4.98e5 67.6 6.73e6 67.6
## 7 25-29 Dones 6 59155 5.07e-4 9.95e4 5.05e1 4.98e5 62.6 6.23e6 62.6
## 8 30-34 Dones 14 62517 1.12e-3 9.95e4 1.11e2 4.97e5 57.7 5.74e6 57.7
## 9 35-39 Dones 29 61432 2.36e-3 9.94e4 2.34e2 4.96e5 52.7 5.24e6 52.7
## 10 40-44 Dones 43 64441 3.33e-3 9.91e4 3.30e2 4.95e5 47.8 4.74e6 47.8
## 11 45-49 Dones 56 62744 4.45e-3 9.88e4 4.40e2 4.93e5 43.0 4.25e6 43.0
## 12 50-54 Dones 93 58082 7.97e-3 9.84e4 7.84e2 4.90e5 38.2 3.76e6 38.2
## 13 55-59 Dones 124 56845 1.08e-2 9.76e4 1.06e3 4.85e5 33.5 3.27e6 33.5
## 14 60-64 Dones 234 52654 2.20e-2 9.65e4 2.12e3 4.77e5 28.8 2.78e6 28.8
## 15 65-69 Dones 300 46209 3.19e-2 9.44e4 3.02e3 4.64e5 24.4 2.30e6 24.4
## 16 70-74 Dones 466 45395 5.00e-2 9.14e4 4.57e3 4.45e5 20.1 1.84e6 20.1
## 17 75-79 Dones 655 38970 8.06e-2 8.68e4 7.00e3 4.16e5 16.0 1.39e6 16.0
## 18 80-84 Dones 1022 31207 1.51e-1 7.98e4 1.21e4 3.68e5 12.2 9.76e5 12.2
## 19 85+ Dones 5298 47521 1 e+0 6.78e4 6.78e4 6.08e5 8.97 6.08e5 8.97
Aquí a dalt tenim les esperances de vida calculades per
poputils
. Veiem com el càlcul de l’EV es realitza primer
calculant \(T_x\) a partir de \(L_x\) i després aplicant la fórmula \(EV=\frac{T_x}{l_x}\), tal com s’explica a
en la introducció teòrica.
a <- tabMort2 %>%
group_by(genere) %>%
lifeexp(mx=mx,
age = age,
at=0
)
b <- aj2021
dif_h <- abs(round(a[1,2]-b[2,2],2))[[1]]
dif_d <- abs(round(a[2,2]-b[1,2],2))[[1]]
dif_t <- abs(round(a[3,2]-b[3,2],2))[[1]]
Es comprova una diferència mínima amb l’Esperança de Vida
calculada per l’Agència de Salut de Barcelona (homes: 0.04 anys, dones:
0.16 anys, total: 0.04 anys) i el mètode poputils
amb grup
final de 85 anys. Amb la qual cosa, deduim que la metodologia
emprada per aquest organisme es basa en la creació de 19 grups d’edat
amb el grup final a 85 anys. Que és exactament la metodologia emprada
pel Ministerio de Sanidad, en el seu informe
Esperanzas de vida en España, 2022. Madrid: Ministerio de
Sanidad, 2024*.
Creació de la taula de vida càlcul de l’EV seguint el mètode Sullivan
Comprovem el funcionament de la llibreria poputils
aplicant el mètode Sullivan i comparant la taula obtinguda amb la que
s’acaba de construir per a la mortalitat de la població femenina de
Barcelona l’any 2021.
rawtab <- tabMort2[, c(7,3:6)] %>%
filter(genere== "Dones") %>%
mutate(nx= case_match(as.character(age),
"0"~ '1',
"01-04"~ '4',
.default = as.character('5')),
nx= as.integer(nx)) %>% #indica l'amplada dels intervals
select(1,6,3:5) %>%
rename(def= Defuncions,
pop=Pop)
rawtab[nrow(rawtab), ][2] <- 10 # Sullivan pàg. 16, punt 3.)
# Calcular qx (Sullivan pàg 16 punt 3.)
rawtab2 <- rawtab %>% mutate(
qx= nx*mx / (1+nx*0.5*mx), # Mètode sullivan pàg. 16. (3)
)
rawtab2$qx[19] <- 1 # Sullivan
# Calcular lx (Sullivan pàg. 6 punt 3.)
rawtab2$lx <- c(100000, rep(NA,18))
for (i in 2:length(rawtab2$lx)) {
rawtab2$lx[i] <- rawtab2$lx[i-1]-(rawtab2$qx[i-1]*rawtab2$lx[i-1])
} # Diferència en els darrers rows amb poputils perquè aquest fa els càlculs sobre les quantitats arrodonides
#rawtab2$dx <- c(rep(NA,19))
#for (i in 1:length(rawtab2$dx)) {
# rawtab2$dx[i] <- ifelse(is.na(rawtab2$lx[i]-rawtab2$lx[i+1]), # last row
# rawtab2$lx[i],
# rawtab2$lx[i]-rawtab2$lx[i+1])
#}
# Calcular LX (Sullivan pàg. 17 punt 5.)
rawtab2$Lx <- c(rep(NA, 19))
for (i in 1:length(rawtab2$Lx)) {
rawtab2$Lx[i] <- ifelse(
is.na(rawtab2$nx[i]*0.5*rawtab2$lx[i]+
rawtab2$nx[i]*0.5*rawtab2$lx[i+1]),
rawtab2$lx[i] / rawtab2$mx[i],
rawtab2$nx[i]*0.5*rawtab2$lx[i]+
rawtab2$nx[i]*0.5*rawtab2$lx[i+1]
)
}
# Calcular Tx (Sullivan pàg. 5 punt 5.)
rawtab2$Tx <- rev(cumsum(rev(rawtab2$Lx)))
# Calcular esperana de vida (Sullivan pàg. 5 punt 6.)
rawtab2$ex <- rawtab2$Tx / rawtab2$lx
rawtab2
## # A tibble: 19 × 10
## age nx def pop mx qx lx Lx Tx ex
## <fct> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0 1 9 5456 0.00165 0.00165 100000 99918. 8727023. 87.3
## 2 01-04 4 6 24138 0.000249 0.000994 99835. 399142. 8627105. 86.4
## 3 05-09 5 4 32711 0.000122 0.000611 99736. 498527. 8227963. 82.5
## 4 10-14 5 1 33540 0.0000298 0.000149 99675. 498338. 7729435. 77.5
## 5 15-19 5 2 33995 0.0000588 0.000294 99660. 498227. 7231097. 72.6
## 6 20-24 5 7 40976 0.000171 0.000854 99631. 497942. 6732870. 67.6
## 7 25-29 5 6 59155 0.000101 0.000507 99546. 497603. 6234928. 62.6
## 8 30-34 5 14 62517 0.000224 0.00112 99495. 497198. 5737326. 57.7
## 9 35-39 5 29 61432 0.000472 0.00236 99384. 496334. 5240128. 52.7
## 10 40-44 5 43 64441 0.000667 0.00333 99150. 494923. 4743794. 47.8
## 11 45-49 5 56 62744 0.000893 0.00445 98819. 492997. 4248871. 43.0
## 12 50-54 5 93 58082 0.00160 0.00797 98379. 489936. 3755874. 38.2
## 13 55-59 5 124 56845 0.00218 0.0108 97595. 485328. 3265938. 33.5
## 14 60-64 5 234 52654 0.00444 0.0220 96536. 477377. 2780610. 28.8
## 15 65-69 5 300 46209 0.00649 0.0319 94415. 464534. 2303233. 24.4
## 16 70-74 5 466 45395 0.0103 0.0500 91399. 445560. 1838699. 20.1
## 17 75-79 5 655 38970 0.0168 0.0807 86825. 416619. 1393139. 16.0
## 18 80-84 5 1022 31207 0.0327 0.151 79823. 368909. 976521. 12.2
## 19 85+ 10 5298 47521 0.111 1 67741. 607611. 607611. 8.97
Aplicació de la llibreria poputils
per calcular
l’esperança de vida en néixer dels municipis catalans que disposin de
dades de mortalitat
# ===============================================================
# ===============================================================
# ESPERANÇA DE VIDA AL NÉIXER - MUNICIPIS DE CATALUNYA - ANY 2022
# ===============================================================
# ===============================================================
# DADES - MORTALITAT PER EDATS - MUNICIPIS DE CATALUNYA ANY 2022
# ===============================================================
#----------------------------------------------------------------
# MODALITAT DADES PUBLICADES IDESCAT/INE
#----------------------------------------------------------------
# Lectura fitxer mortalitat per edats i per municipi
# mortCat22 <- read.csv("t269munc3_mort_2022.csv",
# skip = 6,
# header = TRUE,
# sep = ";") %>%
# slice(1:67) %>%
# select(1:103) %>%
# tidyr::pivot_longer(3:103) %>%
# mutate(name= str_extract(name, "X[0-9]+"),
# name= as.integer(str_extract(name, "[0-9]+")),
# Codi= str_sub(Codi, 2,6))
#names(mortCat22) <- c("ine", "Municipio", "age", "Defuncions")
#---------------------------------------------------------------
# MODALITAT MICRODADES
#-------------------------------------------------------------
mortalitat22 <- read.csv("taulesMun/mortalidad_2022.csv",
header = TRUE,
sep = ",")
mort22 <- mortalitat22 %>%
select(3:7,9:11) %>%
filter(!is.na(CMUNRE)) %>%
mutate(CPRORE= str_pad(as.character(CPRORE),
width= 2,side = "left", pad = "0"),
CMUNRE= str_pad(as.character(CMUNRE),
width= 3,side = "left", pad = "0"),
ine=paste0(CPRORE,CMUNRE),
age= AÑOSC # Años cumplidos
# no UTILITZAR EL CÀLCUL AQUI SOTA LES MICRODADES ESTAN MALAMENT!!!
#age= ifelse(MESDEF >= MESN, ANODEF-ANON, ANODEF-ANON-1)
) %>%
select(9,10) %>%
filter(grepl("^08|^17|^25|^43",ine)) %>%
mutate(age= case_match(age,
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+")) %>%
group_by(ine,age) %>%
summarise(Defuncions= n()) %>%
arrange(ine,age)
ine_mort <- mort22 %>% distinct(ine)
ine_mort <-foreign::read.dbf(
"../Mapes/repo/divisions-administratives/divisions-administratives-v2r1-municipis-250000-20240118.dbf") %>%
mutate(ine= str_sub(CODIMUNI, 1,5)) %>%
select(14,2) %>%
inner_join(ine_mort)
# ======================================
# ======================================
# DADES - POBLACIÓ PER EDATS - MUNICIPIS DE CATALUNYA ANY 2021
# ======================================
# "https://www.idescat.cat/dades/obertes/pmh?n=1180&geo=mun" Buscar opció
# DESCÀRREGA I SELECCIÓ ANY I SEXE (TOTAL)
#----------------------------------------------------------------------
#popCat21raw <- read.csv(unz('C:/Users/Usuario/Downloads/pmh1180mun.zip',
# 'pmh1180mun-1.csv'),
# header = TRUE,
# sep = ";") %>%
# filter(any==2021 & sexe== 'total')
#writexl::write_xlsx(popCat21raw, "taulesMun/pop2021.xlsx")
#=========================================================
#read.csv(unz('C:/Users/Usuario/Downloads/pmh1180mun.zip',
# 'pmh1180mun-2.csv'),
# header = TRUE,
# sep = ";") %>%
# filter(any==2021 & sexe== 'total') # NO CONTÉ DADES ANY 2021!!!
#==============================================================
popcat21raw <- readxl::read_xlsx("taulesMun/pop2021.xlsx") %>%
mutate(edat= as.integer(str_extract(edat, "^[0-9]+")),
#edat= as.integer(edat),
valor= as.integer(valor)) %>%
filter(!is.na(edat)) %>%
rename(age= edat,
pop= valor) %>%
filter(municipis != "Catalunya") %>%
filter(!is.na(pop)) %>% # Medinyà
mutate(municipis= case_match(municipis,
"Castell-Platja d'Aro"~
"Castell d'Aro, Platja d'Aro i s'Agaró",
.default = municipis))
popCat21 <- ine_mort %>%
mutate(NOMMUNI= sub("^la (.*)", "\\1, la", NOMMUNI),
NOMMUNI= sub("^el (.*)", "\\1, el", NOMMUNI),
NOMMUNI= sub("^les (.*)", "\\1, les", NOMMUNI),
NOMMUNI= sub("^els (.*)", "\\1, els", NOMMUNI),
NOMMUNI= sub("^l'(.*)", "\\1, l'", NOMMUNI)
) %>%
left_join(popcat21raw, by= c("NOMMUNI"= "municipis")) %>%
select(1,2,4,8) %>%
mutate(age= case_match(age,
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+")) %>%
group_by(ine,NOMMUNI, age) %>%
summarise(pop= sum(pop))
# popCat21 %>% filter(pop==0) # Control
# ======================================
# DADES - POBLACIÓ PER EDATS - MUNICIPIS DE CATALUNYA ANY 2022
# ======================================
lf <- list.files("taulesMun/", pattern = "^33.*.xlsx")
# Cal tornar a entrar el path, si no, no funciona: paste0()
data <- lapply(lf, function(x) readxl::read_xlsx(paste0("taulesMun/",x),
skip = 8,
col_names = TRUE))
# fixar-se en seq_along() per iterar sobre llistes de dataframes
popCat22raw <- lapply(seq_along(data), function(x) {
data[[x]][grep("^[0-9]+",data[[x]]$...1),]
}) %>% bind_rows()
popCat22 <- popCat22raw %>%
tidyr::pivot_longer(2:102) %>%
mutate(name= as.integer(str_extract(name, "^[0-9]+")),
ine= str_sub(...1, 1,5),
...1= str_sub(...1, 7,100)) %>%
rename(Municipio= ...1,
age= name,
Persones= value) %>%
select(4,1,2,3) %>%
mutate(age= case_match(age,
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+")) %>%
group_by(ine,Municipio, age) %>%
summarise(pop= sum(Persones)) %>%
filter(ine %in% ine_mort[[1]])
popCat_21_22 <- popCat21 %>%
inner_join(popCat22, by= c("ine","age")) %>%
mutate(pop= (pop.x + pop.y) / 2) %>%
select(1,2,3,7)
tabmort22 <- popCat22 %>%
left_join(mort22, by= c("ine",'age')) %>%
mutate(Defuncions= ifelse(is.na(Defuncions), 0, Defuncions),
age= as.factor(age),
mx= Defuncions / pop)
# Controlar si hi ha municipis amb algun grup de població igual a 0
# tabmort22 %>% filter(pop==0)
# ======================================
# CÀLCUL ESPERANÇA DE VIDA AL NAIXEMENT - MUNICIPIS DE CATALUNYA ANY 2022
# ======================================
espVida22 <- tabmort22 %>%
group_by(ine,Municipio) %>%
lifeexp(mx=mx,
age = age,
at=0
)
espVida22 %>%
select(-1) %>%
flextable() %>%
width(width = 2) %>%
add_header_lines("Esperança de vida calculada als municipis catalans - Any 2022")
Esperança de vida calculada als municipis catalans - Any 2022 | |
---|---|
Municipio | ex |
Abrera | 83.86966 |
Alella | 81.90326 |
Arenys de Mar | 81.57204 |
Argentona | 83.77759 |
Badalona | 82.95127 |
Barcelona | 84.30696 |
Berga | 83.75329 |
Caldes de Montbui | 83.85179 |
Calella | 80.97476 |
Canet de Mar | 80.69781 |
Canovelles | 82.24715 |
Cardedeu | 84.00094 |
Castellar del Vallès | 84.10831 |
Castellbisbal | 85.65632 |
Castelldefels | 82.85031 |
Corbera de Llobregat | 83.10764 |
Cornellà de Llobregat | 85.65735 |
Cubelles | 82.22585 |
Esparreguera | 82.90959 |
Esplugues de Llobregat | 84.26323 |
Franqueses del Vallès, Les | 83.04809 |
Garriga, La | 82.19071 |
Gavà | 84.55633 |
Granollers | 85.35990 |
Hospitalet de Llobregat, L' | 84.06980 |
Igualada | 83.17709 |
Llagosta, La | 85.21861 |
Llinars del Vallès | 81.59474 |
Lliçà d'Amunt | 87.47453 |
Malgrat de Mar | 82.28597 |
Manlleu | 84.85071 |
Manresa | 84.09158 |
Martorell | 84.41305 |
Masnou, El | 84.97221 |
Mataró | 83.54845 |
Molins de Rei | 84.66361 |
Mollet del Vallès | 83.76038 |
Montcada i Reixac | 84.12090 |
Montgat | 83.91012 |
Montornès del Vallès | 82.27585 |
Olesa de Montserrat | 83.50553 |
Palau-solità i Plegamans | 82.48382 |
Pallejà | 83.84278 |
Parets del Vallès | 84.90583 |
Piera | 80.34584 |
Pineda de Mar | 81.68349 |
Prat de Llobregat, El | 83.65493 |
Premià de Mar | 83.16300 |
Ripollet | 83.90221 |
Roca del Vallès, La | 85.90873 |
Rubí | 83.57572 |
Sabadell | 83.60149 |
Sant Adrià de Besòs | 84.57825 |
Sant Andreu de la Barca | 83.06227 |
Sant Andreu de Llavaneres | 85.22632 |
Sant Boi de Llobregat | 82.75529 |
Sant Celoni | 85.39474 |
Sant Cugat del Vallès | 86.61933 |
Sant Feliu de Llobregat | 85.59350 |
Sant Joan Despí | 85.39386 |
Sant Joan de Vilatorrada | 84.25720 |
Vilassar de Mar | 84.10980 |
Sant Just Desvern | 83.62892 |
Premià de Dalt | 86.19857 |
Sant Pere de Ribes | 83.73994 |
Sant Quirze del Vallès | 85.25452 |
Sant Sadurní d'Anoia | 85.30781 |
Santa Coloma de Gramenet | 82.48758 |
Santa Margarida de Montbui | 81.89881 |
Barberà del Vallès | 81.68760 |
Santa Perpètua de Mogoda | 83.54663 |
Sant Vicenç dels Horts | 83.19597 |
Cerdanyola del Vallès | 85.15980 |
Sitges | 83.58023 |
Terrassa | 83.23871 |
Tordera | 83.01580 |
Torelló | 83.98235 |
Vallirana | 81.85974 |
Vic | 83.94211 |
Viladecans | 84.21726 |
Vilanova del Camí | 80.15577 |
Vilafranca del Penedès | 81.74942 |
Vilanova i la Geltrú | 83.35006 |
Badia del Vallès | 84.10014 |
Banyoles | 82.38081 |
Bisbal d'Empordà, La | 83.12600 |
Blanes | 82.58958 |
Calonge i Sant Antoni | 82.90112 |
Cassà de la Selva | 84.35513 |
Castelló d'Empúries | 82.86984 |
Castell d'Aro, Platja d'Aro i s'Agaró | 84.66889 |
Escala, L' | 84.47674 |
Figueres | 83.04382 |
Girona | 82.84884 |
Lloret de Mar | 81.55478 |
Olot | 83.02425 |
Palafrugell | 81.91922 |
Palamós | 85.05936 |
Ripoll | 81.41827 |
Roses | 84.01244 |
Salt | 81.71387 |
Sant Feliu de Guíxols | 81.99937 |
Santa Coloma de Farners | 83.90420 |
Torroella de Montgrí | 84.73016 |
Balaguer | 82.55938 |
Lleida | 82.58249 |
Mollerussa | 84.70652 |
Seu d'Urgell, La | 82.04332 |
Tàrrega | 82.03007 |
Amposta | 82.08445 |
Calafell | 82.40293 |
Cambrils | 84.61212 |
Cunit | 83.06649 |
Mont-roig del Camp | 82.40554 |
Reus | 82.63449 |
Sant Carles de la Ràpita | 83.18256 |
Tarragona | 82.77358 |
Torredembarra | 81.78302 |
Tortosa | 82.04771 |
Valls | 83.52847 |
Vendrell, El | 83.85543 |
Vila-seca | 82.38477 |
Deltebre | 80.43166 |
Salou | 84.43118 |
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.↩︎