介绍

该文档用来介绍MetProcesser的基本使用方法,使用MetProcesser自带的demo data进行演示。

(1)安装MetProcesser

MetProcesser代码存放在Github上,可以直接从github上下载安装,首先需要安装R包:devtools。
 install.packages("devtools")
 library(devtools)
 install_github("jaspershen/MetProcesser")

(2)观看MetProcesser的帮助文档

help(package = "MetProcesser")

(3)准备数据

请将一级数据,二级数据以及数据信息(使用demo data)存放在某个文件夹中,如下图所示:
1. data.csv为数据,行为峰,列为样品。注意必须包含有“name”(峰的名字),“mz”(质核比)和“rt”(保留时间信息)信息,且列名必须为“name”,“mz”和“rt”。还可以有其他峰的性质,如“adducts”(加合物信息),“isotopes”(同位素信息)等,其他为样品和QC名字。样品的命名如果有需要隔断的地方,请使用“.”,不要使用“_”,“-”等,开头请勿使用数字。例如,“A210.a”为有效命名,而“123”,“A123-1”为无效命名。并且请注意必须保证data中和sample.information中的样品名完全一样。如下图所示:
2. sample.information.csv为样品信息,第一列为“sample.name”,是样品和QC的名字,注意该名字必须和“data”中的样品名和QC名保持完全一致。第二列为“injection.order”,为样品和QC的进样顺序。第三列为“class”,用来注明每个样品是“QC”或者“Subject”,注意大小写。第四列“batch”,注明每个样品的批次信息。第五列为样品的分组情况,如“control”,“case”,QC样品仍然标注为“QC”。如下图所示:
3. peak identification为可选项,如果数据没有鉴定信息,需要使用QC的鉴定信息与一级信息通过mz和RT匹配进行鉴定,可以建立该文件夹,然后将二级鉴定信息放在此文件夹中,注意每个二级鉴定数据后一定要加上“ms2”的标志。如下图所示:

(4)开始数据的前处理

使用MetProcesser自带的数据进行练习。
(1)设置路径
##demo directory
data(data, package = "MetProcesser")
data(sample.information, package = "MetProcesser")
data(ms2_50_300, package = "MetProcesser")
data(ms2_50_1200, package = "MetProcesser")
data(ms2_290_600, package = "MetProcesser")
data(ms2_590_900, package = "MetProcesser")
dir.create("Demo for MetProcesser")
setwd("Demo for MetProcesser")
path <- file.path(getwd(), "peak identification")
dir.create(path)
write.csv(data, "data.csv", row.names = FALSE)
write.csv(sample.information , "sample.information.csv", row.names = FALSE)
write.csv(sample.information , "new.group.csv", row.names = FALSE)
write.csv(ms2_50_300, file.path(path, "ms2_50_300.csv"), row.names = FALSE)
write.csv(ms2_50_1200, file.path(path, "ms2_50_1200.csv"), row.names = FALSE)
write.csv(ms2_290_600, file.path(path, "ms2_290_600.csv"), row.names = FALSE)
write.csv(ms2_590_900, file.path(path, "ms2_590_900.csv"), row.names = FALSE)
(2)读取数据
MetFlowData <- ImportData(data = "data.csv",
                          sample.information = "sample.information.csv",
                          polarity = "positive")
MetFlowData是一个标准的在MetProcesser软件中进行数据处理的类,可以使用下列方式直接观察数据信息。
MetFlowData
(3)缺失值的筛选和补齐(如果数据没有缺失值可以跳过该步骤)
首先使用函数MVOverview观察数据的缺失值情况。
MVOverview(MetFlowData = MetFlowData, path = "MV overview")
会建立一个新的文件夹,命名为“MV overview”,如下图所示:
“MV overview”包含每个batch的缺失值分布情况,如下图所示:
使用函数MVFilter对数据进行缺失值筛选。
MetFlowData <- MVFilter(MetFlowData = MetFlowData,
                         obs.mv.per.cutoff = 0.5,
                         var.mv.per.cutoff = 0.5,
                         path = "MV filter")
