xcms 3.20.0
本文档介绍如何使用xcms用于直接注入质谱数据的分析,包括峰检测,校准和对应(跨样品的峰分组)。
在任何其他分析步骤之前,必须在质谱数据中识别峰。在典型的代谢组学工作流程中,峰是在色谱(时间)维度中识别的,而在直接注射质谱数据集中,峰是在m/z维度中识别的。xcms使用MassSpecWavelet
包来识别这样的峰值。
下面我们加载所需的包。有关并行处理设置的信息,请参阅BiocParallel
装饰图案。
库(xcms)库(MassSpecWavelet)寄存器(SerialParam())
在本文档中,我们使用来自msdata包中。假设msdata安装后,我们定位包的路径并加载数据集。我们还创建了一个data.frame
根据文件名描述实验设置。
mzML_path <- system。mzML_files ("fticr-mzML", package = "msdata") mzML_files <- list. file("fticr-mzML", package = "msdata")mzML_files (mzML_path, recursive = TRUE, full.names = TRUE) ##我们将每个条件设置为2个样本mzML_files <- mzML_files[c(1,2,6,7)] ##创建一个data.frame,将样本分配给样本组,即ham4和ham5。grp <- rep("ham4", length(mzML_files)) grp[grep(basename(mzML_files), pattern = "^HAM005")] <- "ham5" pd <- data.frame(filename = basename(mzML_files), sample_group = grp) ##加载数据。ham_raw <- readMSData(files = mzML_files, pdata = new("NAnnotatedDataFrame", pd), mode = "onDisk")
数据文件来自直接喷射质谱实验,即我们只有一个单一的光谱可用于每个样品,没有保留时间。
##对于每个样本rtime(ham_raw),只有一个具有人工保留时间的单一频谱可用
# # F1。S1 F2。S1 F3。S1 F4。S1 ## 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 intf # # CP01 372259.4 - 22.97534 403.2367 403.2279 403.2447 1 1 1 4735258 NA # # CP02 310572.1 - 20.61382 409.1845 409.1747 409.1936 1 1 1 4158404 NA # # CP03 435462.6 - 27.21723 413.2677 413.2585 413.2769 1 1 1 6099006 NA # # CP04 174252.7 - 14.74527 423.2363 423.2266 423.2459 1 1 1 2708391 NA # # CP05 461385.6 - 32.50050 427.2681 427.2574 427.2779 1 1 1 6302089 NA # # CP06 517917.6 - 34.37645 437.2375 437.2254 437.2488 1 1 1 7523070 NA # # maxf样本## CP01 814693.1 1 ## CP02 732119.9 1 ## CP03 1018994.8 1 ## CP04 435858.5 1 ## CP05 1125644.3 1 ## CP06 1282906.5 1
的校准
方法可用于校正已识别峰的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.04 Mb ## - - - 光谱数据 - - - ## 女士水平(s): 1 # #光谱数量:4 # # MSn保留时间:1:59 - 1:59分钟 ## - - - 处理信息 - - - ## 数据加载(11月1日星期二19:21:31 2022]# # MSnbase版本:2.24.0 ## - - - 元数据 - - - ## phenoData # # rowNames: 1 2 3 4 # # varLabels:文件名sample_group # # varMetadata: labelDescription从:加载的# # # # [1]HAM004_641fE_14-11-07——Exp1.extracted.mzML……[4] HAM005_641fE_14-11-07——Exp2.extracted。mzML ## Use 'fileNames(.)' to see all files. ## protocolData: none ## featureData ## featureNames: F1.S1 F2.S1 F3.S1 F4.S1 ## fvarLabels: fileIdx spIdx ... spectrum (35 total) ## fvarMetadata: labelDescription ## experimentData: use 'experimentData(object)' ## - - - xcms preprocessing - - - ## Chromatographic peak detection: ## method: MSW ## 38 peaks identified in 4 samples. ## On average 9.5 chromatographic peaks per sample. ## Correspondence: ## method: mzClust ## 20 features identified. ## Median mz range of features: 9.1553e-05 ## Median rt range of features: 0
峰群信息,即功能方法可以访问定义featureDefinitions
方法。
featureDefinitions (ham_prep)
## DataFrame与20行和10列## mzmed mzmin mzmax rtmed rtmin rtmax npeaks ## <数字> <数字> <数字> <数字> <数字> <数字> <数字> ## FT01 402.285 402.285 402.285 402.286 -1 -1 -1 2 ## FT02 403.237 403.237 403.237 403.237 -1 -1 4 ## FT03 405.109 405.109 405.109 405.109 405.109 -1 -1 2 ## FT04 409.184 409.184 409.184 409.185 -1 -1 2 ## FT05 410.144 410.144 410.145 -1 -1 2 ## ... ... ... ... ... ... ... ...## FT16 437.238 437.238 437.238 438.240 438.240 438.240 -1 -1 2 ## FT18 439.151 439.151 439.151 439.151 -1 -1 2 ## FT19 441.130 441.130 441.131 -1 -1 2 ## FT20 445.293 445.292 445.293 -1 -1 2 ## ham4 ham5 peakidx ## <数字> <数字> <列表> ## FT01 02 16,28 ## FT02 2 2 17,29,1,…30 # # # # FT03 0 2 18日FT04 2 0 10, 2 # # FT05 0 2 19日31日 ## ... ... ... ...## ft16 20 6,13 ## ft17 20 7,14 ## ft18 0 2 26,37 ## ft19 0 2 38,27 ## ft20 20 15,8
绘制直接注射样品的原始数据比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。mzML ## FT01 NA ## FT02 4735258 ## FT03 NA ## FT04 4158404 ## FT05 NA ## FT06 6099006 ## HAM004_641fE_14-11-07--Exp2.extracted.mzML ## FT01 NA ## FT02 6202418 ## FT03 NA ## FT04 5004546 ## FT05 NA ## FT06 4950642 ## HAM005_641fE_14-11-07--Exp1.extracted.mzML ## FT01 4095293 ## FT02 4811391 ## FT03 2982453 ## FT04 NA ## FT05 2872023 ## FT06 NA ## HAM005_641fE_14-11-07--Exp2.extracted.mzML ## FT01 4804763 ## FT02 2581183 ## FT03 2268984 ## FT04 NA ## FT05 2133219 ## 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。mzML ## FT01 768754.0 ## FT02 4735257.5 ## FT03 652566.6 ## FT04 4158404.5 ## FT05 652201.1 ## FT06 6099006.3 ## HAM004_641fE_14-11-07--Exp2.extracted.mzML ## FT01 1230140.4 ## FT02 6202417.6 ## FT03 374109.9 ## FT04 5004546.3 ## FT05 403448.4 ## FT06 4950641.7 ## HAM005_641fE_14-11-07--Exp1.extracted.mzML ## FT01 4095293 ## FT02 4811391 ## FT03 2982453 ## FT04 1221031 ## FT05 2872023 ## FT06 1573988 ## HAM005_641fE_14-11-07--Exp2.extracted.mzML ## FT01 4804762.5 ## FT02 2581183.1 ## FT03 2268984.5 ## FT04 1241294.4 ## FT05 2133219.4 ## FT06 977694.5
进一步的分析,即具有显著不同丰度的特征/代谢物的检测,或PCA分析,可以使用其他R包的功能在特征矩阵上执行,例如limma.