基于质谱技术的非靶向代谢组学数据处理基础xcms1

基于质谱技术的非靶向代谢组学数据处理基础xcms1

Posted by omicsPie on 2018-05-31

基于质谱技术的非靶向代谢组学主要用于代谢物的概括分析(profiling), 获取样品中所含代谢物的含量信息,结合代谢物峰的注释,亦可以获取样品中所含代谢物类别。数据采集方式分为数据依赖型采集(Data Dependent Acquisition, DDA)和数据非依赖型采集(Data Independent Acquisition, DIA)两种。作为数据分析的基础,代谢物峰检测及不同样品代谢物峰对齐(peak detection & alignment)是数据处理的基础。目前有很多软件利用不同的算法可以实现此目标,其中最常用的有xcms, mzMine等。在此,我们介绍基于利用xcms包进行代谢物进行基础分析的方法,与诸位探讨其中数据处理的技巧。

xcms包的安装及要求

xcms是基于R语言设计的程序包(R package),可以通过Bioconductor进行安装。具体信息请参考https://bioconductor.org/packages/release/bioc/html/xcms.html

安装Bioconductor

1
2
source("https://bioconductor.org/biocLite.R")
biocLite()

安装xcms

1
biocLite("xcms")

安装数据及其他R包

1
biocLite(c("faahKO", "MSnbase"))

(此包包含正离子模式采集的LC-MS数据,已经转换为NetCDF数据格式,本文借用该数据以演示xcms进行基础数据处理)

原始数据转换

xcms支持xml、mzData、mzXML、mzML、netCDF等数据格式,因而在利用xcms进行数据处理之前,需要对于质谱采集的原始数据进行格式转换,一般可使用ProteoWizard等。

利用xcms进行峰检测及对齐

(Bioconductor上已有xcms数据处理的具体指导,参见https://bioconductor.org/packages/release/bioc/vignettes/xcms/inst/doc/xcms.html)
由于xcms3对xcms中的方法名称进行了调整,对于一致使用xcms进行数据处理的用户来说可能会造成一定的困扰,目前xcms3还继续兼容大多数旧的xcms方法,但随着程序的进一步更新,势必会逐步取代过去的方法,因而,大家还是需要尽快熟悉新的方法的使用。在此,为方便大家理解,本文对同一处理分别使用新旧方法进行演示。

调用R包

1
2
3
library(xcms)
library(faahKO)
library(MSnbase)

数据导入

1
2
3
4
5
6
7
8
9
10
## Get the full path to the CDF files
cdfs <- dir(system.file("cdf", package = "faahKO"), full.names = TRUE,
recursive = TRUE)
## Create a phenodata data.frame
pd <- data.frame(sample_name = sub(basename(cdfs), pattern = ".CDF",
replacement = "", fixed = TRUE),
sample_group = c(rep("KO", 6), rep("WT", 6)),
stringsAsFactors = FALSE)
raw_data <- readMSData(files = cdfs, pdata = new("NAnnotatedDataFrame", pd),
mode = "onDisk")

readMSData是MSnbase包中读取质谱数据的方法,返回结果为一个属于‘OnDiskMSnExp’类的对象。

利用centWave算法进行峰检测

1
2
3
4
5
6
7
########################
# xcms 3 new methods
cwp <- CentWaveParam(peakwidth = c(30, 80), noise = 1000)
xdata <- findChromPeaks(raw_data, param = cwp)
########################
# xcms old methods
xdata <- xcmsSet(cdfs, method = 'centWave', peakwidth = c(30, 80), noise= 1000)

findChromPeaks是xcms中用于进行峰检测的新方法,输入值为’OnDiskMSnExp’对象和峰检测参数对象,CentWaveParam用以创建’CentWaveParam’对象,该对象设置使用’centWave’算法进行峰检测时所需要的参数,其中比较常用的参数如下:

  • ppm – 峰检测时MS1的m/z tolerance,以ppm为单位
  • peakwidth – 长度为2的向量,设置峰检测时峰宽范围,事实上该参数对应的每个峰可以跨越多少个质谱检测的scan,而非多少秒
  • snthresh – 峰检测时信噪比要求
  • return.type – 返回数据类型,可以根据要求返回’XCMSnExp’类数据(默认)、传统的’xcmsSet’类以及’list’

xcmsSet是xcms中可以用于峰检测的传统方法,使用method参数设置峰检测算法,另外根据不同的峰检测算法可以设置该算法需要的参数,详情请参考xcms官方文档。其中’centWave’算法所对应的参数与’CentWaveParam’设置基本一致。

峰检测时除了可以使用centWave算法外,还可以使用其他算法,如’centWaveWithPredIsoROIs’、‘massifquant’、‘matchedFilter’、‘MSW’等,分别对应’CentWavePredIsoParam’、‘MassifquantParam’、‘MatchedFilterParam’、'MSWParam’参数设置,详情请参考xcms官方文档或者使用R help

峰对齐及分组(peak alignment & grouping)

同一代谢物在不同样品的流出时间会略有差异,因而对于峰检测的结果需要进行对齐(alignment)并将不同样品中的统一代谢物分到各自可以表征该代谢物的峰组(peak group)中(代谢组学中一般成为feature),从而进一步比较不同样品间统一代谢物的含量。通常我们可以使用’obiwarp’算法进行peak alignment,然后利用’density’算法进行peak grouping.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
########################
# xcms 3 new methods
## Correspondence: group peaks across samples.
pdp <- PeakDensityParam(sampleGroups = xdata$sample_group,
minFraction = 0.8)
xdata <- groupChromPeaks(xdata, param = pdp)
## Now the retention time correction.
pgp <- PeakGroupsParam(minFraction = 0.85)
## Get the peak groups that would be used for alignment.
# (grouping with 'peakgroup' method)
xdata <- adjustRtime(xdata, param = pgp)
# otherwise, one can also use 'Obi-warp' method for alignment
xdata <- adjustRtime(xdata, param = ObiwarpParam(binSize = 0.6))
## Grouping with RT corrected peaks
pdp <- PeakDensityParam(sampleGroups = xdata$sample_group,
minFraction = 0.4, bw = 20)
xdata <- groupChromPeaks(xdata, param = pdp)
########################
# xcms old methods
xdata <- xcms::group(xdata, minfrac = 0.8)
xdata<- retcor(xdata, method = 'peakgroups', plottype = 'deviation')
# or
xdata<- retcor(xdata, method = 'obiwarp', plottype = 'deviation', profStep = 0.6)
xdata<- xcms::group(xdata, bw = 20, minfrac =0.85, minfrac = 0.4)

峰补齐(gap filling)

对于峰检测过程中会有部分feature在某些样品中未检出对应代谢物峰的清醒,xcms可以根据已检出feature的信息,在相应样品中强行提取EIC信息,从而计算该代谢物在该样品中的含量信息,我们一般称之为filling gaps

1
2
3
4
5
6
########################
# xcms 3 new method
xdata <- fillChromPeaks(xdata)
########################
# xcms old methods
xdata <-fillPeaks(xdata)

如此,对于一组代谢物样品的峰检测已经全部完成。

对比xcms用于峰检测的新方法和就方法,我们可以发现新方法在命名方面更加直白,可以根据方法名称直接了解该方法所使用的算法,而在以前的峰检测方法中,这些算法均整合在数据处理的过程中。两种方式格局优劣,新方法意义明确,但是在处理时需要更多的参数设置过程,而旧方法数据处理过程更加简洁,但需要对xcms熟练度要求较高。

预告

接下来我们会介绍如何从峰检测结果中提取需要的信息以用来进行下一步的统计分析