MVfilter根据每个峰以及每个样品的缺失值的比例进行筛选,默认如果峰(在QC或者subject中)或者样品中缺失值的比例超过50%,则该峰或样品将被去除掉,如果没有峰或者样品满足条件,则运行结果如下图所示:
然后对数据进行缺失值补齐。
MetFlowData <- MVimputation(MetFlowData = MetFlowData,
                            ##MV imputation method
                            imputation.method = "knn",
                            #knn parameters
                            k = 10,
                            rowmax = 0.5,
                            colmax = 0.8,
                            maxp = 1500)
(4)零值的筛选
首先使用函数ZeroOverview观察数据的零值分布情况。
ZeroOverview(MetFlowData = MetFlowData, path = "Zero overview")
会建立一个新的文件夹,命名为“Zero overview”,如下图所示:
“Zero overview”包含每个batch的零值分布情况,如下图所示:
使用函数ZeroFilter对数据进行零值值筛选。
MetFlowData <- ZeroFilter(MetFlowData = MetFlowData,
                         obs.zero.per.cutoff = 0.5,
                         var.zero.per.cutoff = 0.5,
                         path = "Zero filter")
Zerofilter根据每个峰以及每个样品的零值的比例进行筛选,默认如果峰(在QC或者subject中)或者样品中零值的比例超过50%,则该峰或样品将被去除掉,如果没有峰或者样品满足条件,则运行结果如下图所示

(5)标出QC中的outlier(使用PCA score plot)
使用QCOutlierFinder寻找QC中的outlier
qc.outlier.data <- QCOutlierFinder(MetFlowData = MetFlowData,
                         CI = 0.95,
                         path = "QC outlier finder")
MetFlowData <- qc.outlier.data[["MetFlowData"]]
新建立一个文件夹“QC outlier finder”, 里面包含了每个batch中的QC outlier。如下图所示:
处于PCA score plot95%置信区间以外的认为是outlier,并且被标记为红色。本例中没有outlier。
(6)使用MetabolitePlot观察每个feature在不同batch中的变化,如果只有一个batch可以跳过该步骤
MetabolitePlot(MetFlowData = MetFlowData,
              path = "metabolite plot before integration")
(7)对数据进行normalization,默认为SVR normalization。
MetFlowData <- DataNormalization(MetFlowData = MetFlowData,
                                method = "svr",
                                threads = 2)
新建立一个文件夹“Normalization result”, 里面包含了每个batch中的normallization result。如下图所示:
每个batch分别进行normalization
每个batch的normalization结果如下图所示:
(8)标出样品中的outlier(使用PCA score plot)
使用SubjectOutlierFinder寻找样品中的outlier
subject.outlier.data <- SubjectOutlierFinder(MetFlowData = MetFlowData,
                         CI = 0.95,
                         path = "Subject outlier finder")
MetFlowData <- subject.outlier.data[["MetFlowData"]]
新建立一个文件夹“Subject outlier finder”, 里面包含了每个batch中的subject outlier。如下图所示:
处于PCA score plot 95%置信区间以外的认为是outlier,并且被标记为红色。
(9)下面开始进行物质鉴定(已经鉴定过的可以省略过这一步)
MetFlowData <- PeakIdentification(MetFlowData = MetFlowData,
                               ##parameters for matching
                               mz.tolerance = 25,
                               rt.tolerance = 180)
在“peak identification”文件夹中新建立一个文件夹“matching result”, 里面包含了鉴定结果。
而“identification.information.txt”则包含了一些鉴定结果信息。
(10)使用BatchEffectOverview观察batch effect,如果只有一个batch可以跳过该步骤
BatchEffectOverview(MetFlowData = MetFlowData,
                   path = "Batch effect before integration")
分别使用QC,subject的PCA score plot以及QC的total intensity分布来展示batch effect:

(11)使用RSDoverview观察RSD分布
RSDoverview(MetFlowData = MetFlowData,
              path = "RSD overview before integration")
(12)利用QC进行不同batch之间的整合,如果只有一个batch可以跳过该步骤
MetFlowData <- DataIntegration(MetFlowData = MetFlowData)
(13)使用BatchEffectOverview观察整合之后batch effect,如果只有一个batch可以跳过该步骤
BatchEffectOverview(MetFlowData = MetFlowData,
                   path = "Batch effect after integration")
