DESeq2 PCA 的一些問題

近日,做差異分析的時(shí)候,想著看一下樣本本身的特征是以什么分類的,除了計(jì)算樣本之間的距離,還用到的PCA(主成分分析)。在DESeq2包中專門由一個(gè)PCA分析的函數(shù),即plotPCA,里面的參數(shù)也比較簡(jiǎn)單。

plotPCA參數(shù)

object:對(duì)象

在進(jìn)行PCA之前是要進(jìn)行歸一化的,因?yàn)樵诮稻S映射的過程中, 存在映射誤差, 所有在對(duì)高維特征降維之前, 需要做特征歸一化(feature normalization), 這個(gè)歸一化操作包括: (1) feature scaling (讓所有的特征擁有相似的尺度, 要不然一個(gè)特征特別小, 一個(gè)特征特別大會(huì)影響降維的效果) (2) zero mean normalization (零均值歸一化)。、
但是在DESeq2包中實(shí)際上已經(jīng)有了歸一化的方法,rlog和vst,具體是怎么做到歸一化的,這個(gè)原理不了解。
在使用的需要根據(jù)樣本量的多少來選擇方法。樣本量少于30的話,選擇rlog,多于30的話,建議選擇vst。親測(cè)!樣本量多于30的時(shí)候,用了rlog,出現(xiàn)以下提示:

rlog() may take a few minutes with 30 or more samples,
vst() is a much faster transformation

所以官方就會(huì)建議樣本量大于30的時(shí)候用vst,而且vst速度是飛起的狀態(tài),而rlog是老牛拉慢車。

intgroup:分組

官方解釋:interesting groups: a character vector of names in colData(x) to use for grouping。也就是在構(gòu)建dds的時(shí)候的分組,實(shí)際上這個(gè)分組最后影響的是PCA圖中的顏色,但是并不影響PCA圖中各個(gè)樣本的位置。換句話說,PCA降維的是時(shí)候并不會(huì)考慮這個(gè)分組。這個(gè)也是我搞了好多天才弄清楚的,所以原理還是要搞懂的,不能只會(huì)跑流程。

ntop:用于主成分分析的時(shí)候基因數(shù)

官方解釋:number of top genes to use for principal components, selected by highest row variance。也就是說PCA分析的時(shí)候,是根據(jù)基因表達(dá)的counts值來的。如果給出了ntop,那么意思就是只選出表達(dá)量高的這幾個(gè)基因去計(jì)算。沒想通作者為什么設(shè)置這個(gè),我覺得應(yīng)該是先篩選出差異的基因,然后再設(shè)置這個(gè)數(shù)會(huì)比較好,這樣就是看篩選出的基因是不是符合預(yù)期。反正感覺ntop目前來說用的不是很多。

returnData:返回PC1和PC2的dataframe

官方解釋:should the function only return the data.frame of PC1 and PC2 with intgroup covariates for custom plotting (default is FALSE)。注意只返回PC1和PC2,其他的成分不返回,而且還返回分組情況和樣本名。是這種格式:

              PC1         PC2 group condition  name
X11_T  23.7381223  -3.9537594    II        II X11_T
X77_T  -1.7273395  29.0222667    II        II X77_T
X14_T -14.2359870   1.8616294    II        II X14_T
X76_T  -0.2251326  27.9834964    II        II X76_T
X72_T  -9.9218391  19.7866404    II        II X72_T
X20_T  12.1552460 -19.1133494    II        II X20_T
X71_T -45.6232065  -1.7467169    II        II X71_T

這個(gè)參數(shù)的作用就是當(dāng)你的PCA圖需要加樣本名的時(shí)候,也就是你希望在PCA圖上知道哪個(gè)點(diǎn)是哪個(gè)樣本,你就需要導(dǎo)出這個(gè)。
其實(shí)我的初衷也就是想看在PCA圖上哪個(gè)點(diǎn)是哪個(gè)樣本,因此我當(dāng)然要設(shè)置returnData=T。

