1.甲基化①ChAMP幫助文檔譯[上]-甲基化分析流程(The Chip Analysis Methylation Pipeline)
6.ChAMP流程說明
如前所述,用戶可以選擇單獨運行每個ChAMP函數,允許與其他流程集成或在每個步驟中保存結果。下面我們進一步詳細介紹每個函數。
6.1加載數據
加載數據始終是分析的第一步。ChAMP提供的加載函數是從.idat文件獲取數據(其中包含pd(表型)文件(Sample_Sheet.csv))。舊的champ.load()函數利用minfi包從.idat文件中加載數據,但現在我們提供了一種新的“ChAMP”方法來讀取數據。兩個加載方法都能有效地返回相同的對象,新版本還將返回rgSet和mset 對象,他們可以用作在Champ.norm()中的SWAN和FunctionalNormliazation方法的輸入。默認情況下,加載的是當前工作目錄中的數據,當前目錄中您應該含有所有.idat文件和sample sheet。sample sheet 需要是一個CSV文件。champ.load() 用于加載idat文件中的數據并自動過濾掉可能影響分析結果的SNP。SNP列產生于Zhou’s Nucleic Acids Research paper in 2016 (http://zwdzwd.github.io/InfiniumAnnotation),專為450K和EPIC設計,它也考慮到人口差異。因此,對于450k珠陣列數據,在過濾低質量探針之前,數據集將包括485,512個探針。而對于EPIC珠陣列數據,在過濾探測數據集之前,將包括867,531個探針。
目前,加載的默認方法是“ChAMP”。您可以在champ.load()中設置“method”來使用經典的minfi方式。請注意,champ.load()中的“ChAMP”方法僅僅是champ.import()和champ.filter()的組合。如果您對champ.load()返回的結果不滿意,想獲取beadcount,detection P matrix, Meth UnMeth matrix,也可以使用champ.import()來生成它們。
用戶可以調用以下代碼來加載數據集:
myLoad <- champ.load(testDir)
或者,用戶也可以從ChAMPdata包中的數據集對象testDataSet加載數據:
data(testDataSet)
檢查pd文件(Sample_Sheet.csv)很重要的一件事。大多數pd文件格式相似,但是它們最有價值的信息并不總是存儲在同一列中,例如,對于大多數pd文件,Sample_Group表示要研究的表型組,但是在某些pd文件中,可能存儲類似的信息在名為“Diagnose”或“CancerType”的列中,因此用戶必須很好地了解其pd文件以實現成功的分析。
myLoad$pd
## Sample_Name Sample_Plate Sample_Group Pool_ID Project Sample_Well
## C1 C1 NA C NA NA E09
## C2 C2 NA C NA NA G09
## C3 C3 NA C NA NA E02
## C4 C4 NA C NA NA F02
## T1 T1 NA T NA NA B09
## T2 T2 NA T NA NA C09
## T3 T3 NA T NA NA E08
## T4 T4 NA T NA NA C09
## Array Slide Basename filenames
## C1 R03C02 7990895118 Test450K/7990895118_R03C02 Test450K/7990895118_R03C02
## C2 R05C02 7990895118 Test450K/7990895118_R05C02 Test450K/7990895118_R05C02
## C3 R01C01 9247377086 Test450K/9247377086_R01C01 Test450K/9247377086_R01C01
## C4 R02C01 9247377086 Test450K/9247377086_R02C01 Test450K/9247377086_R02C01
## T1 R06C01 7766130112 Test450K/7766130112_R06C01 Test450K/7766130112_R06C01
## T2 R01C02 7766130112 Test450K/7766130112_R01C02 Test450K/7766130112_R01C02
## T3 R01C01 7990895118 Test450K/7990895118_R01C01 Test450K/7990895118_R01C01
## T4 R01C02 7990895118 Test450K/7990895118_R01C02 Test450K/7990895118_R01C02
正如我們所見,Sample_Group包含兩個表型:C和T。在該數據集中,C表示“Control”,T表示“Tumor”。
6.2過濾數據
ChAMP提供了一個全面的過濾函數champ.filter()
,可以將任何數據矩陣(beta,M,Meth,UnMeth,intensity)作為輸入,并對其進行過濾。 champ.filter()不需要任何特定的對象或類結果,也不需要一個IDAT文件,只要你有一個的beta矩陣,就可以完成過濾。在champ.filter()中,由于某些探針和樣本可能由于質量較差而被去除,所以在過濾數據中可能仍然存在NA。因此,如果仍然存在NAs ,我們在函數中提供了一個參數autoimpute
來對探針進行補缺失值。實際上,補缺失由champ.impute()函數完成,讀者可以學習該函數了解更多信息。
對于某些過濾方法,必須提供附加的數據,例如,如果要使用檢測P值執行過濾,則需要提供檢測P值矩陣。另外,如果要根據珠數(beadcounts)進行篩選,則需要提供珠粒(beadcount)數據。如果您使用champ.load()函數的默認方法“ChAMP”讀取IDAT文件,則返回結果中應包含珠粒(beadcount)信息。另外,champ.filter()被用為對同一數據集的多種類型的數據框(data frames)進行過濾,例如,您有同一.idat文件的beta矩陣,M矩陣,intensity 矩陣,您可以使用champ.filter()同時進行過濾。
首先,您必須輸入至少一個數據矩陣。
第二,如果你提供盡可能多的輸入矩陣,它們必須有完全相同rownames和colnames。例如,如果要同時對intensity 數據和M值進行過濾,則必須確保它們具有相同的名稱,否則ChAMP將假定它們是來自不同來源的數據框。那么,champ.filter()就會終止過濾。
由于在過濾過程中可能會刪除低質量的樣本(例如具有許多未檢測到的探針的樣本),因此確保您的pd文件中的Sample_Name標識符與數據矩陣的列名完全相同是很重要的
第四,如果要進行插補,則必須1.提供檢測P矩陣,β或M矩陣,2.并且參數ProbeCutoff不能為0,ProbeCutoff代表NA比率的閾值,3.探針的NA比率超過閾值則刪除該探針。如果這三個條件中的任何不滿足,那么champ.filter()會將autoimpute參數重置為FALSE,那么插補過程將不會被完成。
第五,如果你想通過珠粒(beadcount)過濾,你必須提供珠粒(beadcount),champ.import()函數將返回beads信息。或者,您也可以使用wateRmelon包中的beatcount函數來提取“minfi”方法的rgSet對象。
champ.filter()函數是champ.import()的后續過程,它是一個由ChAMP團隊編寫的新的加載函數。你可以像下方所示使用它:
myImport <- champ.import(testDir)
myLoad <- champ.filter()
上面的代碼中的champ.filter()的結果應該和舊的minfi方法產生的結果相同。
實際上在加載過程中,champ.load()函數也會做一些過濾。以下是在champ.load()和champ.filter()中執行的過濾步驟。
第一個過濾器用于過濾p值(<0.01)的探針。這利用了存儲在.idat文件中的檢測p值。champ.import()將讀取這些信息并將其轉換成數據框(frame)。對于每個探針,如果p值小于0.01,則將其視為失效探針。之后將會將failedSamples結果打印到屏幕上:顯示每個樣本失效的探針的比例。如果這些值中的任何一個值高(> 0.1),您可以考慮從分析中刪除該樣本。以前,我們發現在許多情況下,大數據集中只有一個或兩個樣本不能用于分析,它們可能具有70%甚至80%的失效探針。因此,如果我們僅對探針進行過濾,則大約80%的探針將被掩蔽,因此我們開發了一種新的過濾系統,既可以對樣品也對探針質量進行過濾。如果某個樣本的探針失效率高于特定閾值(默認= 0.1),那么該樣品將被丟棄,并對剩余的樣品進行探針的過濾。樣本和探針的閾值可以通過參數SampleCutoff和ProbeCutoff分別控制。
-
第二,ChAMP將在每個探針的至少5%的樣本中過濾出帶有< 3顆珠子的探針
可以使用filterBeads參數更改此默認值,也可以使用beadCutoff參數調整頻率。
第三,ChAMP將默認篩選出數據集中包含的所有非CpG探針。
第四,默認情況下,ChAMP將過濾所有與SNP相關的探針。SNP列表來自 Zhou’s Nucleic Acids Research paper in 2016(http://zwdzwd.github.io/InfiniumAnnotation) 。請注意,如果您知道您的數據來自哪個群體,您可以選擇特定群體進行篩選。否則,ChAMP將使用Zhou提供的一般推薦探針進行過濾。您只需要分配“population”參數即可實現此目的。
第五,默認情況下,ChAMP將過濾所有multi-hit探針。multi-hit探針列表來自于Nordlund的2013年“基因組生物學報” https://genomebiology.biomedcentral.com/articles/10.1186/gb-2013-14-9-r105。
第六,ChAMP將過濾出染色體X和Y中的所有探針。這也是默認設置,但用戶可以使用filterXY參數進行更改。
所有上述過濾由champ.load()和champ.filter()函數中的參數控制,用戶可以根據需要進行調整。請注意,盡管大多數ChAMP功能都支持單獨的beta矩陣分析,即不依賴于從頭開始處理.idat文件,champ.load()不能單獨完成beta矩陣的過濾。對于沒有.IDAT數據但卻擁有beta矩陣和Sample_Sheet.csv的用戶,您可以使用champ.filter()函數執行過濾,然后使用后續的函數進行分析。
除了過濾功能之外,我們還提供了一個函數CpG.GUI(),供用戶檢查CPGs其在染色體,CpG島,TSS重復上的分布。例如,該函數可以被用于任何CPGs list,比如您從DMR中獲得有意義的CpGs 列表,您就可以使用以下函數來檢查CpG向量的分布情況:
CpG.GUI(CpG=rownames(myLoad$beta),arraytype="450K")
這是一個用于展示您的CpG列表的分布的有用函數。如果您獲得DMP列表,您就可以使用此函數來檢查DMP在染色體上的分布情況。
6.3進一步的質量控制和探索性分析
質量控制是確保數據集適合下游分析的重要過程。champ.QC()函數和QC.GUI()函數將為用戶繪制一些圖來輕松的檢查其數據質量。通常情況下,將生成三個圖:
QC.GUI(beta=myLoad$beta,arraytype="450K")
mdsPlot(多維尺度分析圖):該圖展示在所有樣本中top 1000個最大可能突變的探針對應的值來可視化樣本間的相似性。樣本在該圖中根據樣品組著色。
densityPlot:每個樣本的beta分布; 用戶可以使用該圖來查找與其他樣本顯著偏差的樣品,這樣的樣品可能不具有良好的質量(例如不完全亞硫酸氫鹽轉化)。注意:如果對照樣品已包含在研究中,densityPlot也被用于鑒定和確認甲基化或非甲基化對照樣品)。
樹形圖:是對所有樣本的聚類圖,您可以選擇不同的方法來生成該圖。在champ.QC()函數中有一個參數
Feature.sel="None"
。而“無”表示樣本之間的距離將由所有探針直接計算(如果您直接在大數據集上執行此操作,則您的服務器可能會崩潰),“SVD”表示champ.QC()函數將使用SVD方法在beta矩陣上進行解卷積,然后用“isva”包中EstDimRMT()方法挑選重要組件。然后根據這些組件計算樣本之間的距離。
或者您可以使用如下的QC.GUI()函數,但這可能是挺占內存的,所以當您在ChAMP中運行此GUI功能時,請確保您具有良好的服務器或計算機。
QC.GUI(beta=myLoad$beta,arraytype="450K")
RR
與champ.QC()相反,QC.GUI()將提供五個交互圖。圖片如下:mdsPlot,I型和II型密度圖,樣本β分布圖,樹狀圖和前1000個最可變CpG的熱圖。用戶可以輕松地與這些圖進行交互,以查看樣品是否有足夠質量進行進一步分析,并檢查聚類結果和top CpGs。
Probe-Type-I&II圖:您的數據集中的Type-I和Type-II探針的beta分布,可以幫助您檢查數據集的歸一化狀態。
Top variable CpGs’ heatmap:該熱圖將選擇最可能變化的CpG,并根據這些位點的甲基化值創建熱圖。
6.4標準化
在Illumina beadarrays上,探針有兩種不同的設計(稱為I型和II型),具有不同的雜交化學特性,這意味著來自這兩種不同設計的探針的值將表現出不同的分布。這種差異是由I型和II型探針的技術因素引起的,與生物學特性(如CpG密度)所引起的變化無關。I型和II型甲基化分布之間最顯著的差異在于II型分布表現出較小的動態范圍。在監督分析中,這可能導致I型與II型探針的選擇有偏差。對于DMR檢測,I型和II型探針可能落在同一區域(顯然對此進行調整至關重要)。一般來說,建議對II型探頭偏置進行調整,您可以使用champ.norm() 來實現這一調整。
在champ.norm()中,我們提供了四種方法來進行這種II型探針歸一化:BMIQ ,SWAN ,PBC 和Functional Normliazation 。每種方法都有一些關鍵的區別,用戶可以閱讀相關文章,選擇最適合的分析方法(BMIQ ,SWAN ,PBC 和Functional Normliazation的參考文獻分別是幫助文檔參考文獻的第 3 、1、2、4 篇)。
目前,FunctionalNormalization需要rgSet,SWAN需要從IDAT文件生成的mset和rgSet對象(如minfi包描述中所述)。因此,FunctionalNormliazation和SWAN歸一化方法僅適用于“minfi”加載方法的分析。
請注意,BMIQ功能已更新到版本1.6,這將為EPIC陣列數據提供更好的標準化。我們注意到,BMIQ可能不會為某些樣品提供輸出(如果樣品的甲基化分布明顯偏離3-state beta-mixture 分布,或者因為樣品質量差)。BMIQ函數現在可以并行運行,因此如果您的計算機有多個內核,您可以在函數中設置參數“cores”來加速函數的運行。如果設置參數PDFplot=TRUE
,BMIQ函數的圖將保存在輸出路徑上。
執行標準化的代碼如下:
myNorm <- champ.norm(beta=myLoad$beta,arraytype="450K",cores=5)
標準化后,您可以使用QC.GUI()函數再次檢查結果; 記住要將QC.GUI()函數中的beta參數設置為“myNorm”。
6.5 SVD圖
由Teschendorff (參考文獻第七篇) 實現的奇異值分解方法(SVD)是評估甲基化數據中重要變異組成部分的數量和性質的有力工具。這些變異組分可能與感興趣的生物學因素相關,但通常也與技術因素(例如批量效應)相關。我們強烈建議用戶盡可能收集所分析樣品的信息(例如雜交日期,收集樣本的季節,流行病學信息等),并在做SVD相關分析時包括所有這些因素。要是你的樣本已從.idat文件加載,在設置參數RGEffect = TRUE時,champ.SVD()函數會對beadchip上的18個內部探針進行controls(包括亞硫酸氫鹽轉換效率)。
與舊版本的ChAMP包相比,當前版本的ChAMP . svd()將檢測所有有效的因素進行分析,這意味著該plot包含兩個以下條件
協變量不與name、Sample_Name或File_Name相關聯
協變量至少包含兩個值(for example, for ‘BeadChip ID’ to be tested as a covariate, samples from at least two different BeadChips must be included in the study)
champ.SVD()函數檢測您的pd(表型)文件中的所有有效協變量。如果您有一些需要分析的獨特協變量,您可以將它們整合到您的pd文件(表型文件)中,讓champ . svd()來測試與數據集中最顯著的變化組件的關聯。請注意,champ.SVD()僅使用pd文件形式的表型數據。所以,如果你有你自己的協變量,你想用你當前的pd文件進行分析,請將cbind()你的協變量和myLoad $ pd一起使用,然后使用這個對象作為champ.SVD()函數的pd參數的輸入。
注意,對于不同類型的協變量(分類和數字),champ.SVD()使用不同的方法來計算協變量和組分之間的significance (Krustal.Test和線性回歸)。因此,請確保您的pd對象是數據框(data frame),數字協變量被轉換為“numeric”類型,而分類協變量被轉換為“factor”或“character”類型。如果您的年齡協變量被指定為“character”,則Champ.SVD功能將不會檢測(因為它應該要被指定為numeric分析)。因此,我們建議用戶非常清楚他們的數據集和pd文件。
當champ.SVD()正在運行時,所有檢測到的協變量將被打印在屏幕上,以便用戶可以檢查您想要分析的協變量是否正確。結果是與協變量信息相關的主成分的熱圖(保存為SVDsummary.pdf)。在champ.SVD()中,我們使用來自于isva包的隨機矩陣理論(Random Matrix Theory)來檢測潛在變量的數量。如果我們的方法檢測到20個以上的組件,我們將僅選擇前20個。在熱圖中,較暗的顏色代表更顯著的p值,表明SVD分量與感興趣因素之間的相關性更強。如果SVD分析顯示技術因素占變異的很大一部分,那么有必要使用其他歸一化方法(如ComBat),可以幫助消除這種技術變異。
您可以使用以下代碼生成SVD圖:
champ.SVD(beta=myNorm,pd=myLoad$pd)
上圖是在我們的示例的 450K陣列數據集上生成的。由于該數據集中只有8個樣本,所以最終的headmap看起來并不復雜。下面我們使用GSE40279 生成的另一個圖,這個數據包含656個樣本和一個復雜的pd文件,包括年齡和種族等協變量。下面我們將展示使用champ.SVD()函數生成的SVD圖的結果。
在上圖中,Age是一個數字變量,而其他因素是分類因素。較暗的塊意味著去卷積分量和協變量之間的相關性更強。
6.6批效應校正
這個函數實現了ComBat歸一化方法。sva 這個R包用于實現此功能。ComBat在ChAMP包中被明確定義用以矯正批次效應。進階用戶可以查閱sva幫助文檔實現ComBat對其他批次效應的矯正。您需要在函數中設定參數batchname=c("Slide")
以調整它們。
請注意,champ.runCombat()將從批次名稱中提取批次,因此請確保您完全了解你的數據集。先前版本的champ.runCombat()會自動地設定
Sample_Group
為需要被分析的協變量,但是現在我們添加了一個參數variablename
,以便用戶可以將自己的協變量用于分析,因此,對于一些數據集,其疾病表型是非 Sample_Group,請記住設定variablename參數。
ComBat算法使用經驗Bayes方法來校正技術變量。如果ComBat直接應用于beta值,輸出可能不在0和1之間。由于這個原因,ChAMP 在做ComBat調整之前先logit變換beta值,然后在ComBat調整之后計算反向logit轉換。如果用戶選擇使用M值,請分配logitTrans=FALSE。
在函數champ.runCombat()中,程序將自動檢測所有將被矯正的有效因素并在屏幕上列出它們,以便用戶可以檢查是否存在要糾正的批次。然后如果用戶分配的批處理名稱正確,則該函數將開始批量修改。
在最新版本中,champ.runCombat()也會檢查用戶的批次和變量是否相互聯系。 Confounding意思是 你的變量的一個表型的所有樣本都來自于你批次里的特定一個表型 ,這意味著,如果您校正批次,您的變量包含的一些信息也將失去,這種情況在SVA包的Combat函數中是不允許出現的,這就是我們事先要做檢查的原因。
您可以使用以下代碼進行校正批次:
myCombat <- champ.runCombat(beta=myNorm,pd=myLoad$pd,batchname=c("Slide"))
如果您樣本量大,執行ComBat函數可能是一個非常耗時的過程。校正后,您可以使用champ.SVD()函數來檢查你的校正結果。
6.7差示甲基化探針
差異化甲基化探針(DMP)是甲基化分析中最常見的輸出。用戶可以使用champ.DMP()函數來計算差異甲基化,并且可以使用DMP.GUI()來檢查結果。
champ.DMP()函數使用limma包計算差異甲基化的p值(用到線性模型)。我們最新的champ.DMP()函數將支持數字變量,如年齡,和包含兩個以上表型的分類變量,如“tumor”,“metastasis”,“control”。如果我們的函數檢測到像年齡這樣的數字變量,則會對每個CpG位點進行線性回歸,找到您的協變量相關CpGs,將之看做年齡有關的CpGs。當檢測到分類變量時,champ.DMP()將在您的協變量中做兩兩表型之間的對比。假設你有“tumor”,“metastasis”,“control”這些協變量,那么champ.DMP()將比較“tumor–metastatic”, “tumor-control”, and “metastatis-control”。每個比較將返回一個包含顯著差異甲基化探針的數據框(data frame)。
champ.DMP()的輸出包括兩組之間的P值、t統計量和平均甲基化差異(被標記為logFC,(因為他和基因表達分析中的log fold-change很相似 ))的數據框。它還包括每個探針的注釋,樣本組的平均β值和比較中使用到的兩組的delta beta值(delta值與logFC類似,我們在這里保留它是因為舊版本ChAMP有使用到它)。
在我們最新版本的champ.DMP()中,如果您有年齡或時間序列數據的協變量,numeric variables are fully support not。然而,更進階的用戶可以使用limma的其他設置運行函數,并使用DMR hunter的輸出(包括所有探針及其p值)。
用戶可以使用以下代碼獲取DMP(我們仍然使用的是示例的450K測試數據):
myDMP <- champ.DMP(beta = myNorm,pheno=myLoad$pd$Sample_Group)
我們可以檢查champ.DMP()的結果(如下)。記住,在champ.DMP()中,每個返回的結果將存儲在列表中的元素中。列表中的每個元素是在兩種表型之間檢測到的DMPs的一個結果。如果您的協變量是數字變量,則返回的數據框名稱為“NumericVariable”。如果您的協變量是分類變量,返回的名稱將為“PhenoA_to_PhenoB”,其中“PhenoA”和“PhenoB”是您的兩種表型名稱。
head(myDMP[[1]])
在新版本的ChAMP中,我們提供了一個GUI界面,用于檢查從上述代碼生成的myDMP的結果。您只需要提供champ.DMP(myDMP)的“unmodified”結果、您用于生成DMP的原始beta矩陣和您要分析的協變量。DMP.GUI()函數將自動檢測您的協變量是數字還是分類。如果您的協變量是數字,DMP.GUI()將繪制每個CpG的散點圖,顯示beta值的趨勢以及您的協變量。如果您的協變量是癌癥/正常的分類變量,則DMP.GUI()將繪制顯著差異甲基化CpG的boxplot。您可以使用以下代碼打開DMP.GUI()函數。
DMP.GUI(DMP=myDMP[[1]],beta=myNorm,pheno=myLoad$pd$Sample_Group)
# myDMP is a list now, each data frame is stored as myDMP[[1]], myDMP[[2]], myDMP[[3]]...
左側面板包含了卡CPGS顯著性的閾值參數。目前僅支持兩個參數:P值和abs(logFC)。用戶可以設置這兩個值,然后按“Submit”在右側生成顯顯著的CpG表。右側窗口是顯著CpGs表,所有信息都包含在內,表格可以按列排列。
第二個選項卡提供了您通過控制左側面板的cutoff值生成的所有顯著CpGs的熱圖。請注意,此熱圖的行和列已經進行了層次聚類。
第三個面板提供了每個CpG feature 占比的barplot(例如TSS200,TSS1500,body,opensea,shore),以及hyper和hypo CpGs的cgi摘要信息。您可以點擊圖例中的標記來關閉或打開某些bar。
第四個選項卡左側面板上由Gene
這個參數控制。您可以選擇一個基因名稱(默認為NFIX),然后按“submit”。然后這個基因的plot圖將被繪制在上方的圖中。請注意,這里的x軸不是每個CpG的實際MAPINFO。每個CpG之間的距離是相同的。每種表型有兩種線條,實線代表平均值圖,虛線表示Loess line,用戶可以通過點擊圖例上的標記來關閉或打開它們。以下是每個CpG的功能和cgi信息。在該標簽的底部是從維基提取的基因信息,也是由左側的基因參數控制。
第五個選項卡包含兩個圖。頂部是通過左側cutoff參數選擇的顯著CpGs的前70個基因的富集圖。每個bar中的數字表示在該基因中包含多少高或低差異的甲基化CpG。用戶可以使用這個圖來找到感興趣的基因,然后使用第4個選項卡繪制這些基因。在此選項卡的底部,是由左側面板上的參數控制的某些CpG的boxplot。
請注意,這里的所有圖可以放大或縮小。并可直接下載。您甚至可以更改瀏覽器的形狀以調整繪圖大小,然后以不同的分辨率下載。
6.7.1 DMP.GUI對數值變量的影響
以上DMP.GUI圖是由我們的示例數據450K陣列數據生成的。由于這是一個分類協變量數據集,下面我們將展示數值協變量數據集的部分結果:GSE40279。在這里,我們將做完整的分析,不過只展示了GSE40279數據集中的champ.DMP()檢測到的與Age相關的CpGs的DMP.GUI()網頁。請注意,在加載,過濾,normalization之后,我們得到以下結果,然后運行champ.DMP()和DMP.GUI()。
對于數字變量,為了顯示beta值隨變量變化的趨勢,DMP.GUI()會自動將數字變量逐個切換成幾個組(默認為4組),然后根據每組繪制線和點。如果你的變量是年齡,DMP.GUI()會自動將您的年齡變量剪切成幾個組,如30-,30-50,50-70,70+,然后繪制四條lines和幾組點。這樣,您就可以看到舊樣本組的線與新樣本組的線的顯著不同。
首先顯示DMP.GUI()網頁的第三個選項卡(基因相關的選項卡):
在上面的plot中,我們可以看到,DMP.GUI()自動將年齡協變量分為4組。然后對于每個組,繪制螞蟻線(dots ant lines)。我們可以看到,在基因ELOVL2中,總共有8個CpG顯示年齡相關的趨勢。線條顯示,老年組(80.5?101)傾向于比較年輕的群體高甲基化。
接下來我們展示DMP.GUI()網頁的第四個選項卡(CpG相關選項卡):
在上圖中,CpGs將被繪制到散點圖中,這樣我們可以看到CpG隨著年齡的增長趨勢。
6.7.2羥甲基化分析(Hydroxymethylation Analysis)
有些用戶可能想要分析羥甲基化數據,這時可以用champ.DMP()函數來完成,這里我們在下方提供了一些演示代碼,供用戶檢查。
myDMP <- champ.DMP(beta=myNorm, pheno=myLoad$pd$Sample_Group, compare.group=c("oxBS", "BS"))
# In above code, you can set compare.group() as "oxBS" and "BS" to do DMP detection between hydroxymethylatio and normal methylation.
hmc <- myDMP[[1]][myDMP[[1]]$deltaBeta>0,]
# Then you can use above code to extract hydroxymethylation CpGs.
6.8差異甲基化區域
Differentially Methylated Regions (DMRs) are extended segments of the genome,它展示了兩組之間DNA甲基化水平的定量變化。champ.DMR()是ChAMP提供的一個函數,用于計算并返回將探針綁定到離散的甲基化區域的數據框,并帶有P值。
ChAMP內有三種DMR算法:Bumphunter,ProbeLasso和DMRcate。Bumphunter算法首先將所有探針分組成小簇(或區域),然后應用隨機置換方法來估計候選DMRs。這種方法非常用戶友好,不依賴于之前函數的任何輸出。Bumphunter中的置換步驟可能是計算密集型的,不過用戶可以分配更多的內核來加速它。Bumphunter算法的結果是包含所有檢測到的DMR的數據框,包含其長度,簇,被注釋的CpG數量。
對于ProbeLasso方法,最終的數據框是從探針的邊緣輸出(limma output)及其關聯統計數據中得出的。在此之前,必須將champ.DMP()的結果輸入到champ.DMR()函數中才能運行ProbeLasso,但現在我們已經升級了該功能,而且ProbeLasso不需要來自champ.DMP()的結果。對于ProbeLasso功能的原理和機制,用戶可以在幫助文檔的第11篇參考文獻中查詢。
最近DMRcate方法被加入到ChAMP中。這是一種數據驅動的方法,該方法對所有的注解都是不可知的(除了對空間的,尤其是染色體坐標)。(This is a data-driven approach that is agnostic to all annotations except for spatial ones, specifically chromosomal coordinates)。DMRcate 能夠魯棒的評估個體化CPG位點(從limma中獲得)的差異甲基化。DMRcate通過每個450K探針計算出的主觀t統計量的平方來實現DMR-finding功能。 Then DMRcate would apply a Gaussian kernel to smooth this metric within a given window, and also derive an expected value of the smoothed estimate (in other words, one with no experimental effect) from the varying density of CpGs incu by reduced representation and irregular spacing.有關DMRcate功能的更多細節,用戶可以閱讀幫助文檔中的參考文獻第13篇和DMRcate R pacakge。
請注意,在這個版本的ChAMP中,我們在champ.DMR()中進行了一些嚴格的過程檢查,現在,champ.DMR()僅采用剛好具有兩種表型的分類協變量。如果您的協變量包含多個表型,稱為“腫瘤”/“轉移”/“控制”,請手動選擇其中任意兩個,并輸入相應的β 矩陣和pheno信息。
用戶可以使用以下代碼來生成DMR:
myDMR <- champ.DMR(beta=myNorm,pheno=myLoad$pd$Sample_Group,method="Bumphunter")
Bumphunter,DMRcate和ProbeLasso函數的輸出都是數據框,但可能包含不同的列。在這里我們可以檢查DMRcate的結果。
head(myDMR$DMRcateDMR)
## seqnames start end width strand no.cpgs minfdr
## DMR_1 chr2 177021702 177030228 8527 * 48 3.243739e-69
## DMR_2 chr2 177012117 177017797 5681 * 33 1.137990e-59
## DMR_3 chr12 115134148 115136308 2161 * 51 3.571093e-108
## DMR_4 chr11 31820441 31828715 8275 * 40 3.087712e-43
## DMR_5 chr17 46655289 46658170 2882 * 27 1.565729e-85
## DMR_6 chr6 32115964 32118811 2848 * 50 5.055382e-123
## Stouffer maxbetafc meanbetafc
## DMR_1 4.011352e-24 0.6962753 0.4383726
## DMR_2 6.555658e-20 0.6138975 0.4676655
## DMR_3 5.711951e-19 0.5372083 0.3601741
## DMR_4 1.206741e-18 0.5673115 0.4112588
## DMR_5 2.087453e-17 0.6859260 0.4812521
## DMR_6 7.216567e-16 0.5772168 0.2971849
## overlapping.promoters
## DMR_1 HOXD3-001, HOXD3-004, RP11-387A1.5-001
## DMR_2 HOXD4-001, MIR10B-201, HOXD3-005
## DMR_3 <NA>
## DMR_4 PAX6-016, PAX6-006, PAX6-014, PAX6-015, PAX6-007, PAX6-028, PAX6-025, PAX6-027, PAX6-029, PAX6-024, PAX6-026
## DMR_5 HOXB4-001, MIR10A-201, HOXB3-009, HOXB3-005, MIR10A-001
## DMR_6 PRRT1-002, PRRT1-201, PRRT1-007, PRRT1-006, PRRT1-003
就像DMP結果一樣,我們提供DMR.GUI()
DMR結果的接口。所有來自champ.DMR()的三種不同方法的結果都可以在GUI函數中被接受。DMR.GUI()函數會自動檢測到DMR結果是什么樣的輸入。因此,不建議修改myDMR結果的結構。
DMR.GUI(DMR=myDMR)
# It might be a little bit slow to open DMR.GUI() because function need to extract annotation for CpGs from DMR. Might take 30 seconds.
R就像上面的DMP.GUI一樣,左邊有一個參數面板,用戶可以設置參數來選擇 significant DMRs 。我們目前只提供兩個參數:P值和最小數目探針。上面的標題將顯示您用來獲取DMR結果的方法(這里是DMRcate)。注意,對于不同的方法,P值可以指示不同的列。Bumphunter是pvaluearea,而ProbeLasso是dmrP,并且沒有DMRcate結果的cutoff值(這在計算過程中已經完成)。 參數選擇完后,按“Submit”,您會得到右側的significant DMR表格。對于不同的方法,表內容可能不同。因此,用戶應該考慮您想要使用哪種方法來查找DMR。
第二個選項卡提供了在這些DMRs中包含的所有CpG的表,可以將其視為CpG和DMR之間的映射列表。另外如果您不能在第一個選項卡中獲取基因信息,你可以在這里獲得。在該表中,對于每個CpG,其相應的基因和DMR被標記。
第三個圖是每個DMR的圖,就和DMP.GUI()函數中的gene plot圖類似。這里x軸不是每個CpG的真實MAPINFO,每個CpGs之間的距離是相等的。Also I have feature and CpGs marked under the plot。在此選項卡的頂部,是該DMR中所有CpG的表。您可以使用左側面板上的DMR index參數來選擇要檢查的DMR。
第四選項卡中提供了基因富集信息和熱圖。請注意,在這個plot中可能有許多基因和CpGs。所以如果你選擇的DMR太多,那么這個plot可能太大了,不能打開。但是你不用擔心看不清楚,因為你可以放大看細節。
目前,在一個協變量中,champ.DMR()不支持多個表型,理論上我們可以做配對比較,但是需要很長時間。另外,我們不支持數字變量,比如說尋找“年齡相關的甲基化區域”,它要求很多繁重的編碼工作,但我們可能會在將來的版本中支持。
6.9差異甲基化塊
識別差異甲基化塊(DMB)也可能有潛在的意義(potential interest).這里我們提供一個推斷DMBs的函數。在我們的Block-finder函數中,champ.Block()函數將首先基于它們在基因組上的位置來計算全基因組上的小簇(區域)。然后,對于每個簇(區域),將計算其平均值和平均位置,因此您可以假設每個區域將被折疊(collapsed )成單個單元。When we finding DMB, only single unit from open sea would be used to do clustering。這里將使用Bumphunter算法在這些區域(被折疊后的單個單位)上找到“DMR”。在我們以前的論文(幫助文檔第23篇)和其他研究工作中(幫助文檔第24篇),我們證明差異甲基化可能在各種癌癥中顯示出普遍的特征
近年來,有關差異甲基化塊的研究較多。這里我們提供一個計算甲基化區塊的函數。在我們的Block-finder函數中,champ.Block()將首先基于它們在基因組上的位置來計算全基因組上的小簇(區域)。然后對于每個簇(區域),其平均值和平均位置將被計算,因此您可以假設每個區域將被折疊成一個點。然后,Bumphunter算法將用于在這些區域(dots after collapse)中找到“DMR”。請注意,Note that only open sea regions will be used to calculate Blocks.。在我們之前的論文中(幫助文檔第23篇),我們證實了差異甲基化塊可以顯示各種癌癥的普遍特征。(譯者注:感覺這段和上段有點重疊)
用戶可以使用以下代碼生成甲基化區塊:
myBlock <- champ.Block(beta=myNorm,pheno=myLoad$pd$Sample_Group,arraytype="450K")
champ.Block()函數返回很多對象,但最重要的是第一個列表:Block。您可以查看如下:
head(myBlock$Block)
## chr start end value area cluster indexStart
## Block_1 12 125405786 133245207 -0.1398238 61.66232 649 27996
## Block_2 6 28839951 30308328 -0.1725335 40.20032 356 81359
## Block_3 15 24778439 27360551 -0.1752729 38.73531 732 35251
## Block_4 14 100851839 102144080 -0.2166707 35.75066 724 34607
## Block_5 11 130933979 133954227 -0.1833729 34.29073 616 22569
## Block_6 7 40026390 42107777 -0.2616146 24.85339 400 88773
## indexEnd L clusterL p.value fwer p.valueArea fwerArea
## Block_1 28436 441 2176 1.698689e-05 0.028 1.698689e-05 0.028
## Block_2 81591 233 2396 1.698689e-05 0.028 1.577354e-04 0.136
## Block_3 35471 221 261 1.698689e-05 0.028 2.196162e-04 0.136
## Block_4 34771 165 708 1.698689e-05 0.028 3.858451e-04 0.188
## Block_5 22755 187 1601 1.698689e-05 0.028 4.622861e-04 0.188
## Block_6 88867 95 1497 1.698689e-05 0.028 1.571287e-03 0.420
并且我們提供一個GUI功能,供用戶查看上面的myBlock的結果。
Block.GUI(Block=myBlock,beta=myNorm,pheno=myLoad$pd$Sample_Group,runDMP=TRUE,compare.group=NULL,arraytype="450K")
請注意,這里有兩個特殊參數:runDMP
意思是Block.GUI()函數是否為每個CpG計算DMP,if not,GUI()函數將只返回所有涉及的CpG的注釋。如果要在運行Block.GUI()時計算DMP,則可以對compare.group
賦值,即使我們的協變量中有多個表型,它還是可運行的。
就像DMP.GUI()和DMR.GUI()一樣,P值cutoff和最小集群(類似于DMR.GUI()中的最小探針)控制您選擇的顯著塊的數目。然后顯著塊的信息將在右側列出。
第二個選項卡提供所有塊中涉及的所有CpG的信息。對于甲基化塊(methylation blocks),它實際上有三種單元集成在一起:塊,簇(區域)和CpG。塊由一些簇形成,并且簇由一些CpGs形成。因此,第二個選項卡實際上提供了從CpG到塊的映射方案。用戶可以使用此選項卡找到感興趣的的基因和CpGs。然后使用DMP.GUI()來整合塊(blocks)和DMPs之間的研究。
REAL MAPINFO
,因為我還需要在線上方映射CpG島(那些深紅色的點)。
6.10基因集富集分析
基因集富集分析是很多生物信息學研究工作的重要一步。在之前的步驟中,您可能已經獲得了一些重要的DMP或DMR,因此您可能想知道這些重要的DMP或DMR中涉及的基因是否富集到特定的biological terms 或pathways。為了實現這一分析,您可以使用champ.GSEA()來進行GSEA分析。
champ.GSEA()將自動提取基因myDMP
,myDMR
(無論您用什么方法生成DMR)。此外,如果您有自己的顯著的CpG列表或基因列表,而且來自于THE SAME
甲基化陣列(450K或EPIC)通過其他未在ChAMP中的方法計算。您也可以將其格式化成list
并輸入函數中以進行GSEA(請將您自己的CpG列表中的每個元素或基因列表分配一個名稱,否則可能會觸發錯誤)。champ.GSEA()將自動提取基因信息,將CpG信息轉換成基因信息,然后在每個列表上進行GSEA。在CpG與基因之間的映射過程中,如果將多個CpG映射到一個基因,那么該基因只會被計數一次。
現在有兩種途徑實現GSEA。在以前的版本中,ChAMP使用從MSIMDB下載的通路信息。然后,用Fisher精確檢驗計算每個通路的富集狀態。基因富集分析后,champ.GSEA()函數將自動返回P值小于臨界值(cutoff)的通路。
然而,正如Geeleher所指出的,由于不同基因中含有不同數量的CpG,存在的兩種情況是一個基因內含50個CpG,但只有一個顯示顯著甲基化,一個基因內含2個顯著CpG甲基化,這兩種情況不能同等對待。解決方案是使用基因包含的CpG個數來校正顯著的基因。如在gmeth函數(missMethyl包里的函數)中實現的。在gometh函數中,它使用每個基因的CpG數量替換長度作為偏置數據,以糾正此問題。gometh的思路適用于與GSEA相關的基因的CpG數量的曲線(The idea of gometh is fitting a curve for numbers of CpGs across genes related with GSEA),然后使用概率加權函數來校正GO的p值。
注意:如果用戶要糾正基因數與CpG數之間的偏差,則可以將champ.GSEA()函數中的方法參數設置為“goseq”,使用goseq方法進行GSEA,或者用戶將其設置為“fisher“做正常的基因集富集分析。
用戶可以使用以下命令來執行GSEA:
myGSEA <- champ.GSEA(beta=myNorm,DMP=myDMP[[1]], DMR=myDMR, arraytype="450K",adjPval=0.05, method="fisher")
# myDMP and myDMR could (not must) be used directly.
如果您不想在DMP或DMR上執行GSEA,則可以將其設置為NULL。
在上面的代碼中,我們還使用了包含在我們的軟件包中的450K示例數組來展示champ.GSEA()的效果。計算后,對于每個列表(DMP,DMR或其他列表),將返回一個GSEA結果。用戶可以檢查結果(如下):
head(myGSEA$DMP)
## NULL
# Above is the GSEA result for differential methylation probes.
head(myGSEA$DMR)
## Gene_List nList
## BENPORATH_EED_TARGETS BENPORATH_EED_TARGETS 1062
## BENPORATH_ES_WITH_H3K27ME3 BENPORATH_ES_WITH_H3K27ME3 1118
## BENPORATH_SUZ12_TARGETS BENPORATH_SUZ12_TARGETS 1038
## HOX_GENES HOX_GENES 65
## BENPORATH_PRC2_TARGETS BENPORATH_PRC2_TARGETS 652
## MEISSNER_BRAIN_HCP_WITH_H3K27ME3 MEISSNER_BRAIN_HCP_WITH_H3K27ME3 269
## nRep fRep nOVLAP OR
## BENPORATH_EED_TARGETS 966 0.9096045 118 4.816181
## BENPORATH_ES_WITH_H3K27ME3 1031 0.9221825 118 4.457708
## BENPORATH_SUZ12_TARGETS 909 0.8757225 102 4.257157
## HOX_GENES 60 0.9230769 29 28.960565
## BENPORATH_PRC2_TARGETS 594 0.9110429 79 5.037991
## MEISSNER_BRAIN_HCP_WITH_H3K27ME3 259 0.9628253 48 7.200159
## P.value adjPval
## BENPORATH_EED_TARGETS 1.002738e-36 8.364836e-33
## BENPORATH_ES_WITH_H3K27ME3 5.684943e-34 2.371190e-30
## BENPORATH_SUZ12_TARGETS 1.482686e-28 4.122856e-25
## HOX_GENES 1.863102e-27 3.885499e-24
## BENPORATH_PRC2_TARGETS 6.092783e-27 1.016520e-23
## MEISSNER_BRAIN_HCP_WITH_H3K27ME3 7.157888e-23 9.951850e-20
## Genes
## BENPORATH_EED_TARGETS HOXC5 HOXD4 TP73 FLJ45983 DKK1 HOXD9 SIX6 EVX1 HIST1H3I NEUROD2 KCNQ1 TRPA1 SOX17 CHST8 HOXD3 CCDC140 DLX5 DCC ADCYAP1 GHSR PAX3 HOXA2 MKX BTG4 EMX2 SIM1 CRTAC1 ISL2 HIST1H4F FEZF2 DLK1 HOXC6 HSPA1L HOXB7 GBX2 HOXB8 GSC GATA3 MSX1 HOXC9 CYP26C1 DUOXA1 ALX4 HOXA3 TAP1 EYA4 DSC3 HOXA9 SFRP1 HOXD8 FOXF1 QRFPR VSX1 HCG9 HOXC11 TAC1 HTR1E OTP ALX1 HOXA10 CALCA HOXD12 RAB32 CIDEA HIST1H4L PDGFRA HOXA7 FOXG1 PTGDR HIST1H3C BARHL2 ZIC4 APBB1IP OLIG3 HSPA1A LBX1 PITX1 IGFBP3 EN1 CBLN1 ZIC1 PAX6 DUOX1 PRDM14 HOXB1 HOXD1 ADARB2 CMTM2 MAGI2 HOXA6 HIC1 HTR1A RASGRF1 GATA4 HOXD13 TBX5 LHX8 UCN HLX DLX1 NKX2-3 FLJ32063 PAX9 HOXC13 HOXA4 TLX1 SIM2 HPSE2 PDX1 LOC153684 TMEM26 HIST1H3E DRD5 HS3ST3B1 VAX1 HOXC4 MAB21L1 PRLHR
## BENPORATH_ES_WITH_H3K27ME3 GBX2 OTP KLHL1 VAX1 PRLHR CALCA LRAT HSPA1A DUOXA1 HOXD8 OLIG3 LHX8 PCDHGC4 EVX1 DSC3 SOX17 HTR1A HLA-F SFRP1 PITX1 ZIC4 PAX3 HLX SIM2 ESR1 EXOC3L2 RFX4 ISL2 BARHL2 DUOX1 HOXA3 SIM1 CRTAC1 KLHL14 GATA4 HOXC11 HCG9 CBLN1 NKX2-3 FOXG1 UCN LOC153684 TAP1 FEZF2 DLK1 PAX6 RASGRF1 EYA4 HPSE2 ADARB2 HOXD1 HOXB8 ADCYAP1 GABRG3 TAC1 EGFLAM OSR2 CCNA1 EN1 HOXD13 HOXB7 ZIC1 KCNQ1 GHSR GATA3 PAX9 PTGDR ALX4 HOXA2 HOXD4 PDGFRA PTPRN2 TBX5 CMTM2 PDX1 HOXD12 HOXD9 HSPA1L MSX1 IGFBP3 NEUROD2 GPR150 DCC DLX1 CCDC140 MAB21L1 HOXB1 CHST8 CYP26C1 HOXD3 TLX1 FLJ45983 PRRT1 TP73 CIDEA FOXF1 DRD5 SIX6 HOXA6 HOXA9 HOXC4 THBS2 HOXA10 HOXC5 HIC1 DKK1 HOXA4 MKX DLX5 VSX1 HOXA7 HOXC6 FLJ32063 HS3ST3B1 ZFPM1 SLC6A2 LBX1 GSC
## BENPORATH_SUZ12_TARGETS HOXC9 CIDEA RASGRF1 CRTAC1 SFRP1 FLJ45983 PRLHR FOXF1 CBLN1 TMEM26 TLX1 DUOXA1 ADCYAP1 EMX2 GATA5 HOXC6 MAB21L1 GHSR GSC FOXG1 ALX4 MSX1 ISL2 HOXD12 ADARB2 DLX1 ZIC1 CCDC140 LOC153684 SPOCK2 QRFPR HOXD13 PAX6 HOXD1 HPSE2 HOXC11 DKK1 VSX1 LHX8 GPR158 PAX9 VAX1 HOXC4 NEUROD2 DCC PAX3 MKX CYP26C1 PITX1 UCN DRD5 HOXC5 GATA4 SLC6A2 PDX1 HOXC13 GPR83 CHST8 HOXB1 PTGDR TOX2 TP73 GBX2 TBX5 CRABP1 EN1 APBB1IP GATA3 FLJ32063 SIX6 ZAR1 TRPA1 HOXD4 ZIC4 CCNA1 HTR1A OSR2 HOXB8 PDGFRA HOXD9 CALCA ACCN1 SOX17 BARHL2 EGFLAM HOXB7 FEZF2 DSC3 ALDH1L1 HS3ST3B1 LBX1 GIPC2 HLX ALX1 NKX2-3 DUOX1 SIM2 UPB1 HOXD8 HOXD3 OTP CMTM2
## HOX_GENES HOXA6 HOXC5 HOXD10 HOXB5 LBX1 HOXC6 HOXA5 HOXD9 HOXA2 HOXC11 HOXD13 HOXA4 HOXA11 HOXC13 PITX1 HOXD1 HOXD12 HOXA3 HOXA10 HOXD4 HOXB7 HOXC4 HOXB8 HOXA7 HOXD3 HOXB1 HOXB9 TLX1 HOXA9
## BENPORATH_PRC2_TARGETS TP73 CCDC140 HOXD13 SOX17 PDX1 TBX5 OTP HOXC5 HOXD3 DKK1 PAX6 PDGFRA DLX1 HOXD12 ZIC1 CHST8 CRTAC1 CIDEA DSC3 HOXC11 ISL2 NEUROD2 VAX1 EN1 GBX2 ADARB2 MKX PAX9 PRLHR DCC TLX1 RASGRF1 GHSR UCN ADCYAP1 HOXD1 GATA4 SIM2 HTR1A HLX LOC153684 GSC LHX8 SIX6 FEZF2 HOXB7 HOXD8 PTGDR PAX3 DUOX1 DRD5 LBX1 NKX2-3 CALCA HPSE2 CMTM2 GATA3 ZIC4 FOXF1 HOXC4 HS3ST3B1 HOXB8 FLJ32063 MSX1 PITX1 FLJ45983 CBLN1 HOXC6 DUOXA1 BARHL2 MAB21L1 CYP26C1 HOXB1 SFRP1 HOXD4 VSX1 HOXD9 ALX4 FOXG1
## MEISSNER_BRAIN_HCP_WITH_H3K27ME3 HOXB5 LOXL1 PRDM6 LHX8 HOXD1 GATA5 ALX1 EVX1 HOXC4 TNXB SIM1 OTP TLX1 PRDM14 OLIG3 HOXC13 DBX1 HOXD9 HOXB9 SLC6A2 SIM2 GSC HOXC11 TP73 HOXC5 KRT7 HOXA11 HOXD8 ALX4 PRSS50 HOXA4 HOXB7 GATA4 HOXD12 HOXD10 LBX1 GATA3 HOXA10 GBX2 BARHL2 PITX1 HOXA5 SIX6 LHX1 DLK1 HOXD13 HOXB4 PDX1
# Above is the GSEA result for differential methylation regions.
# Too many information may be printed, so we are not going to show the result here.
6.11差異甲基化互作熱點
(Differential Methylated Interaction Hotspots)
ChAMP中的另一個功能是champ.EpiMod()。此函數使用了FEM包在用戶特定的功能基因網絡內推斷差異甲基化的基因模塊。該網絡可以是例如蛋白質 - 蛋白質互作網絡。因此,可以將champ.EpiMod()函數視為使用基因(通常為PPI網絡)之間的關系網絡的功能監督算法來識別其中大量基因與感興趣的表型相關聯的子網絡( POI)。EpiMod算法可以以兩種不同的模式運行:在探針級別,在這種情況下,最差異的甲基化探針被分配給每個基因,或者在基因水平上,在這種情況下,使用優化的DNA將DNAm值分配給每個基因。FEM包被開發用來推斷差異甲基化基因模塊(which are also deregulated at the gene expression level),然而這里我們僅提供EpiMod version,其僅用于推導差異甲基化模塊。更多高級的用戶可參考FEM軟件包的幫助文檔獲取更多信息。
用戶可以使用以下代碼來做champ.EpiMod()
myEpiMod <- champ.EpiMod(beta=myNorm,pheno=myLoad$pd$Sample_Group)
所有重要的模塊將被返回。而PDF verdion圖將在resultDir(函數中的參數)返回。如下所示:
上面我們展示了基于我們的450K測試數據的champ.EpiMod()檢測到的四個模塊。但在實踐中,每個模塊將被單獨保存在resultsDir目錄中一個pdf文件中。
6.12拷貝數變異
對于Copy Number Variation分析,我們提供champ.CNA()來實現這個工作。該函數使用HumanMethylation450或HumanMethylationEPIC數據來識別拷貝數變異。該函數利用每個探頭的強度值來計數拷貝數,并確定是否存在拷貝數變異。拷貝數使用CopyNumber包確定。
基本上有兩種方法可進行CNA分析:您可以比較病例樣本和對照樣本之間的拷貝數; 或者您可以將每個樣品的拷貝數與所有樣品的平均拷貝數狀態進行比較。對于第一種方法,您可以在您的表型參數中指定哪些樣本組,或者 ChAMP 已經包括了一些血液對照樣品本身,你可以用它們作為對照,然后計算拷貝數變異,所有你需要做的就是分配參數control=TRUE
和controlGroup="champCtls"
。對于其他方法,您可以分配control=FALSE
。
將產生兩種圖,每個樣本的分析(sampleCNA=TRUE
參數)和每個組(groupFreqPlots=TRUE
參數)的分析。像之前的champ.QC()函數一樣,有兩個參數可以在繪圖上分配。如果champ.CNA()將用R會話繪制,則需控制Rplot參數,如果champ.CNA()會將PDF文件保存到resultsDir,則需控制PDFplot參數。默認情況下,只有PDFplot為TRUE。
注意新版與舊版ChAMP不同。如果你想要對強度數據矯正批次效應,新版本則不會自動運行批次矯正,請使用champ.runCombat(),強度數據的用法與beta或M矩陣是完全相同的,唯一的區別是需要使用
myLoad$intensity
和設置來替換beta值,并蛇者參數logitTrans=FALSE
。
Feber (參考文獻第10篇)比較了使用該方法從Illumina CytoSNP陣列和Affymetrix SNP 6.0陣列拷貝數據的結果,發現使用該方法對450k數據進行擴增和刪失區域的識別是有效的。
用戶可以使用以下代碼來計算拷貝數差異:
myCNA <- champ.CNA(intensity=myLoad$intensity,pheno=myLoad$pd$Sample_Group)
champ.CNA()函數的主要用途是生成樣本和組的表型圖(The main usage of champ.CNA() function is to generate plot for sample and groups in pheno.)。如下所示:
6.13細胞類型異質性
DNA甲基化譜通常產生于有許多細胞類型混合的樣品中。鑒于DNAm具有高度細胞型特異性,因此通常需要推斷DMP / DMR哪些不是由細胞類型成分的潛在變化所導致的。目前已經提出了許多方法來處理細胞型異質性問題,如RefbaseEWAS。
RefbaseEWAS method uses a reference-database of DNAm profiles of the major cell-types thought to be present in the tissue of interest, and uses this reference to infer sample-specific cell-type proportions using a form of constrained multivariate regression, known as constrained projection or quadratic programming. These cell-type proportions can subsequently be used as covariates to infer phenotype-associated changes which are not driven by changes in cell-type composition. We included this refbase method into our ChAMP for users who want to detect cell proportion and remove cell type influence on their WHOLE BLOOD data.
在ChAMP中,我們包括一個全血參考數據庫,一個用于27K,另一個用于450K。在使用champ.refbase()函數之后,將返回每個樣本中的細胞類型異質性校正β基因和細胞類型特異性比例。請記住champ.refbase()只能用于血液樣本數據集。
myRefBase <- champ.refbase(beta=myNorm,arraytype="450K")
# Our test data set is not whole blood. So it should not be run here.
請注意,我們的示例數據450K陣列不是全血數據,所以champ.refbase()無法在此數據集上使用。(以上代碼僅在這里作為演示)。將來,我們將為champ.refbase函數添加更多參考數據。
7總結
我們簡要介紹了新的ChAMP包中包含的各種流程和函數。在未來,我們希望進一步改進它,實現更多的功能。如果您有任何問題,錯誤報告或改進ChAMP的建議,請發送電子郵件至champ450k@gmail.com。Feeback是改進軟件包的關鍵,該軟件包試圖從許多其他工具中無縫集成功能和并保證靈活性。
8引用ChAMP
ChAMP是一個包含許多其他來源的算法和函數的包裝器。ChAMP中使用的大多數函數都是直接從其他軟件包中引入,或者是從特定的已發布算法中獲取的。因此,下面我們提供指導文件,在使用這些函數時,應該在ChAMP旁邊引用哪些論文:
如果您使用ChAMP包,請引用:
Morris, T. J., Butcher, L. M., Feber, A., Teschendorff, A. E., Chakravarthy, A. R., Wojdacz, T. K., and Beck, S. (2014). Champ: 450k chip analysis methylation pipeline pg - 428-30. Bioinformatics, 30(3), 428-30.
The loading part of ChAMP (champ.load) uses minfi package, so please cite:
Aryee MJ, Jaffe AE, Corrada-Bravo H, Ladd-Acosta C, Feinberg AP, Hansen KD and Irizarry RA (2014). Minfi: A flexible and comprehensive Bioconductor package for the analysis of Infinium DNA Methylation microarrays. Bioinformatics, 30(10), pp. 1363-1369. doi: 10.1093/bioinformatics/btu049.
Jean-Philippe Fortin, Timothy Triche, Kasper Hansen. Preprocessing, normalization and integration of the Illumina HumanMethylationEPIC array. bioRxiv 065490; doi: https://doi.org/10.1101/065490
Filtering out probes with SNPs was based following recommendations presented in this paper:
Zhou W, Laird PW and Shen H: Comprehensive characterization, annotation and innovative use of Infinium DNA Methylation BeadChip probes. Nucleic Acids Research 2016
FunctionalNormliazation and SWAN normalization methods are based on:
Jean-Philippe Fortin, Timothy Triche, Kasper Hansen. Preprocessing, normalization and integration of the Illumina HumanMethylationEPIC array. bioRxiv 065490; doi: https://doi.org/10.1101/065490
Maksimovic J et a. SWAN: Subset-quantile within array normalization for illumina infinium humanmethylation450 beadchips. Genome Biol. 2012;13(6):R44.
The default type-2 probe correction method in ChAMP is BMIQ, based on:
Teschendorff AE et al . A beta-mixture quantile normalization method for correcting probe design bias in illumina infinium 450 k dna methylation data. Bioinformatics. 2013;29(2):189-196.
Another type-2 probe correction method is PBC, which was presented in:
Dedeurwaerder S et a. Evaluation of the infinium methylation 450K technology. Epigenomics. 2011;3(6):771-784.
champ.SVD() function is based on:
Teschendorff AE et a. An epigenetic signature in peripheral blood predicts active ovarian cancer. PLoS One. 2009;4(12):e8274.
ChAMP uses the batch correction method Combat as implanted in the SVA
package. Please cite:
Johnson WE et a. Adjusting batch effects in microarray expression data using empirical bayes methods. Biostatistics. 2007;8(1):118-127.
Leek JT, Johnson WE, Parker HS, Fertig EJ, Jaffe AE, Storey JD, Zhang Y and Torres LC (2017). sva: Surrogate Variable Analysis. R package version 3.24.4.
Above are all functions related to Data Normalization
. Below are functions and methods for downstream analyses.
If using limma to find DMPs, please cite:
Smyth GK. Linear models and empirical bayes methods for assessing differential expression in microarray experiments. Stat Appl Genet Mol Biol. 2004;3:Article3. Epub 2004 Feb 12. PubMed PMID: 16646809.
Wettenhall JM, Smyth GK. limmaGUI: a graphical user interface for linear modeling of microarray data. Bioinformatics. 2004 Dec 12;20(18):3705-6. Epub 2004 Aug 5. PubMed PMID: 15297296.
For DMR detection, if you used Bumphunter method, please cite:
Jaffe AE et a. Bump hunting to identify differentially methylated regions in epigenetic epidemiology studies. Int J Epidemiol. 2012;41(1):200-209.
If you used ProbeLasso function, please cite:
Butcher LM, Beck S. Probe lasso: A novel method to rope in differentially methylated regions with 450K dna methylation data. Methods. 2015;72:21-28.
Or if you used DMRcate function, please cite:
Peters TJ, Buckley MJ, Statham AL, et al. De novo identification of differentially methylated regions in the human genome. Epigenetics & Chromatin. 2015;8(1):1-16.
In this version of ChAMP, we provided a function to find Differential Methylation Blocks (DMB). The reference should be:
Hansen KD, Timp W, Bravo HC, et al. Increased methylation variation in epigenetic domains across cancer types. Nat Genet. 2011;43(8):768-775.
Timp W, Bravo HC, McDonald OG, et al. Large hypomethylated blocks as a universal defining epigenetic alteration in human solid tumors. Genome Med. 2014;6(8):61.
For GSEA method, if you used ‘gometh’ method, please cite below paper:
Paul Geeleher, Lori Hartnett, Laurance J. Egan, Aaron Golden, Raja Affendi Raja Ali, and Cathal Seoighe Gene-set analysis is severely biased when applied to genome-wide methylation data Bioinformatics 2013 : btt311v2-btt311.
Young MD, Wakefield MJ, Smyth GK and Oshlack A (2010). “Gene ontology analysis for RNA-seq: accounting for selection bias.” Genome Biology, 11, pp. R14.
Phipson, B, Maksimovic, J, Oshlack, A (2016). missMethyl: an R package for analyzing data from Illumina’s HumanMethylation450 platform. Bioinformatics, 32, 2:286-8.
If you used the FEM package to find Differential Methylated Modules in gene networks, please cite:
Jiao Y, Widschwendter M, Teschendorff AE. A systems-level integrative framework for genome-wide dna methylation and gene expression data identifies differential gene expression modules under epigenetic control. Bioinformatics. 2014;30(16):2360-2366.
The CNA detection function was provided by Andy Feber of UCL, you may citate related paper below:
Feber A, Guilhamon P, Lechner M, et al. Using high-density dna methylation arrays to profile copy number alterations. Genome Biol. 2014;15(2):R30.
We included two methods for cell proportion correction. If you used the Refbase method in ChAMP, please cite:
Houseman EA, Accomando WP, Koestler DC, et al. DNA methylation arrays as surrogate measures of cell mixture distribution. BMC Bioinformatics. 2012;13(1):1-16.
掃描下方二維碼關注生信客部落公眾號: