單細胞轉(zhuǎn)錄組學(xué)習(xí)筆記-6-得到表達矩陣后看內(nèi)部異質(zhì)性

劉小澤寫于19.6.18唆涝、23-第二單元第四講:得到表達矩陣后看內(nèi)部異質(zhì)性

筆記目的:根據(jù)生信技能樹的單細胞轉(zhuǎn)錄組課程探索smart-seq2技術(shù)相關(guān)的分析技術(shù)
課程鏈接在:http://jm.grazy.cn/index/mulitcourse/detail.html?cid=53

前言

依然是主要代碼跟著流程走宛篇,這里只寫一寫我認為比較重要的內(nèi)容

上次我們得到了原始表達矩陣a秧倾,過濾后的表達矩陣dat 闷游,樣本信息meata

簡單看下:

> dim(a)
[1] 24582   768
> dim(dat)
[1] 12198   768
> head(meta)
               g plate  n_g all
SS2_15_0048_A3 1  0048 2624 all
SS2_15_0048_A6 1  0048 2664 all
SS2_15_0048_A5 2  0048 3319 all
SS2_15_0048_A4 3  0048 4447 all
SS2_15_0048_A1 2  0048 4725 all
SS2_15_0048_A2 3  0048 5263 all
# 樣本信息中的g表示cutree分的4大聚類結(jié)果憾儒;plate為細胞板批次势誊;n_g是每個細胞樣本中有表達的基因數(shù)量苗傅;all暫時用不到

另外,注意最好每次運行代碼之前缸浦,都要清空一下變量夕冲,然后設(shè)置不要將字符型變成因子型向量

rm(list = ls())  
options(stringsAsFactors = F)

想要做個熱圖

先構(gòu)建分組信息,也就是提取出層次聚類信息

需要注意一點裂逐,count的表達矩陣和rpkm表達矩陣的聚類分組結(jié)果是不一樣的

# 我們這里是count表達矩陣分組
> grp=meta$g
> table(grp)
grp
  1   2   3   4 
312 300 121  35 

然后想想歹鱼,熱圖需要什么信息?

主要就是行卜高、列弥姻,行是基因,列是樣本掺涛。那么先對基因(行)進行設(shè)置:

因為dat矩陣相對于a雖然過濾掉了一萬多基因庭敦,但是依然還剩一萬多,然后我們有700多樣本薪缆,那么可以算一下秧廉,這樣的結(jié)果是10000*700的圖,相當(dāng)大矮燎,并且看不出什么含義定血。我們可以將基因數(shù)設(shè)置小一點,可以設(shè)置成1000诞外,先看一下

好了澜沟,基因數(shù)有了(1000個),但是取哪1000個基因呢峡谊?很顯然茫虽,利用headtail直接取前/后1000個基因是不能使人信服的刊苍,這里可以用sd 進行篩選,也就是取表達量標準差最大的1000個基因(也即是說濒析,這1000個基因在所有的樣本中表達差異最大正什,這樣更像差異表達基因)

tail(sort(apply(dat,1,sd)),1000)
# 解釋下代碼:從里向外看=》apply對dat矩陣的每一行求sd值,然后用sort排序号杏,默認從小到大婴氮,然后用tail從后到前,也即是從大到小取1000個
# 最后取出基因名
top_g=names(tail(sort(apply(dat,1,sd)),100))
> head(top_g)
[1] "Comt"    "Mrgprf"  "Stard13" "Cdipt"   "Ifnar1"  "Pdcd6ip"

畫第一張熱圖

1000基因 X 768個細胞 = 70多萬的點

這個熱圖反映了log2(cpm+1)的表達量盾致,范圍是0-15

library(pheatmap)
pheatmap(dat[top_g,],show_colnames =F,show_rownames = F,
           filename = 'all_cells_top_1000_sd.png')

熱圖基礎(chǔ)上增加歸一化

上面??那個圖主经,可以看出基因絕對表達量 ,顏色越偏紅色表示絕對表達量越高庭惜,比如頂部那些基因的表達量就是要比底部那些基因的高

但是罩驻,有個問題,這樣會受到某些特高表達基因的影響护赊,導(dǎo)致其他基因的差異就不明顯惠遏;另外,我們真正關(guān)心的是一個基因在不同樣本中的差異骏啰,是一種相對的表達量节吮。

可以這么理解:有的基因本身就是表達量小,但不能因為小就認為它在每個樣本都是一樣的器一。雖然小课锌,也是有差異的小。但往往這種差異會由于"強者"的存在而被忽視祈秕。
因此,這里我們要做的雏胃,就是將這種"弱小"的差異給拎出來

主要利用scale() 请毛,先理解一下:

# 構(gòu)建一個測試數(shù)據(jù)
x=1:10;plot(x)
scale(x);plot(scale(x))# 結(jié)果就是變成從-1.4到+1.4的范圍

可以看到,scale后并不改變數(shù)據(jù)分布瞭亮,只是修改了坐標方仿,讓結(jié)果取值更加集中

注意:scale是對列進行操作,而我們是想對基因(也就是按行操作)统翩,這個函數(shù)有兩個主要的選項:centerscale 仙蚜,其中center是將每列的元素減去這一列的均值(這個選項是默認TRUE的);scale 是在center操作后厂汗,再將處理過的元素除以標準差(同樣是默認TRUE的)委粉。另外,處理完別忘了再轉(zhuǎn)換回來

n=t(scale(t(dat[top_g,])))

畫個新的熱圖

可以看到之前熱圖顯示的坐標范圍是0-15娶桦,當(dāng)然這里我們可以設(shè)置上限贾节、下限汁汗,比如可以將上限設(shè)為2,下限設(shè)為-2

n[n>2]=2
n[n< -2]= -2

