系列回顧:
ArchR官網(wǎng)教程學(xué)習(xí)筆記1:Getting Started with ArchR
ArchR官網(wǎng)教程學(xué)習(xí)筆記2:基于ArchR推測Doublet
ArchR官網(wǎng)教程學(xué)習(xí)筆記3:創(chuàng)建ArchRProject
ArchR官網(wǎng)教程學(xué)習(xí)筆記4:ArchR的降維
ArchR官網(wǎng)教程學(xué)習(xí)筆記5:ArchR的聚類
ArchR官網(wǎng)教程學(xué)習(xí)筆記6:單細(xì)胞嵌入(Single-cell Embeddings)
ArchR官網(wǎng)教程學(xué)習(xí)筆記7:ArchR的基因評分和Marker基因
ArchR官網(wǎng)教程學(xué)習(xí)筆記8:定義與scRNA-seq一致的聚類
ArchR官網(wǎng)教程學(xué)習(xí)筆記9:ArchR的偽批量重復(fù)
ArchR官網(wǎng)教程學(xué)習(xí)筆記10:ArchR的call peak
ArchR官網(wǎng)教程學(xué)習(xí)筆記11:鑒定Marker峰
ArchR官網(wǎng)教程學(xué)習(xí)筆記12:Motif和Feature富集
ArchR官網(wǎng)教程學(xué)習(xí)筆記13:ChromVAR偏差富集
ArchR官網(wǎng)教程學(xué)習(xí)筆記14:ArchR的Footprinting分析
ArchR官網(wǎng)教程學(xué)習(xí)筆記15:ArchR的整合分析
為了在擬時間(pseudo-time)中對細(xì)胞進(jìn)行排序膊畴,ArchR在ArchRProject中創(chuàng)建了細(xì)胞軌跡掘猿,這些軌跡可以在較低的N維子空間中對細(xì)胞進(jìn)行排序。以前唇跨,我們在二維UMAP子空間中執(zhí)行了這種排序稠通,但ArchR改進(jìn)了這種方法,使N維子空間(即LSI)內(nèi)的比對成為可能轻绞。首先采记,ArchR需要一個用戶自定義的軌跡主干,它提供了細(xì)胞組/cluster的粗略排序政勃。例如:鑒于用戶決定的cluster的身份唧龄,一個可以提供干細(xì)胞cluster的cluster ID,然后一個祖細(xì)胞cluster奸远,然后是分化的細(xì)胞cluster既棺,對應(yīng)于一個已知或假定生物相關(guān)細(xì)胞軌跡(比如為HSC提供cluster ID, 然后GMP,最后到單核細(xì)胞)懒叛。接下來丸冕,對于每個cluster,ArchR計算每個細(xì)胞群/cluster在N維的平均坐標(biāo)薛窥,并保留到這些平均坐標(biāo)的歐氏距離位于所有細(xì)胞的前5%的細(xì)胞胖烛。接下來,ArchR沿著軌跡計算每個細(xì)胞從cluster i到cluster i+1的平均坐標(biāo)诅迷,并計算一個偽時間向量(基于這些每個i的迭代的距離)佩番。這允許ArchR為每個細(xì)胞確定一個N維坐標(biāo)和擬時間值,作為基于歐氏距離的細(xì)胞組/cluster平均坐標(biāo)的軌跡罢杉。(這句不太會翻譯趟畏,原文在這:This allows ArchR to determine an N-dimensional coordinate and a pseudo-time value for each of the cells retained as part of the trajectory based on the Euclidean distance to the cell group/cluster mean coordinates. )然后,ArchR根據(jù)偽時間值對每個N維坐標(biāo)進(jìn)行連續(xù)軌跡擬合滩租,使用smooth.spline
函數(shù)赋秀。之后,ArchR根據(jù)細(xì)胞在流形上最近點的歐幾里得距離律想,將所有細(xì)胞對齊到軌跡上猎莲。然后,ArchR將此比對scales到100蜘欲,并將此擬時間存儲在ArchRProject中以供下游分析之用益眉。
ArchR可以創(chuàng)建矩陣,在Arrow files中存儲的特性之間傳遞擬時間趨勢姥份。例如郭脂,ArchR可以分析擬時間內(nèi)TF偏差、基因評分或整合基因表達(dá)的變化澈歉,以識別貫穿細(xì)胞軌跡的動態(tài)調(diào)節(jié)因子或調(diào)控元件展鸡。首先,ArchR在細(xì)胞軌跡上以用戶定義的小分位數(shù)增量(默認(rèn)為1/100)對細(xì)胞進(jìn)行分組埃难。ArchR使用用戶定義的平滑窗口(默認(rèn)= 9/100)使用data.table::frollmean
功能對矩陣的每個特征進(jìn)行平滑處理莹弊。然后,ArchR返回這個平滑擬時間x特征矩陣涡尘,作為下游分析的SummarizedExperiment
忍弛。ArchR還可以使用名稱匹配(即帶有chromVAR TF偏差的正向調(diào)節(jié)因子和基因評分/整合圖譜)或使用低重疊細(xì)胞聚集的基因組位置重疊方法(即peak-to-gene linkages)將兩個平滑偽時間x特征矩陣關(guān)聯(lián)起來,如前面所述考抄。因此细疚,ArchR有助于跨細(xì)胞軌跡的綜合分析,揭示跨多模動態(tài)數(shù)據(jù)的相關(guān)調(diào)控動力學(xué)川梅。
(一)髓系(Myeloid)軌跡-單核細(xì)胞分化
在本節(jié)中疯兼,我們將創(chuàng)建一個近似于HSCs分化為完全分化單核細(xì)胞的細(xì)胞軌跡。首先贫途,讓我們回顧一下前面定義的cluster和cell types吧彪,它們存儲在cellColData
中名為“clusters”和“Clusters2”的列中。在我們的UMAP嵌入上覆蓋這些細(xì)胞分組顯示了我們感興趣的不同細(xì)胞類型丢早。
#顯示cluster
> p1 <- plotEmbedding(ArchRProj = projHeme5, colorBy = "cellColData", name = "Clusters", embedding = "UMAP")
#顯示細(xì)胞類型
> p2 <- plotEmbedding(ArchRProj = projHeme5, colorBy = "cellColData", name = "Clusters2", embedding = "UMAP")
#出圖
> ggAlignPlots(p1, p2, type = "h")
(1)UMAP擬時間與單獨特征的繪制
我們將使用存儲在“Clusters2”中的細(xì)胞類型定義姨裸。如上所述,我們正在創(chuàng)建一條從干細(xì)胞(“Progenitor”)怨酝,通過連接的髓系祖細(xì)胞(“GMP”)傀缩,到單核細(xì)胞(“Mono”)的軌跡。創(chuàng)建軌跡的第一步是以細(xì)胞組標(biāo)簽的有序向量的形式創(chuàng)建軌跡主干凫碌。
> trajectory <- c("Progenitor", "GMP", "Mono")
> trajectory
[1] "Progenitor" "GMP" "Mono"
我們使用addTrajectory()
函數(shù)創(chuàng)建一條軌跡扑毡,并將其添加到ArchRProject中。我們稱這個軌跡為“MyeloidU”盛险。這樣做的目的是在cellColData
中創(chuàng)建一個名為“MyeloidU”的新列瞄摊,它存儲了軌跡中每個細(xì)胞的擬時間值。不屬于軌跡的細(xì)胞用NA標(biāo)記苦掘。
> projHeme5 <- addTrajectory(
ArchRProj = projHeme5,
name = "MyeloidU",
groupBy = "Clusters2",
trajectory = trajectory,
embedding = "UMAP",
force = TRUE
)
我們可以查看這些信息换帜,發(fā)現(xiàn)每個細(xì)胞都有一個在0到100之間的唯一偽時間值。我們排除了有NA值的細(xì)胞鹤啡,因為這些不是軌跡的一部分惯驼。
> head(projHeme5$MyeloidU[!is.na(projHeme5$MyeloidU)])
[1] 46.66808 55.72245 54.28390 44.57373 46.94309 45.82187
為了繪制這條軌跡,我們使用了plotTrajectory()
函數(shù),該函數(shù)覆蓋了UMAP嵌入的擬時間值祟牲,并顯示了一個箭頭隙畜,接近擬合后的軌跡路徑。不屬于軌跡的細(xì)胞呈灰色说贝。在本例中议惰,我們使用colorBy = "cellColData"來告訴ArchR在cellColData
中查找由名稱指定的列——在本例中是“MyeloidU”擬時間軌跡。雖然它可能看起來比較不太正常乡恕,列出“MyeloidU”為trajectory
和name
言询,這樣做是因為trajectory
告訴ArchR哪個細(xì)胞子集我們感興趣,name
告訴ArchR如何給細(xì)胞子集上顏色傲宜。
> p <- plotTrajectory(projHeme5, trajectory = "MyeloidU", colorBy = "cellColData", name = "MyeloidU")
> p[[1]]
> plotPDF(p, name = "Plot-MyeloidU-Traj-UMAP.pdf", ArchRProj = projHeme5, addDOC = FALSE, width = 5, height = 5)
我們還可以在UMAP嵌入的軌跡上覆蓋其他特征运杭。這允許我們只在細(xì)胞內(nèi)顯示與我們的軌跡相關(guān)的特定特征。
如果你還沒有將impute weights添加到你的projHeme5項目中函卒,可以現(xiàn)在添加:
> projHeme5 <- addImputeWeights(projHeme5)
然后辆憔,我們可以繪制出“MyeloidU” 軌跡,但通過CEBPB基因的基因評分值給細(xì)胞著色谆趾。CEBPB基因是已知的單核細(xì)胞功能調(diào)節(jié)因子躁愿,在分化過程中變得活躍。我們通過colorBy
參數(shù)表示要使用的矩陣沪蓬,通過name
參數(shù)表示要使用的特征彤钟。
> p1 <- plotTrajectory(projHeme5, trajectory = "MyeloidU", colorBy = "GeneScoreMatrix", name = "CEBPB", continuousSet = "horizonExtra")
我們可以重復(fù)這個過程,但是通過他們鏈接的基因表達(dá)通過GeneIntegrationMatrix
給細(xì)胞上色跷叉。
> p2 <- plotTrajectory(projHeme5, trajectory = "MyeloidU", colorBy = "GeneIntegrationMatrix", name = "CEBPB", continuousSet = "blueYellow")
plotTrajectory()
函數(shù)的作用是:返回一個相關(guān)圖形的列表逸雹。列表中的第一個圖是一個嵌入的UMAP,按照函數(shù)調(diào)用中指定的顏色著色云挟。
將這些UMAP圖并排比較基因評分和基因表達(dá)梆砸,我們可以看到CEBPB基因的活性在擬時間軌跡的后期對單核細(xì)胞具有高度特異性。
> ggAlignPlots(p1[[1]], p2[[1]], type = "h")
plotTrajectory()
返回的第二個圖是擬時間相對于相關(guān)特征值(在本例中是CEBPB的基因評分或基因表達(dá))的點圖园欣。在這種情況下帖世,細(xì)胞被擬時間著色绽淘。
> ggAlignPlots(p1[[2]], p2[[2]], type = "h")
(2)擬時間熱圖
我們可以使用熱圖在擬時間中可視化許多特征的變化弦赖。為此限嫌,我們首先使用getTrajectory()
函數(shù)從ArchRProject檢索感興趣的軌跡祈搜,該函數(shù)將軌跡作為SummarizedExperiment對象返回。通過將相應(yīng)的矩陣傳遞給useMatrix
參數(shù)朵逝,我們將為motifs腐螟、基因評分栏豺、基因表達(dá)和峰可接近性創(chuàng)建這些偽擬時間熱圖翔怎。
> trajMM <- getTrajectory(ArchRProj = projHeme5, name = "MyeloidU", useMatrix = "MotifMatrix", log2Norm = FALSE)
然后將SummarizedExperiment 傳遞給plotTrajectoryHeatmap()
函數(shù):
> p1 <- plotTrajectoryHeatmap(trajMM, pal = paletteContinuous(set = "solarExtra"))
通過設(shè)置useMatrix = "GeneScoreMatrix"
窃诉,我們可以執(zhí)行相同的步驟來獲得基因評分的擬時間熱圖:
> trajGSM <- getTrajectory(ArchRProj = projHeme5, name = "MyeloidU", useMatrix = "GeneScoreMatrix", log2Norm = TRUE)
> p2 <- trajectoryHeatmap(trajGSM, pal = paletteContinuous(set = "horizonExtra"))
同樣杨耙,通過設(shè)置useMatrix = "GeneIntegrationMatrix"
,我們可以得到基因表達(dá)的擬時間熱圖:
> trajGIM <- getTrajectory(ArchRProj = projHeme5, name = "MyeloidU", useMatrix = "GeneIntegrationMatrix", log2Norm = FALSE)
> p3 <- plotTrajectoryHeatmap(trajGIM, pal = paletteContinuous(set = "blueYellow"))
最后飘痛,通過設(shè)置useMatrix = "PeakMatrix"
珊膜,可以得到可接近峰的擬時間熱圖:
> trajPM <- getTrajectory(ArchRProj = projHeme5, name = "MyeloidU", useMatrix = "PeakMatrix", log2Norm = TRUE)
> p4 <- plotTrajectoryHeatmap(trajPM, pal = paletteContinuous(set = "solarExtra"))
最后保存四個熱圖:
> plotPDF(p1, p2, p3, p4, name = "Plot-MyeloidU-Traj-Heatmaps.pdf", ArchRProj = projHeme5, addDOC = FALSE, width = 6, height = 8)
(3)整合的擬時間分析
我們也可以進(jìn)行整合分析,比如通過整合基因評分/基因表達(dá)與motif可接近性敦冬,在擬時間內(nèi)識別正向調(diào)控的的TF因子辅搬。這可能是非常強(qiáng)大的唯沮,例如在識別分化過程中的driver因子脖旱。為此,我們使用correlateTrajectories()
函數(shù)介蛉,該函數(shù)接受從getTrajectories()
函數(shù)檢索到的SummarizedExperiment 對象萌庆。
首先,我們找出偽時間里與TF基因評分相關(guān)的motif可接近性币旧。
> corGSM_MM <- correlateTrajectories(trajGSM, trajMM)
correlateTrajectories()
的主要輸出是一個列表對象践险,其中包含一個DataFrame
對象作為列表中的第一個條目。這個DataFrame
包含名為idx1吹菱、matchname1巍虫、name1和VarAssay1的列,它們對應(yīng)于傳遞給correlateTrajectories()
函數(shù)的第一個軌跡(基因得分)中的索引鳍刷、匹配名稱占遥、未修改名稱和特征的方差分位∈涔希“方差分位數(shù)”是給定特征的標(biāo)準(zhǔn)化度量瓦胎,它允許我們在不同的分析之間獲得相關(guān)性。該DataFrame
包含了滿足correlateTrajectories()
函數(shù)中指定的cutoffs的所有特性尤揣。
> corGSM_MM[[1]]
DataFrame with 38 rows and 12 columns
idx1 idx2 matchname1 matchname2 name1
<integer> <integer> <array> <array> <character>
1 82 1081 PRDM16 PRDM16 chr1:PRDM16
2 731 932 TAL1 TAL1 chr1:TAL1
3 2034 1002 ATF3 ATF3 chr1:ATF3
4 2369 1254 GATA3 GATA3 chr10:GATA3
5 2370 1254 GATA3 GATA3 chr10:GATA3-AS1
... ... ... ... ... ...
34 20780 1031 SNAI2 SNAI2 chr8:SNAI2
35 21036 1696 KLF10 KLF10 chr8:KLF10
36 21658 1003 NFIL3 NFIL3 chr9:NFIL3
37 21793 1078 KLF4 KLF4 chr9:KLF4
38 22097 1565 RXRA RXRA chr9:RXRA
name2 Correlation VarAssay1 VarAssay2
<character> <numeric> <numeric> <numeric>
1 z:PRDM16_211 0.85014826559353 0.999740562978337 0.875287356321839
2 z:TAL1_62 0.696298473631261 0.882388550179444 0.989080459770115
3 z:ATF3_132 0.819469211756172 0.984779694729105 0.931609195402299
4 z:GATA3_384 0.732708704489167 0.837419466424525 0.991954022988506
5 z:GATA3_384 0.711284069415112 0.987201106931292 0.991954022988506
... ... ... ... ...
34 z:SNAI2_161 0.681024727630591 0.861547109439184 0.98448275862069
35 z:KLF10_826 0.533217470662006 0.930297920179876 0.860344827586207
36 z:NFIL3_133 0.82919544014856 0.993773511480088 0.895977011494253
37 z:KLF4_208 0.804088079166488 0.998919012409738 0.904022988505747
38 z:RXRA_695 0.579687074016823 0.913607471786224 0.897126436781609
TStat Pval FDR
<numeric> <numeric> <numeric>
1 15.983561542674 4.7273839846548e-29 7.73400019889526e-26
2 9.60359546878347 8.77882016024456e-16 3.59053744554003e-14
3 14.1546027210612 1.98559418498259e-25 5.4140534777192e-23
4 10.6583309726314 4.53341402479216e-18 3.22463710633042e-16
5 10.0175078671253 1.10887216067257e-16 5.33563192605979e-15
... ... ... ...
34 9.20683499132072 6.37374397310972e-15 2.27896264168966e-13
35 6.23962130337716 1.11991547934746e-08 1.27234841959198e-07
36 14.6855480197568 1.68977613968731e-26 6.91118441132108e-24
37 13.3892842533234 7.33134596013733e-24 1.49926024884808e-21
38 7.04262799929917 2.62343842259912e-10 4.42468583440429e-09
然后我們可以對相應(yīng)的軌跡SummarizedExperiment對象進(jìn)行子集化搔啊,使其只包含上面?zhèn)鬟f的顯著性的元素。
> trajGSM2 <- trajGSM[corGSM_MM[[1]]$name1, ]
> trajMM2 <- trajMM[corGSM_MM[[1]]$name2, ]
為了最好地排列這些特征北戏,我們可以創(chuàng)建一個新的軌跡负芋,其中這兩個軌跡的值相乘。這將允許我們創(chuàng)建并排的熱圖嗜愈,并按照“行”進(jìn)行相同的排序旧蛾。
> trajCombined <- trajGSM2
> assay(trajCombined) <- t(apply(assay(trajGSM2), 1, scale)) + t(apply(assay(trajMM2), 1, scale))
我們可以從plotTrajectoryHeatmap()
函數(shù)的返回值中提取最優(yōu)行序:
> combinedMat <- plotTrajectoryHeatmap(trajCombined, returnMat = TRUE, varCutOff = 0)
> rowOrder <- match(rownames(combinedMat), rownames(trajGSM2))
這樣,我們現(xiàn)在就可以創(chuàng)建成對的熱圖了芝硬。首先蚜点,我們將創(chuàng)建基因評分軌跡的熱圖。我們通過rowOrder
參數(shù)指定所需的行順序
> ht1 <- plotTrajectoryHeatmap(trajGSM2, pal = paletteContinuous(set = "horizonExtra"), varCutOff = 0, rowOrder = rowOrder)
然后拌阴,我們將為motif軌跡創(chuàng)建熱圖绍绘,再次通過rowOrder
參數(shù)指定行順序:
>ht2 <- plotTrajectoryHeatmap(trajMM2, pal = paletteContinuous(set = "solarExtra"), varCutOff = 0, rowOrder = rowOrder)
將這兩個熱圖并排繪制,我們可以看到這兩個熱圖之間的行是匹配的。你可能注意到陪拘,分析同時捕獲了GATA3和GATA3- as1 (GATA3的反義轉(zhuǎn)錄本)厂镇。反義轉(zhuǎn)錄本可以在后處理中手動刪除,或者如果需要左刽,可以通過程序刪除捺信。
> ht1 + ht2
我們可以重復(fù)同樣的過程,但使用GeneIntegrationMatrix中的基因表達(dá)欠痴。因為這是相同的分析流程迄靠,所以我們不會對每個步驟重復(fù)解釋:
> corGIM_MM <- correlateTrajectories(trajGIM, trajMM)
> corGIM_MM[[1]]
DataFrame with 39 rows and 12 columns
idx1 idx2 matchname1 matchname2 name1 name2
<integer> <integer> <array> <array> <character> <character>
1 295 1601 RUNX3 RUNX3 chr1:RUNX3 z:RUNX3_731
2 680 1612 NFIA NFIA chr1:NFIA z:NFIA_742
3 1227 1512 MEF2D MEF2D chr1:MEF2D z:MEF2D_642
4 1936 1254 GATA3 GATA3 chr10:GATA3 z:GATA3_384
5 2036 1027 ZEB1 ZEB1 chr10:ZEB1 z:ZEB1_157
... ... ... ... ... ... ...
35 15859 997 CREB5 CREB5 chr7:CREB5 z:CREB5_127
36 16783 1022 CEBPD CEBPD chr8:CEBPD z:CEBPD_152
37 17463 1003 NFIL3 NFIL3 chr9:NFIL3 z:NFIL3_133
38 17560 1078 KLF4 KLF4 chr9:KLF4 z:KLF4_208
39 17803 1565 RXRA RXRA chr9:RXRA z:RXRA_695
Correlation VarAssay1 VarAssay2
<numeric> <numeric> <numeric>
1 0.860047343627608 0.801085963120262 0.986206896551724
2 0.894245099146662 0.854416429224235 0.92183908045977
3 0.712167453144056 0.842266544809419 0.855172413793103
4 0.853980182469668 0.800279554862642 0.991954022988506
5 0.758292172128321 0.846406107198538 0.92816091954023
... ... ... ...
35 0.945126143544879 0.913606795333584 0.909195402298851
36 0.863657822834346 0.992796086231923 0.999425287356322
37 0.794403875364849 0.921348314606742 0.895977011494253
38 0.869343633075701 0.983387989893016 0.904022988505747
39 0.878862330182784 0.943927745820117 0.897126436781609
TStat Pval FDR
<numeric> <numeric> <numeric>
1 16.6871751532611 2.13271762375757e-30 3.54183462516882e-29
2 19.7788605813507 5.46736754072656e-36 2.31120536948895e-34
3 10.0427370351419 9.77537930169305e-17 6.06073516704969e-16
4 16.2480926144105 1.46386532929263e-29 2.16094405752722e-28
5 11.5148618409319 6.50032103211223e-20 5.03774879988698e-19
... ... ... ...
35 28.6382309731165 2.07281898426153e-49 2.40965206920403e-47
36 16.9611989488559 6.48983675726322e-31 1.16068234312592e-29
37 12.947527156958 6.06031542413251e-23 5.87093056712836e-22
38 17.4138442225833 9.28541630505885e-32 1.83732705610739e-30
39 18.2367229609944 2.89442439140554e-33 8.41192088752235e-32
> trajGIM2 <- trajGIM[corGIM_MM[[1]]$name1, ]
> trajMM2 <- trajMM[corGIM_MM[[1]]$name2, ]
> trajCombined <- trajGIM2
> assay(trajCombined) <- t(apply(assay(trajGIM2), 1, scale)) + t(apply(assay(trajMM2), 1, scale))
> combinedMat <- plotTrajectoryHeatmap(trajCombined, returnMat = TRUE, varCutOff = 0)
> rowOrder <- match(rownames(combinedMat), rownames(trajGIM2))
> ht1 <- plotTrajectoryHeatmap(trajGIM2, pal = paletteContinuous(set = "blueYellow"), varCutOff = 0, rowOrder = rowOrder)
> ht2 <- plotTrajectoryHeatmap(trajMM2, pal = paletteContinuous(set = "solarExtra"), varCutOff = 0, rowOrder = rowOrder)
> ht1+ht2