Ejemplo mínimo. Dos cromatogramas de BTK de una portadora, sin conexión.
ab1 <- iei_ejemplo_sanger("het")
#> Cromatogramas de ejemplo en /tmp/RtmpXthYh8/sanger_1e445e89620b.
ref <- system.file("extdata", "btk_referencia.fa", package = "ieiprio")
v <- iei_sanger(ab1, gen = "BTK", sexo = "F", referencia = ref)
#> BTK_c1632-2_F.ab1: hebra +, 461 bases alineadas en X:101353757-101354217,
#> identidad 99.8%.
#> BTK_c1632-2_R.ab1: hebra -, 461 bases alineadas en X:101353758-101354218,
#> identidad 99.8%.
v
#> # A tibble: 1 × 16
#> muestra gen chr pos id ref alt genotipo qual dp gq ab
#> <chr> <chr> <chr> <int> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 sanger BTK X 1.01e8 NA T C het 45 NA NA 0.445
#> # ℹ 4 more variables: filtro <chr>, build <chr>, lecturas <int>, fuente <chr>
iei_cromatograma(v)
La variante es X:101353990 T>C, que en el transcrito MANE de BTK es c.1632-2A>G. Las dos lecturas la ven como pico doble.
1. Qué hace el paquete
ieiprio ordena y explica variantes en los genes de los
errores innatos de la inmunidad. Recibe un VCF, cromatogramas Sanger, un
FASTA, una secuencia escrita o el texto de un informe. Anota cada
variante con Ensembl VEP, ClinVar y gnomAD, la prioriza según la
evidencia y el fenotipo del caso y devuelve una tabla con el motivo de
cada punto, los criterios ACMG/AMP sugeridos y un reporte HTML por
paciente.
Solo usa lo que sale de la secuencia y de bases de datos curadas. No recibe antecedentes familiares ni exámenes clínicos, porque no se pueden verificar en la secuencia y vuelven el análisis menos reproducible.
La guía Interpretación de resultados explica cómo leer la salida, Método y parámetros describe los cálculos y Casos de ejemplo trae tres análisis completos para copiar. Quien no tiene datos propios encuentra en la sección 11 un banco de variantes reales y las fuentes públicas que entran en el paquete.
Herramienta de apoyo e investigación. No es un informe diagnóstico ni reemplaza la clasificación ACMG/AMP hecha por un especialista.
2. Fundamentos
2.1 Los errores innatos de la inmunidad
Los errores innatos de la inmunidad (EII) son enfermedades causadas por variantes en genes del desarrollo o la función del sistema inmune. Se conocen más de 500, casi todas monogénicas. Se manifiestan como infecciones graves o recurrentes, autoinmunidad, autoinflamación, alergia grave, linfoproliferación o susceptibilidad al cáncer. La misma enfermedad puede deberse a genes distintos y un mismo gen puede dar cuadros diferentes, por eso el genotipo se cruza siempre con el fenotipo.
Una variante altera el gen de dos maneras. En la pérdida de función la proteína falta o no trabaja. En la ganancia de función trabaja de más o de otra forma, como STAT1 en la candidiasis mucocutánea crónica o PIK3CD en el síndrome de PI3K delta activada. El mecanismo cambia qué variantes se esperan, porque una variante nula no produce una enfermedad por ganancia de función.
| Herencia | Qué se espera encontrar | Ejemplo |
|---|---|---|
| Autosómica recesiva (AR) | Dos variantes en el gen, homocigotas o una en cada copia | RAG1, ADA, DCLRE1C |
| Autosómica dominante (AD) | Una variante basta | STAT3, CTLA4, NFKB1 |
| Ligada al X (XL) | Una variante hemicigota en el varón | BTK, CYBB, WAS, IL2RG |
| Mitocondrial (MT) | Variante en el ADN mitocondrial | Raras en EII |
2.2 La clasificación IUIS
El comité de expertos de la International Union of Immunological Societies clasifica los EII en diez categorías según el componente del sistema inmune afectado. El paquete asigna cada gen del panel a su categoría, la usa como alternativa al fenotipo HPO y le da color a los gráficos.
| Categoría | Grupo | Genes representativos |
|---|---|---|
| 1 | Inmunodeficiencias que afectan la inmunidad celular y humoral | RAG1, RAG2, IL2RG, ADA |
| 2 | Inmunodeficiencias combinadas con rasgos sindrómicos | WAS, ATM, STAT3 |
| 3 | Deficiencias predominantemente de anticuerpos | BTK, CD79A, TNFRSF13B |
| 4 | Enfermedades de desregulación inmune | FOXP3, PRF1, CTLA4 |
| 5 | Defectos congénitos de fagocitos | CYBB, NCF1, ELANE |
| 6 | Defectos de la inmunidad intrínseca e innata | IFNGR1, IL12RB1, STAT1 |
| 7 | Enfermedades autoinflamatorias | MEFV, NLRP3, TREX1 |
| 8 | Deficiencias del complemento | C1QA, C2, CFH |
| 9 | Falla medular | DKC1, GATA2 |
| 10 | Fenocopias de EII | Autoanticuerpos y variantes somáticas |

