CovidArg
Para este informe, seleccioné estas dos provincias por ser colindantes, tener una estructura demográfica similar (no así su superficie territorial) y pertencer a la misma región (NOA). La población para el censo 2010, era de 1.214.441 (Salta) y 1.448.188 (Tucumán). En indagaciones previas, supe que Tucumán tiene una llamativa tasa de incidencia por COVID-19 (cantidad de casos x población), 5.775 casos cada 100mil habitantes, mientras que Salta 2.314 por 100mil. Tucumán duplica a Salta en este indicador. Indicadores COVID19 - Ministerio de Salud de la Prov. de Tucumán
En este sentido, abordaré un análisis exploratorio y descriptivo de los datos oficiales, específicamente en las variables demográficas, de fallecimiento y una característica puntual: el origen del financiamiento en cuanto al Sistema de Salud (Público o privado) asociados a los casos.
Emepzamos…
library(tidyverse)
library(ggplot2)
library(sf)
library(epiDisplay)
library(viridis)
options(scipen = 999)
casos_covid <- read.csv("entradas/Covid19Casos.csv", encoding = "UTF-8")
# Revisamos la base importada
# dim(casos_covid)
# str(casos_covid)
# summary(casos_covid)
1.1. Renombrar columnas
casos_covid <- casos_covid %>%
rename(provincia = residencia_provincia_nombre,
departamento= residencia_departamento_nombre,
provincia_id= residencia_provincia_id,
departamento_id= residencia_departamento_id)
head(casos_covid)
## id_evento_caso sexo edad edad_años_meses residencia_pais_nombre provincia
## 1 1000000 M 54 Años Argentina CABA
## 2 10000000 F 52 Años Argentina CABA
## 3 10000001 F 22 Años Argentina Buenos Aires
## 4 10000002 F 44 Años Argentina Buenos Aires
## 5 10000003 F 33 Años Argentina CABA
## 6 10000004 F 32 Años Argentina CABA
## departamento carga_provincia_nombre fecha_inicio_sintomas fecha_apertura
## 1 SIN ESPECIFICAR Buenos Aires 2020-06-01
## 2 SIN ESPECIFICAR CABA 2021-04-08
## 3 Lomas de Zamora Buenos Aires 2021-04-05 2021-04-08
## 4 La Matanza CABA 2021-04-08
## 5 COMUNA 01 CABA 2021-04-08
## 6 COMUNA 08 CABA 2021-04-08
## sepi_apertura fecha_internacion cuidado_intensivo fecha_cui_intensivo
## 1 23 NO
## 2 14 NO
## 3 14 NO
## 4 14 NO
## 5 14 NO
## 6 14 NO
## fallecido fecha_fallecimiento asistencia_respiratoria_mecanica
## 1 NO NO
## 2 NO NO
## 3 NO NO
## 4 NO NO
## 5 NO NO
## 6 NO NO
## carga_provincia_id origen_financiamiento clasificacion
## 1 6 Privado Caso Descartado
## 2 2 Público Caso Descartado
## 3 6 Público Caso Descartado
## 4 2 Público Caso Descartado
## 5 2 Público Caso Descartado
## 6 2 Público Caso Descartado
## clasificacion_resumen provincia_id fecha_diagnostico departamento_id
## 1 Descartado 2 2020-06-09 0
## 2 Descartado 2 2021-04-08 0
## 3 Descartado 6 2021-04-08 490
## 4 Descartado 6 2021-04-06 427
## 5 Descartado 2 2021-04-08 1
## 6 Descartado 2 2021-04-06 8
## ultima_actualizacion
## 1 2021-07-07
## 2 2021-07-07
## 3 2021-07-07
## 4 2021-07-07
## 5 2021-07-07
## 6 2021-07-07
casos_covid_ST <- casos_covid %>%
filter(provincia %in%c("Salta", "Tucumán", "Tucuman")) %>%
dplyr::select(-"carga_provincia_nombre", -"sepi_apertura", -"carga_provincia_id")
# Resumen
summary(casos_covid_ST)
## id_evento_caso sexo edad edad_años_meses
## Min. : 744711 Length:717945 Min. : 0.0 Length:717945
## 1st Qu.: 4564315 Class :character 1st Qu.: 26.0 Class :character
## Median : 9584766 Mode :character Median : 36.0 Mode :character
## Mean : 9219483 Mean : 38.3
## 3rd Qu.:13445764 3rd Qu.: 49.0
## Max. :16264038 Max. :221.0
## NA's :425
## residencia_pais_nombre provincia departamento
## Length:717945 Length:717945 Length:717945
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
##
##
##
##
## fecha_inicio_sintomas fecha_apertura fecha_internacion cuidado_intensivo
## Length:717945 Length:717945 Length:717945 Length:717945
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## fecha_cui_intensivo fallecido fecha_fallecimiento
## Length:717945 Length:717945 Length:717945
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
##
##
##
##
## asistencia_respiratoria_mecanica origen_financiamiento clasificacion
## Length:717945 Length:717945 Length:717945
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
##
##
##
##
## clasificacion_resumen provincia_id fecha_diagnostico departamento_id
## Length:717945 Min. :66.00 Length:717945 Min. : 0.00
## Class :character 1st Qu.:66.00 Class :character 1st Qu.: 28.00
## Mode :character Median :90.00 Mode :character Median : 84.00
## Mean :83.74 Mean : 67.16
## 3rd Qu.:90.00 3rd Qu.: 84.00
## Max. :90.00 Max. :161.00
##
## ultima_actualizacion
## Length:717945
## Class :character
## Mode :character
##
##
##
##
head(casos_covid_ST)
## id_evento_caso sexo edad edad_años_meses residencia_pais_nombre provincia
## 1 10000089 M 52 Años Argentina Salta
## 2 10000256 M 29 Años Argentina Tucumán
## 3 1000033 M 2 Años Argentina Tucumán
## 4 10000364 M 41 Años Argentina Tucumán
## 5 10000448 M 23 Años Argentina Salta
## 6 10000489 F 26 Años SIN ESPECIFICAR Tucumán
## departamento fecha_inicio_sintomas fecha_apertura fecha_internacion
## 1 Capital 2021-04-08 2021-04-08
## 2 Tafí Viejo 2021-04-08
## 3 Tafí Viejo 2020-06-01
## 4 Capital 2021-04-08
## 5 Capital 2021-04-04 2021-04-08
## 6 Tafí Viejo 2021-04-08
## cuidado_intensivo fecha_cui_intensivo fallecido fecha_fallecimiento
## 1 NO NO
## 2 NO NO
## 3 NO NO
## 4 NO NO
## 5 NO NO
## 6 NO NO
## asistencia_respiratoria_mecanica origen_financiamiento
## 1 NO Público
## 2 NO Público
## 3 NO Público
## 4 NO Público
## 5 NO Público
## 6 NO Público
## clasificacion
## 1 Caso con resultado negativo-no conclusivo - No activo
## 2 Caso Descartado
## 3 Caso Descartado
## 4 Caso con resultado negativo-no conclusivo - No activo
## 5 Caso confirmado por laboratorio - No activo (por tiempo de evolución)
## 6 Caso confirmado por laboratorio - No activo (por tiempo de evolución)
## clasificacion_resumen provincia_id fecha_diagnostico departamento_id
## 1 Sospechoso 66 2021-04-08 28
## 2 Descartado 90 2021-04-06 105
## 3 Descartado 90 2020-06-06 105
## 4 Sospechoso 90 2021-04-07 84
## 5 Confirmado 66 2021-04-08 28
## 6 Confirmado 90 2021-04-07 105
## ultima_actualizacion
## 1 2021-07-07
## 2 2021-07-07
## 3 2021-07-07
## 4 2021-07-07
## 5 2021-07-07
## 6 2021-07-07
Observamos que existe ruido en los datos. Las edades máximas de 221 años o null, IDs erróneos, etc. Tendremos que estar atentos a estos detalles para futuros análisis. Por los momentos, generaremos vistas totalizadas (o sumarizadas), para entender cómo se distribuyen los casos en ambas provincias colindantes.
casos_covid_ST %>%
group_by(provincia) %>%
summarise(n=n()) %>%
mutate(proporcion = round((n/sum(n)*100),1))
## # A tibble: 2 x 3
## provincia n proporcion
## <chr> <int> <dbl>
## 1 Salta 187235 26.1
## 2 Tucumán 530710 73.9
Mayor cantidad de casos en Tucumán, con un 74%
casos_covid_ST %>%
dplyr::select(provincia, fallecido) %>%
group_by(provincia, fallecido) %>%
summarise(n=n()) %>%
mutate(prop_prov = round((n/sum(n)*100),1))
## `summarise()` has grouped output by 'provincia'. You can override using the `.groups` argument.
## # A tibble: 4 x 4
## # Groups: provincia [2]
## provincia fallecido n prop_prov
## <chr> <chr> <int> <dbl>
## 1 Salta NO 185079 98.8
## 2 Salta SI 2156 1.2
## 3 Tucumán NO 528182 99.5
## 4 Tucumán SI 2528 0.5
Sin embargo, Salta tiene mayor porcentaje de fallecimientos con respecto a la cantidad de casos totales de la provincia (1,2%), doblando la proporción con respecto a Tucumán (0.5%)
Exploremos aspectos demográficos disponibles…
casos_covid_ST_edades <- casos_covid_ST %>%
dplyr::select(provincia, edad) %>%
filter(edad <= 110 & edad >=0) %>% # filtramos de una vez datos ruidosos. Establezco a priori 110 como edad máxima
mutate(rango=case_when(edad %in%c(0:19)~ "0 a 19",
edad %in% c(20:39) ~ "20 a 39",
edad %in% c(40:59) ~ "40 a 59",
edad %in% c(60:79) ~ "60 a 79",
edad >=80 ~ "80+")) %>%
group_by(provincia, rango) %>%
summarise(n=n()) %>%
mutate(prop_prov = round((n/sum(n)*100),1)) %>%
ungroup()
## `summarise()` has grouped output by 'provincia'. You can override using the `.groups` argument.
casos_covid_ST_edades
## # A tibble: 10 x 4
## provincia rango n prop_prov
## <chr> <chr> <int> <dbl>
## 1 Salta 0 a 19 18991 10.2
## 2 Salta 20 a 39 83137 44.5
## 3 Salta 40 a 59 62018 33.2
## 4 Salta 60 a 79 19445 10.4
## 5 Salta 80+ 3311 1.8
## 6 Tucumán 0 a 19 59889 11.3
## 7 Tucumán 20 a 39 244481 46.1
## 8 Tucumán 40 a 59 162753 30.7
## 9 Tucumán 60 a 79 56346 10.6
## 10 Tucumán 80+ 7133 1.3
El comportamiento de casos es mas o menos homogéneo en ambas provincias, conviene hacer una visualización para mejorar la comprensión
ggplot(casos_covid_ST_edades,
aes(x=rango, y=prop_prov))+
geom_col(fill="lightblue")+
labs(title = "Cantidad de casos por provincia",
subtitle = "Distribución por rangos etáreos",
x= "Rango etáreo", y= "% de casos")+
geom_text(aes(label = n/1000),
hjust = 0.5,
vjust=1,
size=3)+
facet_grid(facets = "provincia")+
theme_light()
Observamos que si bien la cantidad de casos en Tucumán triplica a la de Salta, el rango etáreo de los casos totales tiene un comportamiento más bien similar entre ambas provincias, predominando el grupo de 20 a 39. Ahora, observemos el comportamiento en el caso de los fallecidos (y que a priori sabemos que afecta a las edades más avanzadas)
casos_covid_ST_fallecidos <- casos_covid_ST %>%
dplyr::select(provincia, edad, fallecido) %>%
filter(edad <= 110 & edad >=0) %>%
filter(fallecido=="SI") %>%
mutate(rango=case_when(edad %in%c(0:19)~ "0 a 19",
edad %in% c(20:39) ~ "20 a 39",
edad %in% c(40:59) ~ "40 a 59",
edad %in% c(60:79) ~ "60 a 79",
edad >=80 ~ "80+")) %>%
group_by(provincia, rango) %>%
summarise(n=n()) %>%
mutate(prop_prov = round((n/sum(n)*100),1)) %>%
ungroup()
## `summarise()` has grouped output by 'provincia'. You can override using the `.groups` argument.
casos_covid_ST_fallecidos
## # A tibble: 10 x 4
## provincia rango n prop_prov
## <chr> <chr> <int> <dbl>
## 1 Salta 0 a 19 18 0.8
## 2 Salta 20 a 39 90 4.2
## 3 Salta 40 a 59 461 21.4
## 4 Salta 60 a 79 1097 51
## 5 Salta 80+ 487 22.6
## 6 Tucumán 0 a 19 18 0.7
## 7 Tucumán 20 a 39 133 5.3
## 8 Tucumán 40 a 59 654 25.9
## 9 Tucumán 60 a 79 1318 52.1
## 10 Tucumán 80+ 405 16
ggplot(casos_covid_ST_fallecidos,
aes(x=rango, y=prop_prov))+
geom_col(fill="lightcoral")+
labs(title = "Cantidad de fallecidos por provincia",
subtitle = "Distribución por rangos etáreos",
x= "Rango etáreo", y= "% de fallecidos")+
geom_text(aes(label = n),
hjust = 0.5,
vjust=-0.1,
size=3)+
facet_grid(facets = "provincia")+
theme_light()
Evidentemente, las víctimas que finalmente fallecen, pertenecen a edades más avanzadas, y si bien hay un comportamiento similar entre ambas provincias, se observa un ligero incremento proporcional en el grupo +80 años en el caso de Salta. Finalmente, el grupo etáreo más afectado es el de 60 a 79 años.
casos_covid_ST %>%
filter(clasificacion_resumen=="Confirmado") %>%
group_by(provincia, fallecido) %>%
summarise(n=n()) %>%
mutate(prop=n/sum(n)*100)
## `summarise()` has grouped output by 'provincia'. You can override using the `.groups` argument.
## # A tibble: 4 x 4
## # Groups: provincia [2]
## provincia fallecido n prop
## <chr> <chr> <int> <dbl>
## 1 Salta NO 63089 97.2
## 2 Salta SI 1806 2.78
## 3 Tucumán NO 162351 98.6
## 4 Tucumán SI 2345 1.42
A los efectos de este apartado, incorporé la variable “clasificación resumen” para calcular la mortalidad por COVID19 únicamente en los casos que fueron Confirmados por el sistema de salud. Este criterio no será tomado en cuenta para el resto de los análisis.
Hecha la aclaración, podemos observar que Salta duplica la tasa de mortalidad con respecto a Tucumán.
casos_covid_ST %>%
filter(clasificacion_resumen=="Confirmado") %>%
group_by(provincia, fallecido) %>%
summarise(n=n()) %>%
mutate(prop=n/sum(n)*100) %>%
ungroup() %>%
ggplot(aes(x=provincia, y=prop, fill=fallecido))+
geom_bar(stat="identity")+
scale_fill_manual(values=c("grey69", "lightcoral"))+
scale_y_log10() # utilizamos la escala Logaritmica en el eje a los efectos de la visualización
## `summarise()` has grouped output by 'provincia'. You can override using the `.groups` argument.
El resultado se observa en el gráfico anterior: Salta tiene una tasa de mortalidad mayor que conviene explorar en investigaciones específicas. Mientras tanto…
Nos valdremos de una librería que genera pirámides poblaciones muy facilmente 😉 Desagregaré aún más los rangos etáreos
casos_covid_ST_sexo <- casos_covid_ST %>%
filter(fallecido=="SI") %>%
filter(sexo %in% c("F","M")) %>%
filter(edad <= 110 & edad >=0)
pyramid(casos_covid_ST_sexo$edad,
casos_covid_ST_sexo$sexo,
binwidth = 5, decimal = 2,col.gender = c("gold", "seagreen3"),
main= "COVID-19: Fallecimiento por edad y sexo | Prov: Salta y Tucumán")
Aparentemente, el COVID-19 tienen mayor impacto (en el fallecimiento) sobre Hombres que sobre Mujeres, al menos para las provincias estudiadas, duplicando a la cantidad de mujeres en la mayoría de los rangos de edades.
casos_covid_ST_sistema <- casos_covid_ST %>%
filter(edad <= 110 & edad >=0) %>%
group_by(provincia, origen_financiamiento, fallecido) %>%
summarise(n=n()) %>%
mutate(prop=n/sum(n)*100)
## `summarise()` has grouped output by 'provincia', 'origen_financiamiento'. You can override using the `.groups` argument.
casos_covid_ST_sistema
## # A tibble: 8 x 5
## # Groups: provincia, origen_financiamiento [4]
## provincia origen_financiamiento fallecido n prop
## <chr> <chr> <chr> <int> <dbl>
## 1 Salta Privado NO 64421 98.9
## 2 Salta Privado SI 702 1.08
## 3 Salta Público NO 120328 98.8
## 4 Salta Público SI 1451 1.19
## 5 Tucumán Privado NO 57692 99.4
## 6 Tucumán Privado SI 336 0.579
## 7 Tucumán Público NO 470382 99.5
## 8 Tucumán Público SI 2192 0.464
Explorar visualmente los datos
casos_covid_ST_sistema %>%
filter(fallecido=="SI") %>%
ggplot(aes(x=origen_financiamiento, y=n, fill=origen_financiamiento))+
geom_col()+
labs(title = "Fallecimientos por COVID-19 en Salta y Tucumán",
subtitle = "Números absolutos, según sistema de salud",
x="",
y= "Cantidad de casos",
fill="Sistema de Salud")+
facet_wrap(facets = "provincia")
casos_covid_ST_sistema %>%
filter(fallecido=="SI") %>%
ggplot(aes(x=origen_financiamiento, y=prop, fill=origen_financiamiento))+
geom_col()+
labs(title = "Fallecimientos por COVID-19 en Salta y Tucumán",
subtitle = "Proporcionalmente, Según sistema de salud",
x="",
y= "Cantidad de casos",
fill="Sistema de Salud")+
facet_wrap(facets = "provincia")
En números absolutos, en lógico pensar que hay mayor caso de fallecimientos en el sistema público que en el privado, puesto que es mayor la cantidad de personas que acceden al sistema público de salud. En todo caso, nos sirve esta medida absoluta para destacar la diferencia entre las provincias seleccionadas, donde se observa la relación 1:2 en Salta (por cada 1 caso en el privado, existen 2 en el público), mientras que en Tucumán la relación es 1:6 (por cada 1 caso en el privado, existen 6 en el público). A futuro convendría pensar la cuestión del acceso a salud en ambas provincias.
Ahora, en términos proporcionales y en relación con todo el sistema de salud a lo interno de cada provincia, no se evidencia, al menos visualmente, una relación entre el fallecimiento y el sistema de salud; en Salta, el fallecimiento es ligeramente mayor en el sistema público, mientras que en Tucumán, al revés.
casos_covid_ST_fecha <- casos_covid_ST %>%
filter(edad <= 110 & edad >=0) %>%
filter(fallecido=="SI") %>%
mutate(aniomes=substr(fecha_apertura,1,7)) %>%
group_by(provincia, aniomes, origen_financiamiento) %>%
summarise(n=n())
## `summarise()` has grouped output by 'provincia', 'aniomes'. You can override using the `.groups` argument.
casos_covid_ST_fecha
## # A tibble: 60 x 4
## # Groups: provincia, aniomes [33]
## provincia aniomes origen_financiamiento n
## <chr> <chr> <chr> <int>
## 1 Salta 2020-04 Público 6
## 2 Salta 2020-05 Privado 2
## 3 Salta 2020-05 Público 2
## 4 Salta 2020-06 Público 3
## 5 Salta 2020-07 Privado 4
## 6 Salta 2020-07 Público 22
## 7 Salta 2020-08 Privado 49
## 8 Salta 2020-08 Público 113
## 9 Salta 2020-09 Privado 193
## 10 Salta 2020-09 Público 391
## # ... with 50 more rows
modelo_exp_multiple <- lm(n ~ origen_financiamiento + provincia, data = casos_covid_ST_fecha)
summary(modelo_exp_multiple)
##
## Call:
## lm(formula = n ~ origen_financiamiento + provincia, data = casos_covid_ST_fecha)
##
## Residuals:
## Min 1Q Median 3Q Max
## -112.30 -47.55 -22.88 15.99 472.70
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 33.58 23.99 1.399 0.1671
## origen_financiamientoPúblico 71.61 27.18 2.634 0.0108 *
## provinciaTucumán 10.11 27.05 0.374 0.7099
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 104.7 on 57 degrees of freedom
## Multiple R-squared: 0.1115, Adjusted R-squared: 0.08032
## F-statistic: 3.576 on 2 and 57 DF, p-value: 0.03442
En el modelo de regresión anterior, observamos que las variables no están relacionadas significativamente. Esto quiere decir: la Provincia no explica los fallecimientos ni se correlaciona con el sistema u origen de financiamiento. Sin embargo, el Sistema Público tiene alguna probabilidad (pvalue = 0.01) de explicar el número de fallecimentos, en estas dos provincias al menos.
olas <- casos_covid_ST %>%
dplyr::select(provincia, edad, fallecido, fecha_fallecimiento) %>%
filter(fallecido == "SI") %>%
group_by(provincia, fecha_fallecimiento, edad) %>%
summarise(n = n())
## `summarise()` has grouped output by 'provincia', 'fecha_fallecimiento'. You can override using the `.groups` argument.
olas$fecha_fallecimiento <- as.Date(olas$fecha_fallecimiento)
ggplot(olas) +
geom_point(aes(y=edad, x=fecha_fallecimiento, color=n),
size=1, alpha=0.6) +
geom_hline(yintercept = mean(olas$edad, na.rm = T), color="gray", alpha=0.5)+
scale_x_date(date_breaks = "month") +
scale_color_viridis(direction=-1) +
theme_classic()+
theme(axis.text.x = element_text(angle = 45, hjust=1)) +
labs(title="COVID-19: Total de fallecidos diarios por edad",
subtitle = "Casos registrados en las provincias Salta y Tucumán",
x = "Fecha de fallecimiento",
y = "Edad",
color="Total")+
facet_grid(facets = "provincia")
## Warning: Removed 2 rows containing missing values (geom_point).
casos_covid_ST %>%
dplyr::filter(fallecido=="SI") %>%
group_by(provincia) %>%
summarise(n=n(), prom=mean(edad, na.rm=T))
## # A tibble: 2 x 3
## provincia n prom
## <chr> <int> <dbl>
## 1 Salta 2156 67.4
## 2 Tucumán 2528 64.8
El comportamiento de las llamadas olas ha sido similar en ambas provincias, al menos visualmente se puede percibir que Tucumán tuvo un menor “gap” entre la primera y la segunda, siendo que ambas provincias tienen un número de fallecimientos similar (en números absolutos). Las edades promedio de fallecimiento son 64 y 67 respectivamente.
En próximas entregas prácticas, exploraré la distribución de los casos y de otros indicadores sanitarios (vacunación, por ejemplo) haciendo uso de mapas y agrupación por departamentos.