diff --git a/02_sesion2.Rmd b/02_sesion2.Rmd index e4c7a5c..19fcf0b 100644 --- a/02_sesion2.Rmd +++ b/02_sesion2.Rmd @@ -8,11 +8,11 @@ Contenido adaptado de: [aquí](https://docs.google.com/presentation/d/12CjvQ1beZ ## Motivación -El siguiente paso en el análisis de scRNA-seq usualmente consiste en identificar grupos de células "similares" +El siguiente paso en el análisis de scRNA-seq usualmente consiste en identificar grupos de células "similares". -Por ejemplo: un análisis de clustering busca identificar células con un perfil transcriptómico similar al calcular distancias entre ellas +Por ejemplo: un análisis de clustering busca identificar células con un perfil transcriptómico similar al calcular distancias entre ellas. -Si tuviéramos un dataset con dos genes podríamos hacer una gráfica de dos dimensiones para identificar clusters de células +Si tuviéramos un dataset con dos genes podríamos hacer una gráfica de dos dimensiones para identificar clusters de células.
@@ -31,9 +31,9 @@ Por lo tanto, no necesitamos almacenar información independiente para genes ind **Ventajas:** -- Reduce trabajo computacional en análisis posteriores -- Reduce el ruido al "promediar" mútiples genes obteniendo una representación más precisa de los patrones en los datos -- Permite una graficación efectiva en dos dimensiones +- Reduce trabajo computacional en análisis posteriores. +- Reduce el ruido al "promediar" mútiples genes obteniendo una representación más precisa de los patrones en los datos. +- Permite una graficación efectiva en dos dimensiones. ## Dataset ilustrativo: Zeisel @@ -169,7 +169,7 @@ top.pbmc <- getTopHVGs(dec.pbmc, prop = 0.1) ## Análisis de Componentes Principales -PCA es el arma principal de la reducción de dimensionalidad +PCA es el arma principal de la reducción de dimensionalidad. **PCA descubre las combinaciones (lineales) de "features" que capturan la cantidad más grande de variación** @@ -177,17 +177,17 @@ En un PCA, la primer combinación lineal (componente principal) se elige tal que ### PCA aplicado a datos de scRNA-seq -Podemos realizar reducción de dimensionalidad al aplicar PCA en la matriz de cuentas transformadas (log-counts matrix) y restringiendo los análisis posteriores a los primeros PCs **(top PCs)** +Podemos realizar reducción de dimensionalidad al aplicar PCA en la matriz de cuentas transformadas (log-counts matrix) y restringiendo los análisis posteriores a los primeros PCs **(top PCs)**. -* Esto puede reducir nuestro dataset de 20,000 dimensiones a, digamos, 10, sin perder demasiada información +* Esto puede reducir nuestro dataset de 20,000 dimensiones a, digamos, 10, sin perder demasiada información. * La técnica de PCA tiene muchas propiedades teóricas bien estudiadas. * Hay varias formas rápidas de realizar PCA en datasets grandes. ### Suposiciones de PCA aplicadas a los datos de scRNA-seq -* Los procesos biológicos afectan múltiples genes en una manera coordinada -* Los primeros PCs probablemente representan la estructura biológica dado que más variación puede ser capturada considerando el comportamiento correlacionado de muchos genes -* Se espera que el ruido técnico azaroso afecte cada gen independientemente +* Los procesos biológicos afectan múltiples genes en una manera coordinada. +* Los primeros PCs probablemente representan la estructura biológica dado que más variación puede ser capturada considerando el comportamiento correlacionado de muchos genes. +* Se espera que el ruido técnico azaroso afecte cada gen independientemente. **Consideración: Los primeros PCs capturarón "batch effects" (efectos de lote) que afectan muchos genes en una manera coordinada** @@ -205,15 +205,15 @@ sce.zeisel <- runPCA(sce.zeisel, **¿Estamos corriendo el análisis sobre todos los genes de nuestro dataset?** -Por default, **runPCA()** usa un método rápido aproximado que realiza simulaciones, por lo tanto, es necesario *'configurar la semilla'* para obtener resultados reproducibles +Por default, **runPCA()** usa un método rápido aproximado que realiza simulaciones, por lo tanto, es necesario *'configurar la semilla'* para obtener resultados reproducibles. ### Eligiendo el número de PCs **Esta elección en análoga a la elección del número de highly variable genes (HGV). Elegir más PCs evitará descartar señal biológica a expensas de retener más ruido** -* Es común seleccionar un número de PCs "razonable" pero **arbitrario** (10-50), continuar con el análisis y regresar para checar la robustez de los resultados en cierto rango de valores +* Es común seleccionar un número de PCs "razonable" pero **arbitrario** (10-50), continuar con el análisis y regresar para checar la robustez de los resultados en cierto rango de valores. -Ahora exploraremos algunas estrategias guiadas por los datos (*data-driven*) para hacer esta selección +Ahora exploraremos algunas estrategias guiadas por los datos (*data-driven*) para hacer esta selección. #### Usando el punto del codo @@ -225,11 +225,11 @@ plot(percent.var, xlab = "PC", ylab = "Variance explained (%)") abline(v = chosen.elbow, col = "red") ``` -Una heurística simple es elegir el número de PCs basado en el **porcentaje de varianza explicado** por PCs sucesivos +Una heurística simple es elegir el número de PCs basado en el **porcentaje de varianza explicado** por PCs sucesivos. #### Basados en la estructura de la población -Esta es una aproximación heurística más sofisticada que usa el número de clusters como un *proxy* del número de subpoblaciones +Esta es una aproximación heurística más sofisticada que usa el número de clusters como un *proxy* del número de subpoblaciones. ```{r } choices <- getClusteredPCs(reducedDim(sce.zeisel)) @@ -243,17 +243,17 @@ abline(v = chosen.clusters, col = "grey80", lty = 2) ``` -Supongamos que esperamos *d* subpoblaciones de células, en ese caso, necesitamos *d-1* dimensiones para garantizar la separación de todas las subpoblaciones +Supongamos que esperamos *d* subpoblaciones de células, en ese caso, necesitamos *d-1* dimensiones para garantizar la separación de todas las subpoblaciones. Pero... en un escenario real realmente no sabes cuántas poblaciones hay... - Intenta con un rango para *d* y únicamente considera valores que produzcan a lo más *d+1* clusters -- Cuando se seleccionan más clusters con menos dimensiones se produce 'overclustering' -- Elige una *d* que maximice el número de clusters sin caer en 'overclustering' +- Cuando se seleccionan más clusters con menos dimensiones se produce 'overclustering'. +- Elige una *d* que maximice el número de clusters sin caer en 'overclustering'. -**Ventaja**: Es una solución pragmática que soluciona el equilibrio sesgo-varianza en los análisis posteriores (especialmente en el análisis de clustering) +**Ventaja**: Es una solución pragmática que soluciona el equilibrio sesgo-varianza en los análisis posteriores (especialmente en el análisis de clustering). -**Desventaja**: Hace suposiciones fuertes sobre la naturaleza de las diferencias biológicas entre los clusters, y de hecho supone la existencia de clusters, los cuales podrían no existir en algunos procesos biológicos como la diferenciación +**Desventaja**: Hace suposiciones fuertes sobre la naturaleza de las diferencias biológicas entre los clusters, y de hecho supone la existencia de clusters, los cuales podrían no existir en algunos procesos biológicos como la diferenciación. ### Juntando todo @@ -276,20 +276,20 @@ reducedDim(sce.zeisel, "PCA_clusters") <- reducedDim( ### EJERCICIO 1. Realiza un PCA para los datos **sce.pbmc**. -2. Elige el número de PCs a conservar utilizando el método del codo -3. Elige el número de PCs a conservar utilizando la estructura de la población -4. Agrega esta información al objeto sce.pbmc +2. Elige el número de PCs a conservar utilizando el método del codo. +3. Elige el número de PCs a conservar utilizando la estructura de la población. +4. Agrega esta información al objeto sce.pbmc. ### Usando el ruido técnico -Otra ténica de reducción de dimensionalidades consiste en **conservar todos los PCs hasta que el % de variación explicado alcance algun límite** (por ejemplo, basado en la estimación de la variación técnica) +Otra técnica de reducción de dimensiones consiste en **conservar todos los PCs hasta que el % de variación explicado alcance algun límite** (por ejemplo, basado en la estimación de la variación técnica). -**denoisePCA()** automáticamente selecciona el número de PCs +**denoisePCA()** automáticamente selecciona el número de PCs. -Por default, denoisePCA() realiza algunas simulaciones, por lo tanto necesitamos *'configurar la semilla'* para obtener resultados reproducibles +Por default, denoisePCA() realiza algunas simulaciones, por lo tanto necesitamos *'configurar la semilla'* para obtener resultados reproducibles. ```{r, warning=FALSE, message=FALSE } library(scran) @@ -304,13 +304,13 @@ denoised.pbmc <- denoisePCA(sce.pbmc, dim(reducedDim(denoised.pbmc, "PCA")) ``` -La dimensionalidad del output es el límite inferior para el número de PCs requeridos para explicar toda la variación biológica. Lo que significa que cualquier número menor de PCs definitivamente descartará algún aspecto de la señal biológica +La dimensionalidad del output es el límite inferior para el número de PCs requeridos para explicar toda la variación biológica. Lo que significa que cualquier número menor de PCs definitivamente descartará algún aspecto de la señal biológica. **Esto no grantiza que los PCs retenidos capturen toda la señal biológica** **Esta técnica usualmente retiene más PCs que el método del punto del codo** -**scran::denoisePCA()** internamente limita el numero de PCs, por default 5-50, para evitar la selección de excesivamente pocos PCs (cuando el ruido técnico es alto relativo al ruido biológico) o excesivamente muchos PCs (cuando el ruido técnico es demasiado bajo) +**scran::denoisePCA()** internamente limita el numero de PCs, por default 5-50, para evitar la selección de excesivamente pocos PCs (cuando el ruido técnico es alto relativo al ruido biológico) o excesivamente muchos PCs (cuando el ruido técnico es demasiado bajo). #### ¿Qué pasa si calculamos la relación media-varianza con la función modelGeneVar para el dataset sce.pbmc (anteriormente usamos la función modelGeneVarByPoisson para este propósito)? @@ -322,9 +322,9 @@ denoised.pbmc2 <- denoisePCA(sce.pbmc, dim(reducedDim(denoised.pbmc2)) ``` -**scran::denoisePCA()** tiende a funcionar mejor cuando la relación media-varianza refleja el ruido técnico verdadero, *i.e* estimado por **scran::modelGeneVarByPoisson()** o **scran::modelGeneVarWithSpikes()** en vez de **scran::modelGeneVar()** +**scran::denoisePCA()** tiende a funcionar mejor cuando la relación media-varianza refleja el ruido técnico verdadero, *i.e* estimado por **scran::modelGeneVarByPoisson()** o **scran::modelGeneVarWithSpikes()** en vez de **scran::modelGeneVar()**. - *El dataset PBMC está cerca de este límite inferior: el ruido técnico es alto relativo al ruido biológico* + *El dataset PBMC está cerca de este límite inferior: el ruido técnico es alto relativo al ruido biológico*. @@ -351,9 +351,9 @@ dim(reducedDim(denoised.zeisel, "PCA_clusters")) ### Motivación -Los algoritmos de clustering, así como la mayoría de los algoritmos, operan fácilmente sobre 10-50 (a lo más) PCs, pero ese número es aún demasiado para la visualización +Los algoritmos de clustering, así como la mayoría de los algoritmos, operan fácilmente sobre 10-50 (a lo más) PCs, pero ese número es aún demasiado para la visualización. -Por lo tanto, necesitamos estrategias adicionales para la reducción de dimensionalidad si queremos visualizar los datos +Por lo tanto, necesitamos estrategias adicionales para la reducción de dimensionalidad si queremos visualizar los datos. ### Visualizando con PCA @@ -368,7 +368,7 @@ plotReducedDim(sce.zeisel, ) ``` -PCA es una técnica lineal, por lo tanto, no es eficiente para comprimir diferencias en más de 2 dimensiones en los primeros 2 PCs +PCA es una técnica lineal, por lo tanto, no es eficiente para comprimir diferencias en más de 2 dimensiones en los primeros 2 PCs. ### Retos y resumen de la visualización con PCA @@ -381,12 +381,12 @@ plotReducedDim(sce.zeisel, **Ventajas:** -- PCA es predecible y no introducirá estructura aritficial en los datos -- Es determínistico y robusto a cambios pequeños en los valores de entrada +- PCA es predecible y no introducirá estructura artificial en los datos. +- Es determínistico y robusto a cambios pequeños en los valores de entrada. **Desventajas:** -- Usualmente la visualización no es suficiente para visualizar la naturaleza compleja de los datos de scRNA-seq +- Usualmente la visualización no es suficiente para visualizar la naturaleza compleja de los datos de scRNA-seq. ### Visualización con t-SNE @@ -422,7 +422,7 @@ plotReducedDim(sce.zeisel, #### Continuando -- Baja perplejidad favorece la resolución de la estructura fina, posiblemente al grado de que la visualización parece rudio random. +- Baja perplejidad favorece la resolución de la estructura fina, posiblemente al grado de que la visualización parece ruido random. ```{r, fig.width = 21 } @@ -443,24 +443,24 @@ p1 + p2 + p3 -El siguiente [foro](http://distill.pub/2016/misread-tsne/) discute la selección de parámetros para t-SNE con cierta profundidad +El siguiente [foro](http://distill.pub/2016/misread-tsne/) discute la selección de parámetros para t-SNE con cierta profundidad. -- No sobreinterpretes los resultados de t-SNE como un 'mapa' de las identidades de las células individuales -- Algunos componentes aleatorios y la selección de parámetros cambiarán la visualización -- La interpretación puede ser engañada por el tamaño y posición de los clusters -- t-SNE infla clusters densos y comprime clusters escasos -- t-SNE no está obligado a preservar las localizaciones relativas de clusters no-vecinos (no puedes interpretar distancias no locales) +- No sobreinterpretes los resultados de t-SNE como un 'mapa' de las identidades de las células individuales. +- Algunos componentes aleatorios y la selección de parámetros cambiarán la visualización. +- La interpretación puede ser engañada por el tamaño y posición de los clusters. +- t-SNE infla clusters densos y comprime clusters escasos. +- t-SNE no está obligado a preservar las localizaciones relativas de clusters no-vecinos (no puedes interpretar distancias no locales). **Aún así: t-SNE es una herramienta probada para visualización general de datos de scRNA-seq y sigue siendo muy popular** ### Visualización con UMAP -*Uniform manifold approximation and project (UMAP)* es una alternativa a t-SNE +*Uniform manifold approximation and project (UMAP)* es una alternativa a t-SNE. -Así como t-SNE, UMAP **intenta encontrar una representación (no lineal) de pocas dimensiones de los datos que preserve las distancias entre cada punto y sus vecinos en el espacio multi-dimensional** +Así como t-SNE, UMAP **intenta encontrar una representación (no lineal) de pocas dimensiones de los datos que preserve las distancias entre cada punto y sus vecinos en el espacio multi-dimensional**. -t-SNE y UMAP están basados en diferentes teorías matemáticas +t-SNE y UMAP están basados en diferentes teorías matemáticas. ```{r, fig.dim = c(6, 4) } set.seed(1100101001) @@ -473,9 +473,9 @@ plotReducedDim(sce.zeisel, Comparado con t-SNE: -- UMAP tiende a encontrar clusters visualmente más compactos -- Intenta preservar más de la estructura global que t-SNE -- Tiende a ser más rápido que t-SNE, lo cual puede ser importante para datasets grandes. La diferencia desaparece cuando se aplican sobre los primeros PCs +- UMAP tiende a encontrar clusters visualmente más compactos. +- Intenta preservar más de la estructura global que t-SNE. +- Tiende a ser más rápido que t-SNE, lo cual puede ser importante para datasets grandes. La diferencia desaparece cuando se aplican sobre los primeros PCs. #### Preguntas @@ -492,9 +492,9 @@ Comparado con t-SNE: