10X單細(xì)胞(10X空間轉(zhuǎn)錄組)多樣本基因表達(dá)動(dòng)態(tài)分析之Lamian

hello,大家好其障,今天我們來分享一個(gè)新的分析點(diǎn)锋八,跨樣本的基因表達(dá)動(dòng)態(tài)磺浙。文章在A statistical framework for differential pseudotime analysis with multiple single-cell RNA-seq samples,很有意義的一個(gè)分析點(diǎn)跑慕。

看看簡(jiǎn)介

基于單細(xì)胞 RNA-seq (scRNA-seq) 數(shù)據(jù)的偽時(shí)間分析已被廣泛用于研究沿連續(xù)生物過程的動(dòng)態(tài)基因調(diào)控程序万皿,如細(xì)胞分化、免疫反應(yīng)和疾病發(fā)展核行。 現(xiàn)有的偽時(shí)間分析方法主要解決重建細(xì)胞偽時(shí)間軌跡和推斷一個(gè)生物樣本中沿重建軌跡的基因表達(dá)變化的問題牢硅。 隨著越來越多地對(duì)多個(gè)患者樣本進(jìn)行 scRNA-seq 研究,比較不同樣本的基因表達(dá)動(dòng)態(tài)已成為一種新的需求芝雪,但缺乏系統(tǒng)的分析解決方案减余。 (個(gè)人翻譯,總的來說惩系,其實(shí)我們更加關(guān)注相對(duì)于normal位岔,疾病樣本在軌跡分化的過程中的基因動(dòng)態(tài))。
其實(shí)軟件Lamian就是對(duì)多樣本軌跡分析的補(bǔ)充堡牡,考慮到單細(xì)胞數(shù)據(jù)樣本包含多種生物學(xué)條件(例如抒抬,年齡、性別晤柄、樣本類型擦剑、疾病狀態(tài)等),這個(gè)分析軟件框架有以下功能芥颈。
  • (1) 構(gòu)建細(xì)胞偽時(shí)間軌跡惠勒,評(píng)估軌跡分支結(jié)構(gòu)的不確定性。
  • (2) 評(píng)估與樣本生物學(xué)因素相關(guān)的分支結(jié)構(gòu)的變化浇借。
  • (3) 確定沿偽時(shí)間的細(xì)胞豐度和基因表達(dá)的變化捉撮。
  • (4) 表征樣本生物學(xué)差異如何修改細(xì)胞豐度和基因表達(dá)的偽時(shí)間動(dòng)態(tài)。
重要的是妇垢,在識(shí)別與偽時(shí)間和樣本生物學(xué)差異相關(guān)的細(xì)胞豐度或基因表達(dá)變化時(shí)巾遭,Lamian 考慮了其他現(xiàn)有偽時(shí)間方法未考慮的生物樣本的變異性。 因此闯估,在分析多樣本數(shù)據(jù)時(shí)灼舍,Lamian 能夠更恰當(dāng)?shù)乜刂棋e(cuò)誤發(fā)現(xiàn)率 (FDR),這是任何其他方法都無法提供的特性涨薪。 (這個(gè)可能確實(shí)需要關(guān)注)骑素。

接下來我們?cè)敿?xì)看看分析過程(使用示例數(shù)據(jù))

options(warn=-1)
suppressMessages(library(Lamian))

Module 1: tree variability

Lamian 的模塊 1 設(shè)計(jì)用于檢測(cè)偽時(shí)間樹形結(jié)構(gòu)中分支的穩(wěn)定性。 自動(dòng)隨機(jī)選取偽時(shí)間樹結(jié)構(gòu)中的分支刚夺,然后測(cè)試它們的檢測(cè)率(這算是檢驗(yàn)分支的穩(wěn)定性)献丑。 在每次cell-bootstrapping后末捣,重建樹結(jié)構(gòu)并重新識(shí)別所有分支。 同時(shí)應(yīng)用 Jaccard 統(tǒng)計(jì)量和重疊系數(shù)作為評(píng)估引導(dǎo)設(shè)置中的任何分支是否與原始分支之一匹配的統(tǒng)計(jì)量创橄。 分支的檢測(cè)率定義為分支發(fā)現(xiàn)它匹配的bootstrap settings的百分比箩做。 模塊 1 還報(bào)告和測(cè)試每個(gè)分支中的樣本比例。 (有點(diǎn)費(fèi)勁)妥畏。

數(shù)據(jù)準(zhǔn)備

