1 Preámbulo
Necesitamos construir 3 índices que representamos en las siguientes gráficas:
IVHCC
IDH
IBH
Podemos observar que el indicador madre de todos es el índice de desarrollo humano.
En éste trabajo abordaremos la construcción del índice del PIB del IDH pero a nivel comunal y sobre una serie de tiempo.
Nuestro objetivo es construir una tabla del siguiente tipo:
Tabla objetivo
Tenemos m(x), la tasa de mortalidad general de una comuna que se multiplica por la proporción de población que muere a cada edad y le adjuntamos una columna con el valor correspondiente de edad. Aquí no está el error porque la suma de la columna m(x) nos da la tasa de mortalidad que publica el gobierno de Chile, el que para Arica es de 5,3 cada 1000 habitantes.
<- read_xlsx("defunciones_comunas.xlsx")
def_comunas <- seq(1,21277,1)
fila <- cbind(def_comunas,fila)
def_comunas
<- data.frame(filter(def_comunas,grepl("AREA #",...2)))$fila
f_area <- data.frame(filter(def_comunas,grepl("Tabla vacía",...2)))$fila
vacio <- data.frame(filter(def_comunas,grepl("Total",...2)))$fila
f_total <- c(f_total,vacio)
f_total <- sort(f_total)
f_total length(f_total)
## [1] 347
Homologamos el formato de la tabla original para poder trabajar sobre ella
<- data.frame()
tabla_comunas for (i in 1:346) {#length(f_area)
<- def_comunas[c(f_area[i]:f_total[i]),2:3]
m_comunas $cod_com <- str_replace_all(paste0(m_comunas[1,1]),"AREA # ","")
m_comunas$comuna <- paste0(m_comunas[1,2])
m_comunascolnames(m_comunas) <- c("Edad","Casos","cod_com","comuna")
<- m_comunas[-c(1:3,nrow(m_comunas)),]
m_comunas <- rbind(tabla_comunas,m_comunas)
tabla_comunas
}$Casos <- as.numeric(tabla_comunas$Casos)
tabla_comunas<- tabla_comunas[,c(3,4,1,2)]
tabla_comunas $fila <- seq(1,nrow(tabla_comunas))
tabla_comunas# head(tabla_comunas)
2 x(x): Edad
Agregamos el registro de “año 0” sumando las defunciones que ocurrieron antes de cumplir un año. También agregamos como registro con valor de 0 en las edades en los que no hubo decesos para cada comuna.
<- unique(tabla_comunas$comuna)
comunas <- data.frame()
tabla2 for (i in comunas[1:346]) {
<- filter(tabla_comunas, comuna == i)
tabla <- filter(tabla_comunas, comuna == i)
suma if(nrow(filter(tabla, Edad == "1 año")) == 0){
else{
}
<- filter(tabla, Edad == "1 año")
tabla_1 $Edad <- "1 años"
tabla_1<- rbind(tabla_1,tabla)
tabla <- filter(tabla, Edad != "1 año")
tabla
}
<- filter(tabla, grepl("año",Edad))
tabla <- tabla[1,]
anio_0 $Edad <- "0 años"
anio_0$Casos <- sum(filter(suma, !grepl("año",Edad))[4])
anio_0<- rbind(anio_0,tabla)
tabla <- filter(tabla, !grepl("más",Edad))
tabla <- rbind(tabla2,tabla)
tabla2
}datatable(tabla2)
<- data.frame()
tabla3
for (j in comunas) {
<- filter(tabla2, comuna == j)
filtro
<- data.frame()
n_edades for (i in 0:104) {
<- paste(i," años")
seq_años <- rbind(n_edades,seq_años)
n_edades
}
names(n_edades)[1] <- "Edad"
= merge(x = n_edades, y = filtro, by = "Edad", all.x = TRUE)
tablaf <- mutate_all(tablaf, ~replace(., is.na(.), 0))
tablaf $comuna <- j
tablaf<- rbind(tabla3,tablaf)
tabla3
}<- tabla3
tabla_f # tabla3
for (i in 1:104) {
$tasa_m[i] <- (tabla_f$Casos[i]/sum(tabla_f$Casos))
tabla_f
}
<- data.frame(
tabla_de_muerte x = seq(0,104,1),
"l(x)" = round(0,0),
"m(x)" = tabla_f$tasa_m
) # head(tabla_de_muerte)
datatable(tabla_de_muerte)
3 l(x)
Paso siguiente es la construcción de la función de supervivencia. Empezamos con l(0) = 100000 siguiendo la convención.
$l.x.[1] <- 100000
tabla_de_muerte<- tabla_de_muerte$m.x.
mx for (j in 2:length(mx)) {
$l.x.[j] <- ceiling(tabla_de_muerte$l.x.[j-1]*exp(-tabla_de_muerte$m.x.[j-1]))
tabla_de_muerte
} head(tabla_de_muerte,5)
## x l.x. m.x.
## 1 0 100000 1.787344e-04
## 2 1 99983 9.407072e-06
## 3 2 99983 0.000000e+00
## 4 3 99983 2.822122e-05
## 5 4 99981 0.000000e+00
4 d(x)
Ahora calculamos el numero de muertes en la columna d(x).
$d.x. <- 0
tabla_de_muertefor (j in 1:105) {
$d.x.[j] <- tabla_de_muerte$l.x.[j]-tabla_de_muerte$l.x.[j+1]
tabla_de_muerte
}<- tabla_de_muerte[,c(1,2,4,3)]
tabla_de_muerte head(tabla_de_muerte,5)
## x l.x. d.x. m.x.
## 1 0 100000 17 1.787344e-04
## 2 1 99983 0 9.407072e-06
## 3 2 99983 0 0.000000e+00
## 4 3 99983 2 2.822122e-05
## 5 4 99981 0 0.000000e+00
5 q(x)
Calculemos la probabilidad de morir a la edad x.
$q.x. <- 0
tabla_de_muertefor (j in 1:105) {
# tabla_de_muerte$q.x.[j] <- tabla_de_muerte$d.x.[j]/tabla_de_muerte$l.x.[j]
$q.x.[j] <- 1- exp(-tabla_de_muerte$m.x.[j])
tabla_de_muerte
}<- tabla_de_muerte[,c(1,2,3,5,4)]
tabla_de_muerte head(tabla_de_muerte,5)
## x l.x. d.x. q.x. m.x.
## 1 0 100000 17 1.787184e-04 1.787344e-04
## 2 1 99983 0 9.407028e-06 9.407072e-06
## 3 2 99983 0 0.000000e+00 0.000000e+00
## 4 3 99983 2 2.822082e-05 2.822122e-05
## 5 4 99981 0 0.000000e+00 0.000000e+00
6 L(x)
El número de años-persona vividos entre las edades exactas x y x + 1.
$L.x. <- 0
tabla_de_muertefor (j in 1:105) {
$L.x.[j] <- (tabla_de_muerte$l.x.[j+1])+(0.5*tabla_de_muerte$d.x.[j] )
tabla_de_muerte
} head(tabla_de_muerte,5)
## x l.x. d.x. q.x. m.x. L.x.
## 1 0 100000 17 1.787184e-04 1.787344e-04 99991.5
## 2 1 99983 0 9.407028e-06 9.407072e-06 99983.0
## 3 2 99983 0 0.000000e+00 0.000000e+00 99983.0
## 4 3 99983 2 2.822082e-05 2.822122e-05 99982.0
## 5 4 99981 0 0.000000e+00 0.000000e+00 99981.0
7 T(x)
El número de años-persona vividos después de la edad exacta x.
$T.x. <- 0
tabla_de_muerte<- tabla_de_muerte[1:104,]
tabla_de_muerte for (j in 1:104) {
$T.x.[j] <- sum( tabla_de_muerte$L.x.[j:104] )
tabla_de_muerte
} head(tabla_de_muerte,5)
## x l.x. d.x. q.x. m.x. L.x. T.x.
## 1 0 100000 17 1.787184e-04 1.787344e-04 99991.5 10372836
## 2 1 99983 0 9.407028e-06 9.407072e-06 99983.0 10272845
## 3 2 99983 0 0.000000e+00 0.000000e+00 99983.0 10172862
## 4 3 99983 2 2.822082e-05 2.822122e-05 99982.0 10072879
## 5 4 99981 0 0.000000e+00 0.000000e+00 99981.0 9972897
8 e(x)
El número medio de años de vida que quedan a la edad exacta x.
$e.x. <- 0
tabla_de_muertefor (j in 1:104) {
$e.x.[j] <- tabla_de_muerte$T.x.[j]/tabla_de_muerte$l.x.[j]
tabla_de_muerte
}head(tabla_de_muerte,5)
## x l.x. d.x. q.x. m.x. L.x. T.x. e.x.
## 1 0 100000 17 1.787184e-04 1.787344e-04 99991.5 10372836 103.72836
## 2 1 99983 0 9.407028e-06 9.407072e-06 99983.0 10272845 102.74591
## 3 2 99983 0 0.000000e+00 0.000000e+00 99983.0 10172862 101.74591
## 4 3 99983 2 2.822082e-05 2.822122e-05 99982.0 10072879 100.74591
## 5 4 99981 0 0.000000e+00 0.000000e+00 99981.0 9972897 99.74792
9 Automatización
<- unique(tabla3$comuna)
comunas <- data.frame()
esp_d_vid <- function(i){
fn_esperanza <- filter(tabla3, comuna == comunas[i])
mortalidad for (j in 1:105) {
$tasa_m[j] <- (mortalidad$Casos[j]/sum(mortalidad$Casos))
mortalidad
}
<- data.frame(
tabla_de_muerte comuna = comunas[i],
x = seq(0,104,1),
"l(x)" = round(0,0),
"m(x)" = mortalidad$tasa_m
) $l.x.[1] <- 100000
tabla_de_muerte$l.x.[2] <- ceiling(tabla_de_muerte$l.x.[1]*exp(-tabla_de_muerte$m.x.[1]))
tabla_de_muerte<- tabla_de_muerte$m.x.
mx for (j in 3:length(mx)) {
$l.x.[j] <- ceiling(tabla_de_muerte$l.x.[j-1]*exp(-tabla_de_muerte$m.x.[j-1]))
tabla_de_muerte
}
$d.x. <- 0
tabla_de_muertefor (j in 1:105) {
$d.x.[j] <- tabla_de_muerte$l.x.[j]-tabla_de_muerte$l.x.[j+1]
tabla_de_muerte
}<- tabla_de_muerte[,c(1,2,3,5,4)]
tabla_de_muerte
$q.x. <- 0
tabla_de_muertefor (j in 1:105) {
# tabla_de_muerte$q.x.[j] <- (tabla_de_muerte$d.x.[j]/tabla_de_muerte$l.x.[j])
$q.x.[j] <- 1- exp(-tabla_de_muerte$m.x.[j])
tabla_de_muerte
}<- tabla_de_muerte[,c(1,2,3,4,6,5)]
tabla_de_muerte
$L.x. <- 0
tabla_de_muertefor (j in 1:105) {
$L.x.[j] <- tabla_de_muerte$l.x.[j+1]+(0.5*tabla_de_muerte$d.x.[j] )
tabla_de_muerte
}
$T.x. <- 0
tabla_de_muerte<- tabla_de_muerte[1:104,]
tabla_de_muerte for (j in 1:104) {
$T.x.[j] <- sum( tabla_de_muerte$L.x.[j:104] )
tabla_de_muerte
}
$e.x. <- 0
tabla_de_muertefor (j in 1:104) {
$e.x.[j] <- tabla_de_muerte$T.x.[j]/tabla_de_muerte$l.x.[j]
tabla_de_muerte
}<<- tabla_de_muerte
tabla_de_muerte2
}
for (i in 1:339) {
fn_esperanza(i)
<- rbind(esp_d_vid,tabla_de_muerte2)
esp_d_vid }
10 Esperanza de vida al nacer
# datatable(filter(esp_d_vid, x == 0 ), extensions = 'Buttons',
# options = list(dom = 'Bfrtip',
# buttons = list(list(extend = 'collection',
# buttons = list(
# list(extend='copy'),
# list(extend='excel',
# filename = 'tabla'),
# list(extend='pdf',
# filename= 'tabla')),
# text = 'Descargar'))))
<- filter(esp_d_vid, x == 0)
esp_d_vida <- esp_d_vida[!is.na(esp_d_vida[,c("e.x.")]),]
esp_d_vida datatable(filter(esp_d_vid, x == 0 ), extensions = 'Buttons',
options = list(dom = 'Bfrtip',
buttons = list(list(extend = 'collection',
buttons = list(
list(extend='copy'),
list(extend='excel',
filename = 'tabla'),
list(extend='pdf',
filename= 'tabla')),
text = 'Descargar'))))
$IEV <- (esp_d_vida$e.x. - 20)/(85-20)
esp_d_vida<- esp_d_vida[,c("comuna","IEV")]
esp_d_vida saveRDS(esp_d_vida,"esp_d_vida_0.rds")
11 Cálculo del IEV
datatable(esp_d_vida)