diffcyt 1.16.0
的diffcyt
软件包实现了统计方法的差异发现分析在高维细胞术数据,基于高分辨率聚类和经验贝叶斯调节测试改编自转录组学的组合。
高维细胞术包括多色流式细胞术、质量细胞术(CyTOF)和寡核苷酸标记细胞术。这些技术使用抗体来测量数千个细胞中几十种(大约10到100种)标记蛋白的表达水平。在许多实验中,目的是检测细胞群的差异丰度(DA),或细胞群内的差异状态(DS),在不同条件下的样品组之间(例如,患病与健康,或治疗与未治疗)。
的完整示例工作流diffcyt
管道,使用包装器函数diffcyt ()
,或每个步骤的单个函数。
输入到diffcyt
管道既可以从原始数据中加载.fcs
文件,还是事先准备好的daFrame
对象催化剂生物导体包(Chevrier, Crowell, Zanotelli et al., 2018)。的催化剂
包包含广泛的功能预处理,探索性分析,和可视化的细胞计数(CyTOF)数据。如果使用了这个选项,预处理和集群将使用催化剂
。这在以下情况下特别有用催化剂
已经用于探索性分析和可视化;的diffcyt
然后,包可以用于差分测试。有关如何使用的更多详细信息催化剂
在一起diffcyt
,请参阅催化剂
Bioconductor装饰图案,或者我们的扩展版CyTOF工作流(Nowicka et al., 2019)可从Bioconductor获得。
的diffcyt
方法包括两个主要组成部分:(i)高分辨率聚类和(ii)从转录组学改编的经验贝叶斯缓和测试。
我们使用高分辨率聚类来定义代表细胞群体的大量小聚类。默认情况下,我们使用FlowSOM聚类算法(Van Gassen et al., 2015)生成高分辨率聚类,因为我们之前表明,该聚类算法具有出色的聚类性能和快速的高维细胞术数据运行时间(Weber和Robinson, 2016)。然而,原则上,也可以使用其他可以生成高分辨率集群的算法。
对于差异分析,我们使用的方法来自刨边机包装(Robinson et al., 2010;McCarthy et al., 2012);limmapackage (Ritchie et al., 2015),以及轰
方法(Law et al., 2014)。这些方法在转录组学领域得到了广泛的应用,在这里也适用于分析高维细胞术数据。此外,我们还提供了基于广义线性混合模型(glmm)、线性混合模型(lmm)和线性模型(lm)的替代方法,这些方法最初由Nowicka等人(2017)实现。
的diffcyt
方法可用于测试细胞群体的差异丰度(DA)和细胞群体内的差异状态(DS)。
为此,该方法要求将一组蛋白质标记分为“细胞类型”和“细胞状态”标记。细胞类型标记用于定义代表细胞群体的集群,对其进行差异丰度测试;每个集群的中位数细胞状态标记信号用于测试群体内的差异状态。
细胞类型和细胞状态标记的概念分裂促进了生物学的可解释性,因为它允许结果与已知的细胞类型或感兴趣的群体联系起来。
的diffcyt
模型设置使用户能够指定灵活的实验设计,包括批量效果,配对设计和连续协变量。线性对比用于指定感兴趣的比较。
本文对统计方法进行了完整的描述,并与现有方法进行了比较diffcyt
框架(Weber等人,2019)。
的稳定发布版本diffcyt
可以使用Bioconductor安装程序安装。注意,这需要R 3.4.0或更高版本。
#安装'diffcyt'包从Bioconductor BiocManager:: Install ("diffcyt")
要运行本示例中的所有示例,您还需要HDCytoData
和催化剂
来自Bioconductor的包装。
BiocManager:安装(“HDCytoData”)BiocManager::安装(“催化剂”)
对于本插图中的示例工作流,我们使用Bodenmiller_BCR_XL
数据集,最初来自Bodenmiller等人(2012)。
这是一个公开的细胞计数(CyTOF)数据集,由健康外周血单个核细胞(PBMCs)成对样本组成,其中每对样本中的一个样本用B细胞受体/ Fc受体交联剂(BCR-XL)刺激。数据集包含16个样本(8个成对样本);共172,791个单元;共有24个蛋白标记。这些标记包括10个“细胞类型”标记(可用于定义细胞群体或细胞簇)和14个“细胞状态”或信号标记。
该数据集包含已知的几种细胞群体(尤其是B细胞)中几种信号标记的强差异表达信号。特别是,观察到的最强差异信号是B细胞中磷酸化的S6 (pS6)信号标记(见Nowicka et al., 2017,图29)。在此工作流程中,我们将展示如何执行差分测试以恢复此信号。
的Bodenmiller_BCR_XL
数据集可以方便地从HDCytoDataBioconductor“实验数据”包。它可以被装入任何一种SummarizedExperiment
或flowSet
格式。在这里,我们用theflowSet
格式,这是标准的流式细胞术社区。对于一些可选的分析管道SummarizedExperiment
格式可能更方便。有关详细信息,请参阅此数据集的帮助文件HDCytoData
包(库(HDCytoData)
;Bodenmiller_BCR_XL ?
)。
suppressPackageStartupMessages(库(HDCytoData))
## snapshotDate(): 2022-04-19
#下载并加载'Bodenmiller_BCR_XL'数据集在'flowSet'格式d_flowSet <- Bodenmiller_BCR_XL_flowSet()
查看HDCytoData和browsevignetttes ('HDCytoData')的文档
##从缓存加载
updateObjectFromSlots(object,…, verbose = verbose):删除## slot(s)'colnames' from object = 'flowSet'
suppressPackageStartupMessages(library(flowCore)) #检查数据格式d_flowSet
带有16个实验的flowSet。## ##列名称(39):Time Cell_length…sample_id population_id
#示例名称pData(d_flowSet)
## name ## # bcr - xlfcs PBMC8_30min_patient1_BCR-XL。fcs ## PBMC8_30min_patient1_Reference。fcs PBMC8_30min_patient1_Reference。fcs ## PBMC8_30min_patient2_BCR-XL。fcs PBMC8_30min_patient2_BCR-XL。fcs ## PBMC8_30min_patient2_Reference。fcs PBMC8_30min_patient2_Reference。fcs ## PBMC8_30min_patient3_BCR-XL。fcs PBMC8_30min_patient3_BCR-XL。fcs ## PBMC8_30min_patient3_Reference。fcs PBMC8_30min_patient3_Reference。fcs ## # PBMC8_30min_patient4_BCR-XL。fcs PBMC8_30min_patient4_BCR-XL。fcs ## PBMC8_30min_patient4_Reference。fcs PBMC8_30min_patient4_Reference。fcs ## PBMC8_30min_patient5_BCR-XL。fcs PBMC8_30min_patient5_BCR-XL。fcs ## PBMC8_30min_patient5_Reference。fcs PBMC8_30min_patient5_Reference。fcs ## PBMC8_30min_patient6_BCR-XL。fcs PBMC8_30min_patient6_BCR-XL。fcs ## PBMC8_30min_patient6_Reference。fcs PBMC8_30min_patient6_Reference。fcs ## PBMC8_30min_patient7_BCR-XL。fcs PBMC8_30min_patient7_BCR-XL。fcs ## PBMC8_30min_patient7_Reference。fcs PBMC8_30min_patient7_Reference。fcs ## PBMC8_30min_patient8_BCR-XL。fcs PBMC8_30min_patient8_BCR-XL。fcs ## PBMC8_30min_patient8_Reference。fcs PBMC8_30min_patient8_Reference.fcs
#单元数fsApply(d_flowSet, nrow)
## [,1] ## PBMC8_30min_patient1_BCR-XLfcs 2838 ## PBMC8_30min_patient1_Reference。fcs 2739 ## PBMC8_30min_patient2_BCR-XL。fcs 16675 ## PBMC8_30min_patient2_Reference。fcs 16725 ## PBMC8_30min_patient3_BCR-XL。fcs 12252 ## PBMC8_30min_patient3_Reference。fcs 9434 ## PBMC8_30min_patient4_BCR-XL。fcs 8990 ## PBMC8_30min_patient4_Reference。fcs 6906 ## PBMC8_30min_patient5_BCR-XL。fcs 8543 ## PBMC8_30min_patient5_Reference。fcs 11962 ## PBMC8_30min_patient6_BCR-XL。fcs 8622 ## PBMC8_30min_patient6_Reference。fcs 11038 ## PBMC8_30min_patient7_BCR-XL。fcs 14770 ## PBMC8_30min_patient7_Reference。fcs 15974 ## PBMC8_30min_patient8_BCR-XL。fcs 11653 ## PBMC8_30min_patient8_Reference。fcs 13670
# dimensions dim(exps (d_flowSet[[1]]))
## [1] 2838 39
# expression values (d_flowSet[[1]])[1:6, 1:5]
##时间Cell_length CD3(110:114)Dd CD45(In115)Dd BC1(La139)Dd ## [1,] 33073 30 120.823265 454.6009 576.8983 ## [2,] 36963 35 135.106171 624.6824 564.6299 ## [3,] 37892 30 -1.664619 6077.2668 ## [4,] 41345 58 115.290245 820.7125 6088.5967 ## [5,] 42475 35 14.373802 326.6405 4606.6929 ## [6,] 44620 31 37.737877 557.0137 4854.1519
或者,您也可以直接从一组.fcs
文件使用以下代码。注意,我们使用了选项transformation = FALSE
和truncate_max_range = FALSE
控件执行的自动转换和数据截断flowCore
包中。的自动选项flowCore
包为流式细胞术而不是质量细胞术数据优化,因此这些选项应禁用用于质量细胞术数据。)
#或者:加载数据从'。Fcs的文件<- list。文件(path = "path/to/ Files ", pattern = "\\。fcs$", full.names = TRUE) d_flowSet <- read。flowSet(files, transformation = FALSE, truncate_max_range = FALSE )
接下来,我们设置所需的“元数据”diffcyt
管道。元数据描述了本实验或数据集的样品和蛋白质标记。元数据应该保存在两个数据帧中:experiment_info
和marker_info
。
的experiment_info
数据框包含关于每个样本的信息,包括样本id、组id、批id或患者id(如果相关)、连续协变量(如年龄(如果相关))以及任何其他因素或协变量。在许多实验中,感兴趣的主要比较将是群体id因素(也可称为条件或治疗;例如患病vs.健康,治疗vs.未治疗)。
的marker_info
数据框包含有关蛋白质标记的信息,包括通道名称、标记名称和每个标记的类(细胞类型或细胞状态)。
下面,我们手动创建这些数据框架。根据您的实验,将元数据保存在电子表格中可能更方便. csv
格式,然后可以使用read.csv
。
在此应特别注意确保所有样品和标记的顺序正确。在下面的代码中,我们显示最终的数据帧来检查它们。
#元数据:实验信息#检查样本订单文件名<- as.character(pData(d_flowSet)$name) #样本信息sample_id <- gsub(“^PBMC8_30min_”,“”,gsub(“\\ \。fcs”、“美元”,文件名)group_id < -因子(gsub(“^病人[0 - 9 ]+_", "", sample_id),水平= c(“参考”、“BCR-XL”))patient_id < -因子(gsub(“_。*$", "", sample_id))) experiment_info <- data.frame(group_id, patient_id, sample_id, stringsAsFactors = FALSE)
# # 1 # # group_id patient_id sample_id BCR-XL patient1 patient1_BCR-XL # # 2参考patient1 patient1_Reference # # 3 BCR-XL受事2 patient2_BCR-XL # # 4参考受事2 patient2_Reference # # 5 BCR-XL patient3 patient3_BCR-XL # # 6参考patient3 patient3_Reference # # 7 BCR-XL patient4 patient4_BCR-XL # # 8引用patient4 patient4_Reference # # 9 BCR-XL patient5 patient5_BCR-XL # # 10参考patient5 patient5_Reference # # 11 BCR-XL patient6 patient6_BCR-XL patient6 # # 12参考BCR-XL patient7_BCR-XL ## 14参考文献patient7_Reference ## 15 BCR-XL patient8_BCR-XL ## 16参考文献patient8_patient8_reference ## 13 BCR-XL patient7_BCR-XL ## 14
#元数据:标记信息#来源:Bruggner et al.(2014),表1 #所有标记、谱系标记和功能标记的列索引cols_marker <- c(3:4, 7:9, 11:19, 21:22, 24:26, 28:31, 33) cols_lineage <- c(3:4, 9,11,12,14,21,29,31,33) cols_func <- setdiff(cols_markers, cols_lineage) #通道和标记名称channel_name <- colnames(d_flowSet) marker_name <- gsub("\\(*$", "", channel_name) #标记类#注意:使用'细胞类型'的血统标记和'细胞状态'的功能标记marker_class <- rep("none", ncol(d_flowSet[[1]])) marker_class[cols_lineage] <- "type" marker_class[cols_func] <- "state" marker_class <- factor(marker_class, levels = c("type", "state", "none")) marker_info <- data.frame(channel_name, marker_name, marker_class, stringsAsFactors = FALSE) marker_info
# # 1 # # channel_name marker_name marker_class时间时间没有# # 2 Cell_length Cell_length没有# # 3 CD3 (110:114) Dd CD3类型# # 4 CD45 (In115) Dd CD45类型群体BC1 (La139) # # 5 Dd群体BC1没有# # 6 BC2 (Pr141) Dd BC2没有# # 7 pNFkB (Nd142) Dd pNFkB状态# # 8 pp38 (Nd144) Dd pp38状态# # 9 CD4 (Nd145) Dd CD4类型# # 10 BC3 (Nd146) Dd BC3没有# # 11 CD20 (Sm147) Dd CD20类型# # 12 CD33 (Nd148) Dd CD33类型# # 13 pStat5 (Nd150) Dd pStat5状态# # 14 CD123 (Eu151) Dd CD123类型# # 15 pAkt (Sm152) Dd pAkt状态# # 16pStat1 (Eu153) Dd pStat1状态# # 17 pSHP2 (Sm154) Dd pSHP2状态# # 18 pZap70 (Gd156) Dd pZap70状态# # 19 pStat3 (Gd158) Dd pStat3状态# # 20 BC4 (Tb159) Dd BC4没有# # 21 CD14 (Gd160) Dd CD14类型# # 22 pSlp76 (Dy164) Dd pSlp76状态# # 23 BC5 (Ho165) Dd BC5没有# # 24 pBtk (Er166) Dd pBtk状态# # 25 pPlcg2 (Er167) Dd pPlcg2状态# # 26活跃(Er168) Dd活跃状态# # 27 BC6 (Tm169) Dd BC6没有# # 28平台(Er170) Dd平台状态# # 29 IgM (Yb171) Dd IgM类型30魔法石第六章(Yb172) # # # # 31 HLA-DR Dd魔法石第六章状态(Yb174) Dd HLA-DR类型## 32 BC7(Lu175)Dd BC7 none ## 33 CD7(Yb176)Dd CD7 type ## 34 DNA-1(Ir191)Dd DNA-1 none ## 35 DNA-2(Ir193)Dd DNA-2 none ## 36 group_id group_id none ## 37 patient_id patient_id none ## 38 sample_id sample_id none ## 39 population_id population_id none
要计算微分测试diffcyt
功能需要一个描述实验设计的设计矩阵(或模型公式)。(设计矩阵和模型公式的选择取决于所采用的差分试验方法;有关详细信息,请参阅帮助文件中的不同测试方法。)
可以使用该函数以所需的格式创建设计矩阵createDesignMatrix ()
。方法需要设计矩阵diffcyt-DA-edgeR
(DA测试的默认方法),diffcyt-DA-voom
,diffcyt-DS-limma
(DS测试的默认方法)。
类似地,可以使用该函数创建模型公式createFormula ()
。替代方法需要模型公式diffcyt-DA-GLMM
(DA测试)和diffcyt-DS-LMM
(DS测试)。
在这两种情况下,灵活的实验设计是可能的,包括阻塞(例如批处理效应或配对设计)和连续协变量。看到createDesignMatrix ?
或createFormula ?
有关更多细节和示例。
注意,在这里显示的示例中,我们包含了group_id
和patient_id
在设计矩阵中:group_id
对于微分检验,因子是感兴趣的吗patient_id
之所以包含,是因为该数据集包含来自每个患者的成对样本。(对于未配对的数据集,只有group_id
将包括在内。)
注意:选择包含组id和患者id的列(对于# unpaired数据集,只包含组id) design <- createDesignMatrix(experiment_info, cols_design = c("group_id", "patient_id"))
为了计算微分检验,还需要一个对比矩阵。对比矩阵指定感兴趣的比较,即在零假设下假设为零的模型参数的组合。
可以使用该函数以所需的格式创建对比矩阵createContrast ()
。这个函数只需要一个参数:一个定义对比度的数字向量。在许多情况下,这将只是一个0向量和一个等于1的单条目,它将测试单个参数是否等于0。如果使用了设计矩阵,则条目对应于设计矩阵的列;如果使用了模型公式,则条目对应于固定效应项的水平。
看到createContrast ?
了解更多详情。
这里,我们感兴趣的是比较条件BCR-XL
反对参考
,即比较BCR-XL
水平对着参考
水平仪group_id
考虑因素experiment_info
数据帧。这对应于测试是否为列系数group_idBCR-XL
在设计矩阵中设计
等于0。这种对比可以指定如下。(注意每个系数只有一个值,包括截距项;最终对比矩阵中的行对应于设计矩阵中的列。)
#创建对比矩阵反差<- createContrast(c(0,1, rep(0,7)))) # check nrow(反差)== ncol(design)
## [1] true
Data.frame (parameters = colnames(design), contrast)
##参数对比## 1(截距)0 ## 2 group_idBCR-XL 1 ## 3 patient_idpatient2 0 ## 4 patient_idpatient3 0 ## 5 patient_idpatient4 0 ## 6 patient_idpatient5 0 ## 7 patient_idpatient7 0 ## 9 patient_idpatient8 0
上面的步骤展示了如何加载数据、设置元数据、设置设计矩阵和设置对比矩阵。现在,我们可以开始计算微分测试了。
有几个可选选项可用于运行diffcyt
微分测试函数。哪一种方法最方便取决于您正在运行的分析类型或管道。选项有:
选项1:使用从加载的输入数据运行包装器函数.fcs
文件。输入数据可以作为flowSet
,或者列表
的flowFrames
,DataFrames
,或data.frames
。
选项2:使用先前创建的运行包装器函数催化剂
daFrame
对象。
选项3:为管道运行单个函数。
控件演示这些选项Bodenmiller_BCR_XL
上面描述的示例数据集。
的diffcyt
包包含一个名为diffcyt ()
,它接受各种格式的输入数据,并运行方法中的所有步骤diffcyt
以正确的顺序进行管道。
在本节中,我们将展示如何使用从加载的输入数据运行包装器函数.fcs
文件作为flowSet
对象。加载的数据的过程是相同的.fcs
文件作为列表
的flowFrames
,DataFrames
,或data.frames
。看到diffcyt ?
了解更多详情。
所需的主要输入diffcyt ()
此选项的包装器函数为:
d_input
(输入数据)experiment_info
(描述样本的元数据)marker_info
(元数据描述标记)设计
(设计矩阵)对比
(对比矩阵)此外,我们需要参数来指定分析的类型和(可选的)要使用的方法。
analysis_type
(分析类型:DA或DS)method_DA
(可选:DA测试方法;默认是diffcyt-DA-edgeR
)method_DS
(可选:DS检测方法;默认是diffcyt-DS-limma
)还有一些可选参数选择的附加参数;例如,指定用于差分测试的标记,用于聚类、子采样、转换选项、聚类选项、过滤和规范化的标记。有关完整的详细信息,请参阅包装器函数的帮助文件(diffcyt ?
)。
下面,我们将运行包装器函数两次:一次测试集群的差异丰度(DA),另一次测试集群内的差异状态(DS)。注意,在Bodenmiller_BCR_XL
数据集,感兴趣的主要差异信号(我们试图恢复的信号)是B细胞内磷酸化S6 (pS6)的差异表达(即DS测试)。因此,在这种情况下,DA测试在生物学方面不是特别有意义;但是我们在这里包含它们是为了演示如何运行这些方法。
差异检验的主要结果包括每个聚类(对于DA检验)或每个聚类-标记组合(对于DS检验)的调整p值,可用于根据其差异证据的强度对聚类或聚类-标记组合进行排序。这个函数topTable ()
可用于显示检测到的最高(最显著)集群或集群标记组合的结果表。我们也使用的输出topTable ()
在给定的调整p值阈值下生成检测到的簇或簇标记组合的数量汇总表。看到diffcyt ?
和topTable ?
了解更多详情。
#注意:使用默认方法'diffcyt-DA- edger '和默认参数#注意:包含可重复聚类的随机种子out_DA <- diffcyt(d_input = d_flowSet, experiment_info = experiment_info, marker_info = marker_info, design = design, contrast = contrast, analysis_type = "DA", seed_clustering = 123)
##准备数据…
##转换数据…
##生成集群…
## FlowSOM集群在8.9秒内完成
##计算特性…
使用“diffcyt-DA-edgeR”方法计算DA测试…
topTable(out_DA, format_vals = TRUE)
## DataFrame包含20行和3列## cluster_id p_val p_adj ## ## 97 97 1.92e-51 1.92e-49 ## 33 6.18e-41 3.09e-39 ## 8 8 7.72e-36 2.57e-34 ## 43 43 2.23e-34 5.58e-33 ## 9 9 2.41e-32 4.82e-31 ## ... ... ... ...1.36e-21 8.50e-21 7.04e-21 4.14e-20 ## 73 73 1.28e-20 7.09e-20 ## 31 31 7.02e-19 3.69e-18 ## 89 89 3.60e-18 1.80e-17
#计算错误发现率(FDR)阈值<- 0.1 res_DA_all <- topTable(out_DA, all = TRUE)表(res_DA_all$p_adj <= threshold)
## ##假的真## 24 76
#注意:使用默认方法'diffcyt-DS-limma'和默认参数#注意:包含可重复集群的随机种子out_DS <- diffcyt(d_input = d_flowSet, experiment_info = experiment_info, marker_info = marker_info, design = design, contrast = contrast, analysis_type = "DS", seed_clustering = 123, plot = FALSE)
##准备数据…
##转换数据…
##生成集群…
## FlowSOM集群在9.3秒内完成
##计算特性…
##使用方法'diffcyt-DS-limma'计算DS测试…
警告:14个探针的部分NA系数
topTable(out_DS, format_vals = TRUE)
## DataFrame, 20行4列## cluster_id marker_id p_val p_adj ## ## 30 30 pS6 1.18e-11 1.65e-08 ## 19 19 pS6 1.10e-10 7.69e-08 ## 19 19 pPlcg2 7.22e-10 3.03e-07 ## 10 10 pS6 1.08e-09 3.03e-07 ## 20 20 pS6 1.01e-09 3.03e-07 ## ... ... ... ... ...## 19 19 pAkt 5.66e-07 4.95e-05 ## 39 39 pNFkB 6.37e-07 4.96e-05 ## 45 45 pBtk 6.35e-07 4.96e-05 ## 19 19 pZap70 9.49e-07 5.81e-05 ## 4 4 pBtk 9.13e-07 5.81e-05
#计算# 10%错误发现率(FDR)阈值<- 0.1时显著检测到的DS集群标记组合的数量res_DS_all <- topTable(out_DS, all = TRUE)表(res_DS_all$p_adj <= threshold)
## ## false true ## 570 830
的第二个选项diffcyt
管道是提供先前创建的催化剂daFrame
对象作为输入diffcyt ()
包装器函数。如上所述,催化剂
包包含广泛的功能预处理,探索性分析,和可视化的细胞计数(CyTOF)数据。这个选项在以下情况下特别有用催化剂
已经用于探索性分析(包括聚类)和可视化。的diffcyt
然后可以使用现有的方法来计算微分试验daFrame
对象(特别是重用存储在daFrame
对象)。
如上所述,对于选项1diffcyt ()
包装器函数需要几个参数来指定输入和分析类型,并提供额外的参数来指定可选参数选择。注意这些参数experiment_info
和marker_info
在这种情况下不需要,因为该信息已经包含在催化剂
daFrame
对象。另一个参数clustering_to_use
,它允许用户从存储在?中的几列集群标签中进行选择daFrame
对象;然后,这组聚类标签将用于差分测试。看到diffcyt ?
了解更多详情。
有关如何使用的详细信息催化剂
在一起diffcyt
,请参阅催化剂
Bioconductor装饰图案,或者我们的扩展版CyTOF工作流(Nowicka et al., 2019)可从Bioconductor获得。
为提供额外的灵活性,还可以为中的各个步骤运行函数diffcyt
管道,而不是使用包装器函数。如果您希望自定义或修改管道的某些部分,这可能很有用;例如,调整数据转换,或替换不同的聚类算法。运行单个步骤还可以提供对方法的额外了解。
的后续函数所需的格式的输入数据diffcyt
管道。数据对象d_se
在行中包含单元格,在列中包含标记。看到prepareData ?
了解更多详情。
#准备数据d_se <- prepareData(d_flowSet, experiment_info, marker_info)
接下来,使用类转换数据arcsinh
变换Cofactor = 5
。这是用于细胞计数(CyTOF)数据的标准变换,它使数据更接近正态分布,提高聚类性能和可视化。看到transformData ?
了解更多详情。
# Transform data d_se <- transformData(d_se)
默认情况下,我们使用FlowSOM聚类算法(Van Gassen et al., 2015)生成高分辨率聚类。原则上,其他能够生成大量聚类的聚类算法也可以被替代。看到generateClusters ?
了解更多详情。
注意:为可复制的集群添加随机种子d_se <- generatecluster (d_se, seed_cluster = 123)
## FlowSOM集群在9.7秒内完成
接下来,计算数据特征:集群细胞计数和集群中位数(每个集群和样本的中位数标记表达)。计算微分试验需要这些对象。看到calcCounts ?
和calcMedians ?
了解更多详情。
#计算集群细胞计数d_counts <- calcCounts(d_se) #计算集群中位数d_medians <- calcMedians(d_se)
使用其中一种DA测试方法(diffcyt-DA-edgeR
,diffcyt-DA-voom
,或diffcyt-DA-GLMM
)。这还需要设计矩阵(或模型公式)和对比矩阵,如前所述。我们重新使用上面创建的设计矩阵和对比矩阵,以及DA测试的默认方法(diffcyt-DA-edgeR
)。
主要结果包括每个聚类的调整后的p值,该值可用于根据其差异丰度的证据对聚类进行排序。原始p值和调整后的p值存储在rowData
的SummarizedExperiment
输出对象。有关详细信息,请参见testDA_edgeR ?
,testDA_voom ?
,或testDA_GLMM ?
。
和前面一样,我们也可以使用这个函数topTable ()
显示检测到的顶级(最显著的)DA集群的结果表,并在给定的调整p值阈值下生成检测到的DA集群数量的汇总表。看到topTable ?
了解更多详情。
res_DA <- testDA_edgeR(d_counts, design, contrast) #显示顶级DA集群的结果表topTable(res_DA, format_vals = TRUE)
## DataFrame包含20行和3列## cluster_id p_val p_adj ## ## 97 97 1.92e-51 1.92e-49 ## 33 6.18e-41 3.09e-39 ## 8 8 7.72e-36 2.57e-34 ## 43 43 2.23e-34 5.58e-33 ## 9 9 2.41e-32 4.82e-31 ## ... ... ... ...1.36e-21 8.50e-21 7.04e-21 4.14e-20 ## 73 73 1.28e-20 7.09e-20 ## 31 31 7.02e-19 3.69e-18 ## 89 89 3.60e-18 1.80e-17
#计算在10%错误发现时检测到的显著数据集群的数量#率(FDR)阈值<- 0.1表(topTable(res_DA, all = TRUE)$p_adj <= threshold)
## ##假的真## 24 76
使用DS测试方法之一,计算集群内的差分状态(DS)测试(diffcyt-DS-limma
或diffcyt-DS-LMM
)。这还需要设计矩阵(或模型公式)和对比矩阵,如前所述。我们重新使用上面创建的设计矩阵和对比矩阵,以及DS测试的默认方法(diffcyt-DS-limma
)。
我们测试所有“细胞状态”标记的差异表达。还可以使用可选参数调整要测试的标记集markers_to_test
(例如,如果您还希望计算“细胞类型”标记的测试)。
主要结果包括每个集群标记组合(仅细胞状态标记)的调整p值,可用于根据其差异状态的证据对集群标记组合进行排序。原始p值和调整后的p值存储在rowData
的SummarizedExperiment
输出对象。有关详细信息,请参见diffcyt-DS-limma ?
或diffcyt-DS-LMM ?
。
和前面一样,我们也可以使用这个函数topTable ()
显示检测到的最高(最显著)的DS聚类标记组合的结果表(注意,每个聚类标记组合有一个测试结果),并在给定的调整p值阈值下生成检测到的DS聚类标记组合数量的汇总表。看到topTable ?
了解更多详情。
testDS_limma(d_counts, d_medians, design, contrast, plot = FALSE)
警告:14个探针的部分NA系数
topTable(res_DS, format_vals = TRUE)
## DataFrame, 20行4列## cluster_id marker_id p_val p_adj ## ## 30 30 pS6 1.18e-11 1.65e-08 ## 19 19 pS6 1.10e-10 7.69e-08 ## 19 19 pPlcg2 7.22e-10 3.03e-07 ## 10 10 pS6 1.08e-09 3.03e-07 ## 20 20 pS6 1.01e-09 3.03e-07 ## ... ... ... ... ...## 19 19 pAkt 5.66e-07 4.95e-05 ## 39 39 pNFkB 6.37e-07 4.96e-05 ## 45 45 pBtk 6.35e-07 4.96e-05 ## 19 19 pZap70 9.49e-07 5.81e-05 ## 4 4 pBtk 9.13e-07 5.81e-05
#计算# 10%错误发现率(FDR)阈值<- 0.1时显著检测到的DS集群标记组合的数量表(topTable(res_DS, all = TRUE)$p_adj <= threshold)
## ## false true ## 570 830
根据分析的类型,将数据导出到.fcs
文件或其他格式;例如,使用其他软件进行进一步分析。这可以在任何阶段完成diffcyt
的标准函数flowCore
包中。
下面的代码提供了演示如何导出的示例.fcs
包含每个细胞的组id、患者id、样本id和集群标签的文件。例如,对于希望在外部软件中进一步分析相同集群的用户来说,这可能很有用。
对于本例,我们使用输出对象out_DA
从运行包装器函数diffcyt ()
上面(选项1)来测试集群的差异丰度(DA)。
#从'diffcyt()'包装器函数名中输出对象(out_DA)
## [1] "res" "d_se" "d_counts"
暗(out_DA d_se美元)
## [1] 172791 39
rowData (out_DA d_se美元)
##数据名称,包含172791行和4列## group_id patient_id sample_id cluster_id ## ## 1 BCR-XL patient1 patient1_BCR-XL 95 ## 2 BCR-XL patient1 patient1_BCR-XL 72 ## 3 BCR-XL patient1 patient1_BCR-XL 11 ## 4 BCR-XL patient1 patient1_BCR-XL 51 ## 5 BCR-XL patient1 patient1_BCR-XL 22 ## ... ... ... ... ...## 172787参考文献patient8 patient8_Reference 47 ## 172788参考文献patient8_Reference 96 ## 172789参考文献patient8 patient8_Reference 92 ## 172790参考文献patient8 patient8_Reference 91 ## 172791参考文献patient8_Reference 21
str(化验(out_DA d_se美元))
## num[1:172791, 1:39] 33073 36963 37892 41345 42475…## - attr(*, "dimnames")= 2 ## ..$: null ##…美元:空空的[1:39]“时间”“Cell_length”“CD3”“CD45”…
头(化验(out_DA d_se美元),2)
##时间Cell_length CD3 CD45 BC1 BC2 pNFkB pp38 ## [1,] 33073 30 3.878466 5.203159 576.8983 10.005730 2.968545 0.5486397 ## [2,] 36963 35 3.990112 5.520969 564.6299 5.599113 2.609338 -0.1434845 ## # CD4 BC3 CD3 CD123 pAkt ## [1,] 4.576125 11.514709 -0.04275126 -0.02280228 1.208487 -0.1050299 2.796846 ## [2,] 4.952275 5.004433 -0.13478894 -0.18088905 2.345715 1.0839967 4.474955 ## pStat1 pSHP2 pZap70 pStat3 BC4 pSlp76 ## [1,] 2.678996 0.5499532 2.76941084 -0.1362253 3.152275pBtk pPlcg2 pErk BC6 pLat ## [1,] -0.2847748 -0.1933098 1.5554296 0.6218593 -0.4900131 2.76203120 ## [2,] 5.2941360 0.5914230 0.6249868 -0.1375994 0.2871704 -0.05392741 ## IgM pS6 HLA-DR BC7 CD7 DNA-1 DNA-2 ## [1,] -0.11722553 0.003981008 -0.07016641 119.4165 3.274793 268.2261 497.0998 ## [2,] -0.04462325 0.403973545 0.31650319 198.4307 4.957091 659.0508 763.4751 ## group_id patient_idSample_id population_id ## [1,] 2 1 1 3 ## [2,] 2 1 1 3
#提取细胞级表,导出为。fcs文件#注意:包括组id,患者id,样本id和集群标签#每个细胞#注意:表必须是一个数字矩阵(保存为。fcs文件)d_fcs <- assay(out_DA$d_se) class(d_fcs)
## [1] "matrix" "array"
#保存为。fcs文件filename_fcs <- "exported_data。fcs”写。FCS(flowFrame(d_fcs), filename = filename_fcs) #或者,保存为以制表符分隔的。txt文件filename_txt <- "exported_data.txt" write。table(d_fcs, file = filename_txt, quote = FALSE, sep = "\t", row.names = FALSE)
如本文所述,介绍了diffcyt
框架(Weber等人,2019), a的结果diffcyt
差异分析以调整p值的形式提供给用户,允许识别检测到的显著集群(用于DA测试)或集群标记组合(用于DS测试)。然后可以使用可视化来解释检测到的群集或群集标记组合;例如,解释标记表达谱,以便将检测到的集群与已知的细胞群体相匹配,或者将高分辨率集群分组到具有一致表型的较大细胞群体中。
广泛的绘图功能,以产生探索性可视化和可视化的结果,从差分测试催化剂软件包(Chevrier, Crowell, Zanotelli等人,2018)。这些绘图函数在我们的CyTOF工作流(Nowicka et al., 2019)可从Bioconductor获得。有关更多详细信息,包括可视化的进一步示例,请参阅CyTOF工作流或者是催化剂
Bioconductor装饰图案。(热图是使用ComplexHeatmapBioconductor包;Gu et al., 2016。)
在这里,我们生成热图来说明上面执行的差异分析的结果。请注意催化剂
绘图函数可以接受diffcyt
结果对象SummarizedExperiment
格式(从上面的选项1和3)或催化剂
daFrame
格式(选项2)。
这张热图说明了从DA测试中检测到的顶级(最显著的)集群的表型(标记表达谱)和感兴趣的信号(样本的集群丰度)。
行表示聚类,列表示蛋白质标记(左图)或样本(右图)。左面板显示了所有样本中细胞类型标记(即集群表型)的中位数(arcsinh转化)表达值。右面板显示感兴趣的信号:按样本的群集丰度(用于DA测试)。右边的注释条表示在调整后的p值阈值为10%时检测到显著差异的聚类。
如前所述,DA测试对于Bodenmiller_BCR_XL
因为该数据集中感兴趣的主要信号是pS6和其他信号标记在B细胞和其他几种细胞群体中的差异表达。但是,为了便于说明,我们在这里包含了图表,以展示如何使用这些函数。
(注意:对于下面的例子,我们使用的是早期版本的热图绘制函数diffcyt
包装,而不是使用催化剂
。这样做是为了减少依赖关系,以便简化安装和编译diffcyt
包装和小品。生成热图的替代代码催化剂
也显示;这个版本包含额外的格式,通常是首选的。)
看到plotDiffHeatmap ?
(催化剂
)或plotHeatmap ?
(diffcyt
)查阅详情。
注意:使用可选参数'sample_order'来对样本进行分组,条件sample_order <- c(seq(2,16, by = 2), seq(1,16, by = 2)) plotHeatmap(out_DA, analyis_type = "DA", sample_order = sample_order)
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
这张热图说明了从DS测试中检测到的最高(最显著)集群标记组合的表型(标记表达谱)和感兴趣的信号(样本中细胞状态标记的中位数表达)。
行表示聚类标记组合,列表示蛋白质标记(左图)或样本(右图)。左面板显示了所有样本中细胞类型标记(即集群表型)的中位数(arcsinh转化)表达值。右面板显示感兴趣的信号:样本中细胞状态标记的中位数表达(用于DS测试)。右边的注释条表示在调整后的p值阈值为10%时检测到显著差异的聚类标记组合。
热图显示diffcyt
Pipeline已经成功地恢复了该数据集中感兴趣的主要差分信号。如上所述,Bodenmiller_BCR_XL
数据集包含已知的几种信号标记(细胞状态标记)在几种细胞群体中的强差异表达。其中,pS6在B细胞中的差异表达信号最强。
正如预期的那样,检测到的几个最高(最显著)的簇标记组合代表了B细胞中pS6(右侧注释栏中的标签)的差异表达(通过CD20的高表达来识别,左图)。同样,热图中显示的其他顶部检测到的聚类标记组合对应于该数据集中其他已知的强差分信号(见Nowicka et al., 2017,图29;或者对数据集结果的描述BCR-XL
在本文中,我们介绍了diffcyt
框架(Weber等人,2019)。
(注意:对于下面的例子,我们使用的是早期版本的热图绘制函数diffcyt
包装,而不是使用催化剂
。这样做是为了减少依赖关系,以便简化安装和编译diffcyt
包装和小品。生成热图的替代代码催化剂
也显示;这个版本包含额外的格式,通常是首选的。)
看到plotDiffHeatmap ?
(催化剂
)或plotHeatmap ?
(diffcyt
)查阅详情。
注意:使用可选参数'sample_order'根据条件sample_order <- c(seq(2,16, by = 2), seq(1,16, by = 2))对样本进行分组plotHeatmap(out_DS, analyis_type = "DS", sample_order = sample_order)
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Bodenmiller, B., Zunder, E. R., Finck, R., Chen, T. J., saving, E. S., Bruggner, R. V., Simonds, E. F., Bendall, S. C., Sachs, K., Krutzik, P. O.和Nolan, G. P.(2012)。受小分子调节因子干扰的细胞状态的多路质谱分析。生物工程学报,30(9):858-867。
Chevrier, S., Crowell, H. L., Zanotelli, V. R. T., Engler, S., Robinson, M. D.和Bodenmiller, B.(2018)。悬液和成像细胞术中信号溢出的补偿。细胞系统,6:1-9。
顾,Z., Eils, R., Schlesner, M.(2016)。复杂的热图揭示了多维基因组数据的模式和相关性。生物信息学,32(18):2847 - 2849。
罗长文,陈勇,史伟,和Smyth, g.k.(2014)。voom:用于RNA-seq读取计数的精确权重解锁线性模型分析工具。中国生物医学工程学报,2014,25(4):444 - 444。
McCarthy, D. J, Chen, Y.和Smyth, G. K.(2012)。关于生物变异的多因子RNA-Seq实验差异表达分析。核酸研究,40(10):4288-4297。
Nowicka, M., Krieg, C., Weber, L. M., Hartmann, F. J., Guglietta, S., Becher, B., Levesque, M. P.和Robinson, m.d.(2017)。CyTOF工作流程:高通量高维细胞术数据集的差异发现。F1000Research,版本2。
Nowicka, M., Krieg, C., Crowell, H. L., Weber, L. M., Hartmann, F. J., Guglietta, S., Becher, B., Levesque, M. P.和Robinson, M.(2019)。CyTOF工作流程:高通量高维细胞术数据集的差异发现。F1000Research,版本3。
Ritchie, m.e., Phipson, B., Wu, D., Hu, Y., Law, c.w., Shi, W.和Smyth, g.k.(2015)。极限幂差分表达分析用于rna测序和微阵列研究。核酸研究,43(7):e47。
Robinson, m.d., McCarthy, d.j., and Smyth, g.k.(2010)。edgeR:用于数字基因表达数据的差异表达分析的Bioconductor包。生物信息学,26(1):139 - 140。
Van Gassen, S., Callebaut, B., Van Helden, M. J, Lambrecht, B. N., Demeester, P., Dhaene, T., and Saeys, Y.(2015)。使用自组织地图可视化和解释细胞术数据。细胞术部分A, 87A: 636-645。
Weber, l.m.和Robinson, m.d.(2016)。高维单细胞流与细胞质量数据聚类方法的比较。细胞术部分A, 89A: 1084-1096。
Weber, l.m., Nowicka, m.m., Soneson, C, and Robinson, m.d.(2019)。diffcyt:通过高分辨率聚类在高维细胞术中发现差异。bioRxiv。