xcms 3.4.4
本文档介绍如何使用xcms用于直接注入质谱数据的分析,包括峰检测,校准和对应(跨样品的峰分组)。
在任何其他分析步骤之前,必须在质谱数据中识别峰。在典型的代谢组学工作流程中,峰是在色谱(时间)维度中识别的,而在直接注射质谱数据集中,峰是在m/z维度中识别的。xcms使用MassSpecWavelet
包来识别这样的峰值。
下面我们加载所需的包。我们禁用并行处理。要启用和自定义并行处理,请参阅BiocParallel
装饰图案。
库(xcms)库(MassSpecWavelet)寄存器(SerialParam())
在本文档中,我们使用来自msdata包中。假设msdata安装后,我们定位包的路径并加载数据集。我们还创建了一个data.frame
根据文件名描述实验设置。
Mzdata_path <- system。File ("fticr", package = "msdata") mzdata_files <- list。files(mzdata_path, recursive = TRUE, full.names = TRUE) ##创建一个data.frame,将样本分配给样本组,即ham4和ham5。grp <- rep("ham4", length(mzdata_files)) grp[grep(basename(mzdata_files), pattern = "^HAM005")] <- "ham5" pd <- data.frame(filename = basename(mzdata_files), sample_group = grp) ##加载数据。ham_raw <- readMSData(files = mzdata_files, pdata = new("NAnnotatedDataFrame", pd), mode = "onDisk")
数据文件来自直接喷射质谱实验,即我们只有一个单一的光谱可用于每个样品,没有保留时间。
##对于每个样本rtime(ham_raw),只有一个具有人工保留时间的单一频谱可用
# # F01。S1 F02。S1 F03。S1 F04。S1 F05。S1 F06。S1 F07。S1 F08。S1 F09。S1 F10。S1 ## 1 1 1 1 1 1 1 1 1 1 1 1
峰是在每个光谱内识别使用质谱仪小波方法。
##定义峰值检测参数msw <- MSWParam(scales = c(1,4,9), nearbyPeak = TRUE, winSize。噪声= 500,信噪比。方法= "data. ", snthresh = 10) ham_prep <- findChromPeaks(ham_raw, param = msw) head(chromPeaks(ham_prep))
# # mz mzmin mzmax rt rtmin rtmax成maxo sn # # CP01 403.2367 403.2279 403.2447 1 1 1 4735258 372259.4 - 22.97534 # # CP02 409.1845 409.1747 409.1936 1 1 1 4158404 310572.1 - 20.61382 # # CP03 413.2677 413.2585 413.2769 1 1 1 6099006 435462.6 - 27.21723 # # CP04 423.2363 423.2266 423.2459 1 1 1 2708391 174252.7 - 14.74527 # # CP05 427.2681 427.2574 427.2779 1 1 1 6302089 461385.6 - 32.50050 # # CP06 437.2375 437.2254 437.2488 1 1 1 7523070 517917.6 - 34.37645 # # intf maxf样本is_filled # #Cp01 na 814693.1 10 ## cp02 na 732119.9 10 ## cp03 na 1018994.8 10 ## cp04 na 435858.5 10 ## cp05 na 1125644.3 10 ## cp06 na 1282906.5 10
的校准
方法可用于校正已识别峰的m/z值。目前实施的方法需要确定的峰值和已知校准器的m/z值列表。然后根据校准器的m/z值与最近峰值的m/z值之间的差异(在用户定义的允许的最大距离内)调整识别的峰值m/z值。请注意,这种方法目前只校准已识别的峰,而不是光谱中的原始m/z值。
下面我们将演示校准
使用人工定义的校准m/z值的数据文件之一的方法。我们首先将数据集子集化为第一个数据文件,提取3个峰值的m/z值并稍微修改这些值。
第一个文件的子集。first_file <- filterFile(ham_prep, file = 1) ##提取3个m/z值calib_mz <- chromPeaks(first_file)[c(1,4,7), "mz"] calib_mz <- calib_mz + 0.00001 * runif(1,0,0.4) * calib_mz + 0.0001
接下来,我们使用之前定义的校准数据集人工calibrants。我们用的是“edgeshift”
一种校正方法,使用线性插值法调整校准剂m/z值范围内的所有峰,并将该范围外的所有色谱峰按常数因子(分别为最低的最大校准剂m/z与最近的峰值m/z之间的差值)移位。注意,在真正的用例中,m/z值显然代表已知的校准器的m/z,而不是根据实际数据定义的。
##设置校准prm的参数类<- CalibrantMassParam(mz = calib_mz, method = " edgesshift ", mzabs = 0.0001, mzppm = 5) first_file_calibration <- calibrate(first_file, param = prm)
为了评估校准,我们将调整后的m/z值与原始m/z值之间的差异(y轴)绘制在下方。
diffs <- chromPeaks(first_file_) [, "mz"] - chromPeaks(first_file)[, "mz"] plot(x = chromPeaks(first_file)[, "mz"], xlab = expression(m/z[raw]), y = diffs, ylab = expression(m/z[] - m/z[raw])))
对应的目的是分组峰跨样本来定义特性(具有相同m/z值的离子)。从单峰谱来看,直接注入质谱实验可与之分组MZclust方法。下面我们进行对应分析groupChromPeaks
方法,使用默认设置。
##使用默认设置,但定义样本组分配mzc_prm <- MzClustParam(sampleGroups = ham_prep$sample_group) ham_prep <- groupChromPeaks(ham_prep, param = mzc_prm)
获得所执行处理的概述:
ham_prep
## MSn实验数据(“XCMSnExp”)##对象内存大小:0.05 Mb ## - - -光谱数据- - - ## MS级别(s): 1 ##光谱数量:10 ## MSn保留时间:0:1 - 0:1分钟## - - -处理信息- - - ##数据加载[周三2月20日18:39:58 2019]## MSnbase版本:2.8.3 ## - - -元数据- - - ##表型数据## rowNames: 1 2…10 (10 total) ## varLabels: filename sample_group ## varMetadata: labelDescription ##加载from: ## [1] HAM004_641fE_14-11-07——exp1 .extract .mzdata…[10] HAM005_641fE_14-11-07——Exp5.extracted。mzdata ## Use 'fileNames(.)' to see all files. ## protocolData: none ## featureData ## featureNames: F01.S1 F02.S1 ... F10.S1 (10 total) ## fvarLabels: fileIdx spIdx ... spectrum (30 total) ## fvarMetadata: labelDescription ## experimentData: use 'experimentData(object)' ## - - - xcms preprocessing - - - ## Chromatographic peak detection: ## method: MSW ## 88 peaks identified in 10 samples. ## On average 8.8 chromatographic peaks per sample. ## Correspondence: ## method: mzClust ## 18 features identified. ## Median mz range of features: 0.00088501 ## Median rt range of features: 0
峰群信息,即功能方法可以访问定义featureDefinitions
方法。
featureDefinitions (ham_prep)
# # DataFrame 18行和10列# # mzm mzmin mzmax rtm rtmin # # <数字> <数字> <数字> <数字> <数字> # # FT01 402.285382080078 402.285064697266 402.285858154297 1 1 # # FT02 403.236521402995 403.235687255859 403.236694335938 1 1 # # FT03 405.108932495117 405.108734130859 405.109527587891 1 1 # # FT04 409.184381103516 409.183746337891 409.184539794922 1 1 # # FT05 410.144424438477 410.144012451172 410.144836425781 1 1 ## ... ... ... ... ... ...# # FT14 438.240702311198 438.240386962891 438.241333007812 1 1 # # FT15 439.150836181641 439.150268554688 439.151214599609 1 1 # # FT16 441.129954020182 441.129638671875 441.130584716797 1 1 # # FT17 444.129648844401 444.128997802734 444.129974365234 1 1 # # FT18 445.29288482666 445.292175292969 445.293121337891 1 1 # # rtmax npeaks ham4 ham5 # # <数字> <数字> <数字> <数字> # # FT01 1 5 0 5 # # FT02 1 9 5 4 # # FT03 1 4 0 4 # # FT04 1 5 5 0 # # FT05 1 4 0 4 ## ... ... ... ... ...## FT14 -1 3 3 0 ## FT15 -1 50 5 ## FT16 -1 3 03 ## FT17 -1 3 03 ## FT18 -1 4 40 ## peakidx# # <列表> ## FT01 c(37, 60, 80, 49, 70) ## FT02 c(61, 38, 50, 71, 1,9, 16,23, 31) ## FT03 c(39, 51, 62, 81) ## FT04 c(10, 2, 17, 24, 32) ## FT05 c(40, 72, 52, 63) ## ... ...## FT14 c(7,14,22) ## FT15 c(67, 86, 47, 58, 78) ## FT16 c(59, 87, 48) ## FT17 c(68, 79, 88) ## FT18 c(15,8,30,36)
绘制直接注射样品的原始数据比LC/GC-MS数据需要更多的处理,在LC/GC-MS数据中我们可以简单地使用色谱图
方法来提取数据。下面我们提取与第一个特征相关的峰值的m/z-强度对。因此,我们首先确定该特征的峰值,并定义它们的m/z值范围。使用这个范围,我们可以随后使用filterMz
函数将完整数据集子集设置为与特征峰值相关的信号。在该对象上,我们可以调用mz
而且强度
函数来提取数据。
# #的山峰属于第一个特性与其< - chromPeaks (ham_prep) [featureDefinitions (ham_prep)美元peakidx[[1]]] # #定义m / z范围mzr < - c (min (pks [" mzmin "]) - 0.001,马克斯(pks [" mzmax "]) + 0.001) # #子集对象的m / z范围ham_prep_sub < - filterMz (ham_prep, mz = mzr) # #提取mz和强度值mz < - mz (ham_prep_sub bySample = TRUE)整数< -强度(ham_prep_sub bySample = TRUE) # #地块数据图(pch = 3, 3, NA, xlim =范围(mz),ylim = range(ints), main = "FT01", xlab = "m/z", ylab = "intensity") ##定义颜色cols <- rep("#ff000080", length(mzs)) cols[ham_prep_sub$sample_group == "ham5"] <- "#0000ff80" tmp <- mapply(mzs, ints, cols, FUN = function(x, y, col) {points(x, y, col = col, type = "l")})
为了获得每个样本中每个特征的实际强度值featureValue
方法可以使用。设置Value = "into"
告诉函数为每个样本的每个峰值(一个代表峰值)返回积分信号。
feat_vals <- featureValues(ham_prep, value = "into")
# # HAM004_641fE_14-11-07——Exp1.extracted。mzdata ## FT01 NA ## FT02 4735258 ## FT03 NA ## FT04 4158404 ## FT05 NA ## FT06 6099006 ## HAM004_641fE_14-11-07--Exp2.extracted.mzdata ## FT01 NA ## FT02 6202418 ## FT03 NA ## FT04 5004546 ## FT05 NA ## FT06 4950642 ## HAM004_641fE_14-11-07--Exp3.extracted.mzdata ## FT01 NA ## FT02 6117414 ## FT03 NA ## FT04 4403588 ## FT05 NA ## FT06 5517710 ## HAM004_641fE_14-11-07--Exp4.extracted.mzdata ## FT01 NA ## FT02 5328574 ## FT03 NA ## FT04 4336554 ## FT05 NA ## FT06 5008542 ## HAM004_641fE_14-11-07--Exp5.extracted.mzdata ## FT01 NA ## FT02 6429029 ## FT03 NA ## FT04 4580893 ## FT05 NA ## FT06 4856606 ## HAM005_641fE_14-11-07--Exp1.extracted.mzdata ## FT01 4095293 ## FT02 4811391 ## FT03 2982453 ## FT04 NA ## FT05 2872023 ## FT06 NA ## HAM005_641fE_14-11-07--Exp2.extracted.mzdata ## FT01 4804763 ## FT02 2581183 ## FT03 2268984 ## FT04 NA ## FT05 2133219 ## FT06 NA ## HAM005_641fE_14-11-07--Exp3.extracted.mzdata ## FT01 4657727 ## FT02 2727237 ## FT03 2971705 ## FT04 NA ## FT05 2466626 ## FT06 NA ## HAM005_641fE_14-11-07--Exp4.extracted.mzdata ## FT01 3755890 ## FT02 2496859 ## FT03 NA ## FT04 NA ## FT05 2980997 ## FT06 NA ## HAM005_641fE_14-11-07--Exp5.extracted.mzdata ## FT01 5265972 ## FT02 NA ## FT03 3009065 ## FT04 NA ## FT05 NA ## FT06 NA
NA
报告了样本中没有在特征的m/z值处识别出峰值的特征。在某些情况下,在原始数据文件中的特征位置可能仍然有信号,但峰值检测未能识别出峰值。对于这些情况,信号可以恢复使用fillChromPeaks
集成特征位置上所有原始信号的方法。如果在那个地点没有信号NA
据报道。
ham_prep <- fillChromPeaks(ham_prep, param = FillChromPeaksParam()) head(featureValues(ham_prep, value = "into"))
# # HAM004_641fE_14-11-07——Exp1.extracted。mzdata ## FT01 751860.7 ## FT02 4735257.5 ## FT03 749756.9 ## FT04 4158404.5 ## FT05 707975.5 ## FT06 6099006.3 ## HAM004_641fE_14-11-07--Exp2.extracted.mzdata ## FT01 1202735.5 ## FT02 6202417.6 ## FT03 450339.0 ## FT04 5004546.3 ## FT05 481158.4 ## FT06 4950641.7 ## HAM004_641fE_14-11-07--Exp3.extracted.mzdata ## FT01 779492.4 ## FT02 6117414.1 ## FT03 588609.5 ## FT04 4403588.2 ## FT05 1149542.8 ## FT06 5517709.5 ## HAM004_641fE_14-11-07--Exp4.extracted.mzdata ## FT01 541406.3 ## FT02 5328574.1 ## FT03 877991.1 ## FT04 4336554.2 ## FT05 798341.5 ## FT06 5008541.7 ## HAM004_641fE_14-11-07--Exp5.extracted.mzdata ## FT01 543921.1 ## FT02 6429028.9 ## FT03 1363759.7 ## FT04 4580892.8 ## FT05 1107571.1 ## FT06 4856606.0 ## HAM005_641fE_14-11-07--Exp1.extracted.mzdata ## FT01 4095293 ## FT02 4811391 ## FT03 2982453 ## FT04 1174152 ## FT05 2872023 ## FT06 1708432 ## HAM005_641fE_14-11-07--Exp2.extracted.mzdata ## FT01 4804763 ## FT02 2581183 ## FT03 2268984 ## FT04 1183772 ## FT05 2133219 ## FT06 1037441 ## HAM005_641fE_14-11-07--Exp3.extracted.mzdata ## FT01 4657726.8 ## FT02 2727237.5 ## FT03 2971705.2 ## FT04 517915.7 ## FT05 2466625.6 ## FT06 867137.8 ## HAM005_641fE_14-11-07--Exp4.extracted.mzdata ## FT01 3755889.7 ## FT02 2496858.9 ## FT03 2291624.1 ## FT04 1321138.8 ## FT05 2980996.6 ## FT06 947289.2 ## HAM005_641fE_14-11-07--Exp5.extracted.mzdata ## FT01 5265972 ## FT02 2128723 ## FT03 3009065 ## FT04 1163582 ## FT05 2227016 ## FT06 1006506
进一步的分析,即具有显著不同丰度的特征/代谢物的检测,或PCA分析,可以使用其他R包的功能在特征矩阵上执行,例如limma.