学习目标

知道如何导入和读取数据,并了解数据的质控,能够对数据进行质控和分析。

1. 质控准备


在基因表达定量后,需要将这些数据导入到 R 中,以生成用于执行 QC(质控)。下面将讨论定量数据的格式,以及如何将其导入 R,以便可以继续工作流程中的 QC 步骤。

2. 数据来源

在本教程中,将使用scRNA-seq 数据集,该数据集是 Kang 等人 2017[1] 年一项大规模研究的一部分。在本文中,作者提出了一种算法,该算法利用遗传变异 (eQTL) 来确定每个包含单个细胞的液滴 (singlet) 的遗传身份,并识别包含来自不同个体的两个细胞的液滴 (doublet)。

用于测试他们算法的数据取自八名狼疮患者的外周血单核细胞 (PBMC) 组成,分为对照和干扰素 β 治疗(刺激)条件。


  • Raw data

该数据集在 GEO (GSE96583) 上可下载,但是可用的计数矩阵缺少线粒体读数,因此从 SRA (SRP102802) 下载了 BAM 文件。这些 BAM 文件被转换回 FASTQ 文件,然后通过 Cell Ranger 运行以获得将使用的计数数据。

注意:此数据集的计数数据也可从 10X Genomics 获得,并在 Seurat[2] 教程中使用。

  • Metadata

除了原始数据,还需要收集有关数据的信息;这称为Metadata。常常有一种直接放手去做的冲动,但如果对这些数据的来源样本一无所知,这并不是一个好的习惯。

下面提供了数据集的一些相关Metadata

  1. 文库是使用 10X Genomics 第 2 版制备的

  2. 样本在 Illumina NextSeq 500 上进行测序

  3. 来自八名狼疮患者的 PBMC 样本被分成两个等分试样

    • 一份 PBMC 被 100 U/mL 重组 IFN-β 激活 6 小时。
    • 第二个等分样未处理。
    • 6 小时后,将每种条件的 8 个样品汇集到两个池中。
  4. 分别鉴定了 12,138 和 12,167 个细胞,用于对照和刺激的合并样本。

  5. 由于样本是 PBMC,预计包含免疫细胞,例如:

    • B细胞
    • T细胞
    • NK细胞
    • 单核细胞
    • 巨噬细胞
    • 巨核细胞(可能)

推荐在质控或分析前,对自己的样本有充分的了解,这对于后续的分析十分有帮助。

3. 数据准备

  • 环境准备:> 参考文末往期推荐
  • 数据下载:> 数据地址 [3]

4. 项目结构

涉及大量数据的研究中,最重要的部分之一是如何管理它。倾向于优先分析,但数据管理的许多其他重要方面,往往在第一次看到新数据中被忽视。哈佛大学的生物医学数据管理[4] 很好的讲述了这一过程。

数据管理的一个重要方面是组织。对于处理和分析数据的每个实验,通过创建计划的存储空间(目录结构)来组织被认为是最佳实践。

  • 创建目录结构
single_cell_rnaseq/├── data├── results└── figures

5. 数据处理

  • 新建 Rscript
touch quality_control.R
  • 加载包
# 在前面创建的脚本中,用R打开library(SingleCellExperiment)library(Seurat)library(tidyverse)library(Matrix)library(scales)library(cowplot)library(RCurl)
  • 加载 scRNA-seq count数据

无论用于处理原始scRNA-seq 序列数据的技术或管道如何,定量后表达数据的输出通常是相同的。也就是说,对于每个单独的样本,将拥有以下三个文件:

  1. 具有细胞ID的文件,代表所有定量的细胞

  2. 具有基因ID的文件,代表所有定量的基因

  3. 每个细胞的每个基因的计数矩阵

以上数据存放在data/ctrl_raw_feature_bc_matrix文件夹内。

  1. barcodes.tsv

这是一个文本文件,其中包含该样本的所有细胞条形码。条形码按矩阵文件中显示的数据顺序列出

barcodes.tsv
  1. features.tsv

这是一个包含定量基因标识符的文本文件。标识符的来源可能是 Ensembl、NCBI、UCSC,但大多数情况下这些是官方基因符号。这些基因的顺序对应于矩阵文件中的行顺序。

features.tsv
  1. matrix.mtx

这是一个包含计数值矩阵的文本文件。行与上面的基因 ID 相关联,列对应于细胞条形码。请注意,此矩阵中有许多零值。

matrix.mtx

