Seurat 3.0 实例教程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Seurat 3.0 实例教程相关的知识,希望对你有一定的参考价值。

参考技术A

Seurat 指导聚类教程

参照官网教程 用了自己的一批真实的数据,总共有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 实例教程的主要内容,如果未能解决你的问题,请参考以下文章

Seurat软件使用操作教程

单细胞测序分析: Seurat 使用教程

Seurat4.0系列教程21: 结合Cell Hashing分析双细胞

自学Seurat的一点记录

在.NET Core 3.0中的WPF中使用IOC图文教程

开源物联网框架ServerSuperIO 3.0正式发布(C#),附加:二次开发套件和教程。