infinityFlow包的基本用法

艾蒂安白克

2020年6月

简介

谢谢你对我们的兴趣无限流的方法。这个小插图描述了如何将包应用到您的大规模并行细胞术(例如。LEGENDScreenLyoplates包)实验。大规模平行细胞术实验是指将样本混合n每个子样本都用固定的“骨干”抗体面板染色。此外,每个样本都用独特的“Infinity”探索性抗体进行染色。我们的目标infinityFlow该方案是使用来自普遍存在的Backbone染色的信息来预测整个数据集中稀疏测量的Infinity抗体的表达。要了解更多关于这种类型的实验和无限流方法的细节,请咨询Becht等人,2020年.在本文中,我们通过使用XGBoost机器学习框架来实现这一目标xgboost R包.这篇短文旨在解释如何应用一个基本的infinityFlow分析。的高级用法,包括不同的机器学习模型和自定义超参数值专门的装饰图案

这篇短文将涵盖:

  1. 包安装
  2. 设置输入数据
  3. 指定骨干抗体和无限抗体
  4. 运行无限流计算管道
  5. 输出说明

包安装

您可以从Bioconductor使用安装包

如果requireNamespace“BiocManager”静静地=真正的)) {install.packages“BiocManager”BiocManager::安装“infinityFlow”

设置输入数据

现在已经安装了包,我们加载包并附加它的示例数据。我们还加载了用于在R中操作FCS文件的flowCore。

图书馆(infinityFlow)#>加载所需的包:flowCore数据(steady_state_lung)

示例数据是稳定状态下小鼠肺的大规模平行细胞术实验的子集。示例数据包含10个FCS文件。为了模拟真实环境,我们将把这组FCS文件写到磁盘上。在这个小插图中,我们将使用一个临时目录,但您可以使用自己选择的目录。

dir < -file.pathtempdir(),“infinity_flow_example”打印(dir)#> [1] "/tmp/RtmpgHJcC9/infinity_flow_example"input_dir < -file.path(dir,“前锋”write.flowSet(steady_state_lungoutdir =input_dir)##如果你已经有FCS文件,省略这个#> [1] "/tmp/RtmpgHJcC9/infinity_flow_example/fcs"list.files(input_dir)#> [1] " plate1_spec_001_b12_b12_024。fcs Plate1_Specimen_001_D8_D08_044.fcs”#> [3] " plate1_spec_001_h11_h11_095。fcs Plate3_Specimen_001_A3_A03_003.fcs”#> [5] " plate3_spec_001_a9_a09_009。fcs Plate3_Specimen_001_C11_C11_035.fcs”#>[7] "样板001_c6_c06_030。fcs Plate3_Specimen_001_E5_E05_053.fcs”#>[9] "样板001_f5_f05_065。fcs Plate3_Specimen_001_G2_G02_074.fcs”#>[11]“注释。txt”

我们必须手动生成的第二个输入是实验的注释。在大规模平行细胞术实验的背景下,我们需要知道每个Infinity(通常是pe偶联或apc偶联)抗体的蛋白靶点是什么,以及它的同型是什么。对于示例数据集,注释是在包中提供的,看起来像这样:

数据(steady_state_lung_annotation)打印(steady_state_lung_annotation)#> Infinity_target Infinity_isotype# > Plate1_Specimen_001_B12_B12_024。fcs CD28 SHIgG# > Plate1_Specimen_001_D8_D08_044。fcs CD49b(pan-NK) rIgM# > Plate1_Specimen_001_H11_H11_095。fcs CD137 SHIgG# > Plate3_Specimen_001_A3_A03_003。fcs KLRG1 SHIgG# > Plate3_Specimen_001_A9_A09_009。fcs Ly-49c/F/I/H SHIgG# > Plate3_Specimen_001_C6_C06_030。fcs Podoplanin SHIgG# > Plate3_Specimen_001_C11_C11_035。fcs SSEA-3 rIgM# > Plate3_Specimen_001_E5_E05_053。fcs TCR Vg3 SHIgG# > Plate3_Specimen_001_F5_F05_065。fcs SHIgG SHIgG# > Plate3_Specimen_001_G2_G02_074。fcs rIgM rIgM

steady_state_lung_annotationdata.frame包含每个FCS文件一行,使用rownames(steady_state_lung_annotation) == sampleNames(steady_state_lung).第一列指定无限抗体在每个FCS文件中的目标蛋白,第二列指定其同型(抗体的种类和恒定区域)。如果你从磁盘加载注释文件,使用这个命令:

steady_state_lung_annotation = read.csv("path/to/targets/and/isotypes/annotation/file", row.names = 1, stringsAsFactors = FALSE)

这就是我们所需要的投入!回顾一下你只需要

  1. 一个文件夹,里面装着你大规模平行细胞术实验的FCS文件。
  2. 从你的大规模平行细胞术实验中得到的无限抗体的目标抗体和抗体同型表。

指定骨干抗体和无限抗体

现在我们有了输入数据,我们需要指定哪些抗体是Backbone的一部分,哪些是Infinity抗体。我们提供了一个交互函数来直接在r中指定这一点。该函数可以运行一次,其输出将被保存以供将来使用infinityFlow包中。的select_backbone_and_exploratory_markers函数将解析输入目录中的FCS文件,并询问用户是否应该将其用作预测器(Backbone)、探索目标(Infinity antibodies)或省略(例如时间或事件ID列……)

backbone_specification < -select_backbone_and_exploratory_markerslist.files(input_dir模式=“.fcs”full.names =真正的))