需要一個(gè)基因的細(xì)胞表達(dá)矩陣邦邦、細(xì)胞的低維表示和細(xì)胞注釋(每個(gè)細(xì)胞屬于哪個(gè)樣本)。這里我們就用示例數(shù)據(jù)分析看看
data(man_tree_data)
man_tree_data 是一個(gè)包含基因按細(xì)胞表達(dá)矩陣醉蚁、細(xì)胞的低維表示(PCA)和細(xì)胞注釋的列表燃辖,其中第一列是細(xì)胞名稱,第二列是樣本名稱网棍,行名稱是細(xì)胞 名稱黔龟。

推斷樹形結(jié)構(gòu)

set.seed(12345)
res = infer_tree_structure(pca = man_tree_data[['pca']], 
                           expression = man_tree_data[['expression']], 
                           cellanno = man_tree_data[['cellanno']], 
                           origin.marker = c('CD34'), 
                           number.cluster = 5,
                           xlab='Principal component 1', 
                           ylab = 'Principal component 2')
這個(gè)軟件看來是按照pca的成分來構(gòu)建樹形結(jié)構(gòu),我想我們還是可以替換成tSNE或者UMAP确沸,還要指定起始位點(diǎn)的基因特征捌锭,分支數(shù)量,看來這個(gè)軟件罗捎,需要的前期知識(shí)有點(diǎn)多观谦,這里的cluster我們就對(duì)應(yīng)我們聚類的結(jié)果或者細(xì)胞注釋的結(jié)果。

繪圖

plotmclust(res, cell_point_size = 0.5, 
           x.lab = 'Principal component 1', 
           y.lab = 'Principal component 2')
圖片.png
這里我們還是真的需要UMAP的降維結(jié)果最好桨菜。

估計(jì)分支的不穩(wěn)定性

We can call the function evaluate_uncertainty() to evaluate the tree topology uncertainty. We suggested that users set n.permute = 100 or more to ensure enough randomness to construct the null distribution, but here we set n.permute = 5 in order to provide a simplified example.
result <- evaluate_uncertainty(res, n.permute=5)

這里作為簡(jiǎn)單的示例豁状,n.permute 設(shè)置為5,在實(shí)際應(yīng)用中設(shè)置 n.permute = 100 或更多時(shí)倒得,結(jié)果會(huì)更有意義泻红。

Module 2: Evaluate differential topoloty

Lamian 的模塊 2 首先識(shí)別樣本之間樹拓?fù)涞淖兓缓笤u(píng)估是否存在與樣本生物學(xué)差異相關(guān)的差異拓?fù)渥兓?對(duì)于每個(gè)樣本霞掺,Lamian 計(jì)算每個(gè)樹分支中的cell比例谊路,稱為分支cell比例。 由于零或低比例可以反映分支的缺失或耗盡菩彬,因此可以使用分支cell比例變化來描述樹拓?fù)涞淖兓?對(duì)于多個(gè)樣本缠劝,Lamian 通過估計(jì)跨樣本的分支cell比例的方差來表征每個(gè)分支的跨樣本變異。 此外骗灶,可以擬合回歸模型來測(cè)試分支單元格比例是否與樣本生物學(xué)差異相關(guān)惨恭。 這允許識(shí)別不同條件之間的樹拓?fù)渥兓缭诓±鄬?duì)于normal耙旦。
data = result[[2]]
rownames(data) <- c('HSC->lymphocyte', 'HSC->myeloid', 'HSC->erythroid')
design = data.frame(sample= paste0('BM',1,8), sex = c(0, rep(1,4), rep(0,3)))
branchPropTest(data = data, design = design)

Module 3: Trajectory differential tests about gene expression

XDE test(這個(gè)大家自行查看脱羡,就不多做解釋了)。

Res <- lamian.test(expr = expdata$expr, 
                   cellanno = expdata$cellanno, 
                   pseudotime = expdata$pseudotime, 
                   design = expdata$design, 
                   test.type = 'variable', 
                   permuiter = 5)

downstream analysis 1: visualize and cluster XDE genes based on their multiple-sample temporal patterns across sample covariates

stat <- Res$statistics
stat <- stat[order(stat[,1], -stat[,3]), ]
diffgene <- rownames(stat[stat[, grep('^fdr.*overall$', colnames(stat))] < 0.05,])
Res$populationFit <- getPopulationFit(Res, gene = diffgene, type = 'variable')
## clustering
Res$covariateGroupDiff <- getCovariateGroupDiff(testobj = Res, gene = diffgene)
Res$cluster <- clusterGene(Res, gene = diffgene, type = 'variable', k=5)
colnames(Res$populationFit[[1]]) <- colnames(Res$populationFit[[2]]) <- colnames(Res$expr) 
plotXDEHm(Res, cellWidthTotal = 180, cellHeightTotal = 350, subsampleCell = FALSE, sep = ':.*')
圖片.png