范圍設(shè)置好以后栗涂,可以再將分組信息grp加上去

# 先構(gòu)建一個分組的數(shù)據(jù)框知牌,列是原來的分組信息
anno_col=data.frame(g=grp)
# 行名是樣本名,也就是歸一化后的n矩陣的列名
rownames(anno_col)=colnames(n)
# 看一下結(jié)果
> head(anno_col)
               g
SS2_15_0048_A3 1
SS2_15_0048_A6 1
SS2_15_0048_A5 2
SS2_15_0048_A4 3
SS2_15_0048_A1 2
SS2_15_0048_A2 3

最后設(shè)置pheatmap的選項:

    pheatmap(n,
             show_colnames =F, #不顯示列名
             show_rownames = F, #不顯示行名
             annotation_col=anno_col, # 在列上加注釋(也就是分組信息)
             filename = 'all_cells_top_1000_new.png')

可以看到這張圖和畫的第一張圖的區(qū)別是:出現(xiàn)了一些紅色斤程,說明新出現(xiàn)了一些基因在某些樣本中高表達角寸,并且很明顯。但是仍然很有可能它們的實際表達量并不高忿墅,僅僅是玩了一個"樣本排位賽“(即使數(shù)值再小扁藕,也有甲乙丙丁)

關(guān)于分組有一點奇怪

可以看到這里的分組信息有點散亂,想到:這里使用的anno_col 是利用grp得到的球匕,而grp是基于一萬多基因的dat矩陣得到的(回憶下第5篇內(nèi)容)

因此這里的分組信息可以更新一下纹磺,基于我們這里的top1000基因,只需要將原來的dat換成現(xiàn)在的n矩陣就好亮曹,依然選取前4個聚類分群

# 將原來dat換為n
hc=hclust(dist(t(n))) 
clus = cutree(hc, 4)
top1000_grp=as.factor(clus)
> table(top1000_grp)
top1000_grp
  1   2   3   4 
462 166  42  98 

看一下當(dāng)前基于1000個基因的前4組和原來基于所有基因的前4組之間重合度橄杨,雖然他們總和一樣,都是1000照卦,而且也都是按照1-4的順序排列式矫,但實際上背后的意義千差萬別

> table(top1000_grp,grp)
           grp
top1000_grp   1   2   3   4
          1 167 295   0   0
          2   7   3 121  35
          3  42   0   0   0
          4  96   2   0   0

舉個例子,有462個基因?qū)儆谛路纸M的1號組役耕,但其中有295個屬于原來分組的2號組(這個數(shù)量超過了原來分組的1號組)采转,可以看出新分組和原分組的重合度并不高,因此更加說明我們重新分組的重要性

new_anno_col=data.frame(g=top1000_grp)
rownames(new_anno_col)=colnames(n)
 pheatmap(n,
             show_colnames =F, #不顯示列名
             show_rownames = F, #不顯示行名
             annotation_col=new_anno_col, # 在列上加注釋(也就是分組信息)
             filename = 'all_cells_top_1000_new_2.png')

做個PCA

之前好不容易過濾得到的dat矩陣瞬痘,不能因為下面分析的失誤被"污染"故慈,因此再進行下一個分析之前先做一個數(shù)據(jù)備份是個好習(xí)慣

dat_bk=dat
# 然后我們就能放心對dat進行操作了
dat=t(dat)
dat=as.data.frame(dat)
dat=cbind(dat,grp)

PCA分析需要行是樣本,列是基因表達量的數(shù)據(jù)框(和聚類一樣框全,是對行/樣本進行操作察绷,最后做的圖中一個點就表示一個樣本/細胞)

最后用PCA進行計算分析,用fviz_pca_ind函數(shù)進行可視化

這里用到的分組還是之前基于全部基因進行聚類的cutree結(jié)果

library("FactoMineR")
library("factoextra") 
dat.pca <- PCA(dat[,-ncol(dat)], graph = FALSE) #'-'表示“非”
fviz_pca_ind(dat.pca,repel =T,
               geom.ind = "point", 
               col.ind = dat$grp, # 按組分顏色
               # palette = c("#00AFBB", "#E7B800"),
               addEllipses = TRUE, 
               legend.title = "Groups"
  )
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末津辩,一起剝皮案震驚了整個濱河市拆撼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌喘沿,老刑警劉巖闸度,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蚜印,居然都是意外死亡莺禁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門晒哄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來睁宰,“玉大人肪获,你說我怎么就攤上這事∑馍担” “怎么了孝赫?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長红符。 經(jīng)常有香客問我青柄,道長,這世上最難降的妖魔是什么预侯? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任致开,我火速辦了婚禮,結(jié)果婚禮上萎馅,老公的妹妹穿的比我還像新娘双戳。我一直安慰自己,他們只是感情好糜芳,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布飒货。 她就那樣靜靜地躺著,像睡著了一般峭竣。 火紅的嫁衣襯著肌膚如雪塘辅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天皆撩,我揣著相機與錄音扣墩,去河邊找鬼。 笑死扛吞,一個胖子當(dāng)著我的面吹牛呻惕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播滥比,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼蟆融,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了守呜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤山憨,失蹤者是張志新(化名)和其女友劉穎查乒,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體郁竟,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡玛迄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了棚亩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓖议。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡虏杰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出勒虾,到底是詐尸還是另有隱情纺阔,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布修然,位于F島的核電站笛钝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏愕宋。R本人自食惡果不足惜玻靡,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望中贝。 院中可真熱鬧囤捻,春花似錦、人聲如沸邻寿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽老厌。三九已至瘟则,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間枝秤,已是汗流浹背醋拧。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留淀弹,地道東北人丹壕。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像薇溃,于是被迫代替她去往敵國和親菌赖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容