(14)使用MetabolitePlot观察整合之后每个feature在不同batch中的变化,如果只有一个batch可以跳过该步骤
MetabolitePlot(MetFlowData = MetFlowData,
              path = "metabolite plot after integration")
(15)使用RSDoverview观察RSD分布
RSDoverview(MetFlowData = MetFlowData,
              path = "RSD overview after integration")
(16)使用DataOverview对处理之后的数据进行一个概览
DataOverview(MetFlowData = MetFlowData,
             feature.distribution = TRUE,
             path = "Data overview")
“Data overview.txt”记录了数据的一些基本情况
“Data overview_RT vs mz vs intensity.pdf”展示了峰的分布
(17)将数据输出为csv格式。
OutputMetFlowData(MetFlowData = MetFlowData,
                  data.name = "data_after_pre",
                  subject.info.name = "subject.info",
                  qc.info.name = "qc.info",
                  path = NULL)
数据会输出为“data_new.csv”,“subject.info.csv”和“qc.info.csv”。

(5)开始数据的前处理

数据前处理结束之后,可以进行简单的统计分析。
(1)首先给与正确的分组信息,如果对于原“sample.information.csv”中的分组信息不满意,可以使用函数ReChangeGroup给与数据新的分组信息,在原来的“sample.information.csv”中修改“group”信息,然后重新命名为“new.group.csv”,放在文件夹中。
MetFlowData <- ReChangeGroup(MetFlowData = MetFlowData)
(2)对数据进行PCA分析
PCAanalysis(MetFlowData = MetFlowData,
            QC = TRUE,
            scale.method = "auto",
            path = "PCA analysis")
(3)对数据进行PLS analysis
PLSanalysis(MetFlowData = MetFlowData,
                   #used data
                   scalemethod="auto",
                   path = "PLS analysis")
结果存放在“PLS analysis”中。
MetFlowData <- ReChangeGroup(MetFlowData = MetFlowData)
(4)对二分组的数据计算fold change
MetFlowData <- FoldChange(MetFlowData = MetFlowData,
                          to = c("case", "control"),
                          ratio = "median")
(5)对二分组的数据差异性分析
MetFlowData <- UnivariateTest(MetFlowData = MetFlowData,
                              test.method = "t",
                              adjust.method = "fdr")
(6)根据fold change和p value筛选生物标志物
MetFlowData <- MarkerSelection(MetFlowData = MetFlowData,
                               foldchange = "foldchange",
                               p = "p",
                               foldchange.cutoff = c(4/3, 3/4),
                               p.cutoff = 0.05,
                               path = "marker selection")
(7)画火山图
VolcanoPlot(MetFlowData = MetFlowData,
            foldchange = "foldchange",
            p = "p",
            col = c("black", "firebrick1"),
            foldchange.cutoff = c(4/3, 3/4),
            p.cutoff = 0.05,
            path = "marker selection")
(8)将选到的marker变化画出来
MarkerShow(MetFlowData = MetFlowData,
           beeswarm = T,
           path = "marker selection")
(9)输出最后的数据为csv格式
OutputMetFlowData(MetFlowData = MetFlowData,
                  data.name = "data_after_Stat",
                  subject.info.name = "subject.info",
                  qc.info.name = "qc.info",
                  path = NULL)

可以直接使用函数MetPre对数据直接进行所有的前处理

MetPre(#ImportData para
       data = "data.csv",
       sample.information = "sample.information.csv",
       polarity = "positive",
       #DataNormalization
       method = "svr",
       threads = 2)

可以直接使用函数MetStat对数据直接进行所有统计分析

  MetStat(MetFlowData = MetFlowData,
          new.group = TRUE,
          #PCA analysis para
          QC = TRUE,
          scale.method = "auto",
          #FoldChange para
          to = c("case", "control"),
          ratio = "median",
          #UnivariateTest para
          test.method = "t",
          adjust.method = "fdr",
          #MarkerSelection para
          foldchange = "foldchange",
          p = "p",
          foldchange.cutoff = c(4/3, 3/4),
          p.cutoff = 0.05,
          #MarkerShow para
          beeswarm = TRUE)