--- 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, que incluye las funcionalidades más recientes antes de su paso a CRAN: ```{r eval=FALSE} # Requiere el paquete pak para una gestión eficiente de dependencias pak::pak("ropensci/ciecl") ``` ## Consultas SQL directas al catálogo La función `cie10_sql()` permite interactuar directamente con la base de datos SQLite interna. Esto otorga una gran flexibilidad para realizar filtros complejos que no están cubiertos por las funciones predefinidas, utilizando toda la potencia del lenguaje SQL. 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") ``` Por razones de seguridad y para preservar la integridad del estándar, la función solo permite consultas de tipo `SELECT`. Esto asegura que el catálogo permanezca como una fuente de verdad inmutable durante el análisis. ## Búsqueda por código conocido Cuando el analista ya dispone de los códigos —como ocurre habitualmente en los registros de egreso hospitalario—, `cie_lookup()` permite recuperar la descripción oficial de forma instantánea. Esta función actúa como el puente necesario entre la codificación técnica y la interpretación clínica. ```{r} # Recuperar un código único cie_lookup("E11.0") ``` La función es totalmente vectorizada, lo que facilita su integración en pipelines de procesamiento masivo. Devuelve un objeto `tibble` con una estructura consistente: ```{r} # Múltiples códigos de distintos capítulos en una sola llamada cie_lookup(c("E11.0", "I10", "Z00", "J44.0")) ``` En investigaciones que operan a nivel de categoría (los primeros tres dígitos), el argumento `expand = TRUE` resulta fundamental, ya que desglosa la jerarquía completa de una familia de códigos: ```{r} cie_lookup("E11", expand = TRUE) ``` ## Obtener descripciones para reportes Si el objetivo es simplemente enriquecer una tabla existente con glosas descriptivas (por ejemplo, para leyendas de gráficos o reportes rápidos), `cie_describe()` es la opción más eficiente. Retorna un vector de caracteres que mantiene el orden original de la entrada. ```{r} cie_describe(c("E11.0", "I10")) ``` Este enfoque optimiza el uso de memoria al evitar joins complejos, permitiendo operaciones fluidas dentro de un flujo `dplyr`: ```{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 Los datos clínicos de texto libre suelen presentar variaciones ortográficas, omisión de tildes o abreviaturas que dificultan la unión exacta. `cie_search()` utiliza el algoritmo Jaro-Winkler para encontrar la correspondencia más cercana en el catálogo oficial. El parámetro `threshold` (umbral) permite ajustar la sensibilidad de la búsqueda. Un valor de `0.75` suele ser un buen compromiso para el idioma español, permitiendo capturar errores comunes sin introducir demasiado ruido: ```{r} # Búsqueda tolerante: "diabetis" en lugar de "diabetes" cie_search("diabetis con coma", threshold = 0.75) ``` El resultado incluye un `score` de similitud, lo que permite al analista evaluar la confiabilidad de la coincidencia de forma cuantitativa. ## Comorbilidades de Charlson y Elixhauser Para la investigación epidemiológica, la estratificación del riesgo es un paso crítico. `cie_comorbid()` simplifica el cálculo de los índices de Charlson y Elixhauser, mapeando automáticamente los códigos CIE-10 a sus respectivas categorías clínicas. ```{r eval=rlang::is_installed("comorbidity")} # Requiere el paquete externo '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 objeto resultante es una matriz de indicadores lista para ser incorporada en modelos de regresión o análisis de supervivencia. ## Tablas formateadas para publicación Finalmente, para la comunicación de resultados, `cie_table()` genera tablas en formato HTML con un diseño profesional utilizando el motor de `gt`. La función ajusta el contenido dinámicamente según la información disponible en el catálogo (como notas de inclusión o exclusión). ```{r eval=rlang::is_installed("gt")} # Requiere el paquete 'gt' instalado cie_table("E11") ``` ## Fuente de datos oficial Los datos de `ciecl` son un fiel reflejo del catálogo CIE-10 para Chile, mantenido por el Departamento de Estadísticas e Información de Salud (DEIS) del Ministerio de Salud: - Centro FIC Chile: - Repositorio de Datos DEIS: ## Colaboración y Soporte - Reporte de errores o sugerencias: - Código fuente y documentación: