的目标proDA
是识别不同label-free中丰富的蛋白质质谱数据。这个数据的主要挑战是许多缺失值。缺失值不发生随机但特别是在低强度。这意味着它们不能被忽略。现有的方法大都集中在用一些合理的数量代替缺失值(“归罪”),然后运行经典方法。但归责是有问题的,因为它掩盖了大量的可用信息。这反过来会导致自信的预测。
proDA
另一方面不转嫁缺失值,但构造一个辍学概率模型。为每个示例它适合一个s形曲线辍学。这些信息可以用来推断方法在样品和相关的不确定性,没有中间归责的一步。proDA
支持完整的线性模型和方差和位置要适度。
详情,请参阅我们的预印:
江诗丹顿Ahlmann-Eltze和西蒙·安德斯:proDA:辍学概率分析对于识别不同Label-Free中丰富的蛋白质质谱分析。biorXiv 661496(2019年6月)
proDA是作为一个实现的R包中。
你可以安装它Bioconductor通过输入以下命令为R:
如果(!requireNamespace (“BiocManager”,悄悄地= TRUE)) install.packages (“BiocManager”) BiocManager::安装(“proDA”)
# install.packages (devtools) devtools: install_github (“const-ae / proDA”)
pkgdown文档包是可用的https://const-ae.github.io/proDA/reference。
在接下来的部分中,我将作一个非常简短的概述的主要功能proDA
R包,针对有经验的用户。建议新用户跳过此“快速入门”和直接1.3节,我给一个完整的介绍和详细解释,哪些步骤是必要label-free质谱数据的分析。
所必需的三个步骤来分析数据
proDA ()
)test_diff ()
)#加载包库(proDA) #生成一些数据集与已知结构syn_dataset < - generate_synthetic_data (n_proteins = 100, n_conditions = 2) #丰度矩阵syn_dataset $ Y [1:5,] # > Condition_1-1 Condition_1-2 Condition_1-3 Condition_2-1 Condition_2-2 Condition_2-3 # > protein_1 19.17814 18.83656 18.89003 - 19.90698 NA NA # > protein_2 NA不详不详不详不详不详# > protein_3 23.89169 24.03214 23.73394 23.54467 23.57230 23.92561 # > protein_4 20.94756 21.03668 20.76283 20.51360 21.11377 - 20.66439 # > protein_5 19.44029 19.74747 19.29078 19.55662 19.28023 19.75506 #样品分配给这两个条件syn_dataset $组# > [1]Condition_1 Condition_1 Condition_1 Condition_2 Condition_2 Condition_2 # >水平:Condition_1 Condition_2 #适合辍学概率模型符合< - proDA (syn_dataset $ Y,设计= syn_dataset $组)# 1和2 test_diff识别哪些蛋白质在不同条件(健康,“Condition_1”——“Condition_2”, sort_by =“pval n_max = 5) # > #宠物猫:5×10 # >名称pval adj_pval diff t_statistic se df avg_abundance n_approx n_obs # > <空空的> <双> <双> <双> <双> <双> <双> <双> <双> <双> # > 1 protein_99 0.0000518 0.00518 -6.71 -18.4 22.4 - 4.96 0.365 - 4 5 # > 2 protein_91 0.000125 0.00624 -2.33 -14.7 20.4 - 6.00 0.158 - 4 6 # > 3 protein_100 0.00195 0.0649 4.74 7.23 20.5 - 3.07 0.657 - 4 3 # > 4 protein_96 0.00415 0.104 -1.69 -5.89 0.287 21.9 6.00 6 # > 5 protein_92 0.00674 - 0.135 0.933 - 5.15 20.6 - 6.00 0.181 - 4 6
其他有用的功能质量控制median_normalization ()
和dist_approx ()
。
proDA
是一个R包实现一个强大的辍学概率模型来识别不同的丰富的蛋白质。这个包是专门为label-free质谱数据,特别是如何处理很多缺失值。
但这一切都是毫无用处的,如果你不能数据并把它加载到一个形状是可用的。在下一节中,我将解释如何丰度矩阵,并将其加载到一个有用的形式。我将经历的步骤
proteinGroups.txt
MaxQuant输出表NA
年代,log2 ()
的数据median_normalization ()
dist_approx ()
)proDA ()
test_diff ()
现在我将演示如何加载MaxQuant输出文件。关于加载数据的其他方法的更多信息,请看看装载数据上的装饰图案。
MaxQuant是最受欢迎的工具来处理原始数据女士。它产生的文件。蛋白质的重要文件,它包含强度proteinGroups.txt
。这是一个大表的详细信息的识别和量化过程每个蛋白质组(我将从现在开始就叫“蛋白”)。
这个包提供了一个例子proteinGroups.txt
文件,位于包文件夹。减少输出的文件包含一个实验研究不同DHHCs黑腹果蝇。
执行(“extdata / proteinGroups。txt”,包= " proDA”, mustWork = TRUE) # > [1]“/ tmp / RtmpmHQdHW / Rinst2b483b49ac8ec1 proDA / extdata / proteinGroups.txt”
在这个例子中,我将使用R函数加载数据,因为他们不需要任何额外的依赖关系。
#表加载到内存中maxquant_protein_table < - read.delim(执行(“extdata / proteinGroups。txt”,包= " proDA " mustWork = TRUE), stringsAsFactors = FALSE)
正如我提到的,表包含很多信息(359列! !),但是我们首先感兴趣的列包含测量强度。
#我使用一个正则表达式(regex)选择强度列intensity_colnames < - grep (“^ LFQ \ \ .intensity \ \。”,colnames (maxquant_protein_table)值= TRUE)头(intensity_colnames) # > [1]”LFQ.intensity.CG1407.01”“LFQ.intensity.CG1407.02”“LFQ.intensity.CG1407.03“# > [4]”LFQ.intensity.CG4676.01”“LFQ.intensity.CG4676.02 LFQ.intensity.CG4676.03”#创建矩阵abundance_matrix < -强度。矩阵(maxquant_protein_table [intensity_colnames]) #适应列和行maxquant_protein_table colnames (abundance_matrix) < -子(“^ LFQ \ \ .intensity \ \。”、“”,intensity_colnames) rownames (abundance_matrix) < - maxquant_protein_table美元蛋白质。IDs #打印一些矩阵的行较短的名字所以他们适合在屏幕上abundance_matrix (46:48, 1:6) # > CG1407.01 CG1407.02 CG1407.03 CG4676.01 CG4676.02 CG4676.03 # > A0A0B4K6W1; P08970 713400 845440 0 0 1032600 0 # > A0A0B4K6W2; A0A0B4K7S0; P55824-3; P55824 5018800 4429500 2667200 0 2667200 4429500 # > A0A0B4K6X7; A1Z8J0 0 0 0 0 0 0
从表中提取位后,我们最关心的,我们将不得不修改它。
首先,MaxQuant规范缺失值0
。这是误导的,因为实际的丰度可能不是零,只是一些价值太小质谱仪检测到的。因此,我将替换所有0
与NA
。
第二,原始强度值有一个线性均值-方差的关系。这是不可取的,因为改变x
单位可以是一个大的转变,如果意思是小或无关如果意思是很大的。幸运的是,均值和方差的独立,我们可以日志
强度。现在的改变x
单位重要的高度丰富的蛋白质,如丰富的低。
abundance_matrix (abundance_matrix = = 0) < - NA abundance_matrix < - log2 (abundance_matrix) abundance_matrix (46:48, 1:6) # > CG1407.01 CG1407.02 CG1407.03 CG4676.01 CG4676.02 CG4676.03 # > A0A0B4K6W1; P08970 19.44435 19.68934 19.97785 NA NA NA # > A0A0B4K6W2; A0A0B4K7S0; P55824-3; P55824 22.25891 22.07871 21.34689 NA 23.06582 - 20.41266 # > A0A0B4K6X7; A1Z8J0 NA不详不详不详不详不详
质量控制(QC)是必不可少的一个成功的生物信息学分析,因为任何数据集显示了一些不必要的变化或甚至可能含有更多的严重错误比如交换样品。
我们经常开始正常化的数据去除潜在的样品具体的影响。但这一步已经是具有挑战性的,因为缺失值不容易纠正。因此,第一个有用的情节是看有多少缺失值在每个样本。
barplot (colSums (is.na (abundance_matrix)), ylab = " #缺失值",xlab =“示例1 - 36”)
我们可以看到,失踪的人数大幅值不同样本之间在这个数据集(30%至90%)。如果我们看一看每个样品的强度分布,我们也看到他们之间有着本质的不同。
箱线图(abundance_matrix ylab =“强度分布”,xlab =“示例1 - 36”)
注意,样品的强度分布是向上转移也有大量的缺失值(例如最后一个)。同意我们的想法,小值更容易失踪。另一方面,这也说明了为什么归一化方法,如分位数正常化,这扭曲了数据,直到所有的发行版都是平等的,都有问题。我将更多的“保守”值归一化,忽略了缺失值和转换值,中值样本和所有其他样本平均之间的区别是零。
normalized_abundance_matrix < - median_normalization (abundance_matrix)
一个重要的工具来识别样本互换和异常值的数据集是看样本距离矩阵。它显示了样本的距离到B, C, B到C等等。
基本的Rdist ()
函数不能处理输入数据包含缺失值,因此我们可能想用一些真实的数据代替缺失值,计算完成数据集上的距离。但选择一个好的替换值是具有挑战性的,也可以误导,因为许多缺失值的样本会被认为太近。
而不是proDA
提供了dist_approx ()
函数,拟合模型(即。的输出proDA ()
)或一个简单的矩阵(它在内部调用proDA ()
),没有将缺失值估计预期的距离。另外,它每一次评估报告相关的不确定性。与许多缺失值估计样本将会不确定,允许数据分析师的折扣。
da < - dist_approx (normalized_abundance_matrix)
dist_approx ()
返回两个元素的意思是
的估计和相关的sd
。在下一步我将情节的热图的三种不同的条件下,添加95%置信区间为文本的每一个细胞。
#安装这一块只如果pheatmap # install.packages (“pheatmap”)选取< - c (1:3, # CG1407 7:9 # CG59163 22:24) # CG6618 plot_mat <——as.matrix (da意味着美元)[选取,选取]#删除对角元素,所以colorscale不是扭曲plot_mat[诊断接头(9)= = 1]< - NA #配置时间间隔大约95%的sd * 1.96 < -矩阵不确定性(paste0(“±”,(如。矩阵(da sd * 1.96美元)(选取,选取),1)),nrow = 9) pheatmap: pheatmap (plot_mat cluster_rows = FALSE, cluster_cols = FALSE, display_numbers =不确定性,number_color =“黑色”)
在下一步,我们将配合实际的线性概率辍学规范化数据模型。但在我们开始之前,我将创建一个data.frame包含一些额外的信息在每个样本,尤其是条件样本所属。
#最好的方法创建这个data.frame取决于列命名方案sample_info_df < - data.frame (name = colnames (normalized_abundance_matrix) stringsAsFactors = FALSE) sample_info_df条件< - substr (sample_info_df美元的名字,1,nchar (sample_info_df名字美元)- 3)sample_info_df复制<——美元。数字(substr (sample_info_df名字,美元nchar (sample_info_df名字美元)- 1,20))sample_info_df # > #宠物猫:36×3 # >名称条件复制# > <科> <空空的> <双> # > 1 CG1407.01 CG1407 1 # > 2 CG1407.02 CG1407 2 # > 3 CG1407.03 CG1407 3 # > 4 CG4676.01 CG4676 1 # > 5 CG4676.02 CG4676 2 # > 6 CG4676.03 CG4676 3 # > 7 CG51963.01 CG51963 1 # > 8 CG51963.02 CG51963 2 # > 9 CG51963.03 CG51963 3 # > 10 CG5620A。与26日01 CG5620A 1 # > #…更多的行
现在我们可以调用proDA ()
函数实际上符合模型。我们指定的设计
使用的公式表示法,引用条件
列sample_info_df
data.frame我们刚刚创建的。此外,我想要使用指定S2R
条件作为参考,因为我知道,这是消极的控制,这种方式自动所有系数测量多少每个条件不同于消极的控制。
符合< - proDA (normalized_abundance_matrix、设计= ~条件,col_data = sample_info_df reference_level =“S2R”)健康# >辍学概率模型的参数# > # >蛋白质数据集包含36个样本和122 # > 59.7%的值是失踪# > # >实验设计:y ~条件# >模型已经成功地融合。# > # >推断参数:# > location_prior_mean: 19.5 # > location_prior_scale: 8.37 # > location_prior_df: 3 # > variance_prior_scale: 0.283 # > variance_prior_df: 1.64 # > dropout_curve_position: 19.9, 19日,20.1,22.8,……# > dropout_curve_scale: -0.816, -0.601, -1.02, -1.31,……
的proDAFit
对象打印很多有用的信息模型的收敛性,数据集的大小,缺失值的数量,和推断超参数。
使它容易找到可用的方法proDAFit
对象,美元
运营商是超载和显示可能的函数的列表:
#相当于feature_parameters(适合)适合宠物猫feature_parameters # > #美元:122×4 # > n_approx df s2 n_obs # > <双> <双> <双> <双> # > 1 12.0 - 0.001 3808。5 # > 2 12.0 - 0.001 2439。1 # > 3 19.3 8.93 4.07 14 # > 4 12.0 - 0.001 850。6 # > 5 17 # > 6 17.4 7.04 0.470 12.0 - 0.001 2472。1 # > 12.0 - 0.001 2410。1 # > 8 28.9 18.6 0.217 29 # > 9 12.0 - 0.001 1798。4 # > 10 12.0 - 0.001 1881。4 # > #…112多行
在内部的proDAFit
对象的子类实现SummarizedExperiment
。这意味着它可以子集,例如用于计算的距离和样品的蛋白质的一个子集。
#安装这一块只如果pheatmap # install.packages (“pheatmap”) pheatmap:: pheatmap (dist_approx(适合[1:20,1:3],by_sample = FALSE)的意思是美元)
最后,我们将使用一个瓦尔德测试来确定蛋白质系数是明显不同于零。的test_diff ()
函数首先产生的合适对象proDA ()
和对比论证。这可以是一个字符串或表达式如果我们想测试更复杂的组合。例如conditionCG1407 - (conditionCG6017 + conditionCG5880) / 2
将测试的区别CG1407 CG6017的平均值和CG5880。
另外test_diff ()
还支持似然比野生。在这种情况下,而不是对比
参数指定reduced_model
论点。
#测试CG1407蛋白质在不同条件和S2R # S2R是默认之下,因为它是指定为‘reference_level test_res < - test_diff(健康,“conditionCG1407”) test_res # > #宠物猫:122×10 # >名称pval adj_pval diff t_statistic se df avg_abundance n_approx n_obs # > <空空的> <双> <双> <双> <双> <双> <双> <双> <双> <双> # > 1 Q8IP47; Q9VJP8; Q9V43…24 18.9 0.904 0.964 -0.132 -0.122 1.08 12.0 - 5 # > 2 A0A023GPV6; A8JV04; Q…24 18.4 - 12.0 0.923 - 0.964 -0.0992 -0.0978 1.01 1 # > 3 A0A023GQA5; P24156 24 19.3 0.0356 0.265 -2.92 -2.23 1.31 19.3 14 # > 4 Q1RKY1; A0A0B4LG19; 24…0.667 0.964 0.632 0.435 1.45 18.7 12.0 6 # > 5 A0A0B4JD00; A8DY69;我…24 20.0 - 17.4 0.919 - 0.964 0.0691 0.103 0.670 17 # > 6 A0A0B4JCT8; Q9V780 24 18.5 0.923 0.964 -0.0994 -0.0980 1.01 12.0 1 # > 7 A0A0B4LHQ4; A0A0B4JD…24 18.4 0.923 0.964 -0.0990 -0.0977 1.01 12.0 1 # > 8 A0A0B4JCW4; Q9VHJ8; Q…24 21.9 - 28.9 0.643 - 0.964 -0.197 -0.469 0.419 29 # > 9 Q9VDV4; A0A0B4JCY1; Q…24 18.7 0.295 0.860 1.95 1.07 1.82 12.0 - 4 # > 10 A0A0B4JCY6; Q7KSF4;…24 19.0 0.598 0.964 -0.783 -0.535 1.46 12.0 - 4 # > #…112多行
这种蛋白质是介绍以识别不同丰富。但对于一个真实的数据集,现在实际的分析才刚刚开始。一系列重要的蛋白质是很少发表的结果,一个经常需要意义相关的潜在的生物机制是什么。但是对于这个问题其他工具是必要的,这取决于精确的问题与生物相关的问题。
sessionInfo () # > R版本4.2.0 RC (2022-04-21 r82226) # >平台:x86_64-pc-linux-gnu(64位)# >下运行:Ubuntu 20.04.4 LTS # > # >矩阵产品:默认# >布拉斯特区:/home/biocbuild/bbs - 3.16 - bioc / R / lib / libRblas。所以# > LAPACK: /home/biocbuild/bbs - 3.16 - bioc / R / lib / libRlapack。所以# > # >语言环境:# > [1]LC_CTYPE = en_US。utf - 8 LC_NUMERIC = C而= en_GB # > [4] LC_COLLATE = C LC_MONETARY = en_US。utf - 8 LC_MESSAGES = en_US。utf - 8 # > [7] LC_PAPER = en_US。utf - 8 LC_NAME = C LC_ADDRESS = C # > [10] LC_TELEPHONE = C LC_MEASUREMENT = en_US。utf - 8 LC_IDENTIFICATION = C # > # >附加基本包:# >[1]统计图形grDevices跑龙套数据集方法基础# > # >其他附加包:# > [1]proDA_1.11.0 BiocStyle_2.25.0 # > # >加载通过名称空间(而不是附加):# > [1]SummarizedExperiment_1.27.0 xfun_0.30 bslib_0.3.1 # > [4] lattice_0.20-45 colorspace_2.0-3 vctrs_0.4.1 # > [7] htmltools_0.5.2 stats4_4.2.0 yaml_2.3.5 # > [10] utf8_1.2.2 rlang_1.0.2 jquerylib_0.1.4 # > [13] pillar_1.7.0 glue_1.6.2 BiocGenerics_0.43.0 # > [16] RColorBrewer_1.1-3 matrixStats_0.62.0 GenomeInfoDbData_1.2.8 # > [19] lifecycle_1.0.1 stringr_1.4.0 MatrixGenerics_1.9.0 # > [22] zlibbioc_1.43.0 munsell_0.5.0 gtable_0.3.0 # > [25] evaluate_0.15 Biobase_2.57.0 knitr_1.38 # > [28] IRanges_2.31.0 fastmap_1.1.0 GenomeInfoDb_1.33.0 # > [31] fansi_1.0.3 highr_0.9 Rcpp_1.0.8.3 # > [34] scales_1.2.0 BiocManager_1.30.17 DelayedArray_0.23.0 # > [37] S4Vectors_0.35.0 magick_2.7.3 jsonlite_1.8.0 # > [40] XVector_0.37.0 digest_0.6.29 stringi_1.7.6 # > [43] bookdown_0.26 GenomicRanges_1.49.0 grid_4.2.0 # > [46] cli_3.3.0 tools_4.2.0 bitops_1.0-7 # > [49] magrittr_2.0.3 sass_0.4.1 rcurl_1.98 - 1.6 # > [52] tibble_3.1.6 crayon_1.5.1 pkgconfig_2.0.3 # > [55] ellipsis_0.3.2 pheatmap_1.0.12 Matrix_1.4-1 # > [58] rmarkdown_2.14 extraDistr_1.9.1 R6_2.5.1 # > [61] compiler_4.2.0