單細(xì)胞scRNA-seq學(xué)習(xí)筆記4-細(xì)胞周期推斷

課程學(xué)習(xí)生信技能樹單細(xì)胞轉(zhuǎn)錄組(基礎(chǔ))

現(xiàn)在福利來了,單細(xì)胞課程免費(fèi)開放了:#完整版視頻上線!全卵洗!面!免弥咪!費(fèi)过蹂!#全網(wǎng)第一的單細(xì)胞轉(zhuǎn)錄組實(shí)戰(zhàn)演練_ https://www.bilibili.com/video/av38741055?p=11

不同類型的細(xì)胞哪怕是在同一個(gè)時(shí)間點(diǎn)的細(xì)胞周期狀態(tài),它們的細(xì)胞周期相關(guān)基因表達(dá)也是不同的聚至。更重要的是酷勺,還有很多非直接細(xì)胞周期相關(guān)基因也需要考慮。
細(xì)胞周期是利用基因來推斷G扳躬、S脆诉、M期(https://en.wikipedia.org/wiki/Cell_cycle)

cell cycle

先復(fù)現(xiàn)一下視頻里面的代碼:
Scran包使用推斷細(xì)胞周期

載入數(shù)據(jù)和

rm(list = ls())  ## 魔幻操作甚亭,一鍵清空~
options(stringsAsFactors = F)
load(file = '../input.Rdata')
a[1:4,1:4]
head(df) 

## 載入第0步準(zhǔn)備好的表達(dá)矩陣,及細(xì)胞的一些屬性(hclust分群库说,plate批次狂鞋,檢測(cè)到的基因數(shù)量)
# 注意 變量a是原始的counts矩陣,變量 dat是logCPM后的表達(dá)量矩陣潜的。

group_list=df$g
plate=df$plate
table(plate)
 a[1:4,1:4]

創(chuàng)建sce對(duì)象

library(scran)
# https://mp.weixin.qq.com/s/nFSa5hXuKHrGu_othopbWQ
sce <- SingleCellExperiment(list(counts=dat)) 
sce
class: SingleCellExperiment 
dim: 12198 768 
metadata(0):
assays(1): counts
rownames(12198): 0610007P14Rik 0610009B22Rik ... ERCC-00170
  ERCC-00171
rowData names(0):
colnames(768): SS2_15_0048_A3 SS2_15_0048_A6 ... SS2_15_0049_P22
  SS2_15_0049_P24
colData names(0):
reducedDimNames(0):
spikeNames(0):

主要使用cyclone函數(shù)
cyclone函數(shù)主要需要三個(gè)元素:
一個(gè)是sce單細(xì)胞對(duì)象骚揍,
一個(gè)是pairs參數(shù),
還有就是gene.names參數(shù)啰挪。

第二個(gè)pairs參數(shù)的意思可以看幫助文檔

image.png
# scran包安裝好后信不,會(huì)在exdata文件夾中找到附件文件
library(org.Mm.eg.db)
# syste,.file會(huì)列出文件所在的路徑,下圖就是exdata文件夾下的文件亡呵,看到除了小鼠還有人的相關(guān)的RDS數(shù)據(jù)抽活。這個(gè)RDS其實(shí)和平常看到的Rdata差不多锰什,只不過Rdata是針對(duì)多個(gè)對(duì)象下硕,Rds是針對(duì)一個(gè)對(duì)象進(jìn)行存儲(chǔ)和讀取
mm.pairs <- readRDS(system.file("exdata", "mouse_cycle_markers.rds", 
                                package="scran"))
image.png

第三個(gè)參數(shù):gene.names,cyclone函數(shù)需要使用ensembl基因名

# 將symbol轉(zhuǎn)為ensembl基因
ensembl <- mapIds(org.Mm.eg.db, keys=rownames(sce), 
                  keytype="SYMBOL", column="ENSEMBL")
head(ensembl)
       0610007P14Rik        0610009B22Rik        0610009L18Rik 
                  NA "ENSMUSG00000007777" "ENSMUSG00000043644" 
       0610009O20Rik        0610010F05Rik        0610010K14Rik 
                  NA "ENSMUSG00000042208" "ENSMUSG00000020831" 

三者齊全汁胆,可以進(jìn)行細(xì)胞周期計(jì)算:

system.time(assigned <- cyclone(sce, pairs=mm.pairs, gene.names=ensembl))
# 這一過程會(huì)比較慢梭姓,用system.time計(jì)算一下時(shí)間看看,大約一分半
#  user  system elapsed 
# 96.229   0.767 104.666 
save(assigned,file = 'cell_cycle_assigned.Rdata')
str(assigned) # 包含了phases嫩码、scores誉尖、normalized.scores三個(gè)元素
List of 3
 $ phases           : chr [1:768] "G1" "G1" "G1" "G1" ...
 $ scores           :'data.frame':  768 obs. of  3 variables:
  ..$ G1 : num [1:768] 1 0.997 0.997 1 1 1 1 0.937 1 1 ...
  ..$ S  : num [1:768] 0.119 0.002 0.039 0.011 0.395 0.009 0.011 0.008 0.04 0.013 ...
  ..$ G2M: num [1:768] 0.004 0.01 0.02 0.002 0 0 0.02 0.126 0 0.023 ...
 $ normalized.scores:'data.frame':  768 obs. of  3 variables:
  ..$ G1 : num [1:768] 0.89 0.988 0.944 0.987 0.717 ...
  ..$ S  : num [1:768] 0.10597 0.00198 0.03693 0.01086 0.28315 ...
  ..$ G2M: num [1:768] 0.00356 0.00991 0.01894 0.00197 0 ...

下面就根據(jù)assigned進(jìn)行操作

head(assigned$scores)
     G1     S   G2M
1 1.000 0.119 0.004
2 0.997 0.002 0.010
3 0.997 0.039 0.020
4 1.000 0.011 0.002
5 1.000 0.395 0.000
6 1.000 0.009 0.000
table(assigned$phases)

 G1 G2M   S 
723  34  11 

# 作圖(利用score和phases這兩個(gè)元素)
draw=cbind(assigned$score,assigned$phases) 
attach(draw) #attach的目的就是現(xiàn)在加載,之后直接引用即可
library(scatterplot3d)
scatterplot3d(G1, S, G2M, angle=20,
              color = rainbow(3)[as.numeric(as.factor(assigned$phases))],
              grid=TRUE, box=FALSE)
detach(draw) 
image.png

還能做個(gè)熱圖(就是在anno_col上不斷加內(nèi)容即可)

library(pheatmap)
# 取差異前100基因
cg=names(tail(sort(apply(dat,1,sd)),100))
# 矩陣歸一化
n=t(scale(t(dat[cg,])))
# 原來的樣本注釋信息 df中包含了 g铸题、plate  铡恕、n_g、all信息丢间,現(xiàn)在新增phases信息
df$cellcycle=assigned$phases 
ac=df
rownames(ac)=colnames(n)
pheatmap(n,show_colnames =F,show_rownames = F,
         annotation_col=ac)
dev.off()

image.png

探索:scran包中的cyclone函數(shù)細(xì)胞周期原理

主要利用了scran包中的cyclone函數(shù)

cyclone函數(shù)主要需要三個(gè)元素:一個(gè)是sce單細(xì)胞對(duì)象探熔,一個(gè)是pairs參數(shù),還有就是gene.names參數(shù)千劈。第一個(gè)已準(zhǔn)備好祭刚,第二個(gè)參數(shù)的意思可以看幫助文檔,第三個(gè)參數(shù)要求是Ensembl ID

image
# scran包安裝好后墙牌,會(huì)在exdata文件夾中找到附件文件
library(org.Mm.eg.db)
# syste,.file會(huì)列出文件所在的路徑涡驮,下圖就是exdata文件夾下的文件,看到除了小鼠還有人的相關(guān)的RDS數(shù)據(jù)喜滨。這個(gè)RDS其實(shí)和平匙酵保看到的Rdata差不多,只不過Rdata是針對(duì)多個(gè)對(duì)象虽风,Rds是針對(duì)一個(gè)對(duì)象進(jìn)行存儲(chǔ)和讀取
mm.pairs <- readRDS(system.file("exdata", "mouse_cycle_markers.rds", 
                                package="scran"))

# 舉個(gè)例子
head(mm.pairs$G1)
               first             second
1 ENSMUSG00000000001 ENSMUSG00000001785
2 ENSMUSG00000000001 ENSMUSG00000005470
3 ENSMUSG00000000001 ENSMUSG00000012443
4 ENSMUSG00000000001 ENSMUSG00000015120
5 ENSMUSG00000000001 ENSMUSG00000022033
6 ENSMUSG00000000001 ENSMUSG00000023015

注意:這里小鼠的訓(xùn)練數(shù)據(jù)集是利用胚胎干細(xì)胞數(shù)據(jù)得到的棒口,但對(duì)于其他細(xì)胞類型也是準(zhǔn)確的 (Scialdone et al. 2015)寄月,可能是由于細(xì)胞周期相關(guān)轉(zhuǎn)錄的保守性 (Bertoli, Skotheim, and Bruin 2013; Conboy et al. 2007)。

具體的使用就很簡單:

system.time(assignments <- cyclone(sce, mm.pairs, 
                       gene.names=rowData(sce)$ENSEMBL))
##   user  system elapsed 
##  21.740   0.376  26.856 
save(sce,assignments,file = '416B_cell_cycle.Rdata')

這個(gè)結(jié)果并不是說某個(gè)細(xì)胞一定就處于哪個(gè)細(xì)胞周期无牵,它也是根據(jù)大樣本量背景進(jìn)行概率估計(jì)漾肮,然后計(jì)算一個(gè)分值,分值越高茎毁,說明某個(gè)細(xì)胞更有可能屬于哪個(gè)細(xì)胞周期克懊,給我們一定的參考。

例如七蜘,看一下G1和G2/M的分值情況谭溉,其中每個(gè)點(diǎn)代表一個(gè)細(xì)胞:

plot(assignments$score$G1, assignments$score$G2M, 
    xlab="G1 score", ylab="G2/M score", pch=16)

image

計(jì)算完細(xì)胞分值,就該劃分細(xì)胞類型了

具體規(guī)則是:如果一個(gè)細(xì)胞在G1中得分大于0.5橡卤,并且它高于G2/M的得分扮念,那么這個(gè)細(xì)胞就被劃分到G1期;如果細(xì)胞在G2/M中得分大于0.5碧库,并且高于G1的得分柜与,那么它就劃為G2/M期;如果細(xì)胞的G1嵌灰、G2/M得分都不大于0.5旅挤,那么它就劃為S期。于是上面??的結(jié)果就可以被劃分成:

image

這里只是說明一下原理伞鲫, 其實(shí)函數(shù)已經(jīng)為我們劃分好,存到了結(jié)果中:

sce$phases <- assignments$phases
table(sce$phases)
## 
##  G1 G2M   S 
##  98  62  23

作者的建議

  • 為了去掉細(xì)胞周期帶來的影響签舞,我們一般只要某一群特定周期的細(xì)胞(一般是G1期)進(jìn)行下游分析秕脓。當(dāng)然如果其他時(shí)期的細(xì)胞數(shù)量不會(huì)造成明顯的影響,我們也可以帶著它們儒搭,到下游分析時(shí)直接將assignments$phases作為一個(gè)批次效應(yīng)因素考慮即可吠架,這樣既避免了其他周期細(xì)胞的干擾,又能避免丟失部分信息搂鲫。
  • 訓(xùn)練數(shù)據(jù)集雖然說對(duì)多種細(xì)胞類型都支持傍药,如果本身的數(shù)據(jù)與訓(xùn)練數(shù)據(jù)相差太大(比如使用了不同的方法得到的數(shù)據(jù)),那么我們可以根據(jù)自己的數(shù)據(jù)去DIY一個(gè)分類器魂仍。使用sandbag函數(shù)即可拐辽,同樣如果研究其他的物種沒有給定的分類器,我們就可以這樣操作
  • 使用cyclone之前不要過濾低豐度轉(zhuǎn)錄本擦酌。即使一個(gè)基因在任何一個(gè)細(xì)胞都不表達(dá)俱诸,但在周期推斷環(huán)節(jié)這個(gè)基因名還是有作用的。因?yàn)檫@一步做的是一個(gè)基因?qū)Ρ容^赊舶,所以它依然可以提供信息睁搭。

