官方服务微信:dat818 购买与出租对接

单细胞转录组测序技术进展与应用:全面解析scRNA-seq分析挑战与教程

2万

主题

2

回帖

8万

积分

管理员

积分
85298
发表于 2025-2-15 23:25:36 | 显示全部楼层 |阅读模式
    单细胞转录组测序正在迅速发展,并伴随着许多内容和讲义,许多课程是长期的。 。 。嗨,像我这样的孩子,没有耐心,只有一个人可以完成完整的阅读 - 细胞RNA-Seq()。我将尝试总结教程内容。您需要做的就是单击以添加书签并慢慢阅读!

    (i)为什么-cell rna -seq

    在整个人体组织中,细胞类型,状态和相互作用都非常多样化。为了更好地了解这些组织中存在的细胞类型,单细胞RNA-SEQ(SCRNA-SEQ)提供了有关单细胞水平表达基因的信息。

    单细胞转录组测序可用于:

    常见方法包括:

    scrna-seq

    在进行SCRNA-SEQ之前,我们通常使用大量RNA-Seq进行转录组分析。大量RNA-Seq是一种直接比较细胞平均表达值的方法,这可能是寻找疾病生物标志物的最佳方法,或者不关心样品中大量细胞异质性。

    尽管大量RNA-SEQ可以探索不同条件(例如治疗或疾病)之间基因表达的差异,但细胞水平的差异无法充分捕获。例如,在下图中,如果进行了大量分析(左),我们将无法检测到基因A和GeneB的表达之间的正确关联。但是,如果我们通过细胞类型或细胞状态正确分组细胞,我们可以看到基因之间的正确相关性。

    SCRNA-SEQ也有一定的局限性。除了样本制备和图书馆构建的高价格外,它在数据分析中还具有一定的复杂性,包括:

    大量数据

    来自SCRNA-SEQ实验的数据来自捕获的数千个单元格,即数十万个读取,需要更多的记忆和存储空间。

    细胞的测序深度低

    基于液滴的SCRNA-SEQ方法具有浅的测序深度,通常只能检测到每个细胞的10-50%的转录组。这导致细胞中许多基因的计数为零。但是,在特定细胞中,基因的零计数可能意味着未表达基因,或者简单地表示未检测到转录本。在整个细胞中,具有较高表达水平的基因的测量机会较低。由于此特征,在任何细胞中未检测到许多基因,并且基因表达在细胞之间变化很大。

    零 - ?:SCRNA-SEQ数据通常为零; ,它的零不是比给出的深度(博客文章:)的零更重要的。

    跨细胞/样品的生物复述性

    一些我们不感兴趣的生物学变异可能会导致细胞之间的基因表达与实际生物细胞的类型/状态和掩盖细胞类型更相似/不同。这些变化(除非实验研究的一部分)包括(下面的原始文本):

    图像:,A等。 with -cell,nat。 2016(doi:%2FNBT.3711)

    细胞/样品之间的技术差异

    图片:Hicks SC等,(2015)()

    本文充分介绍了由批次不良引起的问题:

    您怎么知道实验中有批次?

    如果以上任何问题的答案是“否”,则意味着您的实验中有批处理。

    批处理的最佳实践:

    建议:

    (ii) - 细胞RNA -seq数据 - 原始数据计数

    根据所使用的库准备方法,RNA序列(也称为读取或标签)将从3'端(或5'端)或成绩单的全长转录(((10x,cel-seq2,drop-seq,) )在此(smart-seq)中获得。

    图像:E和R。 -cell RNA到细胞,2018()

    不同测序方法的优点:

    3'(或5')结束测序:

    全长测序:

    我们将主要引入3'端测序,重点是基于液滴的方法(,drop-seq,10 x)。

    3' -end reads(基于全部)

    在3'末端测序中,同一转录本的不同读取片段仅来自转录本的3'末端,同一序列的可能性很高。同时,图书馆构造过程中的PCR步骤可能会导致读取重复,因此为了区分它是生物学还是技术重复,我们使用唯一的标识符(,UMI)对其进行标记。

    让我们以下图为例。在下图中,分子ACTB的UMIS是相同的,因此它们只能记录为1,而ARL1的UMIS则不同,因此可以将其记录为2。

    图像:来自EZ等。 - 使用细胞的细胞,细胞2015()

    在细胞水平上正确定量需要以下条件:

    例如,当使用V3库准备方法时,以下所有有关读取的信息:

    图片:sarah(),HMS的细胞核

    对于不同的基于液滴的SCRNA-SEQ方法,SCRNA-SEQ的分析工作流程相似,但是UMI,单元格ID和样品索引的分析将有所不同。例如,以下是10x序列读取的示意图,其中索引,UMI和位置不同:

    图片:sarah(),HMS的细胞核

    -cell rna-seq

    SCRNA-SEQ方法可以通过测序通过读取分辨率和UMI,这在特定步骤中会略有不同,但是除了该方法之外,该过程大致一致,并且常规的工作流程如下:

    图像:,MD和Theis,FJ。最好的校验RNA seq:A,Mol Syst Biol 2019(doi:)

    工作流程的步骤是:

    无论分析如何,都必须重复生物学!

    计数

    我们专注于基于液滴的3'末端测序(例如10x和drop-seq),以将原始测序数据转换为计数矩阵。

    测序工具将以BCL或FASTQ格式输出原始测序数据,或生成计数矩阵。如果读取为BCL格式,我们将需要转换为FastQ格式。有一个有用的命令行工具可以轻松执行此转换。

    注意:我们不在此步骤中。您可能有6个,但是所有内容的读数可能都在同一BCL或FASTQ文件中。

    对于许多SCRNA-SEQ方法,从原始测序数据中生成计数矩阵将执行相似的步骤。

    Umis()和Zumis()是命令行工具,可用于估计转录本3'末端的SCRNA-SEQ数据的表达。此过程中的步骤包括:

    格式读取并过滤嘈杂的细胞;

    (通过确定读取源);

    对齐/伪比对转录;

    折叠UMI和定量读数。

    当然,如果您使用10X库构建方法,Cell()将负责执行上述所有步骤。

    格式读取和过滤嘈杂的细胞:

    可以解析FASTQ文件以获取单元格,UMI和样品。对于基于液滴的方法,某些单元格将对应于低读数(<1000读),因为:

    在比较读取之前,您需要从序列数据中过滤过多的条形码。为了执行此过滤,提取并保存了每个细胞的“细胞条形码”和“分子条形码”。例如,如果您使用“ UMIS”工具,则将以以下格式添加信息:

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);">@HWI-ST808:130:H0B8YADXX:1:1101:2088:2222:CELL_GGTCCA:UMI_CCCT
AGGAAGATGGAGGAGAGAAGGCGGTGAAAGAGACCTGTAAAAAGCCACCGN
+
@@@DDBD>=AFCF+<CAFHDECII:DGGGHGIGGIIIEHGIIIGIIDHII#</pre></p>
    库中使用的细胞条形码应已知,并将丢弃未知的条形码,并且已知的细胞条形码可能会有一定程度的不匹配。

    这:

    如果将多个样本测序以执行此步骤,则这是“ UMIS”工具未处理的步骤,而是由“ Zumis”完成的,该步骤可以解析读取以确定与每个相关相关联的样品的条形码细胞。

    比较/伪比较转录:

    读取与传统(星)或轻质(/)方法的基因对齐。

    折叠UMI和定量读物:

    使用类似或仅量化唯一UMI的工具,

    图像:来自Lafzi等。 :for -cell RNA,2018()

    矩阵中的每个值表示来自相应基因的细胞中的读数数。

    (iii)-cell rna-seq:设置

    生成计数矩阵后,我们需要对其进行QC分析,并在下一步中将其导入R:

    探索样品集

    该数据集来自Kang等人,2017(),是来自八名狼疮患者的PBMC(血细胞)数据,分为对照和干扰素β-处理(刺激)组。

    图片:Kang等,2017()

    原始数据

    研究小组发现,Geo(:)缺乏线粒体读取的矩阵,因此从SRA下载了BAM文件(:),然后转换为FastQ文件,并使用Cell()获得了Count 。

    注意:这也来自10倍,用作()的一部分。

    相关信息也被调用。以下数据如下:

    这是您在QC之前的某些单元格类型。如果您有任何具有低(来自几个基因的)或带有OF细胞的细胞类型的细胞类型。这将为这些。

    上述细胞类型均未预期具有较低的复杂性或高线粒体含量。

    设置R环境

    为了更好地管理数据并使整个项目组织起来,首先创建一个名为“”的项目,然后构建以下目录:

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);">single_cell_rnaseq/
├── data
├── results
└── figures</pre></p>
    下载数据

    解压缩数据后,创建一个新的R脚本,将其命名为“ .r”,并确保整个工作目录看起来像这样:

    加载R软件包

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);">library(SingleCellExperiment)
library(Seurat)
library(tidyverse)
library(Matrix)
library(scales)
library(cowplot)
library(RCurl)</pre></p>
    加载计数矩阵

    总共有3个文件,即:单元ID,基因ID和(每个单元的每个基因)。

    .tsv

    这是一个文本文件,其中包含样品中存在的所有细胞条形码。条形码按照矩阵文件中显示的数据顺序列出(这些是列名)。

    .tsv

   


    这是一个包含定量基因标识符的文本文件。标识符的来源可能会根据定量过程中使用的参考(IE,NCBI,UCSC)而有所不同,这是大多数时间官方基因。这些基因的顺序对应于矩阵文件中每一行的顺序(这些是行名称)。

    .mtx注意,此矩阵中有许多零。

    有两种读取矩阵的方法,即()和()。

    ():这是来自,将变成一个。 .TSV文件和.tsv必须首先进入R,然后它们为R。有关代码以及如何执行此操作,请参见我们的()。

    ():这是来自并将使用单元格作为输入。这样,文件就不需要进入,遗嘱加载并为您加载。我们将使用它来加载数据!

    在(())中

    我们通常使用()。原因必须从一开始就开始。通常,在软件单元过程处理10倍数据之后,将生成一个欧元目录。出口文件夹中有几个文件:

    .html:包括许多QC指标,估计的单元格数,对齐率等; BAM文件:读取fastq文件的可视化和恢复;:构建单元格过滤后构建矩阵所需的所有文件; X:未过滤的文件可用于构建矩阵;

    如果您有一个示例,则可以直接构造一个():

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);"># How to read in 10X data for a single sample (output is a sparse matrix)
ctrl_counts <- Read10X(data.dir = "data/ctrl_raw_feature_bc_matrix")
# Turn count matrix into a Seurat object (output is a Seurat object)
ctrl <- CreateSeuratObject(counts = ctrl_counts,
                           min.features = 100)</pre></p>
    注意:最小。每个细胞都需要的基因。这将消除只有任何细胞的可怜细胞。 ,少于100个基因的细胞不适合。

    使用()函数读取数据时,它会自动为每个单元格创建并存储在元中。

    这是一个像列表一样可以存储 /数据的列表。您可以在此链接中找到有关插槽的更多信息:

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);"># Explore the metadata
head(ctrl@meta.data)</pre></p>
    每列代表什么?

    使用for循环读取多个数据

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);"># Create each individual Seurat object for every sample
for (file in c("ctrl_raw_feature_bc_matrix", "stim_raw_feature_bc_matrix")){
        seurat_data <- Read10X(data.dir = paste0("data/", file))
        seurat_obj <- CreateSeuratObject(counts = seurat_data, 
                                         min.features = 100, 
                                         project = file)
        assign(file, seurat_obj)
}</pre></p>
    因此,分别形成了两个对象,并使用合并函数合并不同的数据:

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);"># Create a merged Seurat object
merged_seurat <- merge(x = ctrl_raw_feature_bc_matrix, 
                       y = stim_raw_feature_bc_matrix, 
                       add.cell.id = c("ctrl", "stim"))</pre></p>
    由于可以用于不同样本的相同单元格ID,因此我们使用add.cell.ID参数来为每个单元格ID添加一个特定于样品的前缀。如果我们查看合并的对象,我们应该能够在行名中看到前缀:

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);"># Check that the merged object has the appropriate sample-specific prefixes
head(merged_seurat@meta.data)
tail(merged_seurat@meta.data)</pre></p>
    (iv) - 细胞RNA -seq:

    在QC步骤中,我们的目标和挑战主要包括:

    目标:

    挑战:

    建议:在进行质量控制之前,需要一种单元格。例如,您是否需要样品中复杂性较低的细胞或线粒体表达水平较高的细胞?如果是这样,那么在评估数据质量时,我们需要考虑这种生物学特征。

    生成质量控制指标:除了上面提到的orig.Ident,我们还可以计算其他QC指标,例如每个UMI基因(可以反映数据的复杂性,UMI数量越大,数据的复杂性越高)和比率(可以找到源自线粒体基因的读取)。

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);">#将每个细胞的UMI数量进行log10转换并加入到metadata
merged_seurat$log10GenesPerUMI <- log10(merged_seurat$nFeature_RNA)/log10(merged_seurat$nCount_RNA)#计算线粒体相关基因比例,注意!("^MT-")只限于人哦。。。merged_seurat$mitoRatio <- PercentageFeatureSet(object = merged_seurat, pattern = "^MT-")
merged_seurat$mitoRatio <- merged_seurat@meta.data$mitoRatio / 100</pre></p>
    当然,我们还可以使用$将其他质量控制指标添加到(),以免对象受到影响。我们可以直接从对象中提取元。创造:

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);"># Create metadata dataframe
metadata <- merged_seurat@meta.data</pre></p>
    您应该看到每个单元格ID都有一个ctrl_或stim_前缀,当我们合并对象时,它可以指定,它们应匹配orig.ident中列出的示例。我们可以首先添加带有单元ID的列,然后更改当前列名称以使其更直观:

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);"># Add cell IDs to metadata
metadata$cells <- rownames(metadata)
# Rename columns
metadata <- metadata %>%
        dplyr::rename(seq_folder = orig.ident,
                      nUMI = nCount_RNA,
                      nGene = nFeature_RNA)</pre></p>
    每个单元的样本名称是根据单元前缀获得的。命名此列:

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);"># Create sample column
metadata$sample <- NA
metadata$sample[which(str_detect(metadata$cells, "^ctrl_"))] <- "ctrl"
metadata$sample[which(str_detect(metadata$cells, "^stim_"))] <- "stim"</pre></p>
    最后,包括用于质量控制的指标:

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);"># 将新的metadata重新添加回seurat
merged_seurat@meta.data <- metadata
#保存
save(merged_seurat, file="data/merged_filtered_seurat.RData")</pre></p>
    评估质量指标

    我们将控制多个质量指标并删除不合格的单元,包括:

    什么是?简而言之,将两个细胞混合在一起,这可能在细胞捕获过程中发生,并且可能会误导为两种细胞类型的过渡态(),因此应去除()。

    我们为什么不检查?通过设置UMI或基因的最大阈值来执行许多工作流程,其原理是大量读取或基因表明存在多个细胞。尽管这个原因似乎很直观,但这并不准确。 ()是检测的重要工具,但我们尚未对其进行基准测试。我们不建议使用阈值进行筛选,并且当我们确定每个阈值时,建议探索这些标记以确定这些标记是否适用于多种单元格类型。

    细胞计数

    细胞计数由检测到的数字确定。对于此实验,预计将有12,000-13,000个细胞。细胞捕获效率略高(70-80%),而10倍为50-60%。注意:如果用于文库制备的细胞浓度不准确,则捕获效率可能要低得多。我们应该使用血细胞仪或自动细胞计数器来计算细胞浓度,而不是使用FACS或确定细胞浓度(这些工具无法准确确定浓度)。

    同时,在10倍中,获得的细胞数量(即细胞数)大于细胞数量。

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);"># Visualize the number of cell counts per sample
metadata %>% 
      ggplot(aes(x=sample, fill=sample)) + 
      geom_bar() +
      theme_classic() +
      theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1)) +
      theme(plot.title = element_text(hjust=0.5, face="bold")) +
      ggtitle("NCells")</pre></p>
    从上图,我们可以看到每个细胞的数量高于15,000。

    每个单元格

    每个单元格的UMI计数通常应高于500,其中500个是预期的下限。如果UMI在500-1000次计数之间,尽管可以使用它,则可能会更深入地测序细胞。

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);"># Visualize the number UMIs/transcripts per cell
metadata %>% 
      ggplot(aes(color=sample, x=nUMI, fill= sample)) + 
      geom_density(alpha = 0.2) + 
      scale_x_log10() + 
      theme_classic() +
      ylab("Cell density") +
      geom_vline(xintercept = 500)</pre></p>
    我们可以看到,大多数单元的UMI数字高于1000。

    在每个细胞中观察到的基因

    通常,它应该与UMI相同,并且还有一个大峰。如果我们在主峰的右侧看到一个小峰,那原因也是不同的,这可能是由于未能捕获单个细胞或具有一定的生物学意义所致。 ,需要仔细评估。

    对于高质量数据,比例直方图应包含一个代表包裹的单元格的大峰。如果我们在主峰的右侧看到一个小峰(我们使用的数据中不存在这一点)或单元格的双峰分布,则可能表明两件事。一种可能是,某些原因导致一组细胞失败。一个可能是,存在生物学上不同类型的细胞(例如,静态细胞的种群,较不复杂的靶细胞)和/或一种类型比另一种类型(即,计数高的细胞可能是较大的细胞))。

    因此,应使用本课程中描述的其他指标对此阈值进行评估。

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);"># Visualize the distribution of genes detected per cell via histogram
metadata %>% 
      ggplot(aes(color=sample, x=nGene, fill= sample)) + 
      geom_density(alpha = 0.2) + 
      theme_classic() +
      scale_x_log10() + 
      geom_vline(xintercept = 300)