圖片還是不錯(cuò)的。

We can plot the cluster mean and difference.
## plotClusterMeanAndDiff
plotClusterMeanAndDiff(Res)
We can also plot the cluster difference seperately by calling plotClusterDiff(testobj=Res, gene = diffgene).

downstream analysis 2: Gene ontology (GO) enrichment analysis

We can further check out whether the DDG in each cluster have any enriched genome functions by applying Gene Ontology (GO) analysis library(topGO); goRes <- GOEnrich(testobj = Res, type = 'variable'). Please note that there are no enriched GO terms in any of the clusters in this simplified example since we only subset 1,000 genes. In practice, if there are significant GO terms in the clusters, we can generate a heatmap of the top GO terms using the command plotGOEnrich(goRes = goRes).

TDE test(這個(gè)大家也自行查看)

Res <- lamian.test(expr = expdata$expr, 
                   cellanno = expdata$cellanno, 
                   pseudotime = expdata$pseudotime, 
                   design = expdata$design, 
                   test.type = 'time', 
                   permuiter = 5)
diffgene <- rownames(Res$statistics)[Res$statistics[,1] < 0.05]
Res$populationFit <- getPopulationFit(Res, gene = diffgene, type = 'time')
Res$cluster <- clusterGene(Res, gene = diffgene, type = 'time', k=3)
plotTDEHm(
  Res,
  subsampleCell  = FALSE,
  showCluster = TRUE,
  type = 'time',
  cellWidthTotal = 200,
  cellHeightTotal = 200
)
圖片.png
plotClusterMean(testobj=Res, cluster = Res$cluster, type = 'time')
圖片.png

downstream analysis 2: GO analysis for TDE genes

Similar to XDE test, we can further proceed to identify the enriched GO terms for each gene cluster using commands library(topGO); goRes <- GOEnrich(testobj = Res, type = 'time', sep = ':.*'). Please note that there are no enriched GO terms in any of the clusters in this simplified example since we only subset 1,000 genes. In practice, if there are enriched GO terms, we can plot them using commands plotGOEnrich(goRes = goRes).

Module 4: trajectory differential test based on cell composition(這部分跟上面的類似锉罐,就不多介紹了)

總之帆竹,軟件有其特點(diǎn),可以借鑒氓鄙,取其長(zhǎng)處馆揉,為己所用业舍。

生活很好抖拦,有你更好

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者舷暮。
  • 序言:七十年代末态罪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子下面,更是在濱河造成了極大的恐慌复颈,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沥割,死亡現(xiàn)場(chǎng)離奇詭異耗啦,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)机杜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門帜讲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人椒拗,你說我怎么就攤上這事似将。” “怎么了蚀苛?”我有些...
    開封第一講書人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵在验,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我堵未,道長(zhǎng)腋舌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任渗蟹,我火速辦了婚禮块饺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拙徽。我一直安慰自己刨沦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開白布膘怕。 她就那樣靜靜地躺著想诅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上来破,一...
    開封第一講書人閱讀 48,954評(píng)論 1 283
  • 那天篮灼,我揣著相機(jī)與錄音,去河邊找鬼徘禁。 笑死诅诱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播擒贸,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼喉祭,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了炮沐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤回怜,失蹤者是張志新(化名)和其女友劉穎大年,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玉雾,經(jīng)...
    沈念sama閱讀 43,382評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡翔试,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了复旬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垦缅。...
    茶點(diǎn)故事閱讀 37,989評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖赢底,靈堂內(nèi)的尸體忽然破棺而出失都,到底是詐尸還是另有隱情,我是刑警寧澤幸冻,帶...
    沈念sama閱讀 33,624評(píng)論 4 322
  • 正文 年R本政府宣布粹庞,位于F島的核電站,受9級(jí)特大地震影響洽损,放射性物質(zhì)發(fā)生泄漏庞溜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評(píng)論 3 307
  • 文/蒙蒙 一碑定、第九天 我趴在偏房一處隱蔽的房頂上張望流码。 院中可真熱鬧,春花似錦延刘、人聲如沸漫试。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)驾荣。三九已至外构,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間播掷,已是汗流浹背审编。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留歧匈,地道東北人垒酬。 一個(gè)月前我還...
    沈念sama閱讀 45,401評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像件炉,于是被迫代替她去往敵國(guó)和親勘究。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評(píng)論 2 345

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