--- title: "Introducción a ciecl: CIE-10 Chile en R" author: "Rodolfo Tasso Suazo" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Introducción a ciecl: CIE-10 Chile en R} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, include=FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.width = 7, fig.height = 5 ) library(ciecl) ``` > **Versión 0.9.8**: Disponible en CRAN con optimizaciones SQLite, soporte XLSX y argumentos estandarizados en inglés. ## El problema: codificar diagnósticos en Chile Los sistemas de información sanitaria chilenos —DEIS, GRD, REM— almacenan diagnósticos usando la clasificación CIE-10 en su versión oficial MINSAL/DEIS v2018. Trabajar con estos datos en R sin una referencia local obliga al analista a consultar PDFs, tablas Excel o sitios web, interrumpiendo el flujo de análisis. `ciecl` resuelve este problema: incorpora los **39.877 códigos CIE-10** del catálogo oficial directamente en R, con funciones de búsqueda rápida, expansión jerárquica y cálculo de índices de comorbilidad. ## Instalación El paquete está disponible en CRAN. Para instalar la versión estable: ```{r eval=FALSE} install.packages("ciecl") ``` Para la versión de desarrollo con las últimas correcciones: ```{r eval=FALSE} # Requiere el paquete pak pak::pak("RodoTasso/ciecl") ``` ## Consultas SQL directas al catálogo La función `cie10_sql()` expone el catálogo completo a través de SQLite, lo que permite filtrar con toda la expresividad de SQL. Esto es útil cuando se conoce la lógica del código pero no el texto exacto, por ejemplo para recuperar todos los subcódigos de una categoría. El siguiente ejemplo extrae los primeros cinco códigos de diabetes tipo 2 (categoría E11): ```{r} cie10_sql("SELECT codigo, descripcion FROM cie10 WHERE codigo LIKE 'E11%' LIMIT 5") ``` La función solo acepta consultas `SELECT` para proteger la integridad del catálogo. Esto garantiza que la base de datos local permanezca como una referencia de solo lectura y confiable para el análisis. ## Búsqueda por código conocido Cuando el código ya está disponible en los datos —por ejemplo, al preparar un informe con diagnósticos de egreso hospitalario— `cie_lookup()` recupera la descripción oficial a partir de uno o varios códigos. Esta función es el puente entre la codificación críptica de las bases de datos y la interpretación clínica humana. ```{r} # Un solo código cie_lookup("E11.0") ``` La función acepta vectores, lo que facilita su uso dentro de un pipeline `dplyr` o cualquier flujo de trabajo vectorizado, devolviendo un `tibble` con la información estructurada: ```{r} # Múltiples códigos de distintos capítulos cie_lookup(c("E11.0", "I10", "Z00", "J44.0")) ``` En análisis donde se trabaja a nivel de categoría (tres dígitos), puede ser necesario conocer todos los subcódigos que la componen para realizar agregaciones o filtros. El argumento `expand = TRUE` desciende la jerarquía y devuelve la categoría junto con todos sus hijos: ```{r} cie_lookup("E11", expand = TRUE) ``` ## Obtener descripciones para usar en tablas A veces solo se necesita el texto de la descripción, sin la estructura completa de `cie_lookup()`. Por ejemplo, al crear etiquetas para un eje de gráfico o una columna rápida en un reporte. La función `cie_describe()` devuelve un vector de caracteres con las descripciones en el mismo orden que los códigos recibidos, lista para usar en `mutate()`: ```{r} cie_describe(c("E11.0", "I10")) ``` Este enfoque es particularmente potente cuando se combina con `dplyr` para enriquecer bases de datos masivas sin necesidad de realizar cruces complejos (`left_join`): ```{r} library(dplyr) egresos <- data.frame( id = 1:4, codigo_diag = c("E11.0", "I10", "J44.0", "E11.0") ) egresos %>% mutate(descripcion = cie_describe(codigo_diag)) ``` ## Búsqueda por texto con tolerancia a errores En los datos clínicos es común encontrar diagnósticos escritos en texto libre, con errores ortográficos o abreviaciones no estandarizadas que dificultan la codificación automática. `cie_search()` implementa búsqueda fuzzy mediante similitud Jaro-Winkler, permitiendo rescatar información de registros imperfectos. El parámetro `threshold` controla qué tan estricta es la coincidencia: valores cercanos a 1.0 exigen precisión casi absoluta, mientras que valores más bajos toleran mayores variaciones. El rango útil habitual para diagnósticos en español está entre 0.70 y 0.85: ```{r} # "diabetis" en lugar de "diabetes" — el error no impide encontrar el código correcto cie_search("diabetis con coma", threshold = 0.75) ``` Observe que el resultado está ordenado por un puntaje (`score`), permitiendo al analista seleccionar la mejor coincidencia de forma estadística. ## Comorbilidades de Charlson y Elixhauser La capacidad de estratificar pacientes según su carga de enfermedad es vital en investigación epidemiológica. Los índices de comorbilidad —Charlson y Elixhauser— se utilizan para predecir mortalidad y uso de recursos. `cie_comorbid()` automatiza este cálculo a partir de un flujo de datos tipo "egresos": ```{r eval=FALSE} # Requiere: install.packages("comorbidity") df_pacientes <- data.frame( id_pac = c(1, 1, 2, 2, 3), diagnostico = c("E11.0", "I50.9", "C50.9", "N18.5", "J44.0") ) cie_comorbid(df_pacientes, id = "id_pac", code = "diagnostico", map = "charlson") ``` El resultado es un data frame procesado donde cada fila representa un paciente único con sus respectivas banderas de patología y puntuación total ponderada, listo para modelos de regresión o tablas descriptivas. ## Tablas formateadas con gt Para presentaciones e informes finales, la estética de los datos es fundamental. `cie_table()` genera una tabla HTML enriquecida, aplicando formato condicional y ocultando automáticamente columnas vacías para una visualización limpia. Requiere tener `gt` instalado: ```{r eval=FALSE} # Requiere: install.packages("gt") cie_table("E11") ``` Esta función detecta si campos como "Incluye" o "Excluye" vienen poblados desde la fuente oficial y ajusta el diseño de la tabla dinámicamente. ## Fuente de datos Los datos incluidos en `ciecl` provienen del catálogo oficial CIE-10 publicado por el Ministerio de Salud de Chile a través del Departamento de Estadísticas e Información de Salud (DEIS): - Centro FIC Chile: - Repositorio DEIS: ## Más información - Reportar problemas o sugerencias: - Repositorio del paquete: