ChAMP包学习(2)

ChAMP Pipeline

image.png
1. 加载数据

加载数据始终是第一步。ChAMP提供了一个加载函数,用于从.idat文件(其中包含pd文件(Sample_Sheet.csv))获取数据。旧版本的load()函数主要利用minfi从.idat文件加载数据,但是现在我们提供了一种新的方法“ChAMP”来读取数据,但是这两种方法都可以返回相同的对象,除了老版本还会返回rgSet和mset对象,这两种对象都可以作为在champ.norm()中SWAN和FunctionalNormliazation归一化方法的输入。

默认情况下,这会从当前工作目录加载数据,在这个目录中应该有所有.idat文件和一个示例表。The sample sheet currently needs to be a.csvfile as came with your results following hybridization

默认方法为ChAMP,其不会返回rgSetmset对象

library("ChAMP")
testDir=system.file("extdata",package="ChAMPdata")
myLoad <- champ.load(testDir,arraytype="450K")
image.png

champ.load()函数用于从idat文件自动加载数据,并自动过滤掉可能影响分析结果的snp,该SNP 列表是由Zhou’s Nucleic Acids Research paper in 2016产生的, 是专门为450K和EPIC设计的,也考虑了人口差异。因此,对于450k芯片数据,在对低质量探针进行滤波之前,数据集将包含485512个探针。对于EPIC芯片数据,在对数据集的探针进行过滤之前,将包含867,531个探针。


目前默认的加载方法是ChAMP。您可以在champ.load()中设置“method”来使用经典的minfi方法。注意,ChAMP .load()中的“ChAMP”方法只是ChAMP .import()和ChAMP .filter()的组合。
使用经典的minifi方法,该方法会返回msetrgSet对象

myLoad2=champ.load(testDir,arraytype="450K",method ="minfi")
image.png

当然,如果我们对champ.load()返回的结果不满意,比如我们希望获得 beadcount, detection P matrix, or Meth UnMeth matrix,您可以使用champ.import()来生成它们。

library("ChAMP")
testDir=system.file("extdata",package="ChAMPdata")
mydata=champ.import(testDir)

image.png

我们可以看到,没有进行筛选的探针数目是485512

mydata=champ.import(testDir)
myfilter <-champ.filter(beta=mydata$beta,
pd=mydata$pd,detP=mydata$detP,beadcount=mydata$beadcount)
image.png
image.png

可以看到经过filter之后,二者保留的探针数目相同

所以 champ.load=champ.import+champ.filter

2.检查pd文件

检查pd文件(Sample_Sheet.csv)非常重要。大多数pd文件格式很相似,但他们的最有价值的信息并不总是存储在同一列,例如,对于大多数pd文件,Sample_Group意味着被研究的表型组信息,但在某些pd文件,类似的信息可能存储在列命名为 “Diagnose” or “CancerType”,所以用户必须理解他们的pd文件来实现一个成功的分析

myLoad$pd
image.png

我们可以看到,Sample_Group包含两个表型:C和T,这是我们想要比较的。在这个数据集中,C表示“对照”,T表示“肿瘤”。

3.过滤数据

这样就把数据全部读入了,其中会做一部分检测,比如低质量的CpG位点,也会做一些过滤,比如位于性染色体上的CpG位点会被删掉,比如SNP位点(就是基因突变位点)附近的CpG位点会不稳定等等
ChAMP provides a comprehensive filtering function called champ.filter() which can take any data matrix as input (beta, M, Meth, UnMeth, intensity) and do filtering on it。
champ.filter()不调用任何特定的对象或类结果,也不需要IDAT文件,只要有一个beta矩阵,就可以进行过滤。
在champ.filter()中,由于一些探针和样品可能会因为质量不高而被移除,所以经过过滤的数据中可能仍然存在NA。因此,我们在函数中提供了一个参数autoimpute,在NAs仍然存在的情况下,对剩余探针进行imputation,默认情况先为True。实际上,imputation的工作是由champ.impute()函数完成的,读者可以通过该函数了解更多信息
当你只有beta矩阵,可以这样进行,pd=NULL这个设置很重要

beta=mydata$beta
myfilter <- champ.filter(mydata$beta,pd=NULL)

对于某些过滤方法,必须提供额外的数据,例如,如果希望使用检测p值执行过滤,就需要提供检测p值矩阵。此外,如果希望基于珠计数执行过滤,则需要提供珠计数信息。如果您使用ChAMP .load()函数的默认方法ChAMP读取IDAT文件,返回的结果中应该包含珠数信息。而且champ.filter()的目的是可以从相同的数据集做过滤多种类型的数据,比如beta matrix, M matrix, intensity matrix from same .idat file,你可以用champ.filter过滤他们,与此同时,这将使他们在未来的分析中保持一致。

下面是在champ.load()和champ.filter()期间执行的过滤步骤。

  • 1 First filter is for probes with detection p-value (< 0.01)