的交互执行示例select_backbone_and_exploratory_markers函数用于示例数据。结果data.frame也被打印出来。

对于每个数据通道,输入任一项:骨干,探索性或丢弃(可略)FSC-A (FSC-A):丢弃FSC-H (FSC-H):骨干FSC-W (FSC-W): b SSC-A (SSC-A): d SSC-H (SSC-H): b SSC-W (SSC-W): b CD69-CD301b (FJComp-APC-A): b僵尸(FJComp-APC-eFlour780-A): b MHCII (FJComp-Alexa萤石700 - a): b CD4 (FJComp-BUV395-A): b CD44 (FJComp-BUV737-A): b CD8 (FJComp-BV421-A): b CD11c (FJComp-BV510-A): b CD11b (FJComp-BV605-A): b F480 (FJComp-BV650-A): b Ly6C (FJComp-BV711-A): b血统(FJComp-BV786-A): b CD45a488 (FJComp-GFP-A): b传奇(FJComp-PE (yg)——):探索性CD24 (FJComp-PE-Cy7 (yg)——):b CD103 (FJComp-PerCP-Cy5-5-A): b时间(时间):d名称desc类型美元P1 FSC-A < NA >抛弃美元P2 FSC-H < NA >骨干美元P3 FSC-W < NA >骨干美元P4 SSC-A < NA >抛弃美元P5 SSC-H < NA >骨干美元P6 SSC-W < NA >骨干美元P7 FJComp-APC-A CD69-CD301b骨干P8 FJComp-APC-eFlour780-A僵尸骨干票数美元FJComp-Alexa萤石700年MHCII骨干P10 FJComp-BUV395-A CD4骨干侯美元FJComp-BUV737-A CD44骨干美元P12 FJComp-BV421-A CD8骨干P13美元FJComp-BV510-A CD11c骨干$P14 FJComp-BV605-A CD11b骨干$P15 FJComp-BV650-A F480骨干$P16 FJComp-BV711-A Ly6C骨干$P17 FJComp-BV786-A Lineage骨干$P18 FJComp-GFP-A CD45a488骨干$P19 FJComp-PE(yg)-A Legend exploratory $P20 FJComp-PE- cy7 (yg)-A CD24骨干$P21 FJComp-PerCP-Cy5-5-A CD103骨干$P22 Time  discard选择正确吗?(是/否):是的

我们不能从这个小插图中交互式地运行这个函数,所以我们从包中加载结果:

数据(steady_state_lung_backbone_specification)打印(steady_state_lung_backbone_specification))#>名称描述类型#> 1 FSC-A  discard#> 2 FSC-H  backbone#> 3 FSC-W  backbone#> 4 SSC-A  discard#> 5 SSC-H  backbone . #> 5 SSC-H  backbone#> 6 SSC-W  backbone

您需要将该骨干规范文件保存为CSV文件,以便将来使用。

