Contenido del curso

- 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.
Resumen clave: PCA es útil para preprocesamiento y reducción inicial, pero para visualización exploratoria de datos genómicos no lineales, t-SNE es superior.

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.
Consejo práctico: Siempre ejecuta t-SNE con diferentes valores de perplexity (10, 20, 30, 40) para verificar que los clústeres observados no sean artefactos.

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()
Interpretación: Ambos métodos separan claramente los tres grupos sintéticos. openTSNE suele ser más rápido y ofrece opciones avanzadas como inicialización por PCA.

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.

Limitaciones de PCA para datos no lineales. Conceptos de t-SNE: distribución gaussiana en alta dimensión, distribución t-Student en baja dimensión, minimización de divergencia KL. Parámetros críticos: perplexity, learning rate, número de iteraciones. Aplicación en genómica: reducción de expresión génica de miles de genes a 2D para visualizar subpoblaciones celulares. Ejemplo con datos de RNA-seq (scikit-learn o openTSNE).
Calificación
0 0

No hay comentarios por ahora.