- t-SNE: Visualización No Lineal de Datos Genómicos
t-SNE: Visualización No Lineal de Datos Genómicos
El análisis de datos genómicos moderno, como la secuenciación de ARN de célula única (scRNA-seq), genera conjuntos de datos de alta dimensionalidad con miles de genes por muestra. Técnicas lineales como PCA son insuficientes para capturar la estructura no lineal y las relaciones complejas entre subpoblaciones celulares. Aquí es donde t-SNE (t-distributed Stochastic Neighbor Embedding) se convierte en una herramienta indispensable, permitiendo proyectar datos de alta dimensión a un espacio de 2 o 3 dimensiones preservando la estructura local de los vecindarios.
Limitaciones de PCA para Datos No Lineales
PCA encuentra direcciones de máxima varianza mediante una transformación lineal. Sin embargo, los datos biológicos a menudo residen en variedades no lineales (múltiples) incrustadas en el espacio de alta dimensión. PCA no puede "desenrollar" estas estructuras, resultando en visualizaciones donde grupos celulares se superponen o distorsionan.
- Linealidad: PCA asume que las relaciones entre variables son lineales.
- Pérdida de estructura local: PCA optimiza la varianza global, ignorando vecindarios locales.
- Ejemplo genómico: Dos tipos celulares similares pueden aparecer separados por PCA debido a ruido técnico, mientras que t-SNE los agrupa correctamente.
Conceptos Fundamentales de t-SNE
t-SNE convierte las distancias de alta dimensión en probabilidades de similitud y luego busca una representación en baja dimensión que minimice la discrepancia entre estas probabilidades. El algoritmo se basa en dos distribuciones clave:
Distribución Gaussiana en Alta Dimensión
Para cada punto i, se centra una distribución Gaussiana sobre él. La probabilidad de que i elija a j como vecino, denotada como pj|i, es proporcional a la densidad de la Gaussiana en la distancia entre i y j. La perplejidad controla la varianza de esta Gaussiana (número efectivo de vecinos).
Distribución t-Student en Baja Dimensión
En el espacio de baja dimensión (2D o 3D), se usa la distribución t-Student con 1 grado de libertad (distribución de Cauchy) para medir similitudes. Esto permite que puntos distantes en alta dimensión aparezcan adecuadamente separados en baja dimensión, evitando el "problema de hacinamiento" (crowding problem).
Minimización de Divergencia KL
El algoritmo optimiza la posición de los puntos en baja dimensión para minimizar la divergencia Kullback-Leibler entre las distribuciones de probabilidad conjuntas de alta y baja dimensión. Esto equivale a maximizar la similitud entre los vecindarios.
# Pseudocódigo conceptual del gradiente de t-SNE
para cada iteración:
calcular p_ij (alta dim) usando Gaussiana con sigma dada por perplexity
calcular q_ij (baja dim) usando t-Student
actualizar coordenadas y_i, y_j según gradiente de KL
Parámetros Críticos en t-SNE
Los resultados de t-SNE dependen fuertemente de tres hiperparámetros. A continuación se describen con recomendaciones para datos genómicos:
| Parámetro | Rol | Recomendación para genómica |
|---|---|---|
| Perplexity | Controla el equilibrio entre estructura local y global. Es una estimación del número de vecinos efectivos. | Entre 5 y 50. Para datos de scRNA-seq con miles de células, valores de 20-30 suelen funcionar bien. |
| Learning rate | Tamaño del paso en la optimización. Valores muy altos o bajos pueden atascar el algoritmo. | Generalmente entre 100 y 1000. Un valor típico es 200. |
| Número de iteraciones | Número de pasos de optimización. Debe ser suficiente para converger. | Al menos 1000. Para resultados robustos, 2000-5000 iteraciones. |
Aplicación en Genómica: Visualización de Subpoblaciones Celulares
En genómica de célula única, t-SNE se usa para reducir la expresión génica de miles de genes a 2D con el fin de identificar subpoblaciones celulares. El proceso típico incluye:
- Preprocesamiento: Filtrado de células de baja calidad, normalización, log-transformación.
- Selección de genes altamente variables.
- Reducción con PCA (opcional): Se suele reducir primero a 50-100 PCs para eliminar ruido.
- Ejecución de t-SNE sobre los PCs para visualizar en 2D.
El resultado permite observar agrupaciones que corresponden a tipos celulares conocidos (células T, B, NK, monocitos, etc.) y potencialmente descubrir nuevas poblaciones.
Ejemplo con Datos de RNA-seq (Scikit-learn y openTSNE)
A continuación se presenta un ejemplo completo usando scikit-learn (implementación estándar de t-SNE) y openTSNE (una versión más rápida y precisa). Se usará un dataset sintético simulando expresión génica de 3 tipos celulares.
# Instalación (si es necesario):
# pip install openTSNE scikit-learn matplotlib
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.manifold import TSNE
from openTSNE import TSNE as openTSNE
# Generar datos sintéticos: 300 muestras, 2000 genes, 3 clústeres
np.random.seed(42)
X, y = make_blobs(n_samples=300, n_features=2000, centers=3, cluster_std=1.5)
# Aplicar t-SNE con scikit-learn
tsne_sk = TSNE(n_components=2, perplexity=30, learning_rate=200, n_iter=1000, random_state=42)
X_tsne_sk = tsne_sk.fit_transform(X)
# Aplicar t-SNE con openTSNE (más rápido)
tsne_op = openTSNE(n_components=2, perplexity=30, learning_rate=200, n_iter=1000, random_state=42)
X_tsne_op = tsne_op.fit(X)
# Visualizar resultados
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
ax1.scatter(X_tsne_sk[:, 0], X_tsne_sk[:, 1], c=y, cmap='viridis', s=10)
ax1.set_title('t-SNE (scikit-learn)')
ax1.set_xlabel('t-SNE 1')
ax1.set_ylabel('t-SNE 2')
ax2.scatter(X_tsne_op[:, 0], X_tsne_op[:, 1], c=y, cmap='viridis', s=10)
ax2.set_title('t-SNE (openTSNE)')
ax2.set_xlabel('t-SNE 1')
ax2.set_ylabel('t-SNE 2')
plt.tight_layout()
plt.show()
Consideraciones y Buenas Prácticas
- No uses t-SNE para clustering: Las distancias entre clústeres en el mapa t-SNE no son interpretables. Úsalo solo como visualización exploratoria.
- Reproducibilidad: Fija la semilla aleatoria (random_state) para obtener resultados consistentes.
- Preprocesamiento robusto: Normaliza y escala los datos. En genómica, usa log(CPM+1) o SCTransform.
- No abuses de la dimensionalidad: Reducir de 2000 genes a 2 directamente puede ser lento. Reduce primero con PCA a 30-100 componentes.
- Alternativas: UMAP es otra técnica de visualización no lineal que preserva mejor la estructura global y es más rápida. Considérala como complemento.
Conclusión
t-SNE sigue siendo una herramienta estándar en el análisis de datos genómicos de alta dimensionalidad, especialmente en scRNA-seq. Su capacidad para revelar subpoblaciones celulares mediante proyecciones no lineales es invaluable. Con una comprensión clara de sus parámetros y limitaciones, puedes generar visualizaciones informativas que guíen el descubrimiento biológico. Recuerda siempre validar los clústeres observados con métodos estadísticos independientes.
No hay comentarios por ahora.
Compartir este contenido
Compartir enlace
Compartir en redes sociales
Compartir por correo electrónico
Please iniciar sesión para compartir esto Artículo por correo electrónico.