write.csv(steady_state_lung_backbone_specification文件=file.path(dir,“backbone_selection_file.csv”),row.names =

运行无限流计算管道

现在我们有了输入数据、FCS文件注释和骨干抗体和无限抗体的规范,我们有了运行管道所需的一切。

所有的管道都被打包成一个函数,infinity_flow ()

下面是它所需的基本参数的描述:

  1. path_to_fcs:输入FCS文件的文件夹路径
  2. Path_to_output:输出文件的路径。
  3. “backbone_selection_file”:指定骨干抗体和Infinity抗体的CSV文件指定骨干抗体和无限抗体上面的部分。
  4. 注释:每个FCS文件的无限抗体目标的命名向量。方法中创建的注释表将创建它设置输入数据部分
  5. 同型:与注释相同,但指定无限抗体同型而不是抗体目标。

我们在输入文件夹中有我们需要的所有东西来填充这些参数:

list.files(dir)#> [1] "backbone_selection_file.csv" "fcs"

首先,输入FCS文件:

path_to_fcs < -file.path(dir,“前锋”list.files(path_to_fcs模式=“.fcs”))#> [1] " plate1_spec_001_b12_b12_024。fcs Plate1_Specimen_001_D8_D08_044.fcs”#> [3] " plate1_spec_001_h11_h11_095。fcs Plate3_Specimen_001_A3_A03_003.fcs”#> [5] " plate3_spec_001_a9_a09_009。fcs Plate3_Specimen_001_C11_C11_035.fcs”

输出目录。如果它还不存在,则会创建它

path_to_output < -file.path(dir,“输出”

骨干选择文件:

list.files(dir)#> [1] "backbone_selection_file.csv" "fcs"backbone_selection_file < -file.path(dir,“backbone_selection_file.csv”read.csv(backbone_selection_file))#>名称描述类型#> 1 FSC-A  discard#> 2 FSC-H  backbone#> 3 FSC-W  backbone#> 4 SSC-A  discard#> 5 SSC-H  backbone . #> 5 SSC-H  backbone#> 6 SSC-W  backbone

Infinity抗体靶点和同型注释:

目标< -steady_state_lung_annotationInfinity_target的名字(目标)< - - - - - -rownames(steady_state_lung_annotation)同形像统计图< -steady_state_lung_annotationInfinity_isotype的名字(同形像)< -rownames(steady_state_lung_annotation)(目标)# > Plate1_Specimen_001_B12_B12_024。fcs Plate1_Specimen_001_D8_D08_044.fcs#>“CD28”“CD49b(泛朝鲜)”# > Plate1_Specimen_001_H11_H11_095。fcs Plate3_Specimen_001_A3_A03_003.fcs#> " cd137 " " klrg1 "# > Plate3_Specimen_001_A9_A09_009。fcs Plate3_Specimen_001_C6_C06_030.fcs#> "Ly-49c/F/I/H" "Podoplanin"(同形像)# > Plate1_Specimen_001_B12_B12_024。fcs Plate1_Specimen_001_D8_D08_044.fcs#> "SHIgG" "rIgM"# > Plate1_Specimen_001_H11_H11_095。fcs Plate3_Specimen_001_A3_A03_003.fcs#>“SHIgG”“SHIgG”# > Plate3_Specimen_001_A9_A09_009。fcs Plate3_Specimen_001_C6_C06_030.fcs#>“SHIgG”“SHIgG”

其他参数是可选的,但是值得考虑的是输入单元格的数量和输出单元格的数量。如果您使用的计算机RAM有限,这一点尤其重要。对于示例数据,这并不重要,因为我们每个井只能访问2000个单元格,但如果你在自己的数据上运行管道,我建议你从低值开始,然后在一切设置就绪后逐步增加(到20,000或50,000个输入单元格,例如每个井10,000个输出单元格)。另一个可选参数是它控制多核计算,以内存使用为代价加快执行速度。在这个小插图中,我们使用的是cores = 1,但是如果您的计算机可以容纳的话,您可能希望将其增加到4或8或更多。

input_events_downsampling < -1000prediction_events_downsampling < -500核=1 l

还有一个参数用于存储临时文件,这对于进一步分析r中的数据很有用。如果缺少该参数,则默认为一个临时目录。

path_to_intermediary_results < -file.path(dir,“tmp”

最后,现在让我们执行管道:

imputed_data < -infinity_flowpath_to_fcs =path_to_fcs,path_to_output =path_to_output,path_to_intermediary_results =path_to_intermediary_results,backbone_selection_file =backbone_selection_file,注释=目标,同形像统计图=同形像统计图,input_events_downsampling =input_events_downsampling,prediction_events_downsampling =prediction_events_downsampling,verbose =真正的核=#> /tmp/RtmpgHJcC9/infinity_flow_example/tmp and /tmp/RtmpgHJcC9/infinity_flow_example/tmp/subsetted_fcs and /tmp/RtmpgHJcC9/infinity_flow_example/tmp/rds and /tmp/RtmpgHJcC9/infinity_flow_example/output: directories not found, creating directory(ies)#>使用目录#> input: /tmp/RtmpgHJcC9/infinity_flow_example/fcs . ##>中介:/tmp/RtmpgHJcC9/infinity_flow_example/tmp#>子集:/tmp/RtmpgHJcC9/infinity_flow_example/tmp/subsetted_fcs#> rds: /tmp/RtmpgHJcC9/infinity_flow_example/tmp/rds#>注释:/tmp/RtmpgHJcC9/infinity_flow_example/tmp/annotation.csv#> output: /tmp/RtmpgHJcC9/infinity_flow_example/output解析和子采样输入数据每个输入文件减少到1000个事件连接表达式矩阵正在写入磁盘逻辑转换数据#>骨干数据探索性数据正在写入磁盘转换表达式矩阵正在写入磁盘#>协调骨干数据缩放表达式矩阵正在写入磁盘拟合回归模型随机选择50%的子集输入文件来拟合模型# >配件…# > XGBoost# >#> 9.56194秒#>输入缺失的测量值从测试集中随机抽取事件进行预测# >冠……# > XGBoost# >#> 0.8291337秒连接预测正在写入磁盘#>执行降维#> 16:56:53 UMAP嵌入参数a = 1.262 b = 1.003#> 16:56:53读取5000行,发现17个数字列#> 16:56:53使用烦扰邻居搜索,n_neighbors = 15#> 16:56:53建筑烦人指数,公制=欧几里得,n_trees = 50#> 0% 10 20 30 40 50 60 70 80 90 100%#> [----|----|----|----|----|----|----|----|----|----|#> **************************************************|#> 16:56:54将NN索引文件写入临时文件/tmp/RtmpgHJcC9/file40f56619589a1#> 16:56:54搜索惹恼索引使用1线程,search_k = 1500#> 16:56:55烦人的回忆= 100%#> 16:56:55开始平滑kNN距离校准使用1个线程#> 16:56:56从归一化拉普拉斯+噪声初始化#> 16:56:56开始优化1000个epoch,使用1个线程具有101940个正边#> 16:57:12优化完成#>导出结果将预测转换回线性尺度#>导出FCS文件(每口井一个)# >策划#>砍掉顶部和底部0.005分位数#>排列单元格(行)#>制作情节#>背景校正#>转换背景校正预测。(用对数来表示)#>导出FCS文件(每口井一个)# >策划#>砍掉顶部和底部0.005分位数#>排列单元格(行)#>制作情节

上面的命令用新的文件集填充我们的输出目录,我们将在下一节中描述这些文件集。

输出说明

输出主要由

  1. 带有估算数据的FCS文件集,可用于进一步的下游分析。
  2. Backbone数据的UMAP嵌入pdf,通过无限抗体的估算表达进行颜色编码

以上每一种都有两种口味background-corrected

在管道的最后,输入的FCS文件被添加了估算的数据。请随意在您熟悉的流式细胞仪软件中探索这些文件!它们应该看起来很像普通的FCS文件,尽管它们是计算派生的。的文件中可以找到输出FCS文件path_to_output目录,具体来说:

list.files(path_to_fcs))##输入文件#> [1] " plate1_spec_001_b12_b12_024。fcs Plate1_Specimen_001_D8_D08_044.fcs”#> [3] " plate1_spec_001_h11_h11_095。fcs Plate3_Specimen_001_A3_A03_003.fcs”#> [5] " plate3_spec_001_a9_a09_009。fcs Plate3_Specimen_001_C11_C11_035.fcs”fcs_raw < -file.path(path_to_output“前锋”“分裂”list.files(fcs_raw))##原始输出FCS文件#> [1] " plate1_speci_001_b12_b12_024_target_cd28 .fcs"#> [2] " plate1_speci_001_d8_d08_044_target_cd49b (pan-NK).fcs"#> [3] " plate1_speci_001_h11_h11_095_target_cd137 .fcs"#> [4] " plate3_samples _001_a3_a03_003_target_klrg1 .fcs"#> [5] " plate3_samples _001_a9_a09_009_target_ly -49c- f - i - h .fcs"#> [6] " plate3_speci_001_c11_c11_035_target_ssea -3.fcs"fcs_bgc < -file.path(path_to_output“FCS_background_corrected”“分裂”##背景校正输出FCS文件list.files(fcs_bgc))##背景校正输出FCS文件#> [1] " plate1_speci_001_b12_b12_024_target_cd28 .fcs"#> [2] " plate1_speci_001_d8_d08_044_target_cd49b (pan-NK).fcs"#> [3] " plate1_speci_001_h11_h11_095_target_cd137 .fcs"#> [4] " plate3_samples _001_a3_a03_003_target_klrg1 .fcs"#> [5] " plate3_samples _001_a9_a09_009_target_ly -49c- f - i - h .fcs"#> [6] " plate3_speci_001_c11_c11_035_target_ssea -3.fcs"

最后,管道生成两个PDF文件,并将骨干数据的UMAP嵌入到根据输入数据进行颜色编码的主干数据中。这是一个信息量很大的输出,是开始分析数据的好方法。这些文件出现在path_to_output目录中。示例数据集非常小,但出于说明目的,可以随意查看结果。此PDF可在

file.path(path_to_output“umap_plot_annotated.pdf”##原始情节#> [1] "/tmp/RtmpgHJcC9/infinity_flow_example/output/umap_plot_annotated.pdf"file.path(path_to_output“umap_plot_annotated_backgroundcorrected.pdf”##背景修正的情节#> [1] "/tmp/RtmpgHJcC9/infinity_flow_example/output/umap_plot_annotated_backgroundcorrected.pdf"

结论

谢谢你关注这篇小短文,我希望你能顺利读完,不会感到太头疼,而且这篇文章很有见地。关于软件包正确使用的一般问题最好在生物导体支持站点最大化未来用户的可见性。如果你遇到bug,可以在infinityFlow上提出问题github

构建此小插图时有关R会话的信息

sessionInfo()#> R版本4.2.0 RC (2022-04-19 r82224)#>平台:x86_64-pc-linux-gnu(64位)运行在Ubuntu 20.04.4 LTS下# >矩阵产品:默认值#> BLAS: /home/biocbuild/bbs-3.15-bioc/R/lib/libRblas.so#> LAPACK: /home/biocbuild/bbs-3.15-bioc/R/lib/libRlapack.so# >#>随机数生成:RNG: L'Ecuyer-CMRG#> Normal:反转#>样本:拒绝# ># >语言环境:#> [1] LC_CTYPE=en_US。utf - 8 LC_NUMERIC = C#> [3] LC_TIME=en_GB LC_COLLATE=C#> [5] LC_MONETARY=en_US。utf - 8 LC_MESSAGES = en_US。utf - 8#> [7] LC_PAPER=en_US。utf - 8 LC_NAME = C#> [9] lc_address = c lc_phone = c#> [11] LC_MEASUREMENT=en_US。utf - 8 LC_IDENTIFICATION = C# >#>附加基础包:#>[1]统计图形grDevices utils数据集方法基础# >#>其他附加包:#> [1] infinityFlow_1.6.0 flowCore_2.8.0# >#>通过命名空间加载(并且没有附加):#> [1] Rcpp_1.0.8.3 RSpectra_0.16-1 bslib_0.3.1#> [4] compiler_4.2.0 cytolib_2.8.0 jquerylib_0.1.4#> [7] tools_4.2.0 uwot_0.1.11 digest_0.6.29#> [10] lattice_0.20-45 jsonlite_1.8.0 evaluate_0.15#> [13] png_0.1-7 rlang_1.0.2 Matrix_1.4-1#> [16] cli_3.3.0 yaml_2.3.5 parallel_4.2.0#> [19] xfun_0.30 fastmap_1.1.0 terra_1.5-21#> [22] string_1 .4.0 knitr_1.38 raster_3.5-15#> [25] generics_0.1.2 S4Vectors_0.34.0 sass_0.4.1#> [28] xgboost_1.6.0.1 stats4_4.2.0 grid_4.2.0#> [31] data.table_1.14.2 Biobase_2.56.0 R6_2.5.1 . ##> [34] RcppAnnoy_0.0.19 pbapply_1.5-0 rmarkdown_2.14#> [37] sp_1.4-7 RProtoBufLib_2.8.0 matlab_1.0.2 . #codetools_0.2-18 htmltools_0.5.2#> [43] matrixStats_0.62.0 BiocGenerics_0.42.0 stringi_1.7.6#> [46] RcppParallel_5.1.5