This utilises detection p-value stored in .idat file. champ.import() would read these information and form them into data frame. For each probe,if it’s p value is less then 0.01, it would be considered as failed probe. A failed Samples result will be printed to the screen, showing the fraction of failed probes per sample.If any of these values is high (>0.1), you may want to consider removing that sample from the analysis and rerun it. Previously we found that in many cases, only one or two samples in a big data set are not qualifed for analysis, and they may have 70% or even 80% of failed probes. So if we only do filtering on probes, about 80% of probes will be masked, so we developed a new filtering system on both sample and probe quality. If a certain sample’s failed probes’ ratio is above a particular threshold (default = 0.1), then this sample will be discarded, and filtering of probes will be carried on the remaining samples. The threshold of sample and probe can be controlled by the parameter SampleCutoff and ProbeCutoff separately.

  • 2 Second, ChAMP will filter out probes with <3 beads in at least 5% of samples per probe

  • 3 Third, ChAMP will by default filter out all non-CpG probes contained in your dataset.

  • 4 Fourth, by default ChAMP will filter all SNP-related probes

SNP列表来源于周在2016年的核酸研究论文。请注意,如果您知道您的数据来自哪个种群,那么您可以选择特定的种群进行筛选。否则ChAMP将使用Zhou提供的一般推荐探针进行过滤。您只需要分配“population”参数就可以实现这一点。

  • 5 Fifth, by default setting, ChAMP will filter all multi-hit probes. The multi-hit probe list comes from Nordlund’s Genome Biology Paper in 2013.

  • 6 Sixth, ChAMP will filter out all probes located in chromosome X and Y. This is also a default setting, but user can change it with filter XY parameter.


All above filterings are controlled by parameters in the champ.load()and champ.filter()function, and users may adjust them as they wish. Note that, though most ChAMP functions are supporting isolated beta matrix analysis, which means not relying on .idat files from the beginning, champ.load() can not perform filtering on beta matrix alone. For users have no .IDAT data but beta matrix and Sample_Sheet.csv, you may want perform filtering using the champ.filter() function and then use following functions to do analysis.

除了过滤功能外,我们还提供了一个功能CpG. gui(),让用户可以查看CpGs在染色体、CpG岛、TSS reagion上的分布情况。例如,这个函数可以用于任何CpGs列表,例如,在分析期间,每当您从DMR获得一个重要的CpG列表时,您可以使用以下函数检查CpG的分布

  • DMR Differentially Methylated Regions
  • DMP Differentially Methylated Positions
  • DMB Differentially methylated Blocks (EpiMod (a method for detecting differentially methylated gene modules derived from FEM package))
CpG.GUI(CpG=rownames(myLoad$beta),arraytype="450K")
image.png

这是一个演示CpG列表分布的有用函数。如果你得到一个DMP列表,你可以使用这个函数来检查你的DMP在染色体上的分布.

4 Further quality control and exploratory analysis

champ.QC()
champ.QC(Feature.sel = "SVD")

质量控制是保证数据集适合于下游分析的重要环节。qc()函数和QC.GUI()函数会绘制一些图形,方便用户检查数据的质量。通常会生成三个图,实际上就是生成了三个pdf文件


image.png

mdsPlot (Multidimensional Scaling Plot): 此图允许基于所有样本中最易变的前1000个探针可视化样本的相似性。在这个图中,样本是按样本组着色的。

densityPlot: The beta distributions for each sample; 我们可使用此图找出与其他样品有较大偏差或质量不佳的样品(如亚硫酸氢盐转换不完全)。注意:如果研究中包含甲基化或未甲基化对照样本,它也用于识别和确认。

dendrogram: 对于所有样本的聚类图,您可以选择不同的方法来生成这个图。There is a parameter Feature.sel="None" in champ.QC() function. 而“None”表示样本之间的距离将由所有探测直接计算(如果您直接在大型数据集上执行此操作,您的服务器可能会崩溃), “SVD”是指champ.QC()函数将使用SVD方法对beta矩阵进行反蜗壳,然后从“isva”包中仅基于EstDimRMT()方法选择重要成分。 然后根据这些成分计算样本之间的距离。

或者您可以像下面这样使用QC.GUI()函数,这可能是内存密集型的,所以在ChAMP中运行这个GUI函数时,请确保您有一个良好的服务器或计算机。


image.png

与champ.QC()相比,QC.GUI()将提供五个交互图。这些图如下:mdsPlot, type-I&II densityPlot, sample beta分布图,树状图,top1000 most variable CpG s heatmap。
用户可以很容易地与这些图进行交互,查看您的样本是否符合进一步分析的条件,并检查聚类结果和top CpGs。
Probe-Type-I&II图:数据集中i型和ii型探针的beta分布,可以帮助您检查数据集的标准化状态。

Top variable CpGs heatmap:该heatmap将选择大多数可变的CpGs,并根据这些位点的甲基化值创建一个heatmap。

你可能感兴趣的:(ChAMP包学习(2))