forked from epiverse-trace/sivirep
-
Notifications
You must be signed in to change notification settings - Fork 0
/
README.Rmd
342 lines (219 loc) · 17.5 KB
/
README.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
---
output: github_document
editor_options:
markdown:
wrap: 72
---
<!-- README.md is generated from README.Rmd. Please edit that file -->
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "man/figures/",
include = TRUE,
error = FALSE,
warning = FALSE,
message = FALSE
)
```
## *sivirep*: Generación automatizada de reportes a partir de bases de datos de vigilancia epidemiológica <img src="man/figures/logo.svg" align="right" width="120"/>
<!-- badges: start -->
[![License:
MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![R-CMD-check](https://github.com/epiverse-trace/sivirep/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/epiverse-trace/sivirep/actions/workflows/R-CMD-check.yaml)
[![Codecov test
coverage](https://codecov.io/gh/epiverse-trace/readepi/branch/main/graph/badge.svg)](https://app.codecov.io/gh/epiverse-trace/readepi?branch=main)
[![lifecycle-maturing](https://raw.githubusercontent.com/reconverse/reconverse.github.io/master/images/badge-maturing.svg)](https://www.reconverse.org/lifecycle.html#maturing)
<!-- badges: end -->
La versión actual de *sivirep* 0.0.2 proporciona funciones para la manipulación de datos y la generación de reportes automatizados basados en las bases de datos individualizadas de casos de
[SIVIGILA](https://www.ins.gov.co/Direcciones/Vigilancia/Paginas/SIVIGILA.aspx),
que es el sistema oficial de vigilancia epidemiológica de Colombia.
## Motivación
América Latina ha progresado en la calidad de sus sistemas de notificación y vigilancia epidemiológica. En particular, Colombia ha mejorado a lo largo de los años la calidad, la accesibilidad y la transparencia de su sistema oficial de vigilancia epidemiológica, [SIVIGILA](https://www.ins.gov.co/Direcciones/Vigilancia/Paginas/SIVIGILA.aspx). Este sistema está regulado por el [Instituto Nacional de Salud](https://www.ins.gov.co) de Colombia y es operado por miles de trabajadores de la salud en las secretarías de salud locales, hospitales y unidades primarias generadoras de datos.
Sin embargo, todavía existen desafíos, especialmente a nivel local, en cuanto a la oportunidad y la calidad del análisis epidemiológico y de los informes epidemiológicos. Estas tareas pueden requerir una gran cantidad de trabajo manual debido a limitaciones en el entrenamiento para el análisis de datos, el tiempo que se requiere invertir, la tecnología y la calidad del acceso a internet en algunas regiones de Colombia.
El objetivo de `sivirep` es proporcionar un conjunto de herramientas para:
1) Descargar, preprocesar y preparar los datos de SIVIGILA para su posterior análisis.
2) Generar informes epidemiológicos automatizados adaptables al contexto.
3) Proporcionar retroalimentación sobre el sistema de vigilancia al proveedor de la fuente de datos.
## Potenciales usuarios
- Profesionales de salud pública y de epidemiología de campo que utilizan la fuente de datos de SIVIGILA a nivel local.
- Estudiantes del área de la salud y epidemiología.
- Investigadores y analistas de datos a nivel nacional e internacional.
## Instalación
Puedes instalar la versión de desarrollo de `sivirep` desde GitHub con el siguiente comando:
```{r}
# install.packages("remotes")
# remotes::install_github("epiverse-trace/sivirep")
library(sivirep)
```
## Inicio rápido
Puedes revisar las enfermedades y los años disponibles de forma libre utilizando:
```{r}
lista_eventos <- list_events()
knitr::kable(lista_eventos)
```
## Versiones futuras
Las versiones futuras de `sivirep` podrían incluir:
- Interacción con otras fuentes de datos en Colombia.
- Otros sistemas de vigilancia epidemiológica en América Latina.
## Contribuciones
Las contribuciones son bienvenidas via [pull requests](https://github.com/epiverse-trace/sivirep/pulls).
Los contribuyentes al paquete incluyen:
- [Geraldine Gómez-Millán](https://github.com/GeraldineGomez) (author)
- [Zulma M. Cucunubá](https://github.com/zmcucunuba) (author)
- [Hugo Gruson](https://github.com/Bisaloo) (contributor)
- Laura Gómez-Bermeo (contributor to documentation)
- Miguel Gámez (contributor)
## Código de conducta
Por favor, ten en cuenta que el proyecto `sivirep` se publica con un
[Código de Conducta para Contribuyentes](https://contributor-covenant.org/version/2/0/CODE_OF_CONDUCT.html). Al contribuir a este proyecto, aceptas cumplir con sus términos.
## Comenzar
### Para reportes automatizados
Después de la instalación de `sivirep`, puedes comenzar importando el paquete a través del siguiente comando:
```{r}
library(sivirep)
```
Ante de iniciar con el reporte automatizado, revisa la lista de enfermedades disponibles para hacer un reporte con `sivirep` en:
```{r results = 'hide'}
list_events()
```
Actualmente, `sivirep` provee una plantilla de reporte llamada `Reporte Básico {sivirep}`, la cual contiene seis secciones y recibe los siguientes parámetros de entrada: el nombre de la enfermedad, el año, el nombre de departamento (opcional) y nombre del municipio (opcional) para descargar los datos de la fuente de SIVIGILA.
Para hacer uso de la plantilla del reporte se deben seguir los siguientes pasos:
1. En RStudio hacer click *'File/New File/R'* Markdown:
![](man/figures/file_rmarkdown.png){.rmarkdown-img align="center" style="margin-left: 2.8em; margin-top: 0.8em; margin-bottom: 0.8em;"width="560"}
2. Selecciona la opción del panel izquierdo: *'From Template'*, después selecciona el template del reporte llamado `Reporte Básico {sivirep}`, indica el nombre que deseas para el reporte (i.e. Reporte_Laura), la ubicación donde deseas guardarlo y presiona *'Ok'*.
![](man/figures/reporte_basico.png){.rmarkdown-img align="center" style="margin-left: 2.8em; margin-top: 0.8em; margin-bottom: 0.8em;" width="550"}
3. A continuación, podrás seleccionar el nombre de la enfermedad, el año, el departamento (opcional) y el municipio (opcional) del reporte. Esta acción descargará los datos deseados y también proporcionará la plantilla en un archivo R Markdown (.Rmd). Para esto, es importante encontrar el botón *'Knit'*, desplegar las opciones y seleccionar *'Knit with parameters'*.
![](man/figures/button_knit.png){.rmarkdown-img align="center" style="margin-left: 2.8em; margin-top: 0.8em; margin-bottom: 0.8em;" width="560"}
4. Espera unos segundos mientras el informe se genera en un archivo PDF.
5. Puedes agregar, editar, eliminar y personalizar las secciones del reporte en el archivo R Markdown generado anteriormente.
![](man/figures/editable_rmarkdown.png){.rmarkdown-img align="center" style="margin-left: 2.8em; margin-top: 0.8em; margin-bottom: 0.8em;" width="560"}
Para obtener más detalles sobre plantillas y reportes genéricos de R Markdown, por favor consulta [rmarkdown
templates](https://rstudio.github.io/rstudio-extensions/rmarkdown_templates.html).
## Para análisis o reportes personalizados
Esta sección proporciona un conjunto básico de instrucciones para usar `sivirep`
0.0.2 si:
- Ya has producido un archivo .Rmd y deseas editar un reporte.
- Deseas realizar análisis personalizados sin un archivo .Rmd.
### 1. Importación de datos de SIVIGILA
La fuente de SIVIGILA proporciona los datos de la lista de casos históricos hasta el último año epidemiológico cerrado. El cierre de un año epidemiológico generalmente ocurre en abril del siguiente año (por ejemplo, si estás utilizando `sivirep` en marzo de 2023, es posible que puedas acceder a los datos históricos hasta diciembre de 2021) para la mayoría de las enfermedades, con algunas excepciones.
Por favor, verifica las enfermedades y años disponibles utilizando:
```{r results = 'hide'}
lista_eventos <- list_events()
```
Una vez que hayas decidido la enfermedad y el año de la cual deseas obtener la información, `import_data_event` es la función que permite la importación de datos desde la fuente de SIVIGILA utilizando un formato parametrizado basado en la enfermedad y el año.
```{r}
data_event <- import_data_event(year = 2020,
nombre_event = "dengue")
```
##### 💡 Tip 1 - Evita retrasos en el tiempo al importar los datos
- `sivirep` 0.0.2 está diseñado para ayudar con el acceso a la fuente de SIVIGILA. Este proceso de descarga de información puede tomar unos minutos dependiendo del tamaño del conjunto de datos. Para evitar descargar los mismos datos repetidamente, puedes utilizar `cache = TRUE` en la función `import_data_event`. Esta opción está configurada de forma predeterminada.
### 2. Limpieza de datos de SIVIGILA
Los datos de SIVIGILA son una fuente de información oficial altamente confiable, con certificación ISO de calidad de datos. Sin embargo, a veces puede haber algunos valores atípicos en los datos que requieran una limpieza adicional.
`sivirep` proporciona una función genérica llamada `limpiar_data_sivigila` que envuelve diversas tareas para identificar y corregir errores, inconsistencias y discrepancias en los conjuntos de datos con el fin de mejorar su calidad y precisión. Este proceso puede incluir la eliminación de duplicados, la corrección de errores tipográficos, el reemplazo de valores faltantes y la validación de datos, entre otras tareas, como eliminar fechas improbables, limpiar códigos de geolocalización y estandarizar los nombres de las columnas y las categorías de edad.
```{r}
data_event_limp <- limpiar_data_sivigila(data_event = data_event, year = 2020)
```
Las funciones de limpieza dentro de `limpiar_data_sivigila` se han recopilado y creado en base a la experiencia de epidemiólogos de campo. Estas pueden incluir funciones internas como:
- `limpiar_encabezado`: función que limpia y estandariza los nombres de las columnas de los datos de lista de casos de SIVIGILA basándose en el diccionario de datos de SIVIGILA.
- `limpiar_edad_event`: función que limpia las edades de los datos de lista de casos de SIVIGILA.
- `format_fecha`: función que da un formato específico a una fecha.
- `limpiar_fecha_event`: función que limpia las fechas de los datos de enfermedades.
- `limpiar_cods_dpto`: función que limpia los códigos geográficos de departamentos en los datos de enfermedades.
El usuario puede utilizar estas funciones individualmente o simplemente utilizar la función envolvente genérica `limpiar_data_sivigila`.
### 3. Filtrar casos
`sivirep` proporciona una función que permite filtrar los datos de enfermedades por departamento o nombre del municipio llamada `geo_filtro`. Esto permite al usuario crear un informe a nivel subnacional, seleccionando casos específicos basados en la ubicación geográfica.
```{r}
data_event_filtrada <- geo_filtro(data_event = data_event_limp,
nombre_dpto = "Antioquia")
```
### 4. Distribución temporal de casos
En `sivirep`, la distribución temporal de casos se define por las variables de fecha de inicio de síntomas y fecha de notificación. Para cada una de estas variables, existen funciones especializadas para agrupar los datos y generar los gráficos.
#### 4.1. Agrupar los datos por fecha de inicio de síntomas en la escala temporal deseada
Para generar la distribución de casos por fecha de inicio de síntomas, es necesario agrupar los datos por estas variables. `sivirep` proporciona una función que permite esta agrupación llamada `agrupar_fecha_inisintomas`, en la cual puedes especificar la unidad de tiempo para agrupar estas fechas. Los valores permitidos para este parámetro son: día y mes.
```{r}
casos_ini_sintomas_dia <- agrupar_fecha_inisintomas(data_event =
data_event_limp,
tipo = "day")
casos_ini_sintomas_mes <- agrupar_fecha_inisintomas(data_event =
data_event_limp,
tipo = "month")
```
##### 💡 Tip 2 - Obtén los primeros n meses con más casos
- Al construir una sección del reporte o analizar estos datos, puede ser útil obtener los meses con más casos. En `sivirep`, puedes utilizar la función `obtener_meses_mas_casos` para obtener esta información.
El gráfico que permite visualizar esta distribución se debe generar con la función `plot_fecha_inisintomas`. Ten en cuenta que, incluso si has agrupado los datos por día, es posible que prefieras representarlo por mes, como en:
```{r fig.height = 4, fig.width = 7}
plot_fecha_inisintomas(data_agrupada = casos_ini_sintomas_dia,
uni_marca = "months")
```
#### 4.2. Agrupar los datos por fecha de notificación en la escala temporal deseada
El proceso para generar la distribución de casos por fecha de notificación consiste en agrupar los datos de enfermedades por esta variable. Puedes utilizar la siguiente función de `sivirep` para hacer esto:
```{r}
casos_fecha_notificacion_dia <- agrupar_fecha_notifica(data_event =
data_event_limp,
tipo = "day")
casos_fecha_notificacion_mes <- agrupar_fecha_notifica(data_event =
data_event_limp,
tipo = "month")
```
El gráfico que permite visualizar esta distribución debe generarse con la función `plot_fecha_notifica`. Ten en cuenta que, aunque hayas agrupado los datos por día, es posible que prefieras representarlos por mes, como en:
```{r fig.height = 4, fig.width = 7}
plot_fecha_notifica(data_agrupada = casos_fecha_notificacion_dia,
uni_marca = "months")
```
### 5. Edad y sexo
### 5.1. Variable de sexo
Cuando se analizan o se informan datos de enfermedades, a menudo es necesario determinar la distribución de casos por género o sexo. Sin embargo, la fuente de SIVIGILA solo registra el sexo.
`sivirep` proporciona una función que agrega y calcula automáticamente los porcentajes por sexo después del proceso de limpieza.
```{r}
casos_sex <- agrupar_sex(data_event = data_event_limp,
porcentaje = TRUE)
```
Además, `sivirep` cuenta con una función para generar el gráfico por esta variable llamada `plot_sex`:
```{r fig.height = 4, fig.width = 7}
plot_sex(data_agrupada = casos_sex)
```
La distribución de casos por sexo y semana epidemiológica se puede generar utilizando la función `agrupar_sex_semanaepi` proporcionada por `sivirep`.
```{r}
casos_sex_semanaepi <- agrupar_sex_semanaepi(data_event = data_event_limp)
```
La función de visualización correspondiente es `plot_sex_semanaepi`, que `sivirep` proporciona para mostrar la distribución de casos por sexo y semana epidemiológica.
```{r fig.height = 4, fig.width = 7}
plot_sex_semanaepi(data_agrupada = casos_sex_semanaepi)
```
### 5.2. Variable de edad
La edad es una variable importante para analizar, ya que es un factor de riesgo conocido para muchas enfermedades. Ciertas enfermedades y condiciones tienden a ocurrir con más frecuencia en grupos de edad específicos, y esta distribución puede ayudar a identificar poblaciones con mayor riesgo e implementar estrategias de prevención y control dirigidas.
`sivirep` proporciona una función llamada `agrupar_edad`, que puede agrupar los datos de enfermedades por grupos de edad. De forma predeterminada, esta función produce rangos de edad con intervalos de 10 años. Además, los usuarios pueden personalizar un rango de edad diferente.
```{r}
casos_edad <- agrupar_edad(data_event = data_event_limp, interval_edad = 10)
```
La función de visualización correspondiente es `plot_edad`.
```{r fig.height = 4, fig.width = 7}
plot_edad(data_agrupada = casos_edad)
```
### 5.3. Edad y sexo simultáneamente
`sivirep` proporciona una función llamada `agrupar_edad_sex`, que puede agrupar los datos de enfermedades por rangos de edad y sexo de forma simultánea y obtener el número de casos y los porcentajes correspondientes. Además, permite personalizar el intervalo de edad.
```{r}
casos_edad_sex <- agrupar_edad_sex(data_event = data_event_limp,
interval_edad = 10)
```
La función de visualización correspondiente es `plot_edad_sex`.
```{r fig.height = 3, fig.width = 7}
plot_edad_sex(data_agrupada = casos_edad_sex)
```
### 6. Distribución espacial de casos
Obtener la distribución espacial de los casos es útil para identificar áreas con una alta concentración de casos, agrupaciones de enfermedades y factores de riesgo ambientales o sociales.
En Colombia, existen 32 unidades geográficas administrativas (adm1) llamadas departamentos. `sivirep` proporciona una función llamada `agrupar_mun` que permite obtener un data.frame de casos agrupados por departamento o municipio.
```{r}
dist_esp_dept <- agrupar_mun(data_event = data_event_filtrada,
dept_nombre = "Antioquia")
```
Actualmente, con la función llamada `plot_map`, el usuario puede generar un mapa estático de Colombia que muestra la distribución de casos por departamentos y municipios.
```{r fig.height = 7, fig.width = 7, results='hide', echo = FALSE}
mapa <- plot_map(data_agrupada = dist_esp_dept, dpto = "Antioquia")
```
```{r fig.height = 7, fig.width = 7}
mapa
```
##### 💡 Tip 3 - Obtén la fila con más casos
- Al construir una sección del reporte o analizar estos datos, puede ser útil saber cuál es la variable que tiene la mayoría de los casos. En `sivirep`, puedes utilizar la función `obtener_fila_mas_casos` para obtener esta información. Esta función funciona con cualquier conjunto de datos que contenga una columna llamada "casos" en cualquier nivel de agregación.