#構(gòu)建dds
dds <- DESeqDataSetFromMatrix(countData=indata, colData = state, design= ~ condition )
#歸一化,因?yàn)闃颖玖砍^了30,因此用vst
vsd <- vst(dds, blind = FALSE)
#返回樣本名和分組
pcaData <- plotPCA(vsd, intgroup=c("condition"),returnData = T)
#這里按照condition排序了,原因見下。
pcaData <- pcaData[order(pcaData$condition,decreasing=F),]
#知道每一個(gè)組有多少樣本
table(pcaData$condition)
# II III  IV 
# 20  11  10 
#根據(jù)上面的結(jié)果,設(shè)置每一個(gè)組的數(shù)量,方便加顏色;這一步是把每一個(gè)樣本根據(jù)分組情況畫出來,效果見圖1
plot(pcaData[,1:2],pch = 19,col= c(rep("red",20),rep("green",11),rep("blue",10)),
     cex=1)
#加上樣本名字,效果見圖2
text(pcaData[,1],pcaData[,2],row.names(pcaData),cex=1, font = 1)
#加上圖例,效果見圖3
legend(-70,43,inset = .02,pt.cex= 1.5,title = "Grade",legend = c("II", "III","IV"), 
       col = c( "red","green","blue"),pch = 19, cex=0.75,bty="n")
圖1 只畫點(diǎn)

圖2 加了樣本名

圖3 加上圖例

下面說一下我畫這個(gè)圖的艱辛的過程。

首先,給PCA上每一個(gè)點(diǎn)加樣本名這個(gè)過程其實(shí)是分步驟進(jìn)行的。也就是我三個(gè)圖的展示,即:畫點(diǎn)、加樣本名,加圖例。分別用了plot(),text(),legend(),三個(gè)函數(shù)。

plot函數(shù)

plot函數(shù)是最基本的畫圖函數(shù),感覺網(wǎng)上說的挺全的,這里引用https://blog.csdn.net/sl_world/article/details/80864674https://blog.csdn.net/eric_e/article/details/83243999,自己也收藏一下。
本例中直接用的是PCA中的PC1和PC2,也就是pcaData[,1:2]。col顏色,是根據(jù)分組加的,我感覺是根據(jù)pcaData中的順序,因?yàn)槲抑霸囘^:

plot(pcaData[,1:2],pch = 19,col= c("red","green","blue"),cex=1)

效果如圖4


圖4

在這圖中,點(diǎn)的顏色完全是根據(jù)pcaData的順序加的,如下

              PC1         PC2 group condition  name
X10_T  -4.9487193 -30.3912003   III       III X10_T
X11_T  23.7381223  -3.9537594    II        II X11_T
X12_T -56.8346035 -14.8049233   III       III X12_T
X77_T  -1.7273395  29.0222667    II        II X77_T
X14_T -14.2359870   1.8616294    II        II X14_T
X76_T  -0.2251326  27.9834964    II        II X76_T

可以對(duì)比pcaData和圖4,完全就是紅綠藍(lán),紅綠藍(lán)這種,而不是按照condition劃分的。

所以在我的代碼中,我先把pcaDatacondition排序了,然后根據(jù)table知道每一個(gè)組有幾個(gè),再設(shè)置顏色。

text函數(shù)

推薦參考http://www.mamicode.com/info-detail-1774107.html講的還是很詳細(xì)的,也給自己收藏一下。比較重要的參數(shù)是text(x,y,label)是最基本的,x,y分別是確定位置;label是文本的內(nèi)容;另外還可以通過adj,pos對(duì)文字的位置進(jìn)行調(diào)整。

legend函數(shù)

推薦參考http://www.itdecent.cn/p/004f00142d00,其實(shí)一直很想把圖例放在圖的外面,現(xiàn)在還沒有做成。

參考:http://www.itdecent.cn/p/e03af1169e57
http://www.itdecent.cn/p/53258de21108

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容