4 Estructura e importe de datos
Instructoras: Elisa Márquez Zavala, Citlali Gil Aguillon.
Contenido adaptado de CDSB2020: Introducción a scRNA-seq, estructura e importe de datos de Leonardo Collado Torres.
4.1 Preprocesamiento de datos
4.1.1 Cell Ranger
cellranger
es un pipeline que provee 10x Genomics para procesar datos de scRNA-seq generados con la tecnología de Chromium de 10x Genomics
cellranger count
procesa los datos crudos de FASTQ y genera los archivos que podemos leer en R usandoDropletUtils::read10xCounts()
.
4.1.2 scPipe
scPipe
es otro pipeline para procesar datos crudos (en formato FASTQ) de tecnologías de scRNA-seq. Funciona para varias tecnologías y usaRsubread
para el paso de alineamiento.
we developed scPipe, an R/Bioconductor package that integrates barcode demultiplexing, read alignment, UMI-aware gene-level quantification and quality control of raw sequencing data generated by multiple protocols that include CEL-seq, MARS-seq, Chromium 10X, Drop-seq and Smart-seq.
Fuente: Tian et al, PLoS Comput Biol., 2018.
4.1.3 Etc
Hay muchos pipelines para procesar datos de scRNA-seq, porque a diferencia de bulk RNA-seq, en scRNA-seq hay muchas tecnologías en el mercado. Aunque tal vez la más común es la de 10x Genomics Chromium.
4.2 Estructura de SingleCellExperiment
Dentro del curso -y más ampliamente dentro de los análisis de scRNA-seq en R- emplearemos la clase SingleCellExperiment
.
Además recordemos que la interoperabilidad dentro de los paquetes de Bioconductor hará que facilmente puedas ajustarte más facilmente a otros paquetes que vayamos encontrando útiles (la infraestructura de los dato nos seguirá sirviendo!).
Podríamos dividir esta clase en cuatro categorias:
datos primarios y transformados (donde estaran lo)
metadata de datos (información de los genes o features, de las células y del experimento)
reduccion de dimensiones
experimentos alternativos
Todo lo anterior está ligado, por lo que hace más sencillo el manejo de subsets de interés
por ejemplo si nos interesa los genes x,y,z podríamos solicitarlos y con ello traer la información de las demás tablas
Examinaremos cada una de estas partes a detalle
Usaremos las diapositivas de Peter Hickey para explicar la clase SingleCellExperiment
en las siguientes diapositivas. A la par se demostrará el siguiente código.
4.3 Ejercicio 1
The A. T. L. Lun et al. (2017) dataset contains two 96-well plates of 416B cells (an immortalized mouse myeloid progenitor cell line), processed using the Smart-seq2 protocol (Picelli et al. 2014). A constant amount of spike-in RNA from the External RNA Controls Consortium (ERCC) was also added to each cell’s lysate prior to library preparation. High-throughput sequencing was performed and the expression of each gene was quantified by counting the total number of reads mapped to its exonic regions. Similarly, the quantity of each spike-in transcript was measured by counting the number of reads mapped to the spike-in reference sequences.
Fragmento obtenido de https://bioconductor.org/books/release/OSCA/lun-416b-cell-line-smart-seq2.html
library("scRNAseq")
.416b <- LunSpikeInData(which = "416b")
sce
# Carga el paquete SingleCellExperiment
library("SingleCellExperiment")
"Primera parte
aquí checamos el slot assays"
## [1] "Primera parte\naquí checamos el slot assays"
# Extrae la matriz de cuentas del set de datos de 416b
.416b <- counts(sce.416b)
counts# CHEQUEMOS clase y dimensiones
class(counts.416b) # es matriz
## [1] "matrix" "array"
dim(counts.416b) # indicará genes y células
## [1] 46604 192
# CONSTRUIR un nuevo objeto SCE de la matriz de cuentas !!!!!!
<- SingleCellExperiment(assays = list(counts = counts.416b))
sce
# Revisa el objeto que acabamos de crear
sce
## class: SingleCellExperiment
## dim: 46604 192
## metadata(0):
## assays(1): counts
## rownames(46604): ENSMUSG00000102693 ENSMUSG00000064842 ...
## ENSMUSG00000095742 CBFB-MYH11-mcherry
## rowData names(0):
## colnames(192): SLX-9555.N701_S502.C89V9ANXX.s_1.r_1
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 ...
## SLX-11312.N712_S508.H5H5YBBXX.s_8.r_1
## SLX-11312.N712_S517.H5H5YBBXX.s_8.r_1
## colData names(0):
## reducedDimNames(0):
## mainExpName: NULL
## altExpNames(0):
## ¿Qué tan grande es el objeto de R?
::obj_size(sce) / 1024^2 ## En MB lobstr
## 38.26031 B
# Accesa la matriz de cuenta del compartimento (slot) "assays"
# assays(sce, "counts")
# OJO: ¡esto puede inundar tu sesión de R!
# 1. El método general
assay(sce, "counts")[110:115, 1:3] # gene, cell
## SLX-9555.N701_S502.C89V9ANXX.s_1.r_1
## ENSMUSG00000097893 0
## ENSMUSG00000025915 8
## ENSMUSG00000046334 2
## ENSMUSG00000088916 0
## ENSMUSG00000046101 0
## ENSMUSG00000098234 63
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1
## ENSMUSG00000097893 0
## ENSMUSG00000025915 0
## ENSMUSG00000046334 3
## ENSMUSG00000088916 0
## ENSMUSG00000046101 0
## ENSMUSG00000098234 21
## SLX-9555.N701_S504.C89V9ANXX.s_1.r_1
## ENSMUSG00000097893 19
## ENSMUSG00000025915 1
## ENSMUSG00000046334 15
## ENSMUSG00000088916 0
## ENSMUSG00000046101 0
## ENSMUSG00000098234 17
# 2. El método específico para accesar la matriz de cuentas "counts"
counts(sce)[110:115, 1:3]
## SLX-9555.N701_S502.C89V9ANXX.s_1.r_1
## ENSMUSG00000097893 0
## ENSMUSG00000025915 8
## ENSMUSG00000046334 2
## ENSMUSG00000088916 0
## ENSMUSG00000046101 0
## ENSMUSG00000098234 63
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1
## ENSMUSG00000097893 0
## ENSMUSG00000025915 0
## ENSMUSG00000046334 3
## ENSMUSG00000088916 0
## ENSMUSG00000046101 0
## ENSMUSG00000098234 21
## SLX-9555.N701_S504.C89V9ANXX.s_1.r_1
## ENSMUSG00000097893 19
## ENSMUSG00000025915 1
## ENSMUSG00000046334 15
## ENSMUSG00000088916 0
## ENSMUSG00000046101 0
## ENSMUSG00000098234 17
# AGREGAR MAS ASSAYS
<- scater::logNormCounts(sce)
sce # Revisa el objeto que acabamos de actualizar
sce
## class: SingleCellExperiment
## dim: 46604 192
## metadata(0):
## assays(2): counts logcounts
## rownames(46604): ENSMUSG00000102693 ENSMUSG00000064842 ...
## ENSMUSG00000095742 CBFB-MYH11-mcherry
## rowData names(0):
## colnames(192): SLX-9555.N701_S502.C89V9ANXX.s_1.r_1
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 ...
## SLX-11312.N712_S508.H5H5YBBXX.s_8.r_1
## SLX-11312.N712_S517.H5H5YBBXX.s_8.r_1
## colData names(1): sizeFactor
## reducedDimNames(0):
## mainExpName: NULL
## altExpNames(0):
## ¿Qué tan grande es el objeto de R?
::obj_size(sce) / 1024^2 ## En MB lobstr
## 106.5302 B
# 1. El método general
assay(sce, "logcounts")[110:115, 1:3]
## SLX-9555.N701_S502.C89V9ANXX.s_1.r_1
## ENSMUSG00000097893 0.000000
## ENSMUSG00000025915 3.557154
## ENSMUSG00000046334 1.884687
## ENSMUSG00000088916 0.000000
## ENSMUSG00000046101 0.000000
## ENSMUSG00000098234 6.423258
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1
## ENSMUSG00000097893 0.000000
## ENSMUSG00000025915 0.000000
## ENSMUSG00000046334 2.087367
## ENSMUSG00000088916 0.000000
## ENSMUSG00000046101 0.000000
## ENSMUSG00000098234 4.569735
## SLX-9555.N701_S504.C89V9ANXX.s_1.r_1
## ENSMUSG00000097893 4.3052563
## ENSMUSG00000025915 0.9912494
## ENSMUSG00000046334 3.9835488
## ENSMUSG00000088916 0.0000000
## ENSMUSG00000046101 0.0000000
## ENSMUSG00000098234 4.1533513
# 2. El método específico para accesar la matriz de cuentas
# transformadas "logcounts"
logcounts(sce)[110:115, 1:3]
## SLX-9555.N701_S502.C89V9ANXX.s_1.r_1
## ENSMUSG00000097893 0.000000
## ENSMUSG00000025915 3.557154
## ENSMUSG00000046334 1.884687
## ENSMUSG00000088916 0.000000
## ENSMUSG00000046101 0.000000
## ENSMUSG00000098234 6.423258
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1
## ENSMUSG00000097893 0.000000
## ENSMUSG00000025915 0.000000
## ENSMUSG00000046334 2.087367
## ENSMUSG00000088916 0.000000
## ENSMUSG00000046101 0.000000
## ENSMUSG00000098234 4.569735
## SLX-9555.N701_S504.C89V9ANXX.s_1.r_1
## ENSMUSG00000097893 4.3052563
## ENSMUSG00000025915 0.9912494
## ENSMUSG00000046334 3.9835488
## ENSMUSG00000088916 0.0000000
## ENSMUSG00000046101 0.0000000
## ENSMUSG00000098234 4.1533513
# agregemos un assay mas, esta vez de manera manual
assay(sce, "counts_100") <- assay(sce, "counts") + 100 # suma 100 a counts assay
# Enumera los "assays" en el objeto
assays(sce) # indica num y nombre de assays
## List of length 3
## names(3): counts logcounts counts_100
assayNames(sce) # solo nos dará los nombres de los assays
## [1] "counts" "logcounts" "counts_100"
# assay(sce, "counts_100")[110:115, 1:3]
## ¿Qué tan grande es el objeto de R?
::obj_size(sce) / 1024^2 ## En MB lobstr
## 174.7981 B
"segunda parte:
aquí checaremos metadata de las células"
## [1] "segunda parte:\naquí checaremos metadata de las células"
# Extrae la información de las muestras (metadata) del set de datos de 416b
.416b <- colData(sce.416b) # podemos checar objeto en la cajita de environment de RStudio!!
colData
# explorar datooos
table(colData.416b$phenotype)
##
## induced CBFB-MYH11 oncogene expression wild type phenotype
## 96 96
table(colData.416b$block) # fue en varios dias?
##
## 20160113 20160325
## 96 96
# Agrega algo de esa información a nuestro objeto de SCE
colData(sce) <- colData.416b[, c("phenotype", "block")]
# Revisa el objeto que acabamos de actualizar
sce
## class: SingleCellExperiment
## dim: 46604 192
## metadata(0):
## assays(3): counts logcounts counts_100
## rownames(46604): ENSMUSG00000102693 ENSMUSG00000064842 ...
## ENSMUSG00000095742 CBFB-MYH11-mcherry
## rowData names(0):
## colnames(192): SLX-9555.N701_S502.C89V9ANXX.s_1.r_1
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 ...
## SLX-11312.N712_S508.H5H5YBBXX.s_8.r_1
## SLX-11312.N712_S517.H5H5YBBXX.s_8.r_1
## colData names(2): phenotype block
## reducedDimNames(0):
## mainExpName: NULL
## altExpNames(0):
# Accesa a la información de las muestras (metadata) en nuestro SCE
colData(sce) # usar head?
## DataFrame with 192 rows and 2 columns
## phenotype block
## <character> <integer>
## SLX-9555.N701_S502.C89V9ANXX.s_1.r_1 wild type phenotype 20160113
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 wild type phenotype 20160113
## SLX-9555.N701_S504.C89V9ANXX.s_1.r_1 wild type phenotype 20160113
## SLX-9555.N701_S505.C89V9ANXX.s_1.r_1 induced CBFB-MYH11 o.. 20160113
## SLX-9555.N701_S506.C89V9ANXX.s_1.r_1 induced CBFB-MYH11 o.. 20160113
## ... ... ...
## SLX-11312.N712_S505.H5H5YBBXX.s_8.r_1 induced CBFB-MYH11 o.. 20160325
## SLX-11312.N712_S506.H5H5YBBXX.s_8.r_1 induced CBFB-MYH11 o.. 20160325
## SLX-11312.N712_S507.H5H5YBBXX.s_8.r_1 induced CBFB-MYH11 o.. 20160325
## SLX-11312.N712_S508.H5H5YBBXX.s_8.r_1 induced CBFB-MYH11 o.. 20160325
## SLX-11312.N712_S517.H5H5YBBXX.s_8.r_1 wild type phenotype 20160325
# Accesa una columna específica de la información de las muestras (metadata)
table(sce$block)
##
## 20160113 20160325
## 96 96
table(colData(sce)$block) # otra manera
##
## 20160113 20160325
## 96 96
# Ejemplo de una función que agrega columnas nuevas al colData
<- scater::addPerCellQC(sce.416b) # añade datos de control de calidad
sce # Accesa a la información de las muestras (metadata) en nuestro SCE actualizado
colData(sce)
## DataFrame with 192 rows and 18 columns
## Source Name cell line
## <character> <character>
## SLX-9555.N701_S502.C89V9ANXX.s_1.r_1 SLX-9555.N701_S502.C.. 416B
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 SLX-9555.N701_S503.C.. 416B
## SLX-9555.N701_S504.C89V9ANXX.s_1.r_1 SLX-9555.N701_S504.C.. 416B
## SLX-9555.N701_S505.C89V9ANXX.s_1.r_1 SLX-9555.N701_S505.C.. 416B
## SLX-9555.N701_S506.C89V9ANXX.s_1.r_1 SLX-9555.N701_S506.C.. 416B
## ... ... ...
## SLX-11312.N712_S505.H5H5YBBXX.s_8.r_1 SLX-11312.N712_S505... 416B
## SLX-11312.N712_S506.H5H5YBBXX.s_8.r_1 SLX-11312.N712_S506... 416B
## SLX-11312.N712_S507.H5H5YBBXX.s_8.r_1 SLX-11312.N712_S507... 416B
## SLX-11312.N712_S508.H5H5YBBXX.s_8.r_1 SLX-11312.N712_S508... 416B
## SLX-11312.N712_S517.H5H5YBBXX.s_8.r_1 SLX-11312.N712_S517... 416B
## cell type
## <character>
## SLX-9555.N701_S502.C89V9ANXX.s_1.r_1 embryonic stem cell
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 embryonic stem cell
## SLX-9555.N701_S504.C89V9ANXX.s_1.r_1 embryonic stem cell
## SLX-9555.N701_S505.C89V9ANXX.s_1.r_1 embryonic stem cell
## SLX-9555.N701_S506.C89V9ANXX.s_1.r_1 embryonic stem cell
## ... ...
## SLX-11312.N712_S505.H5H5YBBXX.s_8.r_1 embryonic stem cell
## SLX-11312.N712_S506.H5H5YBBXX.s_8.r_1 embryonic stem cell
## SLX-11312.N712_S507.H5H5YBBXX.s_8.r_1 embryonic stem cell
## SLX-11312.N712_S508.H5H5YBBXX.s_8.r_1 embryonic stem cell
## SLX-11312.N712_S517.H5H5YBBXX.s_8.r_1 embryonic stem cell
## single cell well quality
## <character>
## SLX-9555.N701_S502.C89V9ANXX.s_1.r_1 OK
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 OK
## SLX-9555.N701_S504.C89V9ANXX.s_1.r_1 OK
## SLX-9555.N701_S505.C89V9ANXX.s_1.r_1 OK
## SLX-9555.N701_S506.C89V9ANXX.s_1.r_1 OK
## ... ...
## SLX-11312.N712_S505.H5H5YBBXX.s_8.r_1 OK
## SLX-11312.N712_S506.H5H5YBBXX.s_8.r_1 OK
## SLX-11312.N712_S507.H5H5YBBXX.s_8.r_1 OK
## SLX-11312.N712_S508.H5H5YBBXX.s_8.r_1 OK
## SLX-11312.N712_S517.H5H5YBBXX.s_8.r_1 OK
## genotype
## <character>
## SLX-9555.N701_S502.C89V9ANXX.s_1.r_1 Doxycycline-inducibl..
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 Doxycycline-inducibl..
## SLX-9555.N701_S504.C89V9ANXX.s_1.r_1 Doxycycline-inducibl..
## SLX-9555.N701_S505.C89V9ANXX.s_1.r_1 Doxycycline-inducibl..
## SLX-9555.N701_S506.C89V9ANXX.s_1.r_1 Doxycycline-inducibl..
## ... ...
## SLX-11312.N712_S505.H5H5YBBXX.s_8.r_1 Doxycycline-inducibl..
## SLX-11312.N712_S506.H5H5YBBXX.s_8.r_1 Doxycycline-inducibl..
## SLX-11312.N712_S507.H5H5YBBXX.s_8.r_1 Doxycycline-inducibl..
## SLX-11312.N712_S508.H5H5YBBXX.s_8.r_1 Doxycycline-inducibl..
## SLX-11312.N712_S517.H5H5YBBXX.s_8.r_1 Doxycycline-inducibl..
## phenotype strain
## <character> <character>
## SLX-9555.N701_S502.C89V9ANXX.s_1.r_1 wild type phenotype B6D2F1-J
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 wild type phenotype B6D2F1-J
## SLX-9555.N701_S504.C89V9ANXX.s_1.r_1 wild type phenotype B6D2F1-J
## SLX-9555.N701_S505.C89V9ANXX.s_1.r_1 induced CBFB-MYH11 o.. B6D2F1-J
## SLX-9555.N701_S506.C89V9ANXX.s_1.r_1 induced CBFB-MYH11 o.. B6D2F1-J
## ... ... ...
## SLX-11312.N712_S505.H5H5YBBXX.s_8.r_1 induced CBFB-MYH11 o.. B6D2F1-J
## SLX-11312.N712_S506.H5H5YBBXX.s_8.r_1 induced CBFB-MYH11 o.. B6D2F1-J
## SLX-11312.N712_S507.H5H5YBBXX.s_8.r_1 induced CBFB-MYH11 o.. B6D2F1-J
## SLX-11312.N712_S508.H5H5YBBXX.s_8.r_1 induced CBFB-MYH11 o.. B6D2F1-J
## SLX-11312.N712_S517.H5H5YBBXX.s_8.r_1 wild type phenotype B6D2F1-J
## spike-in addition block sum
## <character> <integer> <numeric>
## SLX-9555.N701_S502.C89V9ANXX.s_1.r_1 ERCC+SIRV 20160113 865936
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 ERCC+SIRV 20160113 1076277
## SLX-9555.N701_S504.C89V9ANXX.s_1.r_1 ERCC+SIRV 20160113 1180138
## SLX-9555.N701_S505.C89V9ANXX.s_1.r_1 ERCC+SIRV 20160113 1342593
## SLX-9555.N701_S506.C89V9ANXX.s_1.r_1 ERCC+SIRV 20160113 1668311
## ... ... ... ...
## SLX-11312.N712_S505.H5H5YBBXX.s_8.r_1 Premixed 20160325 776622
## SLX-11312.N712_S506.H5H5YBBXX.s_8.r_1 Premixed 20160325 1299950
## SLX-11312.N712_S507.H5H5YBBXX.s_8.r_1 Premixed 20160325 1800696
## SLX-11312.N712_S508.H5H5YBBXX.s_8.r_1 Premixed 20160325 46731
## SLX-11312.N712_S517.H5H5YBBXX.s_8.r_1 Premixed 20160325 1866692
## detected altexps_ERCC_sum
## <numeric> <numeric>
## SLX-9555.N701_S502.C89V9ANXX.s_1.r_1 7618 65278
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 7521 74748
## SLX-9555.N701_S504.C89V9ANXX.s_1.r_1 8306 60878
## SLX-9555.N701_S505.C89V9ANXX.s_1.r_1 8143 60073
## SLX-9555.N701_S506.C89V9ANXX.s_1.r_1 7154 136810
## ... ... ...
## SLX-11312.N712_S505.H5H5YBBXX.s_8.r_1 8174 61575
## SLX-11312.N712_S506.H5H5YBBXX.s_8.r_1 8956 94982
## SLX-11312.N712_S507.H5H5YBBXX.s_8.r_1 9530 113707
## SLX-11312.N712_S508.H5H5YBBXX.s_8.r_1 6649 7580
## SLX-11312.N712_S517.H5H5YBBXX.s_8.r_1 10964 48664
## altexps_ERCC_detected
## <numeric>
## SLX-9555.N701_S502.C89V9ANXX.s_1.r_1 39
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 40
## SLX-9555.N701_S504.C89V9ANXX.s_1.r_1 42
## SLX-9555.N701_S505.C89V9ANXX.s_1.r_1 42
## SLX-9555.N701_S506.C89V9ANXX.s_1.r_1 44
## ... ...
## SLX-11312.N712_S505.H5H5YBBXX.s_8.r_1 39
## SLX-11312.N712_S506.H5H5YBBXX.s_8.r_1 41
## SLX-11312.N712_S507.H5H5YBBXX.s_8.r_1 40
## SLX-11312.N712_S508.H5H5YBBXX.s_8.r_1 44
## SLX-11312.N712_S517.H5H5YBBXX.s_8.r_1 39
## altexps_ERCC_percent altexps_SIRV_sum
## <numeric> <numeric>
## SLX-9555.N701_S502.C89V9ANXX.s_1.r_1 6.80658 27828
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 6.28030 39173
## SLX-9555.N701_S504.C89V9ANXX.s_1.r_1 4.78949 30058
## SLX-9555.N701_S505.C89V9ANXX.s_1.r_1 4.18567 32542
## SLX-9555.N701_S506.C89V9ANXX.s_1.r_1 7.28887 71850
## ... ... ...
## SLX-11312.N712_S505.H5H5YBBXX.s_8.r_1 7.17620 19848
## SLX-11312.N712_S506.H5H5YBBXX.s_8.r_1 6.65764 31729
## SLX-11312.N712_S507.H5H5YBBXX.s_8.r_1 5.81467 41116
## SLX-11312.N712_S508.H5H5YBBXX.s_8.r_1 13.48898 1883
## SLX-11312.N712_S517.H5H5YBBXX.s_8.r_1 2.51930 16289
## altexps_SIRV_detected
## <numeric>
## SLX-9555.N701_S502.C89V9ANXX.s_1.r_1 7
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 7
## SLX-9555.N701_S504.C89V9ANXX.s_1.r_1 7
## SLX-9555.N701_S505.C89V9ANXX.s_1.r_1 7
## SLX-9555.N701_S506.C89V9ANXX.s_1.r_1 7
## ... ...
## SLX-11312.N712_S505.H5H5YBBXX.s_8.r_1 7
## SLX-11312.N712_S506.H5H5YBBXX.s_8.r_1 7
## SLX-11312.N712_S507.H5H5YBBXX.s_8.r_1 7
## SLX-11312.N712_S508.H5H5YBBXX.s_8.r_1 7
## SLX-11312.N712_S517.H5H5YBBXX.s_8.r_1 7
## altexps_SIRV_percent total
## <numeric> <numeric>
## SLX-9555.N701_S502.C89V9ANXX.s_1.r_1 2.90165 959042
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 3.29130 1190198
## SLX-9555.N701_S504.C89V9ANXX.s_1.r_1 2.36477 1271074
## SLX-9555.N701_S505.C89V9ANXX.s_1.r_1 2.26741 1435208
## SLX-9555.N701_S506.C89V9ANXX.s_1.r_1 3.82798 1876971
## ... ... ...
## SLX-11312.N712_S505.H5H5YBBXX.s_8.r_1 2.313165 858045
## SLX-11312.N712_S506.H5H5YBBXX.s_8.r_1 2.224004 1426661
## SLX-11312.N712_S507.H5H5YBBXX.s_8.r_1 2.102562 1955519
## SLX-11312.N712_S508.H5H5YBBXX.s_8.r_1 3.350892 56194
## SLX-11312.N712_S517.H5H5YBBXX.s_8.r_1 0.843271 1931645
# Revisa el objeto que acabamos de actualizar
sce
## class: SingleCellExperiment
## dim: 46604 192
## metadata(0):
## assays(1): counts
## rownames(46604): ENSMUSG00000102693 ENSMUSG00000064842 ...
## ENSMUSG00000095742 CBFB-MYH11-mcherry
## rowData names(1): Length
## colnames(192): SLX-9555.N701_S502.C89V9ANXX.s_1.r_1
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 ...
## SLX-11312.N712_S508.H5H5YBBXX.s_8.r_1
## SLX-11312.N712_S517.H5H5YBBXX.s_8.r_1
## colData names(18): Source Name cell line ... altexps_SIRV_percent total
## reducedDimNames(0):
## mainExpName: endogenous
## altExpNames(2): ERCC SIRV
## ¿Qué tan grande es el objeto de R?
::obj_size(sce) / 1024^2 ## En MB lobstr
## 39.47633 B
## Agrega las cuentas normalizadas (lognorm) de nuevo
<- scater::logNormCounts(sce)
sce
## ¿Qué tan grande es el objeto de R?
::obj_size(sce) / 1024^2 ## En MB lobstr
## 107.7463 B
# Ejemplo: obtén el subconjunto de células de fenotipo "wild type"
# Acuérdate que las células son columnas del SCE !!!!
$phenotype == "wild type phenotype"] sce[, sce
## class: SingleCellExperiment
## dim: 46604 96
## metadata(0):
## assays(2): counts logcounts
## rownames(46604): ENSMUSG00000102693 ENSMUSG00000064842 ...
## ENSMUSG00000095742 CBFB-MYH11-mcherry
## rowData names(1): Length
## colnames(96): SLX-9555.N701_S502.C89V9ANXX.s_1.r_1
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 ...
## SLX-11312.N712_S504.H5H5YBBXX.s_8.r_1
## SLX-11312.N712_S517.H5H5YBBXX.s_8.r_1
## colData names(19): Source Name cell line ... total sizeFactor
## reducedDimNames(0):
## mainExpName: endogenous
## altExpNames(2): ERCC SIRV
"Tercera parte:
examinaremos metadata de features (rowData)"
## [1] "Tercera parte:\nexaminaremos metadata de features (rowData)"
# Accesa la información de los genes de nuestro SCE
# ¡Está vació actualmente!
rowData(sce)
## DataFrame with 46604 rows and 1 column
## Length
## <integer>
## ENSMUSG00000102693 1070
## ENSMUSG00000064842 110
## ENSMUSG00000051951 6094
## ENSMUSG00000102851 480
## ENSMUSG00000103377 2819
## ... ...
## ENSMUSG00000094621 121
## ENSMUSG00000098647 99
## ENSMUSG00000096730 3077
## ENSMUSG00000095742 243
## CBFB-MYH11-mcherry 2998
# Ejemplo de una función que agrega campos nuevos en el rowData
<- scater::addPerFeatureQC(sce)
sce # Accesa a la información de las muestras (metadata) en nuestro SCE actualizado
rowData(sce)
## DataFrame with 46604 rows and 3 columns
## Length mean detected
## <integer> <numeric> <numeric>
## ENSMUSG00000102693 1070 0.0000000 0.000000
## ENSMUSG00000064842 110 0.0000000 0.000000
## ENSMUSG00000051951 6094 0.0000000 0.000000
## ENSMUSG00000102851 480 0.0000000 0.000000
## ENSMUSG00000103377 2819 0.0104167 0.520833
## ... ... ... ...
## ENSMUSG00000094621 121 0.0 0
## ENSMUSG00000098647 99 0.0 0
## ENSMUSG00000096730 3077 0.0 0
## ENSMUSG00000095742 243 0.0 0
## CBFB-MYH11-mcherry 2998 50375.7 100
## ¿Qué tan grande es el objeto de R?
::obj_size(sce) / 1024^2 ## En MB lobstr
## 108.4578 B
# Descarga los archivos de anotación de la base de datos de Ensembl
# correspondientes usando los recursos disponibles vía AnnotationHub
library("AnnotationHub")
<- AnnotationHub()
ah query(ah, c("Mus musculus", "Ensembl", "v97"))
## AnnotationHub with 1 record
## # snapshotDate(): 2021-05-18
## # names(): AH73905
## # $dataprovider: Ensembl
## # $species: Mus musculus
## # $rdataclass: EnsDb
## # $rdatadateadded: 2019-05-02
## # $title: Ensembl 97 EnsDb for Mus musculus
## # $description: Gene and protein annotations for Mus musculus based on Ensem...
## # $taxonomyid: 10090
## # $genome: GRCm38
## # $sourcetype: ensembl
## # $sourceurl: http://www.ensembl.org
## # $sourcesize: NA
## # $tags: c("97", "AHEnsDbs", "Annotation", "EnsDb", "Ensembl", "Gene",
## # "Protein", "Transcript")
## # retrieve record with 'object[["AH73905"]]'
# Obtén la posición del cromosoma para cada gen
<- ah[["AH73905"]]
ensdb <- mapIds(ensdb,
chromosome keys = rownames(sce),
keytype = "GENEID",
column = "SEQNAME"
)rowData(sce)$chromosome <- chromosome
# Accesa a la información de las muestras (metadata) en nuestro SCE actualizado
rowData(sce)
## DataFrame with 46604 rows and 4 columns
## Length mean detected chromosome
## <integer> <numeric> <numeric> <character>
## ENSMUSG00000102693 1070 0.0000000 0.000000 1
## ENSMUSG00000064842 110 0.0000000 0.000000 1
## ENSMUSG00000051951 6094 0.0000000 0.000000 1
## ENSMUSG00000102851 480 0.0000000 0.000000 1
## ENSMUSG00000103377 2819 0.0104167 0.520833 1
## ... ... ... ... ...
## ENSMUSG00000094621 121 0.0 0 GL456372.1
## ENSMUSG00000098647 99 0.0 0 GL456381.1
## ENSMUSG00000096730 3077 0.0 0 JH584292.1
## ENSMUSG00000095742 243 0.0 0 JH584295.1
## CBFB-MYH11-mcherry 2998 50375.7 100 NA
## ¿Qué tan grande es el objeto de R?
::obj_size(sce) / 1024^2 ## En MB lobstr
## 108.8135 B
# Ejemplo: obtén el subconjunto de datos donde los genes están en el
# cromosoma 3
# NOTA: which() fue necesario para lidear con los nombres de cromosoma
# que son NA
which(rowData(sce)$chromosome == "3"), ] sce[
## class: SingleCellExperiment
## dim: 2876 192
## metadata(0):
## assays(2): counts logcounts
## rownames(2876): ENSMUSG00000098982 ENSMUSG00000098307 ...
## ENSMUSG00000105990 ENSMUSG00000075903
## rowData names(4): Length mean detected chromosome
## colnames(192): SLX-9555.N701_S502.C89V9ANXX.s_1.r_1
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 ...
## SLX-11312.N712_S508.H5H5YBBXX.s_8.r_1
## SLX-11312.N712_S517.H5H5YBBXX.s_8.r_1
## colData names(19): Source Name cell line ... total sizeFactor
## reducedDimNames(0):
## mainExpName: endogenous
## altExpNames(2): ERCC SIRV
"Cuarta parte:
examinamos slot metadata"
## [1] "Cuarta parte:\nexaminamos slot metadata"
# Accesa la información de nuestro experimento usando metadata()
# ¡Está vació actualmente!
metadata(sce)
## list()
# La información en el metadata() es como Vegas - todo se vale
metadata(sce) <- list(
favourite_genes = c("Shh", "Nck1", "Diablo"),
analyst = c("Pete")
)
# Accesa la información de nuestro experimento usando metadata() de
# nuestro objeto actualizado
metadata(sce)
## $favourite_genes
## [1] "Shh" "Nck1" "Diablo"
##
## $analyst
## [1] "Pete"
"Quinta parte:
examinamos slot de reducción de dimensiones"
## [1] "Quinta parte:\nexaminamos slot de reducción de dimensiones"
# Ejemplo: agrega los componentes principales (PCs) de las logcounts
# NOTA: aprenderemos más sobre análisis de componentes principales (PCA) después
<- scater::runPCA(sce)
sce # Revisa el objeto que acabamos de actualizar
sce
## class: SingleCellExperiment
## dim: 46604 192
## metadata(2): favourite_genes analyst
## assays(2): counts logcounts
## rownames(46604): ENSMUSG00000102693 ENSMUSG00000064842 ...
## ENSMUSG00000095742 CBFB-MYH11-mcherry
## rowData names(4): Length mean detected chromosome
## colnames(192): SLX-9555.N701_S502.C89V9ANXX.s_1.r_1
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 ...
## SLX-11312.N712_S508.H5H5YBBXX.s_8.r_1
## SLX-11312.N712_S517.H5H5YBBXX.s_8.r_1
## colData names(19): Source Name cell line ... total sizeFactor
## reducedDimNames(1): PCA
## mainExpName: endogenous
## altExpNames(2): ERCC SIRV
# Accesa la matriz de PCA del componente (slot) reducedDims
reducedDim(sce, "PCA")[1:6, 1:3]
## PC1 PC2 PC3
## SLX-9555.N701_S502.C89V9ANXX.s_1.r_1 -18.717668 27.598132 -5.939654
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 -2.480705 27.564583 -4.916567
## SLX-9555.N701_S504.C89V9ANXX.s_1.r_1 -42.034018 7.552435 -12.126964
## SLX-9555.N701_S505.C89V9ANXX.s_1.r_1 8.494303 -31.833727 -15.760853
## SLX-9555.N701_S506.C89V9ANXX.s_1.r_1 49.737390 -4.226795 -6.123169
## SLX-9555.N701_S507.C89V9ANXX.s_1.r_1 44.528081 3.215503 -10.384939
# Ejemplo, agrega una representación de los logcounts en t-SNE
# NOTA: aprenderemos más sobre t-SNE después
<- scater::runTSNE(sce)
sce # Revisa el objeto que acabamos de actualizar
sce
## class: SingleCellExperiment
## dim: 46604 192
## metadata(2): favourite_genes analyst
## assays(2): counts logcounts
## rownames(46604): ENSMUSG00000102693 ENSMUSG00000064842 ...
## ENSMUSG00000095742 CBFB-MYH11-mcherry
## rowData names(4): Length mean detected chromosome
## colnames(192): SLX-9555.N701_S502.C89V9ANXX.s_1.r_1
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 ...
## SLX-11312.N712_S508.H5H5YBBXX.s_8.r_1
## SLX-11312.N712_S517.H5H5YBBXX.s_8.r_1
## colData names(19): Source Name cell line ... total sizeFactor
## reducedDimNames(2): PCA TSNE
## mainExpName: endogenous
## altExpNames(2): ERCC SIRV
# Accesa a la matriz de t-SNE en el componente (slot) de reducedDims
head(reducedDim(sce, "TSNE"))
## [,1] [,2]
## SLX-9555.N701_S502.C89V9ANXX.s_1.r_1 -7.3181642 2.2840490
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 -3.6464118 -0.8207964
## SLX-9555.N701_S504.C89V9ANXX.s_1.r_1 -7.6479076 4.6719923
## SLX-9555.N701_S505.C89V9ANXX.s_1.r_1 0.7775377 4.4127326
## SLX-9555.N701_S506.C89V9ANXX.s_1.r_1 8.0179911 -6.4277429
## SLX-9555.N701_S507.C89V9ANXX.s_1.r_1 7.8965473 -7.8963465
# Ejemplo: agrega una representación 'manual' de los logcounts en UMAP
# NOTA: aprenderemos más sobre UMAP después y de una forma más sencilla de
# calcularla
<- uwot::umap(t(logcounts(sce)), n_components = 2)
u
# Agrega la matriz de UMAP al componente (slot) reducedDims
reducedDim(sce, "UMAP") <- u
# Accesa a la matriz de UMAP desde el componente (slot) reducedDims
head(reducedDim(sce, "UMAP"))
## [,1] [,2]
## SLX-9555.N701_S502.C89V9ANXX.s_1.r_1 -2.9007656 -1.724959
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 -1.9364034 -1.711854
## SLX-9555.N701_S504.C89V9ANXX.s_1.r_1 -3.2449543 -1.109732
## SLX-9555.N701_S505.C89V9ANXX.s_1.r_1 -0.3859376 -1.198746
## SLX-9555.N701_S506.C89V9ANXX.s_1.r_1 0.2112636 -1.497831
## SLX-9555.N701_S507.C89V9ANXX.s_1.r_1 -0.1741835 -1.455346
# Enumera los resultados de reducción de dimensiones en nuestro objeto SCE
reducedDims(sce)
## List of length 3
## names(3): PCA TSNE UMAP
"Sexta parte:
experimentos alternativos"
## [1] "Sexta parte:\nexperimentos alternativos"
# Extrae la información de ERCC de nuestro SCE para el set de datos de 416b
.416b <- altExp(sce.416b, "ERCC")
ercc.sce# Inspecciona el SCE para los datos de ERCC
.416b ercc.sce
## class: SingleCellExperiment
## dim: 92 192
## metadata(0):
## assays(1): counts
## rownames(92): ERCC-00002 ERCC-00003 ... ERCC-00170 ERCC-00171
## rowData names(7): Length subgroup ... log2(Mix 1/Mix 2) molecules
## colnames(192): SLX-9555.N701_S502.C89V9ANXX.s_1.r_1
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 ...
## SLX-11312.N712_S508.H5H5YBBXX.s_8.r_1
## SLX-11312.N712_S517.H5H5YBBXX.s_8.r_1
## colData names(0):
## reducedDimNames(0):
## mainExpName: NULL
## altExpNames(0):
# Agrega el SCE de ERCC como un experimento alternativo a nuestro SCE
altExp(sce, "ERCC") <- ercc.sce.416b
# Revisa el objeto que acabamos de actualizar
sce
## class: SingleCellExperiment
## dim: 46604 192
## metadata(2): favourite_genes analyst
## assays(2): counts logcounts
## rownames(46604): ENSMUSG00000102693 ENSMUSG00000064842 ...
## ENSMUSG00000095742 CBFB-MYH11-mcherry
## rowData names(4): Length mean detected chromosome
## colnames(192): SLX-9555.N701_S502.C89V9ANXX.s_1.r_1
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 ...
## SLX-11312.N712_S508.H5H5YBBXX.s_8.r_1
## SLX-11312.N712_S517.H5H5YBBXX.s_8.r_1
## colData names(19): Source Name cell line ... total sizeFactor
## reducedDimNames(3): PCA TSNE UMAP
## mainExpName: endogenous
## altExpNames(2): ERCC SIRV
## ¿Qué tan grande es el objeto de R?
::obj_size(sce) / 1024^2 ## En MB lobstr
## 108.8965 B
# Enumera los experimentos alternativos almacenados en nuestro objeto
altExps(sce)
## List of length 2
## names(2): ERCC SIRV
# El crear un subconjunto del SCE por muestra (célula) automáticamente
# obtiene el subconjunto de los experimentos alternativos
<- sce[, 1:10]
sce.subset ncol(sce.subset)
## [1] 10
ncol(altExp(sce.subset))
## [1] 10
## ¿Qué tan grande es el objeto de R?
::obj_size(sce.subset) / 1024^2 ## En MB lobstr
## 11.99544 B
"Septima parte:
sizefactores"
## [1] "Septima parte:\nsizefactores"
# Extrae los factores de tamaño (size factors)
# Estos fueron añadidos a nuestro objeto cuando corrimos
# scater::logNormCounts(sce)
head(sizeFactors(sce))
## SLX-9555.N701_S502.C89V9ANXX.s_1.r_1 SLX-9555.N701_S503.C89V9ANXX.s_1.r_1
## 0.7427411 0.9231573
## SLX-9555.N701_S504.C89V9ANXX.s_1.r_1 SLX-9555.N701_S505.C89V9ANXX.s_1.r_1
## 1.0122422 1.1515851
## SLX-9555.N701_S506.C89V9ANXX.s_1.r_1 SLX-9555.N701_S507.C89V9ANXX.s_1.r_1
## 1.4309639 0.8713409
# "Automáticamente" reemplaza los factores de tamaño
<- scran::computeSumFactors(sce)
sce head(sizeFactors(sce))
## [1] 0.6961756 0.8834223 0.9704247 0.9804890 1.2446699 0.7922620
# "Manualmente" reemplaza los factores de tamaño
sizeFactors(sce) <- scater::librarySizeFactors(sce)
head(sizeFactors(sce))
## SLX-9555.N701_S502.C89V9ANXX.s_1.r_1 SLX-9555.N701_S503.C89V9ANXX.s_1.r_1
## 0.7427411 0.9231573
## SLX-9555.N701_S504.C89V9ANXX.s_1.r_1 SLX-9555.N701_S505.C89V9ANXX.s_1.r_1
## 1.0122422 1.1515851
## SLX-9555.N701_S506.C89V9ANXX.s_1.r_1 SLX-9555.N701_S507.C89V9ANXX.s_1.r_1
## 1.4309639 0.8713409
NOTA: La clase SingleCellExperiment
está basada en SummarizedExperiment
, por lo que ya estamos un poco familiarizados con esta nueva clase.
Una de las diferencias es que no contiene ranuras para análisis de reducción de dimensiones. (será solo datos y metadata de ellos)
4.3.1 Preguntas:
¿Cuáles son los tipos de tablas que debe siempre contenter el objeto
sce
?¿Donde usamos los
colnames(sce)
?¿donde usamos los
rownames(sce)
?
4.4 Breve repaso de R
# Creamos un data.frame
<- data.frame(x = c(TRUE, FALSE, NA, NA), y = c(12, 34, 56, 78))
df row.names(df) <- letters[1:4]
df
## x y
## a TRUE 12
## b FALSE 34
## c NA 56
## d NA 78
# Para acceder a los nombres de las columnas
colnames(df)
## [1] "x" "y"
# Para acceder a los nombres de las filas
rownames(df)
## [1] "a" "b" "c" "d"
# Podemos sacar información booleana
$y < 20 df
## [1] TRUE FALSE FALSE FALSE
# Y podemos acceder al mismo data.frame con la información booleana
$y < 40, ] df[df
## x y
## a TRUE 12
## b FALSE 34
## %in% (dentro de)
<- rownames(df) %in% c("a", "c", "z")
bool_info df[bool_info, ]
## x y
## a TRUE 12
## c NA 56
## & (y)
<- df$y < 50 & df$y > 20
bool_info df[bool_info, ]
## x y
## b FALSE 34
## | (o)
<- df$y < 20 | df$y > 60
bool_info df[bool_info, ]
## x y
## a TRUE 12
## d NA 78
4.5 Ejercicio 2
library("SingleCellExperiment")
library("scRNAseq")
# Mini muestreo del set de datos usado en: https://bioconductor.org/books/release/OSCA/zeisel-mouse-brain-strt-seq.html#introduction-5
<- "https://raw.githubusercontent.com/emarquezz/minidataset_osca/main/min_sce.csv"
archivo_cuentas <- "https://raw.githubusercontent.com/emarquezz/minidataset_osca/main/rowD.csv"
archivo_rowData <- "https://raw.githubusercontent.com/emarquezz/minidataset_osca/main/colD.csv"
archivo_colData
<- read.csv(archivo_cuentas, row.names = 1, header = TRUE, check.names = F)
counts <- DataFrame(read.csv(archivo_colData, row.names = 1, header = TRUE, check.names = F))
col.data <- read.csv(archivo_rowData, row.names = 1, header = TRUE, check.names = F) row.data
Crea un objeto
SingleCellExperiment
¿Cuántos genes tenemos?
¿Qué información tenemos en el
rowData()
?
Extraigan los datos de los genes que nos interesan (objeto
int_gen
)Pasen el mouse sobre los siguientes textos para ver recomendaciones:
<- c("Angpt1", "Chic2", "Mir503", "Magee2", "Nenf", "Eps15l1", "Hsf2bp", "Gnptg", "Vegfb", "Atmin", "Gad1", "Gad2", "Slc32a1", "Dner", "Slc2a13", "Slc6a1", "Nrxn3") int_gen
Creen un objeto llamado
min_sce
con los datos de solo esos genes¿Cuáles son parte del tejido
interneurons
o del tejidopyramidal CA1
? (del objetomin_sce
)
Con este subconjunto, crea el objeto
tej_min_sce
Una vez que tengan el objeto ´SingleCellExperiment´ llamado ´tej_min_sce´, corran el siguiente código.
library("scater")
plotHeatmap(object = tej_min_sce, features = rownames(tej_min_sce), order_columns_by = "level1class")
4.5.1 Respuestas
<- SingleCellExperiment(
sce assays = list(counts = counts),
colData = col.data,
rowData = row.data
)
<- scater::logNormCounts(sce)
sce
sce
## class: SingleCellExperiment
## dim: 100 30
## metadata(0):
## assays(2): counts logcounts
## rownames(100): Olfr1219 Angpt1 ... Slc6a1 Nrxn3
## rowData names(2): featureType Ensembl
## colnames(30): 1772066102_E02 1772067073_F10 ... 1772066096_G11
## 1772066101_E11
## colData names(11): tissue group.. ... level2class sizeFactor
## reducedDimNames(0):
## mainExpName: NULL
## altExpNames(0):
<- rownames(rowData(sce))
bool_data <- sce[bool_data %in% int_gen, ] min_sce
<- min_sce$level1class == "interneurons"
tej_int <- min_sce$level1class == "pyramidal CA1"
tej_pyr
<- min_sce[, tej_int | tej_pyr] tej_min_sce
library("scater")
## Loading required package: scuttle
## Loading required package: ggplot2
plotHeatmap(object = tej_min_sce, features = rownames(tej_min_sce), order_columns_by = "level1class")
4.5.2 Extra
- Realiza los mismos pasos, pero ahora los genes que buscamos no tienen el nombre usual de gen (Gad1), sino su Ensembl gene IDs
<- c("ENSMUSG00000071076", "ENSMUSG00000002076", "ENSMUSG00000024962", "ENSMUSG00000031224", "ENSMSG00000036560", "ENSMUSG00000037499", "ENSMUSG00000006276", "ENSMUSG00000035521", "ENSMUSG00000047388", "ENSMUSG0000051079", "ENSMUSG00000076122", "ENSMUSG00000029229", "ENSMUSG00000022309", "ENSMUSG00000036766", "ENSMUSG00000070880", "ENSMUSG00000026787", "ENSMUSG00000066392", "ENSMUSG00000036298", "ENSMUSG00000037771", "ENSMUSG00000030310") int_gen
4.6 Import data
- Diapositivas de Peter Hickey
Ve las diapositivas aquí.
# Descarga datos de ejemplo procesados con CellRanger
# Paréntesis: al usar BiocFileCache solo tenemos que descargar
# los datos una vez.
library("BiocFileCache")
<- BiocFileCache()
bfc <-
pbmc.url paste0(
"http://cf.10xgenomics.com/samples/cell-vdj/",
"3.1.0/vdj_v1_hs_pbmc3/",
"vdj_v1_hs_pbmc3_filtered_feature_bc_matrix.tar.gz"
)<- bfcrpath(bfc, pbmc.url) pbmc.data
## adding rname 'http://cf.10xgenomics.com/samples/cell-vdj/3.1.0/vdj_v1_hs_pbmc3/vdj_v1_hs_pbmc3_filtered_feature_bc_matrix.tar.gz'
# Extrae los archivos en un directorio temporal
untar(pbmc.data, exdir = tempdir())
# Enumera los archivos que descargamos y que extrajimos
# Estos son los archivos típicos de CellRanger
<- file.path(
pbmc.dir tempdir(),
"filtered_feature_bc_matrix"
)list.files(pbmc.dir)
## [1] "barcodes.tsv.gz" "features.tsv.gz" "matrix.mtx.gz"
# Importa los datos como un objeto de tipo SingleCellExperiment
library("DropletUtils")
<- read10xCounts(pbmc.dir)
sce.pbmc # Revisa el objeto que acabamos de construir
sce.pbmc
## class: SingleCellExperiment
## dim: 33555 7231
## metadata(1): Samples
## assays(1): counts
## rownames(33555): ENSG00000243485 ENSG00000237613 ... CD127 CD15
## rowData names(3): ID Symbol Type
## colnames: NULL
## colData names(2): Sample Barcode
## reducedDimNames(0):
## mainExpName: NULL
## altExpNames(0):
## ¿Qué tan grande es el objeto de R?
::obj_size(sce.pbmc) / 1024^2 ## En MB lobstr
## 124.191 B
# Almacena la información de CITE-seq como un experimento alternativo
<- splitAltExps(sce.pbmc, rowData(sce.pbmc)$Type)
sce.pbmc # Revisa el objeto que acabamos de actualizar
sce.pbmc
## class: SingleCellExperiment
## dim: 33538 7231
## metadata(1): Samples
## assays(1): counts
## rownames(33538): ENSG00000243485 ENSG00000237613 ... ENSG00000277475
## ENSG00000268674
## rowData names(3): ID Symbol Type
## colnames: NULL
## colData names(2): Sample Barcode
## reducedDimNames(0):
## mainExpName: Gene Expression
## altExpNames(1): Antibody Capture
## ¿Qué tan grande es el objeto de R?
::obj_size(sce.pbmc) / 1024^2 ## En MB lobstr
## 124.4871 B
# Descarga datos de ejemplo procesados con scPipe
library("BiocFileCache")
<- BiocFileCache()
bfc <-
sis_seq.url "https://github.com/LuyiTian/SIS-seq_script/archive/master.zip"
<- bfcrpath(bfc, sis_seq.url) sis_seq.data
## adding rname 'https://github.com/LuyiTian/SIS-seq_script/archive/master.zip'
# Extrae los archivos en un directorio temporal
unzip(sis_seq.data, exdir = tempdir())
# Enumera (algunos de) los archivos que descargamos y extrajimos
# Estos son los archivos típicos de scPipe
<- file.path(
sis_seq.dir tempdir(),
"SIS-seq_script-master",
"data",
"BcorKO_scRNAseq",
"RPI10"
)list.files(sis_seq.dir)
## [1] "gene_count.csv" "stat"
# Importa los datos como un objeto de tipo SingleCellExperiment
library("scPipe")
##
##
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
<- create_sce_by_dir(sis_seq.dir) sce.sis_seq
## organism/gene_id_type not provided. Make a guess: mmusculus_gene_ensembl / ensembl_gene_id
# Revisa el objeto que acabamos de construir
sce.sis_seq
## class: SingleCellExperiment
## dim: 19232 383
## metadata(2): scPipe Biomart
## assays(1): counts
## rownames(19232): ENSMUSG00000079140 ENSMUSG00000081587 ...
## ENSMUSG00000036880 ENSMUSG00000106872
## rowData names(0):
## colnames(383): A1 A10 ... P8 P9
## colData names(7): unaligned aligned_unmapped ... mapped_to_ERCC
## mapped_to_MT
## reducedDimNames(0):
## mainExpName: NULL
## altExpNames(0):
## ¿Qué tan grande es el objeto de R?
::obj_size(sce.sis_seq) / 1024^2 ## En MB lobstr
## 29.84988 B
# Descarga un ejemplo de un montón de archivos
library("BiocFileCache")
<- BiocFileCache()
bfc <-
lun_counts.url paste0(
"https://www.ebi.ac.uk/arrayexpress/files/",
"E-MTAB-5522/E-MTAB-5522.processed.1.zip"
)<- bfcrpath(bfc, lun_counts.url) lun_counts.data
## adding rname 'https://www.ebi.ac.uk/arrayexpress/files/E-MTAB-5522/E-MTAB-5522.processed.1.zip'
<-
lun_coldata.url paste0(
"https://www.ebi.ac.uk/arrayexpress/files/",
"E-MTAB-5522/E-MTAB-5522.sdrf.txt"
)<- bfcrpath(bfc, lun_coldata.url) lun_coldata.data
## adding rname 'https://www.ebi.ac.uk/arrayexpress/files/E-MTAB-5522/E-MTAB-5522.sdrf.txt'
# Extrae los archivos en un directorio temporal
<- tempfile("lun_counts.")
lun_counts.dir unzip(lun_counts.data, exdir = lun_counts.dir)
# Enumera los archivos que descargamos y extrajimos
list.files(lun_counts.dir)
## [1] "counts_Calero_20160113.tsv" "counts_Calero_20160325.tsv"
## [3] "counts_Liora_20160906.tsv" "counts_Liora_20170201.tsv"
# Lee la matriz de cuentas (para una placa)
<- read.delim(
lun.counts file.path(lun_counts.dir, "counts_Calero_20160113.tsv"),
header = TRUE,
row.names = 1,
check.names = FALSE
)# Almacena la información de la longitud de los genes para después
<- lun.counts$Length
gene.lengths # Convierte los datos de cuentas de genez a una matriz (quitamos las longitudes)
<- as.matrix(lun.counts[, -1])
lun.counts
# Lee la información de las muestras (células)
<- read.delim(lun_coldata.data,
lun.coldata check.names = FALSE,
stringsAsFactors = FALSE
)library("S4Vectors")
<- as(lun.coldata, "DataFrame")
lun.coldata
# Pon en orden la información de las muestras para que
# sea idéntico al orden en la matriz de cuentas
<- match(
m colnames(lun.counts),
$`Source Name`
lun.coldata
)<- lun.coldata[m, ]
lun.coldata
# Construye la tabla de información de los genes
<- DataFrame(Length = gene.lengths)
lun.rowdata
# Construye el objeto de SingleCellExperiment
<- SingleCellExperiment(
lun.sce assays = list(assays = lun.counts),
colData = lun.coldata,
rowData = lun.rowdata
)# Revisa el objeto que acabamos de construir
lun.sce
## class: SingleCellExperiment
## dim: 46703 96
## metadata(0):
## assays(1): assays
## rownames(46703): ENSMUSG00000102693 ENSMUSG00000064842 ... SIRV7
## CBFB-MYH11-mcherry
## rowData names(1): Length
## colnames(96): SLX-9555.N701_S502.C89V9ANXX.s_1.r_1
## SLX-9555.N701_S503.C89V9ANXX.s_1.r_1 ...
## SLX-9555.N712_S508.C89V9ANXX.s_1.r_1
## SLX-9555.N712_S517.C89V9ANXX.s_1.r_1
## colData names(50): Source Name Comment[ENA_SAMPLE] ... Factor
## Value[phenotype] Factor Value[block]
## reducedDimNames(0):
## mainExpName: NULL
## altExpNames(0):
## ¿Qué tan grande es el objeto de R?
::obj_size(lun.sce) / 1024^2 ## En MB lobstr
## 21.49744 B
4.7 Detalles de la sesión de R
## Información de la sesión de R
Sys.time()
## [1] "2021-08-19 15:17:33 UTC"
proc.time()
## user system elapsed
## 75.942 4.503 105.138
options(width = 120)
::session_info() sessioninfo
## ─ Session info ───────────────────────────────────────────────────────────────────────────────────────────────────────
## setting value
## version R version 4.1.0 (2021-05-18)
## os Ubuntu 20.04.2 LTS
## system x86_64, linux-gnu
## ui X11
## language (EN)
## collate en_US.UTF-8
## ctype en_US.UTF-8
## tz UTC
## date 2021-08-19
##
## ─ Packages ───────────────────────────────────────────────────────────────────────────────────────────────────────────
## package * version date lib source
## AnnotationDbi * 1.54.1 2021-06-08 [1] Bioconductor
## AnnotationFilter * 1.16.0 2021-05-19 [1] Bioconductor
## AnnotationHub * 3.0.1 2021-06-20 [1] Bioconductor
## assertthat 0.2.1 2019-03-21 [1] RSPM (R 4.1.0)
## beachmat 2.8.1 2021-08-12 [1] Bioconductor
## beeswarm 0.4.0 2021-06-01 [1] RSPM (R 4.1.0)
## Biobase * 2.52.0 2021-05-19 [1] Bioconductor
## BiocFileCache * 2.0.0 2021-05-19 [1] Bioconductor
## BiocGenerics * 0.38.0 2021-05-19 [1] Bioconductor
## BiocIO 1.2.0 2021-05-19 [1] Bioconductor
## BiocManager 1.30.16 2021-06-15 [1] RSPM (R 4.1.0)
## BiocNeighbors 1.10.0 2021-05-19 [1] Bioconductor
## BiocParallel 1.26.1 2021-07-04 [1] Bioconductor
## BiocSingular 1.8.1 2021-06-08 [1] Bioconductor
## BiocVersion 3.13.1 2021-03-19 [2] Bioconductor
## biomaRt 2.48.3 2021-08-15 [1] Bioconductor
## Biostrings 2.60.2 2021-08-05 [1] Bioconductor
## bit 4.0.4 2020-08-04 [1] RSPM (R 4.1.0)
## bit64 4.0.5 2020-08-30 [1] RSPM (R 4.1.0)
## bitops 1.0-7 2021-04-24 [1] RSPM (R 4.1.0)
## blob 1.2.2 2021-07-23 [1] RSPM (R 4.1.0)
## bluster 1.2.1 2021-05-27 [1] Bioconductor
## bookdown 0.23 2021-08-13 [1] RSPM (R 4.1.0)
## bslib 0.2.5.1 2021-05-18 [1] RSPM (R 4.1.0)
## cachem 1.0.5 2021-05-15 [2] RSPM (R 4.1.0)
## cli 3.0.1 2021-07-17 [2] RSPM (R 4.1.0)
## cluster 2.1.2 2021-04-17 [3] CRAN (R 4.1.0)
## colorspace 2.0-2 2021-06-24 [1] RSPM (R 4.1.0)
## crayon 1.4.1 2021-02-08 [2] RSPM (R 4.1.0)
## curl 4.3.2 2021-06-23 [2] RSPM (R 4.1.0)
## DBI 1.1.1 2021-01-15 [1] RSPM (R 4.1.0)
## dbplyr * 2.1.1 2021-04-06 [1] RSPM (R 4.1.0)
## DelayedArray 0.18.0 2021-05-19 [1] Bioconductor
## DelayedMatrixStats 1.14.2 2021-08-08 [1] Bioconductor
## DEoptimR 1.0-9 2021-05-24 [1] RSPM (R 4.1.0)
## digest 0.6.27 2020-10-24 [2] RSPM (R 4.1.0)
## dplyr 1.0.7 2021-06-18 [1] RSPM (R 4.1.0)
## dqrng 0.3.0 2021-05-01 [1] RSPM (R 4.1.0)
## DropletUtils * 1.12.2 2021-07-22 [1] Bioconductor
## edgeR 3.34.0 2021-05-19 [1] Bioconductor
## ellipsis 0.3.2 2021-04-29 [2] RSPM (R 4.1.0)
## ensembldb * 2.16.4 2021-08-05 [1] Bioconductor
## evaluate 0.14 2019-05-28 [2] RSPM (R 4.1.0)
## ExperimentHub 2.0.0 2021-05-19 [1] Bioconductor
## fansi 0.5.0 2021-05-25 [2] RSPM (R 4.1.0)
## farver 2.1.0 2021-02-28 [1] RSPM (R 4.1.0)
## fastmap 1.1.0 2021-01-25 [2] RSPM (R 4.1.0)
## filelock 1.0.2 2018-10-05 [1] RSPM (R 4.1.0)
## FNN 1.1.3 2019-02-15 [1] RSPM (R 4.1.0)
## generics 0.1.0 2020-10-31 [1] RSPM (R 4.1.0)
## GenomeInfoDb * 1.28.1 2021-07-01 [1] Bioconductor
## GenomeInfoDbData 1.2.6 2021-07-29 [1] Bioconductor
## GenomicAlignments 1.28.0 2021-05-19 [1] Bioconductor
## GenomicFeatures * 1.44.1 2021-08-15 [1] Bioconductor
## GenomicRanges * 1.44.0 2021-05-19 [1] Bioconductor
## GGally 2.1.2 2021-06-21 [1] RSPM (R 4.1.0)
## ggbeeswarm 0.6.0 2017-08-07 [1] RSPM (R 4.1.0)
## ggplot2 * 3.3.5 2021-06-25 [1] RSPM (R 4.1.0)
## glue 1.4.2 2020-08-27 [2] RSPM (R 4.1.0)
## gridExtra 2.3 2017-09-09 [1] RSPM (R 4.1.0)
## gtable 0.3.0 2019-03-25 [1] RSPM (R 4.1.0)
## HDF5Array 1.20.0 2021-05-19 [1] Bioconductor
## highr 0.9 2021-04-16 [2] RSPM (R 4.1.0)
## hms 1.1.0 2021-05-17 [1] RSPM (R 4.1.0)
## htmltools 0.5.1.1 2021-01-22 [1] RSPM (R 4.1.0)
## httpuv 1.6.1 2021-05-07 [1] RSPM (R 4.1.0)
## httr 1.4.2 2020-07-20 [2] RSPM (R 4.1.0)
## igraph 1.2.6 2020-10-06 [1] RSPM (R 4.1.0)
## interactiveDisplayBase 1.30.0 2021-05-19 [1] Bioconductor
## IRanges * 2.26.0 2021-05-19 [1] Bioconductor
## irlba 2.3.3 2019-02-05 [1] RSPM (R 4.1.0)
## jquerylib 0.1.4 2021-04-26 [1] RSPM (R 4.1.0)
## jsonlite 1.7.2 2020-12-09 [2] RSPM (R 4.1.0)
## KEGGREST 1.32.0 2021-05-19 [1] Bioconductor
## knitr 1.33 2021-04-24 [2] RSPM (R 4.1.0)
## later 1.2.0 2021-04-23 [1] RSPM (R 4.1.0)
## lattice 0.20-44 2021-05-02 [3] CRAN (R 4.1.0)
## lazyeval 0.2.2 2019-03-15 [1] RSPM (R 4.1.0)
## lifecycle 1.0.0 2021-02-15 [2] RSPM (R 4.1.0)
## limma 3.48.3 2021-08-10 [1] Bioconductor
## lobstr 1.1.1 2019-07-02 [1] RSPM (R 4.1.0)
## locfit 1.5-9.4 2020-03-25 [1] RSPM (R 4.1.0)
## magrittr 2.0.1 2020-11-17 [2] RSPM (R 4.1.0)
## Matrix 1.3-4 2021-06-01 [3] RSPM (R 4.1.0)
## MatrixGenerics * 1.4.2 2021-08-08 [1] Bioconductor
## matrixStats * 0.60.0 2021-07-26 [1] RSPM (R 4.1.0)
## mclust 5.4.7 2020-11-20 [1] RSPM (R 4.1.0)
## memoise 2.0.0 2021-01-26 [2] RSPM (R 4.1.0)
## metapod 1.0.0 2021-05-19 [1] Bioconductor
## mime 0.11 2021-06-23 [2] RSPM (R 4.1.0)
## munsell 0.5.0 2018-06-12 [1] RSPM (R 4.1.0)
## org.Hs.eg.db 3.13.0 2021-07-29 [1] Bioconductor
## org.Mm.eg.db 3.13.0 2021-07-29 [1] Bioconductor
## pheatmap 1.0.12 2019-01-04 [1] RSPM (R 4.1.0)
## pillar 1.6.2 2021-07-29 [2] RSPM (R 4.1.0)
## pkgconfig 2.0.3 2019-09-22 [2] RSPM (R 4.1.0)
## plyr 1.8.6 2020-03-03 [1] RSPM (R 4.1.0)
## png 0.1-7 2013-12-03 [1] RSPM (R 4.1.0)
## prettyunits 1.1.1 2020-01-24 [2] RSPM (R 4.1.0)
## progress 1.2.2 2019-05-16 [1] RSPM (R 4.1.0)
## promises 1.2.0.1 2021-02-11 [1] RSPM (R 4.1.0)
## ProtGenerics 1.24.0 2021-05-19 [1] Bioconductor
## purrr 0.3.4 2020-04-17 [2] RSPM (R 4.1.0)
## R.methodsS3 1.8.1 2020-08-26 [1] RSPM (R 4.1.0)
## R.oo 1.24.0 2020-08-26 [1] RSPM (R 4.1.0)
## R.utils 2.10.1 2020-08-26 [1] RSPM (R 4.1.0)
## R6 2.5.0 2020-10-28 [2] RSPM (R 4.1.0)
## rappdirs 0.3.3 2021-01-31 [2] RSPM (R 4.1.0)
## RColorBrewer 1.1-2 2014-12-07 [1] RSPM (R 4.1.0)
## Rcpp 1.0.7 2021-07-07 [2] RSPM (R 4.1.0)
## RCurl 1.98-1.4 2021-08-17 [1] RSPM (R 4.1.0)
## reshape 0.8.8 2018-10-23 [1] RSPM (R 4.1.0)
## restfulr 0.0.13 2017-08-06 [1] RSPM (R 4.1.0)
## rhdf5 2.36.0 2021-05-19 [1] Bioconductor
## rhdf5filters 1.4.0 2021-05-19 [1] Bioconductor
## Rhdf5lib 1.14.2 2021-07-06 [1] Bioconductor
## Rhtslib 1.24.0 2021-05-19 [1] Bioconductor
## rjson 0.2.20 2018-06-08 [1] RSPM (R 4.1.0)
## rlang 0.4.11 2021-04-30 [2] RSPM (R 4.1.0)
## rmarkdown 2.10 2021-08-06 [1] RSPM (R 4.1.0)
## robustbase 0.93-8 2021-06-02 [1] RSPM (R 4.1.0)
## Rsamtools 2.8.0 2021-05-19 [1] Bioconductor
## RSpectra 0.16-0 2019-12-01 [1] RSPM (R 4.1.0)
## RSQLite 2.2.7 2021-04-22 [1] RSPM (R 4.1.0)
## rsvd 1.0.5 2021-04-16 [1] RSPM (R 4.1.0)
## rtracklayer 1.52.1 2021-08-15 [1] Bioconductor
## Rtsne 0.15 2018-11-10 [1] RSPM (R 4.1.0)
## S4Vectors * 0.30.0 2021-05-19 [1] Bioconductor
## sass 0.4.0 2021-05-12 [1] RSPM (R 4.1.0)
## ScaledMatrix 1.0.0 2021-05-19 [1] Bioconductor
## scales 1.1.1 2020-05-11 [1] RSPM (R 4.1.0)
## scater * 1.20.1 2021-06-15 [1] Bioconductor
## scPipe * 1.14.0 2021-05-19 [1] Bioconductor
## scran 1.20.1 2021-05-24 [1] Bioconductor
## scRNAseq * 2.6.1 2021-05-25 [1] Bioconductor
## scuttle * 1.2.1 2021-08-05 [1] Bioconductor
## sessioninfo 1.1.1 2018-11-05 [2] RSPM (R 4.1.0)
## shiny 1.6.0 2021-01-25 [1] RSPM (R 4.1.0)
## SingleCellExperiment * 1.14.1 2021-05-21 [1] Bioconductor
## sparseMatrixStats 1.4.2 2021-08-08 [1] Bioconductor
## statmod 1.4.36 2021-05-10 [1] RSPM (R 4.1.0)
## stringi 1.7.3 2021-07-16 [2] RSPM (R 4.1.0)
## stringr 1.4.0 2019-02-10 [2] RSPM (R 4.1.0)
## SummarizedExperiment * 1.22.0 2021-05-19 [1] Bioconductor
## tibble 3.1.3 2021-07-23 [2] RSPM (R 4.1.0)
## tidyselect 1.1.1 2021-04-30 [1] RSPM (R 4.1.0)
## utf8 1.2.2 2021-07-24 [2] RSPM (R 4.1.0)
## uwot 0.1.10 2020-12-15 [1] RSPM (R 4.1.0)
## vctrs 0.3.8 2021-04-29 [2] RSPM (R 4.1.0)
## vipor 0.4.5 2017-03-22 [1] RSPM (R 4.1.0)
## viridis 0.6.1 2021-05-11 [1] RSPM (R 4.1.0)
## viridisLite 0.4.0 2021-04-13 [1] RSPM (R 4.1.0)
## withr 2.4.2 2021-04-18 [2] RSPM (R 4.1.0)
## xfun 0.25 2021-08-06 [2] RSPM (R 4.1.0)
## XML 3.99-0.7 2021-08-17 [1] RSPM (R 4.1.0)
## xml2 1.3.2 2020-04-23 [2] RSPM (R 4.1.0)
## xtable 1.8-4 2019-04-21 [1] RSPM (R 4.1.0)
## XVector 0.32.0 2021-05-19 [1] Bioconductor
## yaml 2.2.1 2020-02-01 [2] RSPM (R 4.1.0)
## zlibbioc 1.38.0 2021-05-19 [1] Bioconductor
##
## [1] /__w/_temp/Library
## [2] /usr/local/lib/R/site-library
## [3] /usr/local/lib/R/library