使用SCENIC分析singlecell-RNAseq實戰(zhàn)演練

SCENIC全稱:Single-Cell rEgulatory Network Inference and Clustering
實戰(zhàn)之前需要準(zhǔn)備的學(xué)習(xí)資料:
1.閱讀關(guān)于SCENIC的介紹:SCENIC | 以single-cell RNA-seq數(shù)據(jù)推斷基因調(diào)控網(wǎng)絡(luò)和細(xì)胞功能聚類
2.閱讀文獻(xiàn):SCENIC: single-cell regulatory network inference and clustering [PMID: 28991892]
?以上兩部分介紹SCENIC能做什么與SCENIC標(biāo)準(zhǔn)流程
3.下載官方教程:aertslab/SCENIC
?下載的文件中重點看兩部分文件SCENIC_Running.htmldetailedStep_0-4.html
? - SCENIC_Running.html里有每一步的說明與標(biāo)準(zhǔn)流程代碼
? - detailedStep_0-4.html里有標(biāo)準(zhǔn)流程代碼中包裝好的函數(shù)中的詳細(xì)代碼,主要是為了有個性化用戶使用時修改代碼莺戒。入門實戰(zhàn)也需要看伴嗡,主要是為了進(jìn)一步了解標(biāo)準(zhǔn)流程中使用的函數(shù)具體做了什么,明白每一步產(chǎn)生的數(shù)據(jù)是什么从铲,數(shù)據(jù)的名稱瘪校,存儲在了那一文件夾中,以及執(zhí)行一個函數(shù)時調(diào)用了哪一個數(shù)據(jù)。
標(biāo)準(zhǔn)流程如下阱扬,基于3個R包:GENIE3泣懊,RcisTargetAUCell


? ? ? ? ? ? ? ? ? ? 操練起來

1.在R中加載表達(dá)矩陣與樣品(細(xì)胞)信息

rm(list = ls())
options(stringsAsFactors = F)
#Loading data
load(file = 'input_data.Rdata')
#Filter the samples based on the standatd in the article.
table(meta$Mapping.rate>30)
meta_filter1<-meta[meta$Mapping.rate>30,]
meta_filter2<-meta_filter1[meta_filter1$Gene.number>1000,]
meta_filter3<-meta_filter2[meta_filter2$Transcript.number>=10000,]
dim(meta_filter3)
#Choose the keeped the samples in the expression matrix.
keep.samples<-as.character(meta_filter3[,1])
counts_filter<-counts[,keep.samples]
dim(counts_filter)
counts_filter[1:4,1:10]
#Check the expression matrix
fivenum(apply(counts_filter,1,function(x) sum(x>0)))
hist(apply(counts_filter,2,function(x) sum(x>0)),breaks = 100)
#Transform the counts number to CPM in counts_filter
library(edgeR)
counts_filter<-cpm(counts_filter)

載入的表達(dá)矩陣counts_filter為基因表達(dá)的count值麻惶,我們這里只通過使用edgeR包中的CPM()函數(shù)去除了文庫大小馍刮,未做log處理。原因見官網(wǎng)描述(如下):

Expression units: The preferred expression values are gene-summarized counts. There is currently not a strong recommendation towards using the raw counts, or counts normalized through single-cell specific methods (e.g. Seurat). Other measurements, such as transcripts/counts per million (TPM) and FPKM/RPKM, are also accepted as input. However, note that some authors recommend avoiding within sample normalization (i.e. TPM) for co-expression analysis (first step of SCENIC) because they may induce artificial co-variation (Crow et al. (2016)). The choice of input expression matrix might have some effect on the co-expression analysis to create the regulons (step 1). The other steps of the workflow are not directly affected by the input expression values: (2) The expression is not taken into account for the motif analysis, and (3) AUCell, which is used for scoring the regulons on the cells, is cell ranking-based (it works as an implicit normalization). Overall, SCENIC is quite robust to this choice, we have applied SCENIC to datasets using raw (logged) UMI counts, normalized UMI counts, and TPM and they all provided reliable results (see Aibar et al. (2017)).

2. 使用Seurat包創(chuàng)建對象

#Create subject using Seurat R package
suppressMessages(library(Seurat))
Pollen <- CreateSeuratObject(counts = counts_filter, 
                             meta.data =meta_filter3,
                             min.cells = 300,
                             min.features = 1500,
                             project = "Pollen")
Pollen
sce <- Pollen