# Visualize the distribution of genes detected per cell via boxplot
metadata %>% 
      ggplot(aes(x=sample, y=log10(nGene), fill=sample)) + 
      geom_boxplot() + 
      theme_classic() +
      theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1)) +
      theme(plot.title = element_text(hjust=0.5, face="bold")) +
      ggtitle("NCells vs NGenes")</pre></p>
    Umis vs.基因

    通常,我们将评估UMIS的数量和每个细胞检测到的基因数量。下图显示了通过线粒体读数的分数绘制的基因数和UMI数之间的关系,表明在低基因数的低计量细胞中,线粒体读数分数很高。

    为什么我们需要以高比例的线粒体基因去除细胞?这主要是因为由于细胞损伤,将释放受损细胞的细胞质中的mRNA,而线粒体保留,线粒体基因的比例很高。可以通过结合计数和基因数来去除此类细胞。

    较差的细胞的基因和UMI可能很低,对应于该图的左下象限中的数据点。良好的细胞通常会同时显示更多的基因和更高量的UMI。

    借助此图,我们还可以评估该图的右下象限中数据点的斜率和数据点的分布。具有大量UMIS的细胞,但只有少数基因可能是垂死的细胞或低复杂性细胞类型(即红细胞)。

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);"># Visualize the correlation between genes detected and number of UMIs and determine whether strong presence of cells with low numbers of genes/UMIs
metadata %>% 
      ggplot(aes(x=nUMI, y=nGene, color=mitoRatio)) + 
      geom_point() + 
    scale_colour_gradient(low = "gray90", high = "black") +
      stat_smooth(method=lm) +
      scale_x_log10() + 
      scale_y_log10() + 
      theme_classic() +
      geom_vline(xintercept = 500) +
      geom_hline(yintercept = 250) +
      facet_wrap(~sample)</pre></p>
    线粒体比

    我们可以确定死亡或垂死细胞中是否存在大量的线粒体污染。除非必要,否则我们将线粒体比以上0.2的细胞定义为线粒体计数质量差的样品。

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);"># Visualize the distribution of mitochondrial gene expression detected per cell
metadata %>% 
      ggplot(aes(color=sample, x=mitoRatio, fill=sample)) + 
      geom_density(alpha = 0.2) + 
      scale_x_log10() + 
      theme_classic() +
      geom_vline(xintercept = 0.2)</pre></p>
    复杂

    实际上,每个执行少量序列的细胞都具有高度的复杂性,这主要是因为我们没有对每个样品进行深层测序。样品中的异常细胞可能具有较低的RNA复杂性,我们可以使用该指标以低复杂性(例如红细胞)检测污染。通常,我们将分数设置为0.8。

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);"># Visualize the overall complexity of the gene expression by visualizing the genes detected per UMI
metadata %>%
      ggplot(aes(x=log10GenesPerUMI, color = sample, fill=sample)) +
      geom_density(alpha = 0.2) +
      theme_classic() +
      geom_vline(xintercept = 0.8)</pre></p>
    注意:每个单元格的读取是可以的; ,使用的需要将其保存到。 ,您希望看到所有峰值在每个单元格中读取所有峰值。

    筛选

    线粒体相对较高的细胞也可能参与呼吸过程,这在一项研究中是必需的。因此,作者认为,在设定条件时,应全面考虑并尽可能放松,以防止有意义的生物学变化被删除。

    细胞水平过滤

    使用()函数设置对象:

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);"># Filter out low quality reads using selected thresholds - these will change with experiment
filtered_seurat <- subset(x = merged_seurat, 
                         subset= (nUMI >= 500) & 
                           (nGene >= 250) & 
                           (log10GenesPerUMI > 0.80) & 
                           (mitoRatio < 0.20))</pre></p>
    基因过滤

    删除了具有0个表达值和在少于10个细胞中表达的基因的基因。

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);"># Output a logical vector for every gene on whether the more than zero counts per cell
# Extract counts
counts <- GetAssayData(object = filtered_seurat, slot = "counts")
# Output a logical vector for every gene on whether the more than zero counts per cell
nonzero <- counts > 0
# Sums all TRUE values and returns TRUE if more than 10 TRUE values per gene
keep_genes <- Matrix::rowSums(nonzero) >= 10
# Only keeping those genes expressed in more than 10 cells
filtered_counts <- counts[keep_genes, ]
# Reassign to filtered Seurat object
filtered_seurat <- CreateSeuratObject(filtered_counts, meta.data = filtered_seurat@meta.data)</pre></p>
    QC

    过滤后,您可以在过滤前后查看效果,以判断过滤指示器是否合适。

    细胞

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);"># Create .RData object to load at any time
save(filtered_seurat, file="data/seurat_filtered.RData")</pre></p>
    (v)计数和

    获得高质量的单细胞后,单细胞RNA-SEQ(SCRNA-SEQ)分析工作流程中的下一步是执行聚类。聚类的目的是将不同的细胞类型分为独特的细胞亚群。为了执行聚类,我们确定了表达细胞之间最大差异的基因。然后,我们使用这些基因来确定哪些相关基因集导致细胞之间表达的最大差异。

    数值归一化

    归一化的最重要目的是使细胞和/或细胞内部之间的表达水平更加可比性。那么在标准化中需要处理的主要因素包括:

    测序深度:考虑测序深度是比较细胞之间基因表达的必要条件。在下面的示例中,每个基因似乎是细胞2中的表达式的两倍,但这是细胞2具有双测深度深度的结果。

    因此,要准确比较细胞之间的表达,必须将测序深度归一化。

    基因长度:需要基因长度来比较同一细胞中不同基因之间的表达。与较长基因排列的读取数似乎具有与具有较高表达的较短基因相同的计数/表达。

    主成分分析(PCA)

    PCA是一种用于强调差异和相似性()的技术。这是一个学习视频:&#39;s Video()

    这是PCA的示例模拟过程,可以帮助您理解:

    如果您量化了两个样品(或单元格)中四个基因的表达,则可以绘制这些基因的表达值,其中一个在X轴上表示,而另一个在y轴上表示,如图所示以下:

    在此示例中,我们可以朝代表最大变化的方向上的数据绘制一条线。数据集中最大的变化是组成两个端点的基因。我们还看到这些基因在线上和下方有些不同。我们可以在数据上绘制另一行,代表数据中第二大变量。

    末端附近的基因将是具有最大突变的基因。这些基因对线方向具有最大的数学影响。

    例如,基因C值的略有变化将大大改变较长线的方向,而基因A或基因D的略有变化对其影响很小。

    我们还可以旋转整个图片,以确保线方向是从左至右以及从上到下的。这些线现在可以视为代表变化的轴。这些轴本质上是“主要组件”,其中PC1代表数据中最大的差异,PC2代表数据中第二大差异。

    如果有n个细胞,依此类推。 。 。

    确定PC后,您需要对每个PC进行评分并计算所有示例PC对(-pc对)的分数:如下:

    (1)首先,根据其对每个PC的影响程度为基因分配“影响”评分。对特定PC分数无效的基因接近零,而影响力更高的基因得分更高。 PC线末端的基因将产生更大的影响,因此它们将获得更大的分数,但是两端的符号相反。

    (2)确定影响分数后,使用以下公式计算每个样本的分数:

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);">Sample1 PC1 score = (read count * influence) + ... for all genes</pre></p>
    以我们的两个示例为例,以下是如何计算分数:

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre class="public-DraftStyleDefault-pre" style="margin-top: 1.4em; margin-bottom: 1.4em; padding: 0.88889em; font-size: 0.9em; word-break: normal; overflow-wrap: normal; overflow: auto; background-color: rgb(246, 246, 246); border-radius: 4px; color: rgb(26, 26, 26);">## Sample1
PC1 score = (4 * -2) + (1 * -10) + (8 * 8) + (5 * 1) = 51
PC2 score = (4 * 0.5) + (1 * 1) + (8 * -5) + (5 * 6) = -7
## Sample2
PC1 score = (5 * -2) + (4 * -10) + (8 * 8) + (7 * 1) = 21
PC2 score = (5 * 0.5) + (4 * 1) + (8 * -5) + (7 * 6) = 8.5</pre></p>
    (3)一旦计算了所有PC的分数,就可以在简单的散点图上绘制它们。这是一个示例图:

    对于具有大量样品或单元格的数据集,通常为每个样品/单元格绘制PC1和PC2分数。由于这些PC解释了数据集中最大的变化,因此PC1和PC2中将聚集更多相似的样品/单元。请参阅以下示例:

    图像:

    对于我们的单细胞数据,我们最终将选择10-100个PC来对细胞进行聚类分析,而不是所有基因。

    待续。

    你可能想看它

    文章解释:老虎

    上一篇文章:NC文章的详细说明|小鼠成纤维细胞的单细胞分析发现,成纤维细胞在心肌细胞成熟中起关键作用

更多帖子推荐

您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|小黑屋|关于我们

Copyright © 2001-2025, Tencent Cloud.    Powered by Discuz! X3.5    京ICP备20013102号-30

违法和不良信息举报电话:86-13718795856 举报邮箱:hwtx2020@163.com

GMT+8, 2025-4-22 02:04 , Processed in 0.082895 second(s), 17 queries .