Se ven los grupos, pero ¿qué tipo de células son?
En S29, los grupos de células aparecen en el mapa UMAP. Sin embargo, el mapa solo muestra que "algo se agrupa aquí", pero no indica si ese grupo corresponde a células T o B. Se necesitan dos cosas: primero, agrupar las células mediante un algoritmo objetivo (no de forma subjetiva), y segundo, revelar su identidad mediante sus genes marcadores.
La clave es el grafo kNN creado en S29. Si consideramos las células como nodos y las relaciones de vecindad como aristas, el "tipo celular" equivale a un grupo de nodos densamente conectados = comunidad. El agrupamiento (clustering) se convierte así en un problema de detección de comunidades en grafos.
¿Qué significa una buena partición? — Modularidad
¿Cómo juzgamos si una comunidad es "buena"? La métrica es la modularidad .
es la arista real, y es la arista esperada en un grafo aleatorio. Es decir, mide "cuántas conexiones dentro de una misma comunidad hay más de las que ocurrirían por casualidad". Cuanto mayor sea , más denso será el interior de la comunidad y más disperso su exterior. El agrupamiento se convierte en el problema de encontrar la partición que maximiza esta .
Dado que esta optimización es NP-difícil, se utilizan algoritmos aproximados. Uno ampliamente utilizado es Louvain. Es un enfoque voraz (greedy) que mueve cada nodo a una comunidad vecina y lo confirma si aumenta la .
¿Por qué Leiden en lugar de Louvain?
Louvain tiene una deficiencia conocida: puede crear comunidades desconectadas. Durante la optimización, es posible que una comunidad se divida realmente en dos fragmentos no conectados, pero siga etiquetándose como uno solo. En el análisis celular, esto resulta en un resultado ilógico: "un clúster que en realidad son dos grupos celulares no conectados entre sí".
Leiden resuelve este problema matemáticamente. Añade una etapa de refinamiento que garantiza que todas las comunidades estén bien conectadas internamente, y converge a una mejor y más rápidamente. Hoy en día, el agrupamiento por defecto en Scanpy y Seurat es Leiden.
El parámetro clave es la resolución. Un valor alto divide las comunidades en grupos más pequeños (más clústers), mientras que un valor bajo las agrupa en menos clústers. No existe un "número correcto" de respuestas. Es un parámetro de exploración que se ajusta según la pregunta biológica.
Ajustar manualmente la modularidad
Supongamos que 6 nodos se agrupan densamente en dos triángulos, 3 y 6, y que estos dos triángulos están conectados únicamente por una arista. Al dividirlos de forma natural en estos dos grupos, el número de aristas internas (tres por cada triángulo) es mucho mayor de lo esperado, lo que hace que sea grande. Por el contrario, si se entrelazan como 4, 5, 6, la conectividad interna es casi nula y se acerca a 0. El algoritmo elige la primera opción: cortar según la densidad de conexiones es la idea clave de la modularidad.
Genes marcadores: asignar nombres a los clústeres
Una vez obtenidos los clústeres, buscamos los genes que se expresan de forma significativamente más alta en cada clúster en comparación con el resto. Estos son los genes marcadores. La prueba consiste en analizar la expresión diferencial entre el clúster y el resto del conjunto total; en scRNA-seq, normalmente se utiliza la prueba de suma de rangos de Wilcoxon (robusta incluso cuando no se cumple el supuesto de normalidad).
Al contrastar los genes marcadores con el conocimiento previo sobre los tipos celulares, se asignan nombres. Para PBMC:
| Marcador | Tipo celular |
|---|---|
| CD3D, IL7R | Células T |
| MS4A1, CD79A | Células B |
| NKG7, GNLY | Células NK |
| CST3, LYZ | Monocitos/células dendríticas |
| PPBP | Plaquetas |
Este contraste es el punto culminante del análisis de scRNA-seq. Es el momento en que los clústeres anónimos 0~8 cobran vida al convertirse en "células T CD4", "células B", etc.
Práctica con Scanpy (PBMC 3k)
Continúa directamente desde el grafo kNN de S29.
import scanpy as sc# adata = S29 (vecinos, cálculo UMAP completado)
# agrupamiento Leidensc.tl.leiden(adata, resolution=1.0, flavor="igraph", n_iterations=2)sc.pl.umap(adata, color="leiden", legend_loc="on data")
# genes marcadores (cluster vs resto, Wilcoxon)sc.tl.rank_genes_groups(adata, "leiden", method="wilcoxon")sc.pl.rank_genes_groups(adata, n_genes=10, sharey=False)
# identificación de identidad con marcadores conocidos (dotplot)markers = ["CD3D", "IL7R", "MS4A1", "CD79A", "NKG7", "GNLY", "CST3", "LYZ", "PPBP"]sc.pl.dotplot(adata, markers, groupby="leiden")En el diagrama de dispersión, el tamaño de los puntos representa la proporción de células que expresan un gen en ese clúster, y el color indica la intensidad media de expresión. Si el punto correspondiente a CD3D es grande y de color intenso en un clúster determinado, ese clúster está compuesto por células T. Asigna las etiquetas correspondientes de esta manera, una por una.
new_labels = {"0": "CD4 T", "1": "B", "2": "CD14 Mono", "3": "NK", "4": "CD8 T"}adata.obs["cell_type"] = adata.obs["leiden"].map(new_labels).astype("category")sc.pl.umap(adata, color="cell_type", legend_loc="on data")Cambie los valores de resolución a 0.5, 1.0 y 2.0 para verificar cómo cambia el número de clústeres. Si se divide en grupos demasiado pequeños, un solo tipo de célula se fragmentará en varias partes; si se agrupan demasiado, diferentes tipos se mezclarán. La experiencia práctica consiste en determinar el valor adecuado basándose en la consistencia biológica de los marcadores.
Mapeo de comunidades (CS)
- Detección de comunidades: Leiden es un algoritmo de detección de comunidades en gráficos. Es una herramienta utilizada en análisis de redes sociales y sistemas de recomendación.
- Partición de gráficos / optimización de modularidad: La maximización de es un problema de aproximación a la optimización NP-difícil, lo que está directamente relacionado con los algoritmos de gráficos de DryBench.
- Optimización voraz: El movimiento de nodos en Louvain/Leiden es una estrategia voraz que repite mejoras locales. El refinamiento de Leiden sirve como un mecanismo para escapar de los óptimos locales.
- Prueba no paramétrica (Wilcoxon): La prueba de marcadores es un método basado en rangos con supuestos de distribución débiles, que pertenece a los métodos estadísticos no paramétricos.
Problemas comunes
- Conclusión basada en una sola resolución: No existe una única respuesta correcta. Pruebe varios valores y determine el valor adecuado basándose en la consistencia de los marcadores.
- Uso continuo de Louvain: Existe el riesgo de comunidades desconectadas. Leiden es el estándar actual.
- Prueba de marcadores con valores escalados/PCA: Los marcadores deben probarse con valores normalizados logarítmicos (
adata.raw). Los valores escalados distorsionan el signo y la magnitud. - Clústeres sin mezclar los lotes: Diferentes lotes experimentales pueden separarse en clústeres distintos, generando "tipos de células falsos". En muchos casos, es necesario aplicar primero la corrección de lotes descrita en la siguiente sección S31.
Para profundizar más
El texto principal es una descripción reconstruida directamente por BPD. Para un aprendizaje más profundo, utilice los siguientes materiales de referencia:
- Libro web gratuito: Single-cell best practices (sc-best-practices.org) — Los capítulos sobre clústeres y anotación tratan en detalle la selección de resolución y las estrategias de anotación.
- Artículo original (Leiden): Traag, Waltman, van Eck (2019), From Louvain to Leiden: guaranteeing well-connected communities, Scientific Reports 9:5233. Su objetivo principal es resolver el problema de las comunidades desconectadas.
- Artículo original (Louvain): Blondel et al. (2008), Fast unfolding of communities in large networks, J. Stat. Mech. P10008.
- EMBL-EBI Training — Clustering and cell type annotation (con subtítulos). Presenta el procedimiento práctico para la anotación basada en marcadores.
Ahora que se ha completado el mapa con los tipos celulares identificados, surge un nuevo problema al combinar datos de múltiples pacientes y experimentos: las células se agrupan por lote experimental en lugar de por tipo celular. En el siguiente episodio S31, abordaremos la eliminación de este efecto de lote mediante Harmony·scVI, dando así por concluida la serie sobre análisis de células individuales.