Seurat包用法與創(chuàng)建對象時參數(shù)的設(shè)置詳見生信技能樹B站教程:全網(wǎng)第一的單細(xì)胞轉(zhuǎn)錄組實戰(zhàn)演練

3. 提取sce對象中的表達(dá)矩陣與樣品(cell)信息并保存

exprMat<-GetAssayData(object = sce,slot = "counts")
class(exprMat)
dim(exprMat)
exprMat[1:4,1:10]
cellInfo <-sce@meta.data
dim(cellInfo)
save(exprMat,cellInfo,file = 'Mat and cell.Rdata')

4.下載RcisTarget的物種特定數(shù)據(jù)庫(這里是第一個坑)
?RcisTarget數(shù)據(jù)庫中的數(shù)據(jù)目前只支持人用踩,鼠渠退,果蠅三個物種。實戰(zhàn)用的數(shù)據(jù)是人膝關(guān)節(jié)軟骨細(xì)胞脐彩,因此下載了人的feather文件碎乃。為什么說這里是個坑呢?官網(wǎng)給的下載方式是這樣的:

dbFiles <- c("https://resources.aertslab.org/cistarget/databases/homo_sapiens/hg19/refseq_r45/mc9nr/gene_based/hg19-500bp-upstream-7species.mc9nr.feather",
"https://resources.aertslab.org/cistarget/databases/homo_sapiens/hg19/refseq_r45/mc9nr/gene_based/hg19-tss-centered-10kb-7species.mc9nr.feather")
# dir.create("cisTarget_databases"); setwd("cisTarget_databases") # if needed
for(featherURL in dbFiles)
{
  download.file(featherURL, destfile=basename(featherURL)) # saved in current dir
}

?在大陸下載這個數(shù)據(jù)的速度真的很感人(也可能是我家網(wǎng)不行惠奸,但是玩LOL剛剛的)梅誓,容易下一半直接掛掉。直接掛掉還是好的佛南,如果你下載下來了梗掰,文件大小也與官網(wǎng)給的一樣,但其實里面的數(shù)據(jù)是不對的嗅回。后續(xù)分析調(diào)用這個文件的時候R會報錯及穗。我第一次使用的時候就是這樣。
?解決的方案是:手動下載(無奈辦了一個迅雷會員绵载,1.02G的feather文件分分鐘下好)并使用軟件MD5 & SHA Checksum Utility檢查文件的完整性埂陆,與官網(wǎng)給的sha256sum進(jìn)行比較,sha256sum一致娃豹,即可用于后續(xù)分析焚虱。MD5 & SHA Checksum Utility的用法自行百度。

5. SCENIC的初始設(shè)置

library(SCENIC)
org <- "hgnc" 
dbDir <- "cisTarget_databases"
myDatasetTitle <- "SCENIC analysis on Human cartilage" # Create a name for your analysis
data(defaultDbNames)
dbs <- defaultDbNames[[org]]
scenicOptions <- initializeScenic(org=org, dbDir=dbDir, dbs=dbs, datasetTitle=myDatasetTitle, nCores=10) 
#scenicOptions <- readRDS("int/scenicOptions.Rds")
saveRDS(scenicOptions, file="int/scenicOptions.Rds") 

這里SCENIC創(chuàng)建了一個對象scenicOptions懂版,后續(xù)分析都是基于這個對象來進(jìn)行的鹃栽。
此外,在后續(xù)分析中產(chǎn)生的數(shù)據(jù)會存儲在R當(dāng)前目錄下的int文件夾躯畴,SCENIC輸出的結(jié)果會存儲在R當(dāng)前目錄下的output文件夾民鼓。

6. 將表達(dá)矩陣中未在cisTarget database中收錄的基因去除

library(RcisTarget)
dbFilePath <- getDatabases(scenicOptions)[[1]]
motifRankings <- importRankings(dbFilePath)
genesInDatabase <- colnames(getRanking(motifRankings))
genesLeft_minCells<-rownames(exprMat)
length(genesLeft_minCells)
genesLeft_minCells_inDatabases <- genesLeft_minCells[which(genesLeft_minCells %in% genesInDatabase)]
length(genesLeft_minCells_inDatabases)
genesKept <- genesLeft_minCells_inDatabases
exprMat_filtered <- exprMat[genesKept, ]
dim(exprMat_filtered)

7. 計算相關(guān)性并對數(shù)據(jù)進(jìn)行l(wèi)og處理

