Seurat 3.0 实例教程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Seurat 3.0 实例教程相关的知识,希望对你有一定的参考价值。
参考技术ASeurat 指导聚类教程
参照官网教程 用了自己的一批真实的数据,总共有7038个细胞。以下是cellranger count跑出来的标准结果。
我们从读取数据开始。Read10X函数从10X读取cellranger流程的输出,返回UMI计数矩阵。矩阵中的值表示每个特征(即基因;在每个细胞(列)中检测到的。
接下来,我们使用count矩阵创建一个Seurat对象。该对象充当一个容器,其中包含单细胞数据集的数据(如计数矩阵)和分析(如PCA或聚类结果)。
读取数据:
data.dir 参数包含矩阵的目录。包含matrix.mtx,gene.tsv(或features.tsv)和barcodes.tsv。为了加载多个数据目录,可以给出一个向量或命名向量。如果给定了命名向量,则cell barcode 名称将以该名称为前缀。
gene.column 参数指定基因在哪一列。features.tsv或gene.tsv用于基因名称的tsv;默认是2,表示第二列是基因名,我们来看一下features.tsv,包含3列:
unique.features 参数默认为TRUE,表示 使features name unique。
如果features.csv表明数据具有多个数据类型,则返回一个包含每种类型数据的稀疏矩阵的列表。否则将返回一个包含表达式数据的稀疏矩阵。
使用原始数据(非规范化数据)初始化Seurat对象。
注意:在以前的版本(<3.0)中,该函数还接受一个参数来设置“检测到的”特征(基因)的表达阈值。为了简化初始化过程/假设,删除了此功能。如果您仍然希望为特定的数据集设置这个阈值,那么只需在调用此函数之前对输入表达式矩阵进行筛选即可。
可以发现7038samples 和网页版报告一致,33538 features也和features.csv数量一致。
count matrix 数据长什么?
例如,计数矩阵存储在G48E2L1[["RNA"]]@counts中。
只看几个基因:
点. 矩阵中的值表示0(未检测到分子)。由于scRNA-seq矩阵中的大多数值都是0,所以Seurat尽可能使用 稀疏矩阵表 示。这为Drop-seq/inDrop/10x数据节省了大量内存和速度。
如果需要查看稀疏矩阵的空间大小(个人理解),这些可以忽略。
以下步骤包含Seurat中scRNA-seq数据的标准预处理工作流。这些代表细胞的选择和过滤基于QC指标,数据归一化和缩放,并检测高度可变的特征。
QC和选择细胞进行进一步分析
Seurat允许您轻松地探索QC指标,并根据任何用户定义的标准过滤单元格。大家通常使用的一些QC指标包括
QC指标存储在哪里?
在官方的样例中,可视化QC指标,并进行cell过滤。
先来可视化看一下:
VlnPlot()是Seurat中用于绘制单细胞数据的小提琴图函数(基因表达、指标、PC分数等),小提琴图用于显示数据分布及其概率密度。
FeatureScatter通常用于可视化 feature-feature 关系,也可以用于计算对象的任何东西,i.e. 对象数据中的列,PC分数等。 个人理解:就是用点图看两个数据之间的相关性。
官方教程中在这里过滤掉 2500 > nFeature_RNA >200 和percent.mt < 5的数据:
但是我不想过滤,本文数据没有做过滤处理。哈哈哈!
从数据集中删除不需要的细胞后,下一步是数据标准化。默认情况下,我们使用全局缩放归一化方法“LogNormalize”,它将每个细胞的特征表达式测量值归一化为总的表达式,再乘以一个缩放因子(默认为10,000),对结果对数化处理。标准化的数值存储在pbmc[["RNA"]]@data中。
接下来,我们将计算数据集中显示高细胞间差异的特征子集(i。e,它们在一些细胞中高表达,在另一些细胞中低表达)。我们和其他人发现,在下游分析中关注这些基因有助于在单细胞数据集中突出生物信号。
这里详细描述了Seurat3中的过程,并通过直接建模单细胞数据中固有的均值-方差关系改进了先前的版本,并在FindVariableFeatures函数中实现。默认情况下,我们为每个数据集返回2,000个特性。这些将用于下游分析,如PCA。
Find variable features
识别“平均变异性图”上的异常点。
FindVariableFeatures(object, ...)
如何选择****selection.method:
vst: 首先,用局部多项式回归(loess)拟合对数(方差)与对数(均值)的关系。然后使用观察到的平均值和期望的方差(由拟合线给出)对特征值进行标准化。然后,在裁剪到最大值之后,根据标准化的值计算特征方差(参见clip)。max参数)。
mean.var.plot (mvp): 首先,使用一个函数计算每个特征的平均表达式(mean.function)和离散度(diffusion .function)。接下来,根据每个bin的平均表达式将特征划分为number .bin (默认 20),并计算每个bin内的离散度z-score。这样做的目的是识别变量特征,同时控制可变性和平均表达之间的强烈关系。
dispersion(disp): 选择分散值最高的基因
找出10个差异最大的基因:
接下来,我们应用一个线性变换(“scaling”),这是一个标准的预处理步骤,比PCA等降维技术更重要。
ScaleData函数功能:
接下来,我们对缩放的数据执行PCA。默认情况下,只使用前面确定的变量特性作为输入,但是如果您希望选择不同的子集,可以使用features参数来定义。
Seurat提供了几种有用的方法来可视化细胞和定义PCA的特性,包括VizDimReduction、DimPlot和DimHeatmap
检查和可视化PCA结果的几种不同的方法
特别是,DimHeatmap可以方便地探索数据集中主要的异构来源,并且在决定哪些PCs可以用于进一步的下游分析时非常有用。细胞和特征都是根据它们的PCA分数排序的。将cells设置为一个数字,可以绘制光谱两端的“极端”细胞,这极大地加快了绘制大型数据集的速度。虽然这显然是一个监督分析,但我们发现这是一个有价值的工具,用于探索相关的特征集。
为了克服scRNA-seq数据中单个特征中大量的技术噪声,Seurat根据他们的PCA评分将细胞分组,每个PC实质上代表一个“元特征”,它将跨相关特征集的信息组合在一起。因此,最主要的组件代表了数据集的健壮压缩。但是,我们应该选择包含多少个主成分? 10 个? 20个? 100个?
在Macosko et al文章中,我们实现了一个重采样测试的灵感来自JackStraw程序。我们随机排列数据的一个子集(默认为1%)并重新运行PCA,构造一个特征得分的“null distribution”,然后重复这个过程。我们认为最“significant” 的PC是那些具有丰富的低p值特征的。
JackStrawPlot函数提供了一个可视化工具,用于用均匀分布(虚线)比较每个PC的p-values分布。“显著的”PCs将显示出一个低p值(虚线以上的实线)的强富集特性。在这种情况下,在最初的10-12个PCs之后,重要性似乎急剧下降。
另一种启发式方法生成“Elbow plot”:根据各成分解释的方差百分比对主要成分进行排序( ElbowPlot 函数)。在这个例子中,我们可以观察到PC9-10周围的一个拐点(“elbow”),这表明大部分真实信号是在前10个pc中捕获的。
对用户来说,确定数据集的真实维数是一项挑战/不确定的工作。因此,我们建议考虑这三种方法。第一个是更有监督的,探索PCs以确定相关的异质性来源,并可与GSEA联合使用。第二个实现了一个基于随机空模型的统计测试,但是对于大型数据集来说非常耗时,并且可能不会返回一个明确的PC截止时间。第三种是一种常用的启发式算法,可以立即计算出来。在这个例子中,所有这三种方法都产生了相似的结果,但是我们可能有理由选择PC 7-12之间的任何一个作为截止时间。
我们在这里选择了10个,但鼓励用户考虑以下几点:
Seurat v3应用了一种基于图的集群方法,建立在(Macosko等人)的初始策略之上。重要的是,驱动聚类分析的距离度量(基于先前确定的PCs)保持不变。然而,我们将细胞距离矩阵划分成集群的方法已经得到了极大的改进。我们的方法受到最近手稿的很大启发,这些手稿将基于图的聚类方法应用于scRNA-seq数据 [SNN-Cliq, Xu and Su, Bioinformatics, 2015]和CyTOF数据 [PhenoGraph, Levine et al., Cell, 2015]。简单地说,这些方法将单元格嵌入到一个图结构中——例如k -最近邻(KNN)图,在具有相似特征表达模式的单元格之间绘制边缘,然后尝试将这个图划分为高度互连的准团或社区。
和表现型一样,我们首先在PCA空间中构造一个基于欧氏距离的KNN图,然后根据任意两个细胞在局部区域的共享重叠(Jaccard相似性)来细化它们之间的边权值。此步骤使用 FindNeighbors 函数执行,并将之前定义的数据集维度(前10个pc)作为输入。
为了对单元进行聚类,我们接下来应用模块化优化技术,如Louvain算法(default)或SLM [SLM, Blondel et al., Journal of Statistical Mechanics],以迭代方式将单元分组在一起,目标是优化标准模块化函数。 FindClusters 函数实现这个过程,并包含一个分辨率参数,该参数设置下游集群的粒度,增加的值将导致更多的集群。我们发现,将该参数设置在0.4-1.2之间,对于3K左右的单细胞数据集通常会得到良好的结果。对于较大的数据集,最佳分辨率通常会增加。可以使用 Idents 函数找到集群。
查看前5个细胞的cluster id
Seurat提供了几种非线性的降维技术,如tSNE和UMAP,以可视化和探索这些数据集。这些算法的目标是学习数据的底层流形,以便在低维空间中将相似的单元放在一起。上面所确定的基于图的集群中的单元应该在这些降维图上共同定位。作为UMAP和tSNE的输入,我们建议使用相同的PCs作为聚类分析的输入。
此时可以保存对象,这样就可以轻松地将其加载回来,而不必重新运行上面执行的计算密集型步骤,或者轻松地与协作者共享。
Seurat可以帮助您找到通过差异表达式定义集群的标记。默认情况下,它识别单个簇的阳性和阴性标记(在 ident.1 中指定),与所有其他细胞相比较。 Findallmarkers 为所有集群自动化这个过程,但是您也可以测试集群组之间的相互关系,或者测试所有细胞。
min.pct 参数要求至少在两组细胞中的任何一组中检测一个特性,以及thresh.test参数要求一个特性在两组之间有一定的差异(平均)。您可以将这两个值都设置为0,但是时间上有很大的增加——因为这将测试大量不太可能具有高度歧视性的特性。作为加速这些计算的另一个选项, max.cells.per.ident 可以设置。这将对每个标识类进行采样,使其不具有比设置的细胞更多的细胞。虽然通常会有功率的损失,速度的增长可能是显著的,最高度差异表达的特征可能仍然会上升到顶部。
找出区分cluster 5与cluster 0和cluster 3的所有标记
找出每个cluster的标记与所有剩余的细胞相比较,只报告阳性细胞
Seurat有几个关于微分表达式的测试,可以通过该测试设置。使用参数(详情请参阅我们的DE vignette)。例如,ROC测试返回任何单个标记(从0 - random到1 - perfect)的分类能力。
我们包括一些可视化标记表达的工具。 VlnPlot (显示跨集群的表达式概率分布)和 FeaturePlot (在tSNE或PCA图上可视化特性表达式)是我们最常用的可视化方法。我们还建议使用 RidgePlot 、 CellScatter 和 DotPlot 作为查看数据集的额外方法。
DoHeatmap 为给定的细胞和特征生成一个表达式heatmap。在本例中,我们绘制每个集群的前20个标记(如果小于20,则绘制所有标记)。
幸运的是,在这个数据集的情况下,我们可以使用规范的标记,以方便地匹配无偏聚类到已知的细胞类型:
无法将应用程序部署到 shinyapps.io:无法确定包源
【中文标题】无法将应用程序部署到 shinyapps.io:无法确定包源【英文标题】:Unable to deploy app to shinyapps.io: Unable to determine package source 【发布时间】:2020-06-01 10:43:57 【问题描述】:在将一个简单的应用程序部署到 shinyapps.io 时,我遇到了一个令人尴尬的错误。 该应用程序只需要一个包“Seurat”,我通过库(Seurat)在 server.R 中加载它。但是当我将它部署到 shinyappsio.io 时,它停止并显示:
Preparing to deploy application...DONE
Uploading bundle for application: 1762339...DONE
Deploying bundle: 2806268 for application: 1762339 ...
Waiting for task: 693229180
building: Processing bundle: 2806268
building: Parsing manifest
################################ Begin Task Log ################################
################################# End Task Log #################################
Error: Unhandled Exception: Child Task 693229181 failed: Error parsing manifest: Unable to determine package source for Bioconductor package Biobase: Repository must be specified
Execution halted
虽然这似乎是一个简单的存储库规范问题。所以我尝试更改存储库:
options(repos = BiocManager::repositories())
这没有帮助,然后我尝试了:
setRepositories()
然后选择“BioC 软件”也无济于事。为 Bioconductor 包 Seurat 指定的错误:
Preparing to deploy application...DONE
Uploading bundle for application: 1762339...DONE
Deploying bundle: 2806287 for application: 1762339 ...
Waiting for task: 693231225
building: Processing bundle: 2806287
building: Parsing manifest
################################ Begin Task Log ################################
################################# End Task Log #################################
Error: Unhandled Exception: Child Task 693231227 failed: Error parsing manifest: Unable to determine package source for Bioconductor package Seurat: Repository must be specified
Execution halted
然后我发现 Seurat 甚至不是生物导体包,应该与 r CRAN 一起找到: https://cran.r-project.org/web/packages/Seurat/index.html
我没有其他解决方案。谁能帮帮我?谢谢!
这是当前选项(“repos”):
> options("repos")
$repos
CRAN
"https://cloud.r-project.org"
BioCsoft
"https://bioconductor.org/packages/3.10/bioc"
BioCann
"https://bioconductor.org/packages/3.10/data/annotation"
BioCexp
"https://bioconductor.org/packages/3.10/data/experiment"
这是我的会话信息:
R version 3.6.2 (2019-12-12)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.4 LTS
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_GB.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_GB.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] ggplot2_3.2.1 Seurat_3.1.3 shiny_1.4.0
loaded via a namespace (and not attached):
[1] TH.data_1.0-10 Rtsne_0.15 colorspace_1.4-1 ggridges_0.5.2 rsconnect_0.8.16 rstudioapi_0.11
[7] leiden_0.3.3 listenv_0.8.0 npsurv_0.4-0 ggrepel_0.8.1 mvtnorm_1.0-12 codetools_0.2-16
[13] splines_3.6.2 mnormt_1.5-6 lsei_1.2-0 TFisher_0.2.0 jsonlite_1.6.1 packrat_0.5.0
[19] ica_1.0-2 cluster_2.1.0 png_0.1-7 uwot_0.1.5 sctransform_0.2.1 BiocManager_1.30.10
[25] compiler_3.6.2 httr_1.4.1 assertthat_0.2.1 Matrix_1.2-18 fastmap_1.0.1 lazyeval_0.2.2
[31] later_1.0.0 htmltools_0.4.0 tools_3.6.2 rsvd_1.0.2 igraph_1.2.4.2 gtable_0.3.0
[37] glue_1.3.1 RANN_2.6.1 reshape2_1.4.3 dplyr_0.8.4 rappdirs_0.3.1 Rcpp_1.0.3
[43] Biobase_2.46.0 vctrs_0.2.2 multtest_2.42.0 gdata_2.18.0 ape_5.3 nlme_3.1-144
[49] gbRd_0.4-11 lmtest_0.9-37 stringr_1.4.0 globals_0.12.5 mime_0.9 lifecycle_0.1.0
[55] irlba_2.3.3 gtools_3.8.1 future_1.16.0 MASS_7.3-51.5 zoo_1.8-7 scales_1.1.0
[61] promises_1.1.0 parallel_3.6.2 sandwich_2.5-1 RColorBrewer_1.1-2 curl_4.3 reticulate_1.14
[67] pbapply_1.4-2 gridExtra_2.3 stringi_1.4.5 mutoss_0.1-12 plotrix_3.7-7 caTools_1.18.0
[73] BiocGenerics_0.32.0 bibtex_0.4.2.2 Rdpack_0.11-1 rlang_0.4.4 pkgconfig_2.0.3 bitops_1.0-6
[79] lattice_0.20-38 ROCR_1.0-7 purrr_0.3.3 htmlwidgets_1.5.1 cowplot_1.0.0 tidyselect_1.0.0
[85] RcppAnnoy_0.0.14 plyr_1.8.5 magrittr_1.5 R6_2.4.1 gplots_3.0.1.2 multcomp_1.4-12
[91] withr_2.1.2 pillar_1.4.3 sn_1.5-5 fitdistrplus_1.0-14 survival_3.1-8 tibble_2.1.3
[97] future.apply_1.4.0 tsne_0.1-3 crayon_1.3.4 KernSmooth_2.23-16 plotly_4.9.2 grid_3.6.2
[103] data.table_1.12.8 metap_1.3 digest_0.6.24 xtable_1.8-4 tidyr_1.0.2 httpuv_1.5.2
[109] numDeriv_2016.8-1.1 openssl_1.4.1 RcppParallel_4.4.4 stats4_3.6.2 munsell_0.5.0 viridisLite_0.3.0
[115] askpass_1.1
【问题讨论】:
【参考方案1】:我遇到了这个确切的问题,但经过很多小时后,我在这个线程中找到了解决方案: https://github.com/satijalab/seurat/issues/2716
您只需要安装开发版本。希望这会有所帮助!
【讨论】:
以上是关于Seurat 3.0 实例教程的主要内容,如果未能解决你的问题,请参考以下文章