?在分析腸道微生物數(shù)據(jù)中,一般會(huì)對(duì)數(shù)據(jù)進(jìn)行一定的轉(zhuǎn)換,以使數(shù)據(jù)盡可能的服從正態(tài)分布骑祟。常用的方法有Centered Log-ratio (CLR) transformation和Cumulative Sum Scale (CSS) transformation等。這里介紹一下在R中如何進(jìn)行CLR轉(zhuǎn)換。
CLR轉(zhuǎn)換的公式如下:
g(x)是x的幾何均數(shù)惠爽。
?在進(jìn)行微生物組數(shù)據(jù)轉(zhuǎn)換時(shí),第一個(gè)問(wèn)題就是g(x)是取每個(gè)樣本所有taxa的豐度的幾何均數(shù)瞬哼,還是每個(gè)taxon在不同樣本中豐度的幾何均數(shù)婚肆,又或者是所有樣本所有taxa豐度的幾何均數(shù)呢?
?根據(jù)微生物組數(shù)據(jù)的特征坐慰,在進(jìn)行微生物組數(shù)據(jù)分析時(shí)较性,我們假設(shè)每個(gè)樣本內(nèi)含有的菌群總量是相同的,比較的主要是每個(gè)菌的相對(duì)豐度结胀。因?yàn)榻?jīng)過(guò)clr轉(zhuǎn)換后的數(shù)據(jù)相加等于0赞咙,所以只能按照每個(gè)樣本的所有taxa豐度計(jì)算幾何均數(shù)。即clr要在每個(gè)樣本內(nèi)進(jìn)行糟港,而不是每個(gè)taxon內(nèi)攀操。
?不知道是否可以根據(jù)所有樣本的所有taxa豐度來(lái)計(jì)算g(x),這里歡迎各位的指導(dǎo)秸抚。
明白clr的基本原理速和,在R中的實(shí)現(xiàn)相對(duì)簡(jiǎn)單,如下:
首先建立一個(gè)OTU豐度表
sample1 = c(100, 200, 300, 400)
sample2 = c(200, 400, 500, 800)
sample3 = c(100, 500, 600, 1000)
otu_table = data.frame(sample1, sample2, sample3)
rownames(otu_table) = c("genus1", "genus2", "genus3")
OTU表如下
首先使用compositions包的clr函數(shù)進(jìn)行轉(zhuǎn)換剥汤,結(jié)果如下:
查看了一下clr函數(shù)的幫助文檔健芭,但還是沒(méi)搞明白這個(gè)函數(shù)的g(x)是如何計(jì)算的(根據(jù)每個(gè)樣本,每個(gè)taxon秀姐,還是所有樣本的所有taxa)慈迈?
不過(guò),我們可以通過(guò)自定義函數(shù)來(lái)核對(duì):
可以看出來(lái)clr函數(shù)是根據(jù)每行(這里即每個(gè)樣本)來(lái)計(jì)算的g(x)。
因此痒留,在使用clr函數(shù)時(shí)一定要確保taxa在行谴麦,樣本編號(hào)在列∩焱罚或者可以配合apply函數(shù)使用
另外一個(gè)問(wèn)題是這里建立的OTU豐度表沒(méi)有0值匾效,但在實(shí)際的數(shù)據(jù)中,經(jīng)常會(huì)存在許多的0值恤磷,顯然不能直接用clr進(jìn)行數(shù)據(jù)的轉(zhuǎn)換面哼。
但是我在使用clr函數(shù)進(jìn)行轉(zhuǎn)換時(shí),仍然能夠順利運(yùn)行且沒(méi)有任何提示扫步,檢查后發(fā)現(xiàn)clr函數(shù)在遇到0的情況下會(huì)忽略0值魔策,對(duì)其他值進(jìn)行轉(zhuǎn)換。
這就造成本來(lái)一些豐度大于0的數(shù)值河胎,經(jīng)過(guò)clr轉(zhuǎn)換后反而成負(fù)數(shù)了闯袒,比原來(lái)豐度為0的taxa豐度還要低,這顯然是不合理的游岳。因此建議再轉(zhuǎn)換之前所有豐度數(shù)據(jù)都加一個(gè)極小的數(shù)值(pseudo count, 比如1)進(jìn)行替換政敢。
關(guān)于0值的處理,這也不是完美的解決方法胚迫,后面如果有更深入的了解會(huì)繼續(xù)更新喷户,歡迎探討。