class(exprMat_filtered)
runCorrelation(as.matrix(exprMat_filtered), scenicOptions)
exprMat_filtered <- log2(exprMat_filtered+1) 

8. 運行GENIE3

library(GENIE3)
runGenie3(as.matrix(exprMat_filtered), scenicOptions)
save(exprMat_filtered,scenicOptions,file = "input_GENIE3_data.Rdata")

官網(wǎng)教程中這里沒有as.matrix()函數(shù),我在運行的時候報錯了私股,class()以后顯示exprMat_filtered是一個matrix,不知道為什么會報錯摹察,但是加入as.matrix()函數(shù)就可以了。

9.建立GRN并對其打分
?為了節(jié)約電腦內(nèi)存倡鲸,這里重啟了R并重新載入數(shù)據(jù)

load('Mat and cell.Rdata')
logMat <- log2(exprMat+1)
dim(exprMat)

?運行SCENIC

library(SCENIC)
scenicOptions <- readRDS("int/scenicOptions.Rds")

scenicOptions@settings$verbose <- TRUE
scenicOptions@settings$nCores <- 1
scenicOptions@settings$seed <- 123

scenicOptions@settings$dbs <- scenicOptions@settings$dbs["10kb"]

runSCENIC_1_coexNetwork2modules(scenicOptions)
runSCENIC_2_createRegulons(scenicOptions, coexMethod=c("top5perTarget")) 
runSCENIC_3_scoreCells(scenicOptions, as.matrix(logMat))
#電腦內(nèi)存只有16G,以上步驟相當(dāng)耗時黄娘,可以睡前運行峭状,醒來結(jié)果就出來了=克滴。=!
newThresholds <- savedSelections$thresholds
scenicOptions@fileNames$int["aucell_thresholds",1] <- "int/newThresholds.Rds"
saveRDS(newThresholds, file=getIntName(scenicOptions, "aucell_thresholds"))
saveRDS(scenicOptions, file="int/scenicOptions.Rds") 
#網(wǎng)絡(luò)活性的結(jié)果進(jìn)行二維化
runSCENIC_4_aucell_binarize(scenicOptions)

?結(jié)果可視化

aucellApp <- plotTsne_AUCellApp(scenicOptions, logMat)
savedSelections <- shiny::runApp(aucellApp)

左上角可以調(diào)不同轉(zhuǎn)錄因子,觀察每個regulon的可視化結(jié)果优床。

計算得到的regulon(轉(zhuǎn)錄因子與其預(yù)測靶基因)結(jié)果存儲在output文件夾中:Step2_regulonTargetsInfo
到這里SCENIC的主干流程即已完成劝赔,后續(xù)對結(jié)果的解讀與其他可視化見官網(wǎng)教程。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載胆敞,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者着帽。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市移层,隨后出現(xiàn)的幾起案子仍翰,更是在濱河造成了極大的恐慌,老刑警劉巖观话,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件予借,死亡現(xiàn)場離奇詭異,居然都是意外死亡频蛔,警方通過查閱死者的電腦和手機(jī)灵迫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晦溪,“玉大人瀑粥,你說我怎么就攤上這事∪玻” “怎么了狞换?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長嫌术。 經(jīng)常有香客問我哀澈,道長,這世上最難降的妖魔是什么度气? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任割按,我火速辦了婚禮,結(jié)果婚禮上磷籍,老公的妹妹穿的比我還像新娘适荣。我一直安慰自己,他們只是感情好院领,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布弛矛。 她就那樣靜靜地躺著,像睡著了一般比然。 火紅的嫁衣襯著肌膚如雪丈氓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機(jī)與錄音万俗,去河邊找鬼湾笛。 笑死,一個胖子當(dāng)著我的面吹牛闰歪,可吹牛的內(nèi)容都是我干的嚎研。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼库倘,長吁一口氣:“原來是場噩夢啊……” “哼临扮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起教翩,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤杆勇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后迂曲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體靶橱,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年路捧,在試婚紗的時候發(fā)現(xiàn)自己被綠了关霸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡杰扫,死狀恐怖队寇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情章姓,我是刑警寧澤佳遣,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站凡伊,受9級特大地震影響零渐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜系忙,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一诵盼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧银还,春花似錦风宁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至捺弦,卻和暖如春饮寞,著一層夾襖步出監(jiān)牢的瞬間孝扛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工骂际, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留疗琉,地道東北人冈欢。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓歉铝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親凑耻。 傳聞我的和親對象是個殘疾皇子太示,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

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