El anillo exterior son los cromosomas. El siguiente marca cada gen del panel con el color de su categoría y el interior cuenta cuántos genes hay en cada región.
2.3 Tecnologías de secuenciación
Cada tecnología mira una parte distinta del genoma y deja huecos distintos.
| Tecnología | Qué detecta bien | Qué se le escapa | Entrada en ieiprio |
|---|---|---|---|
| Sanger | Variantes puntuales e indels en un amplicón | Deleciones del amplicón entero, mosaicos bajos | iei_sanger() |
| Panel de genes | Variantes en los genes elegidos con alta cobertura | Genes fuera del panel | iei_leer_vcf() |
| Exoma | Variantes en casi todos los exones | Intrones profundos, promotores, CNV pequeñas | iei_leer_vcf() |
| Genoma | Exones, intrones y CNV con cobertura pareja | Regiones repetitivas y pseudogenes | iei_leer_vcf() |
2.4 Del archivo a la variante
Un VCF describe cada posición con el cromosoma, la posición, el alelo
de referencia y el alternativo. Para cada muestra trae el genotipo
(0/1 heterocigoto, 1/1 homocigoto) y medidas
de calidad. La profundidad (DP) es el número de lecturas que cubren la
posición. La calidad del genotipo (GQ) es la confianza del programa en
ese genotipo en escala Phred. La fracción alélica (AB) es la proporción
de lecturas con el alelo alternativo, que ronda 0.5 en un heterocigoto
verdadero. Una fracción baja sugiere un artefacto o un mosaico.
La calidad Phred expresa la probabilidad de error como . Q20 es un error en 100 y Q30 uno en 1000. La misma escala mide la calidad de cada base en un cromatograma Sanger.
3. Instalación
ieiprio necesita R 4.2 o más nuevo y se instala desde
GitHub.
install.packages("pak")
pak::pak("Gentlenmoron/ieiprio")Las dependencias obligatorias son cli, httr2, jsonlite, rlang y tibble. Las demás se usan en tareas puntuales y el paquete avisa cuando falta alguna.
| Paquete | Uso |
|---|---|
| ggplot2, plotly | Gráficos estáticos e interactivos |
| circlize | Genoma en círculo y diagramas de cuerdas |
| patchwork | Paneles combinados, como el oncoplot |
| ragg | Imágenes de los cromatogramas dentro del reporte |
| pdftools, xml2 | Lectura de informes en PDF y Word |
| writexl | Exportación a Excel |
| shiny, bslib, DT | Aplicación interactiva |
| GenomicRanges | Conversión a GRanges
|
4. Privacidad y trabajo sin conexión
Para anotar, el paquete consulta servicios públicos y les envía solo coordenadas genómicas o nombres de genes. El código de la muestra, el fenotipo y el archivo completo nunca salen de la computadora.
| Servicio | Datos enviados | Uso |
|---|---|---|
| Ensembl VEP | Cromosoma, posición y alelos | Consecuencia, HGVS, frecuencias y predictores |
| Ensembl REST | Región o gen | Secuencia de referencia y dominios de proteína |
| NCBI ClinVar | Nombre del gen | Variantes conocidas del gen |
| gnomAD | Variante y nombre del gen | Homocigotos sanos, FAF95 y restricción |
| PanelApp | Número del panel | Actualización del panel |
Con options(ieiprio.sin_red = TRUE) ninguna función
consulta servicios externos y los campos que dependen de ellos quedan
vacíos. La búsqueda por fenotipo, el filtrado, la priorización y el
reporte funcionan igual, porque PanelApp y HPO vienen dentro del
paquete. Para Sanger se pasa la referencia en referencia y
para anotar se usa la salida de un VEP local en
vep_json.
options(ieiprio.sin_red = TRUE)Las respuestas de cada servicio quedan en una caché en la carpeta de
usuario de R, así que repetir un análisis no vuelve a consultar.
iei_limpiar_cache() la borra.
5. Datos de entrada
Todas las entradas terminan en la misma tabla, con una fila por variante. Lo que sigue funciona igual sin importar el origen.
| Entrada | Formatos | Función |
|---|---|---|
| Secuenciación masiva | VCF y VCF comprimido, GRCh37 o GRCh38 | iei_leer_vcf() |
| Secuenciación Sanger |
.ab1, .scf, FASTA o secuencia escrita |
iei_sanger() |
| Informes | PDF, Word, texto o variantes en HGVS | iei_variantes() |
Conviene indicar siempre el sexo. En un varón, una variante homocigota en el X fuera de las regiones pseudoautosómicas pasa a hemicigota, y esa distinción decide la lectura de genes como BTK, CYBB o WAS.
El paquete trae dos ejemplos. iei_ejemplo_vcf() es un
exoma ficticio de un varón con hipogammaglobulinemia e infecciones
recurrentes, con cinco variantes reales de ClinVar y unas 4000 de fondo.
iei_ejemplo_sanger() escribe los cromatogramas directo y
reverso de un amplicón de BTK con la variante causal del mismo caso, a
partir de la referencia GRCh38 que viene en
inst/extdata/btk_referencia.fa.
| Rol | Gen | Variante | ClinVar |
|---|---|---|---|
| Causal | BTK | c.1632-2A>G | 265455 |
| Portador | RAG1 | c.1186C>T (p.Arg396Cys) | 13144 |
| Incierta | STAT1 | c.*1628A>G | 333246 |
| Benigna | BTK | c.*334T>G | 367692 |
| Benigna | CYBB | c.1314+19C>T | 35968 |
6. Análisis de un VCF
6.1 Lectura
vcf <- iei_leer_vcf(iei_ejemplo_vcf(), sexo = "M")
vcf
#> # A tibble: 4,094 × 15
#> muestra chr pos id ref alt genotipo qual dp gq ab
#> <chr> <chr> <int> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 EJEMPLO01 1 1605175 NA G C hom_alt 234 52 74 1
#> 2 EJEMPLO01 1 1617029 NA T A hom_alt 315 45 99 1
#> 3 EJEMPLO01 1 2547757 NA C T hom_alt 667 43 90 1
#> 4 EJEMPLO01 1 3239502 NA G C het 780 46 83 0.630
#> 5 EJEMPLO01 1 4235075 NA A C het 245 56 99 0.625
#> 6 EJEMPLO01 1 4256441 NA A G hom_alt 296 16 82 1
#> 7 EJEMPLO01 1 6010805 NA C T hom_alt 278 26 77 1
#> 8 EJEMPLO01 1 6129328 NA T C het 400 9 75 0.556
#> 9 EJEMPLO01 1 6429026 NA A G het 695 68 74 0.5
#> 10 EJEMPLO01 1 6891176 NA A G het 891 36 83 0.611
#> # ℹ 4,084 more rows
#> # ℹ 4 more variables: filtro <chr>, build <chr>, gt <chr>, ps <chr>6.2 Verificación del sexo
iei_verificar_sexo(vcf)
#> # A tibble: 1 × 6
#> muestra sexo_declarado sexo_inferido frac_het_x n_variantes_x concordante
#> <chr> <chr> <chr> <dbl> <int> <lgl>
#> 1 EJEMPLO01 M M 0 139 TRUEEl sexo declarado se compara con el que se estima por la proporción de heterocigotos en el cromosoma X. Una discrepancia sugiere un error de identidad de la muestra.
6.3 Filtrado
filtrado <- iei_filtrar(vcf)
iei_bitacora(filtrado)
#> # A tibble: 4 × 3
#> paso filas descartadas
#> <chr> <int> <int>
#> 1 Inicial 4094 0
#> 2 Genotipo 4094 0
#> 3 Panel 5 4089
#> 4 Calidad 5 0Quedan las variantes en genes del panel con buena calidad técnica. Por defecto son los genes con evidencia verde del panel 398 de PanelApp, profundidad de al menos 10 lecturas, calidad de genotipo de 20 y fracción alélica de 0.2 en heterocigotos. La bitácora cuenta cuántas variantes quedan en cada paso.
6.4 Anotación
anotado <- iei_anotar(filtrado)
anotado <- iei_filtrar_frecuencia(anotado)
anotado[, c("gen", "hgvs_c", "consecuencia", "af_gnomad", "clinvar")]
#> # A tibble: 3 × 5
#> gen hgvs_c consecuencia af_gnomad clinvar
#> <chr> <chr> <chr> <dbl> <chr>
#> 1 STAT1 NA downstream_gene_variant 0.0000263 uncert…
#> 2 RAG1 ENST00000299440.6:c.1186C>T missense_variant 0.0000376 pathog…
#> 3 BTK ENST00000308731.8:c.1632-2A>G splice_acceptor_variant NA pathog…La anotación agrega la consecuencia en el transcrito, la nomenclatura HGVS, la frecuencia en gnomAD, ClinVar y los predictores REVEL, AlphaMissense y SpliceAI. El filtro de frecuencia descarta después las variantes demasiado comunes para una enfermedad rara, con un corte que depende de la herencia del gen.
6.5 Priorización
prior <- iei_priorizar(anotado, fenotipo = c("agammaglobulinemia", "neumonía recurrente"))
#> ℹ Fenotipo interpretado como:
#> • agammaglobulinemia → HP:0004432 Agammaglobulinemia
#> • neumonía recurrente → HP:0006532 Recurrent pneumonia
prior
#> Resultado de ieiprio • 1 muestra, 3 variantes
#> Genoma GRCh38 • Ensembl VEP 116 • prioridad alta 1, media 1, baja 1
#> # A tibble: 3 × 8
#> muestra gen hgvs_c hgvs_p genotipo puntaje categoria acmg
#> <chr> <chr> <chr> <chr> <chr> <dbl> <chr> <chr>
#> 1 EJEMPLO01 BTK c.1632-2A>G NA hemi 13.8 alta PVS1_Stron…
#> 2 EJEMPLO01 RAG1 c.1186C>T p.Arg396Cys het 6.7 media PM1_Suppor…
#> 3 EJEMPLO01 STAT1 NA NA het 3.6 baja PM2_Suppor…La variante de BTK queda en prioridad alta. Rompe el sitio aceptor de splicing, ClinVar la clasifica como patogénica, falta en gnomAD y es hemicigota en un gen ligado al X. La de RAG1 queda en prioridad media, que es el tope para una sola variante en un gen recesivo, y la de STAT1 queda baja por estar en la región 3’ no traducida. Las dos benignas salen en el filtro de frecuencia o en el de ClinVar.
6.6 Reporte
iei_reporte(prior, file.path(tempdir(), "EJEMPLO01.html"), paciente = "EJEMPLO01")
#> Reporte de "EJEMPLO01" guardado en
#> /tmp/RtmpXthYh8/EJEMPLO01.html.El argumento paciente es el código de la muestra y nunca
un nombre. Con un VCF el reporte trae el control de calidad, la tabla
priorizada, una ficha por variante con el diagrama de la proteína, la
coincidencia con el fenotipo, el embudo del filtrado y las versiones de
todas las fuentes.
6.7 Todo en una llamada
res <- iei_analizar(iei_ejemplo_vcf(), sexo = "M", fenotipo = "agammaglobulinemia", carpeta = tempdir())
#>
#> ── ieiprio ─────────────────────────────────────────────────────────────────────
#> ℹ Leyendo ejemplo.vcf.gz
#> ℹ Filtrando 4094 filas
#> ℹ Anotando 5 variantes con Ensembl VEP
#> ℹ Fenotipo interpretado como:
#> • agammaglobulinemia → HP:0004432 Agammaglobulinemia
#> ✔ Prioridad alta 1, media 1, baja 1
#>
#> ✔ Reporte en /tmp/RtmpXthYh8/EJEMPLO01.htmliei_analizar() corre los pasos anteriores y deja un
reporte por muestra en la carpeta indicada.
7. Análisis de secuencias Sanger
sanger <- iei_sanger(iei_ejemplo_sanger(), gen = "BTK", sexo = "M", referencia = ref)
#> Cromatogramas de ejemplo en /tmp/RtmpXthYh8/sanger_1e443b0da1ee.
#> BTK_c1632-2_F.ab1: hebra +, 461 bases alineadas en X:101353757-101354217,
#> identidad 99.8%.
#> BTK_c1632-2_R.ab1: hebra -, 461 bases alineadas en X:101353758-101354218,
#> identidad 99.8%.
sanger
#> # A tibble: 1 × 16
#> muestra gen chr pos id ref alt genotipo qual dp gq ab
#> <chr> <chr> <chr> <int> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 sanger BTK X 1.01e8 NA T C hemi 45 NA NA 1
#> # ℹ 4 more variables: filtro <chr>, build <chr>, lecturas <int>, fuente <chr>iei_sanger() recorta los extremos de baja calidad, ubica
cada lectura en su hebra, la alinea contra la referencia y llama
variantes homocigotas, heterocigotas por picos dobles e indels. Sin
referencia baja la secuencia del gen o la región desde
Ensembl y la guarda en caché.
iei_cromatograma(sanger)
Cada traza tiene el color de su base. La franja marca la variante, arriba va la base leída y abajo la de referencia. Las lecturas reversas se muestran ya complementadas y en el sentido del genoma.
iei_dotplot(sanger)
El dot plot compara la lectura con la referencia por ventanas de 10 bases. La diagonal continua dice que la lectura cubre la referencia sin cortes. Una indel se vería como un salto de la diagonal, y la cruz roja marca la variante.
Una indel heterocigota produce picos dobles sostenidos desde el punto
del cambio. El paquete prueba los desfases posibles y llama la indel si
uno de ellos explica los picos. iei_consenso() reúne las
lecturas en una sola secuencia. Desde aquí el flujo es el mismo que con
un VCF.
vep <- system.file("extdata", "btk_vep.json", package = "ieiprio")
iei_priorizar(iei_anotar(sanger, vep_json = vep), fenotipo = "agammaglobulinemia")
#> ℹ Fenotipo interpretado como:
#> • agammaglobulinemia → HP:0004432 Agammaglobulinemia
#> Resultado de ieiprio • 1 muestra, 1 variante
#>
#> Genoma GRCh38 • Ensembl VEP local • prioridad alta 1, media 0, baja 0
#> # A tibble: 1 × 8
#> muestra gen hgvs_c hgvs_p genotipo puntaje categoria acmg
#> <chr> <chr> <chr> <chr> <chr> <dbl> <chr> <chr>
#> 1 sanger BTK c.1632-2A>G NA hemi 14 alta PVS1_Strong, PM2_…btk_vep.json es la respuesta de Ensembl VEP para esta
variante, guardada para que el ejemplo corra sin red. Con conexión basta
iei_anotar(sanger).
8. Variantes desde informes
iei_extraer_variantes(c(
"Se identificó NM_000061.3(BTK):c.1632-2A>G en hemicigosis.",
"También RAG1 p.Arg396Cys en heterocigosis y rs121908711."
))
#> # A tibble: 3 × 4
#> entrada tipo genotipo linea
#> <chr> <chr> <chr> <int>
#> 1 NM_000061.3:c.1632-2A>G hgvs_transcrito hemi 1
#> 2 rs121908711 rsid het 2
#> 3 RAG1:p.Arg396Cys gen_y_cambio het 2iei_variantes() lee PDF, Word o texto y reconoce
nomenclatura HGVS, rsID y el gen seguido del cambio. Si el texto dice el
genotipo, lo usa. Para una sola variante, iei_variante() la
ubica, la anota, la prioriza y muestra su ficha.
iei_variante("BTK c.1632-2A>G", genotipo = "hemi", fenotipo = "agammaglobulinemia")Ensembl no respondió mientras se construía esta página, así que este bloque no muestra resultado.
9. CNV del VCF
head(genes_dificiles[, c("gen", "tipo")], 8)
#> # A tibble: 8 × 2
#> gen tipo
#> <chr> <chr>
#> 1 NCF1 pseudogen
#> 2 IKBKG pseudogen
#> 3 SBDS pseudogen
#> 4 PMS2 pseudogen
#> 5 C4A numero de copias
#> 6 C4B numero de copias
#> 7 CFH duplicacion segmentaria
#> 8 CFHR1 duplicacion segmentariaAlgunas causas frecuentes de inmunodeficiencia no son variantes
puntuales, como la deleción 22q11.2 o las deleciones grandes de BTK y
CYBB. Si el VCF trae CNV llamadas por otro programa como registros
simbólicos (<DEL>, <DUP>),
iei_cnv() las cruza con el panel y el reporte las muestra.
Los genes con pseudogenes o con número de copias variable están en
genes_dificiles, y la nota de cada variante lo
advierte.
10. Salidas
summary(prior)
#>
#> ── Resumen de ieiprio ──
#>
#> Genoma GRCh38, Ensembl VEP 116
#>
#> ── Variantes por prioridad
#> categoria
#> alta media baja
#> 1 1 1
#>
#> ── Por muestra
#> # A tibble: 1 × 5
#> muestra alta media baja principal
#> <chr> <int> <int> <int> <chr>
#> 1 EJEMPLO01 1 1 1 BTK
#>
#> ── Genes con mayor puntaje
#> # A tibble: 3 × 4
#> gen variantes mejor_puntaje mejor_categoria
#> <chr> <int> <dbl> <chr>
#> 1 BTK 1 13.8 alta
#> 2 RAG1 1 6.7 media
#> 3 STAT1 1 3.6 baja
#>
#> ── Criterios ACMG sugeridos
#> # A tibble: 6 × 2
#> criterio variantes
#> <chr> <int>
#> 1 PM2_Supporting 3
#> 2 PP3 2
#> 3 PP4 2
#> 4 PM1_Supporting 1
#> 5 PM5 1
#> 6 PVS1_Strong 1
#>
#> ── Filtrado
#> # A tibble: 6 × 3
#> paso filas descartadas
#> <chr> <int> <int>
#> 1 Inicial 4094 0
#> 2 Genotipo 4094 0
#> 3 Panel 5 4089
#> 4 Calidad 5 0
#> 5 Frecuencia 3 2
#> 6 ClinVar benigna 3 0
plot(prior)
El resultado de iei_priorizar() es una tabla, así que se
filtra y se grafica con las herramientas habituales de R. Las variantes
también se ven sobre los cromosomas o sobre el genoma en círculo. En el
cariograma cada raya a la izquierda de un cromosoma es un gen del panel
y cada punto a la derecha una variante del caso. En el círculo la
distancia al centro es el puntaje.
plot(prior, tipo = "cariotipo")
plot(prior, tipo = "circos")
iei_exportar() elige el formato por la extensión. Excel
guarda variantes, parámetros y fuentes en hojas separadas, VCF y BED
sirven para IGV y JSON produce un Phenopacket de GA4GH que leen Exomiser
y LIRICAL.
iei_exportar(prior, "EJEMPLO01.xlsx")
iei_exportar(prior, "EJEMPLO01.json")La aplicación interactiva reúne la búsqueda por fenotipo, la ficha de gen, la interpretación de una variante, el análisis de archivos con descarga del reporte y la validación de la búsqueda por fenotipo.
iei_app()11. Datos para practicar
No hace falta una prueba genética propia para aprender a usar el paquete. Esta sección junta lugares de donde sacar variantes, secuencias y fenotipos reales, y la forma de llevarlos a ieiprio. A diferencia de los casos de ejemplo, aquí no hay un resultado esperado. La idea es explorar.
11.1 Un banco de variantes reales
| gen | variante | proteina | genotipo | enfermedad |
|---|---|---|---|---|
| BTK | BTK c.1632-2A>G | hemi | Agammaglobulinemia ligada al X | |
| RAG1 | RAG1 c.1186C>T | p.Arg396Cys | het | Inmunodeficiencia combinada grave T-B-NK+ |
| ADA | ADA c.646G>A | p.Gly216Arg | hom_alt | Inmunodeficiencia combinada grave por déficit de ADA |
| STAT3 | STAT3 c.1144C>T | p.Arg382Trp | het | Síndrome de hiper-IgE autosómico dominante |
| PIK3CD | PIK3CD c.3061G>A | p.Glu1021Lys | het | Síndrome de PI3K delta activada (APDS1) |
| TNFRSF13B | TNFRSF13B c.310T>C | p.Cys104Arg | het | Inmunodeficiencia común variable 2 |
| FOXP3 | FOXP3 c.1150G>A | p.Ala384Thr | hemi | Síndrome IPEX |
| AIRE | AIRE c.769C>T | p.Arg257Ter | hom_alt | Poliendocrinopatía autoinmune tipo 1 (APECED) |
| CYBB | CYBB c.676C>T | p.Arg226Ter | hemi | Enfermedad granulomatosa crónica ligada al X |
| NCF1 | NCF1 c.75_76del | p.Tyr26fs | hom_alt | Enfermedad granulomatosa crónica autosómica recesiva |
| STAT1 | STAT1 c.820C>T | p.Arg274Trp | het | Candidiasis mucocutánea crónica por ganancia de función de STAT1 |
| MEFV | MEFV c.2080A>G | p.Met694Val | hom_alt | Fiebre mediterránea familiar |
variantes_practica trae doce variantes descritas en
ClinVar, desde genes muy estudiados como BTK o CYBB hasta otros menos
conocidos como AIRE, TNFRSF13B o NCF1. Cada fila tiene el genotipo con
que suele causar la enfermedad y tres signos HPO de esa enfermedad, así
que se analiza completa con una línea.
v <- variantes_practica[variantes_practica$gen == "STAT3", ]
iei_variante(v$variante, genotipo = v$genotipo, fenotipo = strsplit(v$fenotipo, ";")[[1]])Ensembl no respondió mientras se construía esta página, así que este bloque no muestra resultado.
La columna que_ensena dice qué mirar en cada una.
| gen | tipo | que_ensena |
|---|---|---|
| BTK | sitio aceptor de splicing | Está fuera del exón, en el sitio aceptor de splicing. Sirve para ver cómo pesan SpliceAI y PVS1 en una variante no codificante. |
| RAG1 | missense | En heterocigosis es solo portadora, porque la enfermedad es recesiva. El puntaje no la sube a prioridad alta. |
| ADA | missense | Missense recurrente en un gen recesivo. Causa la enfermedad cuando está en los dos alelos. |
| STAT3 | missense | Cae en el dominio de unión al ADN y actúa como dominante negativa. Una sola copia basta. |
| PIK3CD | missense | Ganancia de función en el dominio quinasa. El mismo gen tiene una forma recesiva por pérdida de función, así que el mecanismo cambia la lectura. |
| TNFRSF13B | missense | Aparece también en personas sanas y se considera un factor de riesgo, no una causa suficiente. Sirve para ver cómo pesan la frecuencia en gnomAD y la evidencia del gen. |
| FOXP3 | missense | Missense en un gen del cromosoma X. En un varón es hemicigota y basta para la enfermedad. |
| AIRE | sin sentido | Variante sin sentido, la más frecuente en Finlandia. Sirve para ver PVS1 en un gen recesivo. |
| CYBB | sin sentido | Sin sentido en un gen del cromosoma X. Conviene compararla con la variante benigna de CYBB del exoma de ejemplo. |
| NCF1 | deleción con corrimiento del marco | NCF1 tiene pseudogenes casi idénticos. La nota de la variante avisa que con lecturas cortas puede pasar desapercibida. |
| STAT1 | missense | Ganancia de función en el dominio coiled-coil. Las variantes con pérdida de función en STAT1 dan otra enfermedad, recesiva. |
| MEFV | missense | Autoinflamatoria y frecuente en poblaciones del Mediterráneo oriental. Sirve para ver la frecuencia por grupo poblacional (grpmax). |
Cambiar el genotipo o el fenotipo enseña tanto como el caso correcto.
RAG1 en "hom_alt" deja de ser portadora, y STAT3 con los
signos de la fiebre mediterránea familiar pierde el aporte del fenotipo
al puntaje.
11.2 Cualquier gen del panel
deficiencias_innatas <- iei_panel(categoria = 6)
head(deficiencias_innatas[, c("gen", "herencia", "fenotipos")], 8)
#> # A tibble: 8 × 3
#> gen herencia fenotipos
#> <chr> <chr> <chr>
#> 1 CARD9 AR "Candidiasis, familial, 2; 212050; CARD9 deficiency; Predispo…
#> 2 CIB1 AR "Epidermodysplasia verruciformis 3\t618267; HPV infections an…
#> 3 CXCR2 AR "WHIM syndrome 2, OMIM:619407"
#> 4 CXCR4 AD "WHIM syndrome, 193670; Myelokathexis, isolated; WHIM syndrom…
#> 5 CYBB XL "Immunodeficiency 34, mycobacteriosis, X-linked, 300645; Chro…
#> 6 DBR1 AR "DBR1 deficiency; Defects in intrinsic and innate immunity; H…
#> 7 HMOX1 AR "Heme oxygenase-1 deficiency, OMIM:614034; Hemolysis, nephrit…
#> 8 IFNGR1 AR/AD "Immunodeficiency 27A, (AR) 209950; Immunodeficiency 27B, (AD…El panel tiene más de 500 genes. iei_panel() los filtra
por categoría IUIS, herencia o nivel de evidencia, e
iei_buscar_gen() reconoce alias como TACI o p47phox. Con un
gen elegido, iei_gen() trae de ClinVar sus variantes
patogénicas con la posición en la proteína, el cambio y las estrellas de
revisión. Cualquiera de ellas entra después a
iei_variante().
ficha <- iei_gen("CYBB")
head(ficha$clinvar$variantes, 10)
#> # A tibble: 10 × 9
#> clinvar_id variante clasificacion revision consecuencia cambio_proteina
#> <int> <chr> <chr> <chr> <chr> <chr>
#> 1 1196543 NM_000397.4(C… Pathogenic criteri… missense va… M1V
#> 2 495863 NM_000397.4(C… Pathogenic criteri… frameshift … V27fs
#> 3 862779 NM_000397.4(C… Pathogenic criteri… nonsense R130*
#> 4 1504854 NM_000397.4(C… Likely patho… criteri… missense va… S142P
#> 5 2630151 NM_000397.4(C… Pathogenic criteri… frameshift … I241fs
#> 6 947989 NM_000397.4(C… Pathogenic criteri… nonsense Y280*
#> 7 503616 NM_000397.4(C… Pathogenic criteri… frameshift … V321fs
#> 8 962575 NM_000397.4(C… Pathogenic criteri… nonsense W337*
#> 9 2737188 NM_000397.4(C… Pathogenic criteri… frameshift … E347fs
#> 10 1367808 NM_000397.4(C… Pathogenic criteri… nonsense W361*
#> # ℹ 3 more variables: estrellas <int>, pos_proteina <int>, tipo <chr>11.3 Pacientes simulados desde una enfermedad
apds <- hpo_enfermedades[hpo_enfermedades$enfermedad_id == "OMIM:615513" & !hpo_enfermedades$excluido, ]
apds <- apds[order(-ifelse(is.na(apds$frecuencia), 0, apds$frecuencia)), ]
iei_buscar_fenotipo(head(apds$hpo_id, 5), n = 5)
#> Genes candidatos por fenotipo (enfermedad)
#> Fenotipo: HP:0002205 Recurrent respiratory infections; HP:0012476 Decreased
#> circulating specific pneumococcal antibody concentration; HP:0410018 Recurrent
#> ear infections; HP:0008348 Decreased circulating IgG2 concentration; HP:0030381
#> Increased transitional B cell proportion
#> # A tibble: 5 × 6
#> gen similitud especificidad enfermedad herencia categorias_iuis
#> <chr> <dbl> <dbl> <chr> <chr> <chr>
#> 1 PIK3CD 0.978 0.248 Immunodeficiency 14 (… AR/AD 3
#> 2 IKZF2 0.793 0.283 Immunodysregulation w… AD 1
#> 3 CTPS1 0.758 0.606 Immunodeficiency 24 (… AR 4
#> 4 ADA 0.712 0.295 Severe combined immun… AR 1
#> 5 IKBKG 0.712 0.197 Ectodermal dysplasia … XL 2
#> Detalle de cada coincidencia en la columna coincidencias. Grafico: plot(x) o
#> autoplot(x).hpo_enfermedades tiene los signos de más de mil
enfermedades de los genes del panel, con la frecuencia de cada uno.
Tomar los más frecuentes de una enfermedad es simular un paciente
típico. Con el síndrome de PI3K delta activada (OMIM:615513) PIK3CD sale
primero. Con IPEX (OMIM:304790) sale primero IL2RA, cuya deficiencia da
un cuadro parecido, y FOXP3 queda segundo. Esos empates son los que
obligan a mirar la secuencia. iei_validar_fenotipo() repite
el ejercicio con cientos de pacientes al azar.
11.4 Secuencias propias a partir de la referencia
ref <- system.file("extdata", "btk_referencia.fa", package = "ieiprio")
s <- paste(readLines(ref)[-1], collapse = "")
practica <- substr(s, 301, 600)
substr(practica, 151, 151) <- "C"
mia <- iei_sanger(practica, gen = "BTK", sexo = "M", referencia = ref)
#> secuencia: hebra +, 300 bases alineadas en X:101353840-101354139, identidad
#> 99.7%.
mia[, c("gen", "chr", "pos", "ref", "alt", "genotipo")]
#> # A tibble: 1 × 6
#> gen chr pos ref alt genotipo
#> <chr> <chr> <int> <chr> <chr> <chr>
#> 1 BTK X 101353990 T C hemiLa referencia de BTK que trae el paquete empieza en X:101353540. El tramo de práctica va de X:101353840 a X:101354139, y su base 151 es X:101353990, justo donde está c.1632-2A>G. Cambiarla por C reproduce esa variante. Cambiar cualquier otra base da una variante nueva para anotar, priorizar y ver en el dot plot.
Con conexión esto vale para cualquier gen del panel. Se copia un
tramo del gen en FASTA desde Ensembl o desde GenBank, se cambia una base
y se pasa a iei_sanger() con el nombre del gen. El paquete
descarga la referencia y ubica el tramo solo.
11.5 Fuentes públicas
iei_extraer_variantes("Se encontró la variante STAT1 c.820C>T (p.Arg274Trp) en heterocigosis.")
#> # A tibble: 1 × 4
#> entrada tipo genotipo linea
#> <chr> <chr> <chr> <int>
#> 1 STAT1:c.820C>T gen_y_cambio het 1Un caso clínico publicado suele traer la variante escrita en HGVS y
el genotipo en el texto. Basta con copiar el párrafo, o pasar el PDF
completo a iei_variantes(). Estas son las fuentes abiertas
que mejor encajan con el paquete.
| Fuente | Qué ofrece | Cómo entra en ieiprio |
|---|---|---|
| ClinVar | Variantes clasificadas por gen y por enfermedad |
iei_gen(), iei_variante()
|
| gnomAD | Frecuencia de cada variante por población, con personas sanas homocigotas | iei_gnomad() |
| LOVD | Variantes publicadas, reunidas por gen |
iei_variante() con el HGVS |
| PubMed Central | Casos clínicos de acceso abierto con variantes en HGVS |
iei_variantes() con el PDF o el texto |
| Ensembl y GenBank | Secuencias de referencia en FASTA | iei_sanger() |
| Genome in a Bottle | VCF de genomas humanos de referencia, de libre uso |
iei_leer_vcf() e iei_filtrar()
|
| HPO y Orphanet | Signos de cada enfermedad |
hpo_enfermedades, iei_buscar_hpo()
|
| PanelApp | Genes del panel y su nivel de evidencia |
iei_panel(), iei_actualizar_panel()
|
Los VCF de Genome in a Bottle son genomas completos y pesan cientos de megabytes. Filtrados por el panel muestran cuántas variantes raras tiene una persona en estos genes, y por qué el filtrado por frecuencia y calidad pesa tanto como la anotación.
12. Limitaciones
El paquete analiza variantes puntuales e indels pequeñas. Las CNV y las variantes estructurales aparecen solo si el VCF ya las trae llamadas, y la cobertura no se evalúa porque requiere el BAM. En Sanger no se detectan mosaicos por debajo del umbral de pico doble, y una indel heterocigota llamada por deconvolución se confirma con la otra hebra. Si el VCF no trae fase, dos heterocigotas en un gen recesivo quedan como un posible compuesto. Los criterios ACMG y su clase son sugerencias para un especialista, y la similitud de fenotipo se validó con casos simulados y no con una cohorte clínica.