參考:
1.單細(xì)胞轉(zhuǎn)錄組學(xué)習(xí)筆記-11-生物學(xué)背景知識(shí)之細(xì)胞周期推斷 - 簡書 http://www.reibang.com/p/46d597d21a16
2.關(guān)于細(xì)胞周期推斷的知識(shí)更新 - 簡書 http://www.reibang.com/p/455047d7557c
3.在單細(xì)胞轉(zhuǎn)錄組表達(dá)矩陣?yán)锩嫒コ?xì)胞周期影響 - 簡書 http://www.reibang.com/p/aa867c3c12de
4.ccRemover說明書
5.清除單細(xì)胞數(shù)據(jù)細(xì)胞周期效應(yīng)造成的影響

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赶诊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子园骆,更是在濱河造成了極大的恐慌舔痪,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锌唾,死亡現(xiàn)場(chǎng)離奇詭異锄码,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)鸠珠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門巍耗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人渐排,你說我怎么就攤上這事炬太。” “怎么了驯耻?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵亲族,是天一觀的道長。 經(jīng)常有香客問我可缚,道長霎迫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任帘靡,我火速辦了婚禮知给,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘描姚。我一直安慰自己涩赢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布轩勘。 她就那樣靜靜地躺著筒扒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绊寻。 梳的紋絲不亂的頭發(fā)上花墩,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音澄步,去河邊找鬼冰蘑。 笑死,一個(gè)胖子當(dāng)著我的面吹牛村缸,可吹牛的內(nèi)容都是我干的懂缕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼王凑,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼搪柑!你這毒婦竟也來了聋丝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤工碾,失蹤者是張志新(化名)和其女友劉穎弱睦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渊额,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡况木,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了旬迹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片火惊。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖奔垦,靈堂內(nèi)的尸體忽然破棺而出屹耐,到底是詐尸還是另有隱情,我是刑警寧澤椿猎,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布惶岭,位于F島的核電站,受9級(jí)特大地震影響犯眠,放射性物質(zhì)發(fā)生泄漏按灶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一筐咧、第九天 我趴在偏房一處隱蔽的房頂上張望鸯旁。 院中可真熱鬧,春花似錦量蕊、人聲如沸羡亩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至雷袋,卻和暖如春吉殃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背楷怒。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工蛋勺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鸠删。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓抱完,卻偏偏與公主長得像,于是被迫代替她去往敵國和親刃泡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子巧娱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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