将此数据加载到 R 中,需要将这三个数据整合为一个计数矩阵,并且考虑到减少计算的原因,此计数矩阵是一个稀疏矩阵。

  • 不同的读取数据方法:
  1. readMM(): 这个函数来自 Matrix 包,它将标准矩阵转换为稀疏矩阵。 features.tsv 文件和 barcodes.tsv 必须先单独加载到 R 中,然后才能将它们组合起来。
  2. Read10X(): 此函数来自 Seurat 包,将直接使用 Cell Ranger 输出目录作为输入。使用这种方法,不需要加载单个文件,而是该函数将加载并将它们组合成一个稀疏矩阵。本文将采取这个办法。

使用 Cell Ranger 处理 10X 数据后,将拥有一个 outs 目录。在此目录中,有下列文件:

  1. web_summary.html: 报告不同的 QC 指标,包括映射指标、过滤阈值、过滤后估计的细胞数,以及过滤后每个细胞的读数和基因数量的信息。
  2. BAM alignment files: 用于可视化映射读取和重新创建 FASTQ文件的文件(如果需要)
  3. ** filtered_feature_bc_matrix:**包含使用 Cell Ranger 过滤的数据构建计数矩阵所需的所有文件的文件夹
  4. raw_feature_bc_matrix: 包含使用原始未过滤数据构建计数矩阵所需的所有文件的文件夹

虽然 Cell Ranger 对表达计数执行过滤,但希望执行自己的 QC 和过滤。鉴于此,只对 Cell Ranger 输出中的 raw_feature_bc_matrix 文件夹感兴趣。

如果有一个样本,可以生成计数矩阵,然后创建一个 Seurat 对象:

关于Seurat[5]对象

# 如何读取单个样本的 10X 数据(输出为稀疏矩阵)ctrl_counts <- Read10X(data.dir = "data/ctrl_raw_feature_bc_matrix")

# 将计数矩阵转为 Seurat 对象ctrl <- CreateSeuratObject(counts = ctrl_counts, min.features = 100)# min.features 参数指定每个细胞需要检测的最小基因数。

min.features 参数将过滤掉质量差的细胞,这些细胞可能只是封装了随机条形码而没有任何细胞存在。通常,检测到的基因少于 100 个的细胞不被考虑用于分析。

当使用 Read10X() 函数读入数据时,Seurat 会自动为每个单元格创建一些元数据。此信息存储在Seurat对象内的 meta.data 中。

# 探索元数据head(ctrl@meta.data)

meta.data

元数据的列:

  • orig.ident: 如果已知,这通常包含样本标识,但默认为“SeuratProject

  • nCount_RNA: 每个单元格的 UMI

  • nFeature_RNA: 每个细胞检测到的基因数量

  • 使用 for 循环读取多个样本

在实践中,可能有几个样本需要读取数据,如果一次只读取一个,可能会变得乏味且容易出错。因此,为了使数据导入R更有效,可以使用 for循环,它将为给定的每个输入迭代一系列命令,并为每个样本创建 seurat 对象。

# 仅测试,无法运行。for (variable in input){ command1 command2 command3}

# 利用循环读取数据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)  # 将对象赋值给变量}

接下来,将这些对象合并到一个单独的 Seurat 对象中。这将使两个样品组一起运行 QC 步骤变得更加容易,并能够轻松地比较所有样品的数据质量。

# 创建一个合并的 Seurat 对象merged_seurat <- merge(x = ctrl_raw_feature_bc_matrix,                        y = stim_raw_feature_bc_matrix,                        add.cell.id = c("ctrl", "stim"))

# 合并两个以上的样本merged_seurat <- merge(x = ctrl_raw_feature_bc_matrix,                        y = c(stim1_raw_feature_bc_matrix, stim2_raw_feature_bc_matrix,                       stim3_raw_feature_bc_matrix),                        add.cell.id = c("ctrl", "stim1", "stim2", "stim3"))

# 查看对象的元数据head(merged_seurat@meta.data)tail(merged_seurat@meta.data)

因为相同的单元格 ID 可用于不同的样本,所以使用add.cell.id参数为每个单元格 ID 添加一个特定于样本的前缀。

参考资料

[1]

Kang: https://www.nature.com/articles/nbt.4042

[2]

Seurat: https://satijalab.org/seurat/v3.0/immune_alignment.html

[3]

数据地址: https://www.dropbox.com/s/we1gmyb9c8jej2u/single_cell_rnaseq.zip?dl=1

[4]

数据管理: https://datamanagement.hms.harvard.edu/

[5]

Seurat: https://github.com/satijalab/seurat/wiki/Seurat

本文由 mdnice 多平台发布

