From de1bdc263d4912851c38d5bf01a4ed1521b94c0a Mon Sep 17 00:00:00 2001 From: Yalbi Balderas-Martinez Date: Sat, 5 Aug 2023 00:06:57 -0600 Subject: [PATCH] Add files via upload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Corrección de Headers y Referencias --- 02_sesion4.Rmd | 498 ++++++++++--------------------------------------- 1 file changed, 103 insertions(+), 395 deletions(-) diff --git a/02_sesion4.Rmd b/02_sesion4.Rmd index 7ea17ab..be138c7 100644 --- a/02_sesion4.Rmd +++ b/02_sesion4.Rmd @@ -1,56 +1,12 @@ ---- -title: "**Identificación de genes marcadores**" -subtitle: "**Bioconductor** para datos transcriptómicos de célula única (**scRNA-seq**) -- **CDSB2023**" -author: - - "Yalbi I. Balderas-Martínez" -date: '`r Sys.Date()`' -output: - xaringan::moon_reader: - lib_dir: libs - css: xaringan-themer.css - nature: - highlightStyle: github - highlightLines: true - countIncrementalSlides: false - includes: - #in_header: - #- 'gtag.js' ---- - -```{css, echo = FALSE} -/* From https://github.com/yihui/xaringan/issues/147 */ -.scroll-output { - height: 80%; - overflow-y: scroll; -} -/* https://stackoverflow.com/questions/50919104/horizontally-scrollable-output-on-xaringan-slides */ -pre { - max-width: 100%; - overflow-x: scroll; -} -/* From https://github.com/yihui/xaringan/wiki/Font-Size */ -.tiny{ - font-size: 40% -} -/* From https://github.com/yihui/xaringan/wiki/Title-slide */ -.title-slide { - background-image: url(https://raw.githubusercontent.com/Bioconductor/OrchestratingSingleCellAnalysis/master/images/Workflow.png); - background-size: 33%; - background-position: 0% 100% -} -``` - ---- - -# Diapositivas de Peter Hickey +# Identificación de genes marcadores -Ver las diapositivas originales [aquí](https://docs.google.com/presentation/d/18NArqbfeo3Ujo8bcSJTWXirY8N4lEG-T_tFEqlI-uek/edit) +Instructora: [**Yalbi I. Balderas-Martínez**](http://Yalbibalderas.github.io/). -Plantilla desarrollada por: [Leonardo Collado-Torres](http://lcolladotor.github.io/) +## Diapositivas de Peter Hickey ---- +Ver las diapositivas originales [aquí](https://docs.google.com/presentation/d/18NArqbfeo3Ujo8bcSJTWXirY8N4lEG-T_tFEqlI-uek/edit) -# Motivación +## Motivación Ahora que hemos obtenido los clústeres, nos preguntamos, pero qué son? (e.g. ¿qué tipo celular es el clúster 1?) @@ -58,17 +14,10 @@ Ahora que hemos obtenido los clústeres, nos preguntamos, pero qué son? (e.g. Idea: Mirar las diferencias en los perfiles de expresión de las células de los diferentes clústeres ---- - -class: inverse center middle - -# Dataset ilustrativo: PBMC4k 10X sin filtrar - ---- - -# Dataset ilustrativo: PBMC4k 10X sin filtrar +## Dataset ilustrativo: PBMC4k 10X sin filtrar ```{r, warning=FALSE, message=FALSE} +# Usemos datos de pbmc4k library(BiocFileCache) bfc <- BiocFileCache() raw.path <- bfcrpath(bfc, file.path( @@ -78,10 +27,6 @@ raw.path <- bfcrpath(bfc, file.path( untar(raw.path, exdir = file.path(tempdir(), "pbmc4k")) ``` ---- - -# Dataset ilustrativo: PBMC4k 10X sin filtrar - ```{r, warning=FALSE, message=FALSE} library(DropletUtils) library(Matrix) @@ -89,18 +34,12 @@ fname <- file.path(tempdir(), "pbmc4k/raw_gene_bc_matrices/GRCh38") sce.pbmc <- read10xCounts(fname, col.names = TRUE) ``` -Dataset "Células mononucleares humanas de sangre periférica" de 10X Genomics - -Descripción [aquí](https://osca.bioconductor.org/unfiltered-human-pbmcs-10x-genomics.html) - -.footnote[Zheng, G. X. Y. et al. Massively parallel digital transcriptional profiling of single cells. Nat. Commun. 8, 14049 (2017)] - ---- +Dataset "Células mononucleares humanas de sangre periférica" de 10X Genomics (Zheng, G.X.Y. et al, 2017) ^[Zheng, G. X. Y. et al. Massively parallel digital transcriptional profiling of single cells. Nat. Commun. 8, 14049 (2017).] -# Dataset ilustrativo: PBMC4k 10X sin filtrar +### Anotación ```{r, warning=FALSE, message=FALSE} -# gene-annotation +# Anotación de los genes library(scater) rownames(sce.pbmc) <- uniquifyFeatureNames( rowData(sce.pbmc)$ID, rowData(sce.pbmc)$Symbol @@ -110,27 +49,26 @@ location <- mapIds(EnsDb.Hsapiens.v86, keys = rowData(sce.pbmc)$ID, column = "SEQNAME", keytype = "GENEID" ) -# cell-detection +# Detección de células set.seed(100) e.out <- emptyDrops(counts(sce.pbmc)) sce.pbmc <- sce.pbmc[, which(e.out$FDR <= 0.001)] ``` -.footnote[Zheng, G. X. Y. et al. Massively parallel digital transcriptional profiling of single cells. Nat. Commun. 8, 14049 (2017)] - ---- - -# Dataset ilustrativo: PBMC4k 10X sin filtrar +### Control de calidad ```{r, warning=FALSE, message=FALSE} -# quality-control +# Control de calidad stats <- perCellQCMetrics(sce.pbmc, subsets=list(Mito=which(location=="MT"))) high.mito <- isOutlier(stats$subsets_Mito_percent, type="higher") sce.pbmc <- sce.pbmc[,!high.mito] +``` -# normalization +### Normalización de los datos + +```{r, warning=FALSE, message=FALSE} library(scran) set.seed(1000) clusters <- quickCluster(sce.pbmc) @@ -138,27 +76,19 @@ sce.pbmc <- computeSumFactors(sce.pbmc, cluster=clusters) sce.pbmc <- logNormCounts(sce.pbmc) ``` -.footnote[Zheng, G. X. Y. et al. Massively parallel digital transcriptional profiling of single cells. Nat. Commun. 8, 14049 (2017)] - ---- - -# Dataset ilustrativo: PBMC4k 10X sin filtrar +### Genes variables ```{r, warning=FALSE, message=FALSE} -# variance modelling +# Identificación de genes altamente variables set.seed(1001) dec.pbmc <- modelGeneVarByPoisson(sce.pbmc) top.pbmc <- getTopHVGs(dec.pbmc, prop = 0.1) ``` -.footnote[Zheng, G. X. Y. et al. Massively parallel digital transcriptional profiling of single cells. Nat. Commun. 8, 14049 (2017)] - ---- - -# Dataset ilustrativo: PBMC4k 10X sin filtrar +### Reducción de dimensiones ```{r, warning=FALSE, message=FALSE} -# dimensionality-reduction +# Reducción de dimensiones set.seed(10000) sce.pbmc <- denoisePCA(sce.pbmc, subset.row=top.pbmc, technical=dec.pbmc) @@ -170,147 +100,75 @@ set.seed(1000000) sce.pbmc <- runUMAP(sce.pbmc, dimred="PCA") ``` -.footnote[Zheng, G. X. Y. et al. Massively parallel digital transcriptional profiling of single cells. Nat. Commun. 8, 14049 (2017)] - ---- - -# Dataset ilustrativo: PBMC4k 10X sin filtrar +### Clustering ```{r, warning=FALSE, message=FALSE} -# clustering +# Clustering g <- buildSNNGraph(sce.pbmc, k=10, use.dimred="PCA") clust <- igraph::cluster_walktrap(g)$membership sce.pbmc$cluster <- factor(clust) ``` -.footnote[Zheng, G. X. Y. et al. Massively parallel digital transcriptional profiling of single cells. Nat. Commun. 8, 14049 (2017)] - ---- - -class: inverse center middle - -# Motivación - continuación - ---- - -# Motivación - -```{r, warning=FALSE, message=FALSE, fig.show='hide'} -# Is gene 1 associated with the clustering? -plotExpression(sce.pbmc, features=rownames(sce.pbmc)[659], - x="cluster", colour_by="cluster") -``` - ---- - -# Motivación - -```{r, warning=FALSE, message=FALSE, echo=FALSE} -# Is gene 1 associated with the clustering? -plotExpression(sce.pbmc, features=rownames(sce.pbmc)[1], - x="cluster", colour_by="cluster") -``` - ---- - -# Motivación - -```{r, warning=FALSE, message=FALSE, fig.show='hide'} -# Is gene 2 associated with the clustering? -plotExpression(sce.pbmc, features=rownames(sce.pbmc)[2], - x="cluster", colour_by="cluster") -``` - ---- +## Motivación - continuación -# Motivación +¿Algunos de estos genes están asociados con los resultados de _clustering_? -```{r, warning=FALSE, message=FALSE, echo=FALSE} -# Is gene 2 associated with the clustering? -plotExpression(sce.pbmc, features=rownames(sce.pbmc)[2], - x="cluster", colour_by="cluster") -``` - ---- - -# Motivación - -```{r, warning=FALSE, message=FALSE, fig.show='hide'} -# Is gene 2512 associated with the clustering? -plotExpression(sce.pbmc, features=rownames(sce.pbmc)[2512], - x="cluster", colour_by="cluster") +```{r, warning=FALSE, message=FALSE} +# El gen 1 está asociado con el clustering? +plotExpression(sce.pbmc, + features = rownames(sce.pbmc)[1], + x = "cluster", colour_by = "cluster" +) ``` ---- - -# Motivación - -```{r, warning=FALSE, message=FALSE, echo=FALSE} -# Is gene 2512 associated with the clustering? -plotExpression(sce.pbmc, features=rownames(sce.pbmc)[2512], - x="cluster", colour_by="cluster") +```{r, warning=FALSE, message=FALSE} +# El gen 2 está asociado con el clustering? +plotExpression(sce.pbmc, + features = rownames(sce.pbmc)[2], + x = "cluster", colour_by = "cluster" +) ``` ---- - -# Motivación - -```{r, warning=FALSE, message=FALSE, fig.show='hide'} -# Is gene 2512 associated with the clustering? -plotExpression(sce.pbmc, features="CD3E", - x="cluster", colour_by="cluster") +```{r, warning=FALSE, message=FALSE} +# El gen 252 está asociado con el clustering? +plotExpression(sce.pbmc, + features = rownames(sce.pbmc)[2512], + x = "cluster", colour_by = "cluster" +) ``` ---- - -# Motivación - -```{r, warning=FALSE, message=FALSE, echo=FALSE} -# Is gene 2512 associated with the clustering? -plotExpression(sce.pbmc, features="CD3E", - x="cluster", colour_by="cluster") +```{r, warning=FALSE, message=FALSE} +# El gen CD3E está asociado con el clustering? +plotExpression(sce.pbmc, + features = "CD3E", + x = "cluster", colour_by = "cluster" +) ``` ---- - -# Motivación - -Ver una gráfica como una forma de encontrar los genes marcadores obviamente no nos sirve a gran escala +* Ver una gráfica como una forma de encontrar los genes marcadores obviamente no nos sirve a gran escala -Necesitamos un método estadístico para identificar estos genes marcadores +* Necesitamos un método estadístico para identificar estos genes marcadores * 👉 La prueba t de Welch es una opción obvia para probar las diferencias en la expresión entre clústeres ---- +## Prueba t modificada de Welch pareada -# Prueba t modificada de Welch pareada - -* ➕ Rápidas y buenas propiedades estadísticas para un gran número de células [(Soneson and Robinson, 2018)](https://www.ncbi.nlm.nih.gov/pubmed/29481549) +* ➕ Rápidas y buenas propiedades estadísticas para un gran número de células (Soneson and Robinson, 2018) ^[Soneson C, Robinson MD. Bias, robustness and scalability in single-cell differential expression analysis. Nat Methods. 2018 Apr;15(4):255-261. doi: 10.1038/nmeth.4612. Epub 2018 Feb 26. PMID: 29481549.] * ➕ Las comparaciones pareadas proveen un _log-fold change_ para indicar cuáles clústeres son distinguidos por cada gen * 🤔 ¿Por qué no comparar cada clúster con el promedio de todas las otras células? - Sensible a la composición poblacional, una subpoblación dominante sola que dirige la selección de los marcadores _top_ para cualquier otro clúster ---- - -class: inverse center middle +## Ejemplo ilustrativo: CD3E como gen marcador en el dataset PBMC4k 10X -# Ejemplo ilustrativo: CD3E como gen marcador en el dataset PBMC4k 10X - ---- - -# Pruebas pareadas +### Pruebas pareadas ```{r, warning=FALSE, message=FALSE, echo=FALSE} plotExpression(sce.pbmc, features="CD3E", x="cluster", colour_by="cluster") ``` ---- - -# Pruebas pareadas - ```{r, warning=FALSE, message=FALSE, echo=FALSE} library(kableExtra) @@ -325,16 +183,13 @@ kable_styling(bootstrap_options = c("striped", "hover"), full_width = F, font_size = 12, position = "left") - ``` K = 18 clústeres K!/K-2)! = 306 comparaciones * La mitad de ellas son **redundantes** ---- - -# Combinando comparaciones del gen CD3E para el clúster 1 +### Combinando comparaciones del gen CD3E para el clúster 1 "Me interesa saber si el gen CD3 está diferencialmente expresado entre el clúster 1 y .." @@ -342,11 +197,9 @@ K!/K-2)! = 306 comparaciones - **todos** (**all**) los otros clústeres = P = 0.11 (Berger's intersection-union test) - **algunos** (**some**) de los otros clústeres = P = 2.0 x 10-44 (mediana u otro cuantil, Holm-adjusted P-values) ---- +### Extendiendo a todos los genes -# Extendiendo a todos los genes - -```{r, warning=FALSE, message=FALSE} +```{r, warning=FALSE, message=FALSE, eval = FALSE} # scran::pairwiseTTests() # scran::combineMarkers() ``` @@ -357,15 +210,7 @@ K!/K-2)! = 306 comparaciones - Comparaciones involucrando clúster ... - Comparaciones involucrando clúster 18 ---- - -class: inverse center middle - -# Aplicación estándar - ---- - -# Aplicación estándar +## Aplicación estándar Para cada clúster, usar pruebas **t de Welch** para identificar los genes que están diferencialmente expresados entre éste y **cualquier** (**any**) otro clúster @@ -376,36 +221,19 @@ markers.pbmc <- findMarkers(sce.pbmc, groups=sce.pbmc$cluster, test.type="t", pval.type="any") ``` ---- - -# Aplicación estándar +### Explorando los resultados ```{r, warning=FALSE, message=FALSE} chosen <- "9" interesting <- markers.pbmc[[chosen]] ``` ---- - -# Aplicación estándar - ```{r, warning=FALSE, message=FALSE, fig.show='hide'} plotExpression(sce.pbmc, rownames(interesting)[1:4], x="cluster", colour_by="cluster") ``` ---- - -# Aplicación estándar - -```{r, warning=FALSE, message=FALSE, echo=FALSE} -plotExpression(sce.pbmc, rownames(interesting)[1:4], - x="cluster", colour_by="cluster") -``` - ---- - -# Aplicación estándar +### Con un heatmap ```{r, warning=FALSE, message=FALSE, fig.show="hide"} best.set <- interesting[interesting$Top <= 6,] @@ -416,33 +244,14 @@ library(pheatmap) pheatmap(logFCs, breaks=seq(-5, 5, length.out=101)) ``` -👉 Usamos el campo _Top_ para identificar un conjunto de genes que distinguen el clúster 9 de cualquier otro clúster. +👉 Usamos el campo _Top_ para identificar un conjunto de genes que distinguen al clúster 9 de cualquier otro clúster. El conjunto de genes con Top <= X es la unión del top X genes (ordenados por p-value) -de cada comparación de pares que involucran al cluster 9. Por ejemplo, el conjunto de todos los genes con valores Top 1 contienen el gen con el p-value mas pequeño de cada comparación. El conjunto de genes Top valor menor o igual a 10 contiene los 10 genes top de cada comparación. Se consolida en un ranking para cada clúster - ---- - -# Aplicación estándar - -```{r, warning=FALSE, message=FALSE, echo=FALSE} -best.set <- interesting[interesting$Top <= 6,] -logFCs <- as.matrix(best.set[,-(1:3)]) -colnames(logFCs) <- sub("logFC.", "", colnames(logFCs)) - -library(pheatmap) -pheatmap(logFCs, breaks=seq(-5, 5, length.out=101)) -``` +de cada comparación de pares que involucran al cluster 9. Por ejemplo, el conjunto de todos los genes con valores Top 1 contienen el gen con el p-value mas pequeño de cada comparación. El conjunto de genes Top valor menor o igual a 10 contiene los 10 genes top de cada comparación. Se consolida en un ranking para cada clúster. ---- +## Usando el _log-fold change_ -class: inverse center middle - -# Usando el _log-fold change_ - ---- - -# Usando el _log-fold change_ +### Sin especificar el lfc Para cada clúster, usa pruebas t de Welch para identificar los genes que están **sobreexpresados** entre éste y **cualquier** otro clúster @@ -453,9 +262,7 @@ markers.pbmc.up <- findMarkers(sce.pbmc, groups=sce.pbmc$cluster, interesting.up <- markers.pbmc.up[[chosen]] ``` ---- - -# Usando el _log-fold change_ +### Usando el lfc Para cada clúster, usa pruebas t de Welch para identificar los genes que están sobreexpresados con un log-fold change (lfc) o al menos 1 entre éste y **cualquier** otro clúster @@ -466,13 +273,12 @@ interesting.up2 <- markers.pbmc.up2[[chosen]] ``` * 👉 La prueba t también nos permite especificar un _log-fold change_ diferente de cero como la hipótesis nula -* 🤓 Es más riguroso que simplemente filtrar por _log-fold change_ [TREAT](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2654802/) +* 🤓 Es más riguroso que simplemente filtrar por _log-fold change_ (TREAT) ^[McCarthy DJ, Smyth GK. Testing significance relative to a fold-change threshold is a TREAT. Bioinformatics. 2009 Mar 15;25(6):765-71. doi: 10.1093/bioinformatics/btp053. Epub 2009 Jan 28. PMID: 19176553; PMCID: PMC2654802.] ---- -# Usando el _log-fold change_ +### Heatmap -```{r, warning=FALSE, message=FALSE, fig.show='hide'} +```{r, fig.height = 8} best.set <- interesting.up2[interesting.up2$Top <= 5,] logFCs <- as.matrix(best.set[,-(1:3)]) colnames(logFCs) <- sub("logFC.", "", colnames(logFCs)) @@ -484,10 +290,6 @@ pheatmap(logFCs, breaks=seq(-5, 5, length.out=101)) * ⚠️ El incremento del rigor no se da sin costo * ⚠️ Si el _lfc_ es muy grande podría descartar genes útiles - E.g., un gen sobreexpresado en una proporción pequeña de células en un clúster sigue siendo un marcador efectivo si el foco está en la especificidad más que en la sensibilidad - ---- - -# Usando el _log-fold change_ ```{r, warning=FALSE, message=FALSE, echo=FALSE} best.set <- interesting.up2[interesting.up2$Top <= 5,] @@ -497,24 +299,12 @@ colnames(logFCs) <- sub("logFC.", "", colnames(logFCs)) pheatmap(logFCs, breaks=seq(-5, 5, length.out=101)) ``` ---- - -class: inverse center middle - -# Encontrando marcadores específicos de clústeres - ---- - -# Encontrando marcadores específicos de clústeres +## Encontrando marcadores específicos de clústeres * 👉 Por defecto, `scran::findMarkers()` dará un alto rango a genes que están DE en cualquier comparación pareada * 🤔 Quiero genes que son específicos de cada clúster * 👉 Tú quieres genes que son DE en todas las comparaciones pareadas ---- - -# Encontrando marcadores específicos de clústeres - Para cada clúster, usa pruebas t de Welch para identificar genes que están sobreexpresados entre éste y **todos** los otros clústeres Considera todos los genes que están diferencialmente expresados en todas las comparaciones pareadas incluyendo al clúster de interés @@ -525,16 +315,14 @@ markers.pbmc.up3 <- findMarkers(sce.pbmc, groups=sce.pbmc$cluster, interesting.up3 <- markers.pbmc.up3[[chosen]] ``` -🤓 Usa una prueba de unión-intersección para combinar los P-values que es el máximo P-value de todas las comparaciones pareadas +🤓 Usa una prueba de unión-intersección para combinar los P-values que es el máximo P-value de todas las comparaciones pareadas. Un gen solo logrará un bajo nivel de P-value combinado si está fuertemente DE en todas las comparaciones - cuando funciona es muy efectivo - te da un pequeño conjunto de marcadores candidatos. -Un gen que esté al mismo nivel que los demás clústers no será detectado. -No nos serviría para diferenciar en las poblaciones CD4 CD8 - ---- +Un gen que esté al mismo nivel que los demás clústeres no será detectado. +No nos serviría para diferenciar en las poblaciones CD4 CD8. -# Pros/cons de los genes marcadores específicos de los clústeres +### Pros/cons de los genes marcadores específicos de los clústeres ```{r, warning=FALSE, message=FALSE, echo=FALSE} library(kableExtra) @@ -552,11 +340,9 @@ kable_styling(bootstrap_options = c("striped", "hover"), position = "left") ``` ---- - -# Encontrando los genes marcadores específicos por clúster +### findMarkers con pval.type some -Para cada clúster, usa pruebas t de Welch para identificar los genes que están sobreexpresados entre éste y **algunos** de los otros clústers +Para cada clúster, usa pruebas t de Welch para identificar los genes que están sobreexpresados entre éste y **algunos** de los otros clústers. ```{r, warning=FALSE, message=FALSE} markers.pbmc.up4 <- findMarkers(sce.pbmc, groups=sce.pbmc$cluster, @@ -572,17 +358,9 @@ Se aplica un rango para obtener el conjunto de los mejores marcadores * ⚠️ Perderás algunas garantías ofrecidas por los otros métodos -# Ejercicio: intenten ustedes hacer este caso por su cuenta - ---- - -class: inverse center middle - -# Pruebas alternas +## Pruebas alternas ---- - -# Motivación +### Motivación La prueba t no es la única forma de comparar dos grupos de mediciones @@ -592,9 +370,7 @@ La prueba t no es la única forma de comparar dos grupos de mediciones * 🤔 Quiero identificar genes que son expresados más frecuentemente en un clúster que en otro - 👉 Prueba Binomial ---- - -# Prueba de rangos de Wilcoxon +## Prueba de rangos de Wilcoxon Evalúa directamente la separación entre la distribución de la expresión de los diferentes clústeres @@ -604,9 +380,7 @@ Evalúa directamente la separación entre la distribución de la expresión de l * 🤓 También se conoce como prueba Wilcoxon-Mann-Whitney (WMW) ---- - -# Prueba de rangos de Wilcoxon +### findMarkers para Wilcoxon Para cada clúster, usa la prueba de rangos de Wilcoxon para identificar genes que están sobreexpresados entre éste y **cualquier** otro clúster @@ -617,9 +391,7 @@ markers.pbmc.wmw <- findMarkers(sce.pbmc, interesting.wmw <- markers.pbmc.wmw[[chosen]] ``` ---- - -# Prueba de rangos de Wilcoxon +### Heatmap de genes marcadores con Wilcoxon ```{r, warning=FALSE, message=FALSE, fig.show='hide'} best.set <- interesting.wmw[interesting.wmw$Top <= 5,] @@ -630,26 +402,13 @@ pheatmap(AUCs, breaks=seq(0, 1, length.out=21), color=viridis::viridis(21)) ``` ---- - -# Prueba de rangos de Wilcoxon - -```{r, warning=FALSE, message=FALSE, echo=FALSE} -pheatmap(AUCs, breaks=seq(0, 1, length.out=21), - color=viridis::viridis(21)) -``` - ---- - -# Resumen de la prueba de rangos de Wilcoxon +### Resumen de la prueba de rangos de Wilcoxon * ➕ Ofrece directamente la propiedad deseable de un gen marcador (i.e. que el gen distinga perfectamente entre dos clústeres) * ➕ Es simétrico con respecto a las diferencias en el tamaño de los grupos comparados * ➖ Es mucho más lento comparado con la prueba t (aunque esto en general no es un problema en la práctica) ---- - -# Prueba binomial +## Prueba binomial * Es una prueba que identifica los genes que difieren en la proporción de células que se expresan entre clústeres * Una definición mucho más estricta de genes marcadores @@ -657,9 +416,7 @@ pheatmap(AUCs, breaks=seq(0, 1, length.out=21), * 🤓 Convierte la expresión en una medida binaria de presencia/ausencia, por lo que toda la información cuantitativa es ignorada - Desde una perspectiva práctica, puede ser más fácil para validar ---- - -# Prueba binomial +### findMarkers para binomial Para cada clúster, usa la prueba Binomial para identificar genes que están más frecuentemente expresados (sobreexpresados) en comparación con cualquier otro clúster @@ -673,54 +430,36 @@ interesting.binom <- markers.pbmc.binom[[chosen]] * 🤓 El efecto en el tamaño se reporta como el _log-fold change_ en la proporción de las células que se expresan entre clústeres * 👉 _Log-fold changes_ grandes positivos, indican que el gen está más frecuentemente expresado en un clúster comparado con otro ---- - -# Prueba binomial +### Visualizando genes marcadores de la prueba binomial ```{r, warning=FALSE, message=FALSE, fig.show='hide'} top.genes <- head(rownames(interesting.binom)) plotExpression(sce.pbmc, x="cluster", features=top.genes) ``` ---- - -# Prueba binomial - ```{r, warning=FALSE, message=FALSE, echo=FALSE} top.genes <- head(rownames(interesting.binom)) plotExpression(sce.pbmc, x="cluster", features=top.genes) ``` ---- - -# Resumen de la prueba binomial +### Resumen de la prueba binomial * La prueba Binomial no toma en cuenta la normalización - * ➕ Produce genes marcadores que pueden ser más fáciles de validar - * ➖ Ser más estricto puede llevar a la pérdida de buenos marcadores candidatos ---- - -# Métodos de expresión diferencial personalizados +## Métodos de expresión diferencial personalizados * 🤔 ¿Por qué no usar edgeR/DESeq2/limma-voom u otros métodos personalizados (e.g., MAST)? -* 👉 Claro que puedes! [Checa OSCA](https://osca.bioconductor.org/marker-detection.html#using-custom-de-methods) +* 👉 Claro que puedes! [Checa OSCA](https://bioconductor.org/books/3.17/OSCA.advanced/marker-detection-redux.html#using-custom-de-methods) * 👉 Pero éstos son tal vez algo exagerados para identificar genes marcadores * 🤓 Las células son nuestras "réplicas" para el propósito de identificar genes marcadores * 🤓 edgeR/DESeq2/limma-voom hacen asunciones más fuertes acerca de los datos que es más probable que no se cumplan para células individuales en scRNA-seq ---- - -class: inverse center middle - -# Problemas estadísticos +## Problemas estadísticos ---- - -# Invalidez de P-values +### Invalidez de P-values Todas las estrategias de DE para detectar genes marcadores entre clústeres son estadísticamente defectuosas de alguna manera @@ -728,29 +467,15 @@ Todas las estrategias de DE para detectar genes marcadores entre clústeres son * 👉 Las pruebas para genes DE entre clústeres producirá inevitablemente algunos resultados significativos y así es como los clústeres serán definidos! ---- - -# Invalidez de P-values - 👉 Aún cuando los P-values son defectuosos, el efecto no es muy dañino para la detección de genes ya que los P-values solo son usados para los rangos 🤓 No se pueden usar P-values para definir "diferencias significativas" entre los clústeres con respecto a un umbral de la tasa de error ---- - -# Naturaleza de la replicación +### Naturaleza de la replicación 👉 Idealmente, validar algunos de los marcadores con una población de células independientes (y idealmente usando una técnica diferente, e.g., hibridación fluorescente _in situ_ o qPCR) ---- - -class: inverse center middle - -# Comentarios adicionales - ---- - -# Comentarios adicionales +### Comentarios adicionales * 👉 La estrategia de análisis DE es que los marcadores son definidos relativo a subpoblaciones en el mismo dataset * 👉 Si un gen se expresa uniformemente a través de la población no servirá como un marcador @@ -758,46 +483,29 @@ class: inverse center middle - usualmente no es un problema, ya que tenemos idea de las células que se capturaron * 👉 Existen métodos de machine learning para hacer la identificación de los genes marcadores, pero la humilde prueba t sigue siendo muy buena ---- - -class: inverse center middle - -# Resumen y recomendaciones - ---- - -# Resumen y recomendaciones +### Resumen y recomendaciones * 👉 Crea múltiples listas de genes marcadores con diferentes niveles de rigor * 👉 La forma más simple de interpretar los genes marcadores es que son los sobreexpresados de "forma única", o son "genes específicos de clústeres", especialmente si queremos imponer un _log-fold change_ mínimo * 👉 Puedes requerir hacer una identificación de genes marcadores más enfocada, e.g., subset de los datos de solo 2 clústeres de interés y entonces correr `scran::findMarkers()` ---- - -La presentación fue hecha con el paquete de R [**xaringan**](https://github.com/yihui/xaringan) y configurada con [**xaringanthemer**](https://github.com/gadenbuie/xaringanthemer). - -Este curso está basado en el libro [**Orchestrating Single Cell Analysis with Bioconductor**](https://osca.bioconductor.org/) de [Aaron Lun](https://www.linkedin.com/in/aaron-lun-869b5894/), [Robert Amezquita](https://robertamezquita.github.io/), [Stephanie Hicks](https://www.stephaniehicks.com/) y [Raphael Gottardo](http://rglab.org), además del [**curso de scRNA-seq para WEHI**](https://drive.google.com/drive/folders/1cn5d-Ey7-kkMiex8-74qxvxtCQT6o72h) creado por [Peter Hickey](https://www.peterhickey.org/). - -Puedes encontrar los archivos para este taller en [comunidadbioinfo/cdsb2021](https://github.com/comunidadbioinfo/cdsb2023). +## Detalles de la sesión de R -Instructora: [**Yalbi I. Balderas-Martínez**](http://Yalbibalderas.github.io/). - -.footnote[Descarga los materiales con `usethis::use_course('comunidadbioinfo/cdsb2023')` o revísalos en línea vía [**comunidadbioinfo.github.io/cdsb2023**](http://comunidadbioinfo.github.io/cdsb2023).] +```{r 'reproducibility', cache = TRUE, dependson=knitr::all_labels()} +options(width = 120) +sessioninfo::session_info() +``` ---- +## Patrocinadores {-} -# Detalles de la sesión de R +La presentación fue hecha con el paquete de R [**xaringan**](https://github.com/yihui/xaringan) y configurada con [**xaringanthemer**](https://github.com/gadenbuie/xaringanthemer). +Este curso está basado en el libro [**Orchestrating Single Cell Analysis with Bioconductor**](https://bioconductor.org/books/release/OSCA/) de [Aaron Lun](https://www.linkedin.com/in/aaron-lun-869b5894/), [Robert Amezquita](https://robertamezquita.github.io/), [Stephanie Hicks](https://www.stephaniehicks.com/) y [Raphael Gottardo](https://www.sib.swiss/raphael-gottardo-group), además del [**curso de scRNA-seq para WEHI**](https://drive.google.com/drive/folders/1cn5d-Ey7-kkMiex8-74qxvxtCQT6o72h) creado por [Peter Hickey](https://www.peterhickey.org/). -.scroll-output[ -.tiny[ +Puedes encontrar los archivos para este taller en [comunidadbioinfo/cdsb2023](https://github.com/comunidadbioinfo/cdsb2023). -```{r 'reproducibility', cache = TRUE, dependson=knitr::all_labels()} -options(width = 120) -sessioninfo::session_info() -``` +Descarga los materiales con `usethis::use_course('comunidadbioinfo/cdsb2023')` o revísalos en línea vía [**comunidadbioinfo.github.io/cdsb2023**](http://comunidadbioinfo.github.io/cdsb2023). -]]