单细胞分析之质控(四)相关推荐

  1. 单细胞分析:质控实操(五)

    1. 学习目标 构建质量控制指标并评估数据质量 适当的应用过滤器去除低质量的细胞 2. 过滤目标 过滤数据以仅包含高质量的真实细胞,以便在对细胞进行聚类时更容易识别不同的细胞类型 对一些不合格样品的数 ...

  2. 中科院单细胞分析算法开发博士带你做单细胞转录组分析

    " 福利公告:为了响应学员的学习需求,经过易生信培训团队的讨论筹备,现决定安排扩增子16S分析.宏基因组和Python课程的线上直播课.报名参加线上直播课的老师可在1年内选择参加同课程的一次 ...

  3. 如何使用Bioconductor进行单细胞分析?

    最近的技术进步使得能够在单个细胞中分析全基因组特征.但是,单细胞数据为分析提出了独特的挑战,需要开发专用的方法和数据架构才能成功解析数据背后的生物问题.Bioconductor项目托管了社区开发的开源 ...

  4. 生信入门(六)——单细胞分析(Seurat)

    生信入门(六)--单细胞分析(Seurat) 文章目录 生信入门(六)--单细胞分析(Seurat) 一.数据导入 1.数据来源 2.数据导入 二.标准预处理 1.QC和选择细胞进行进一步分析 2.规 ...

  5. 单细胞分析Seurat使用相关的10个问题答疑精选!

    NGS系列文章包括NGS基础.转录组分析 (Nature重磅综述|关于RNA-seq你想知道的全在这).ChIP-seq分析 (ChIP-seq基本分析流程).单细胞测序分析 (重磅综述:三万字长文读 ...

  6. 单细胞分析可视化工具盘点

    论文阅读 单细胞分析可视化工具盘点 首先:大概知道单细胞分析的十几种格式和可视化分析工具. 第二:输入格式中(下图表绿色标记):csv/txt格式是最常被接受的格式,有8个工具支持.更专业的格式,如h ...

  7. 单细胞测序流程(四)主成分分析——PCA

    PCA PCA:线性降维,主要用于数据少的时候使用.看结果的时候,看打分的绝对值大小,而不是单独的看数据的大小,PCA 是最常用的降维方法,通过某种线性投影,将高维的数据映射到低维的空间中表示,并期望 ...

  8. NBIS单细胞教程:质控(一)

    此文章是通过学习瑞典国家生物信息学基础设施(NBIS) 所开放的单细胞分析教程加上网上所查找的资料,自身的理解所形成的,可能会有不足之处.该部分是对下机处理完成后的数据进行Seurat分析的质控. 参 ...

  9. 单细胞分析的 Python 包 Scanpy(图文详解)

    文章目录 一.安装 二.使用 1.准备工作 2.预处理 过滤低质量细胞样本 3.检测特异性基因 4.主成分分析(Principal component analysis) 5.领域图,聚类图(Neig ...

最新文章

  1. python实现网络监控_使用python进行服务器监控
  2. 不用IIS运行ASP.Net网站
  3. Python基础05 缩进和选择
  4. 计算机应用基础形考模版4,计算机应用基础 形考 任务四
  5. Linux-Android启动之zImage生成过程详解
  6. duration java_Java Duration类| 带示例的get()方法
  7. Kibana入门安装与介绍
  8. 如何通过统计值z看置信水平_中恨他! 看看他如何通过这一简单技巧来改善统计信息页面...
  9. Oracle常用操作【自己的练习】
  10. java数据类型之间的转换_Java数据类型之间的转换(转)
  11. 在计算机上格式u盘启动,请问U盘制作成启动盘后插电脑上显示0字节,打不开也无法格式化,提示磁盘写有保护怎么回事?...
  12. 国产BI报表工具中低调的优秀“模范生”——思迈特软件Smartbi
  13. net::ERR_INTERNET_DISCONNECTED
  14. 计应121--实训三【李智飞(27号)--李阳持(26号)--胡俊琛(13号)--曹吉(2号)】
  15. 5月17号,记住这一天
  16. 城市规划计算机辅助设计综合实践,城市规划计算机辅助设计综合实践:AutoCAD2015/ArcGIS/PS/SU...
  17. Centos用mail命令登录163邮箱发邮件
  18. Linux更改用户名密码
  19. 2022-05-14 Unity核心7——2D动画
  20. java集合 — — lterator迭代器

热门文章

  1. VC宏定义 及常用宏定义说明
  2. mysql truncate delete 释放磁盘空间
  3. 百度拾取坐标系统 .
  4. java语言程序设计培训_JAVA语言程序设计Z
  5. 基于OneNet平台智慧农业大棚(esp32)
  6. class10-UCSB.presentation
  7. Linux网络编程--FTP云盘项目
  8. 如何理解“已出库未开票”?
  9. 国开计算机专业英语,国开电大计算机专业英语阅读(河北)形考一
  10. Elixir 与 Go 对比 [翻译]