使用ArchR分析單細(xì)胞ATAC-seq數(shù)據(jù)(第十六章)

本文首發(fā)于我的個人博客兑凿, http://xuzhougeng.top/

往期回顧:

第16章 使用ArchR進行軌跡分析

ArchR在ArchRProject中低維子空間對細(xì)胞進行排序來創(chuàng)建細(xì)胞軌跡坑夯,實現(xiàn)偽時間中細(xì)胞排序。我們之前已經(jīng)在二維UMAP子空間中執(zhí)行了這種排序馁害,但是ArchR改進了這種方法类垦,使其能夠在N維子空間(即LSI)內(nèi)進行對齊狈邑。

  • 首先,ArchR需要用戶提供一個軌跡骨架描述細(xì)胞分組/聚類的大致分化方向蚤认。例如米苹,用戶提供的細(xì)胞編號為HSC, GMP, Monocyte,這表示細(xì)胞以干細(xì)胞作為起點砰琢,然后是祖細(xì)胞驱入,最后是分化細(xì)胞。這種分化方向信息來自于已有的生物學(xué)相關(guān)的細(xì)胞軌跡發(fā)育的背景知識氯析。
  • 其次,ArchR計算每個聚類在N維空間的平均坐標(biāo)莺褒,對于聚類里的每個細(xì)胞掩缓,計算其相對于平均指標(biāo)的歐幾里得距離,最后只保留前5%的細(xì)胞遵岩。
  • 然后你辣,ArchR根據(jù)軌跡計算cluster i里的每個細(xì)胞和cluster i+1平均坐標(biāo)的距離,根據(jù)距離計算擬時間向量尘执。之后依次遍歷所有的cluster執(zhí)行運算舍哄。根據(jù)每個細(xì)胞相對于細(xì)胞分組/聚類平均坐標(biāo)的歐幾里得距離,ArchR能夠為每個細(xì)胞確定N維坐標(biāo)和它的擬時間值從而成為軌跡的一部分誊锭。
  • 然后表悬,ArchR使用smooth.spline函數(shù)根據(jù)擬時間值講連續(xù)的軌跡擬合到N維坐標(biāo)中。
  • 接著丧靡,ArchR根據(jù)歐氏距離最近細(xì)胞沿著流形依次將所有細(xì)胞對齊到軌跡上蟆沫。
  • 最后籽暇,ArchR將對其后的值縮放到100,并將其保存在ArchRProject中用于下游分析饭庞。

ArchR可以根據(jù)Arrow文件里的特征創(chuàng)建擬時間趨勢矩陣戒悠。例如,ArchR可以分析隨著擬時間發(fā)生變化的TF deviation, 基因得分舟山,整合基因表達(dá)量绸狐,從而鑒定隨著細(xì)胞軌跡動態(tài)變化的調(diào)節(jié)因子或調(diào)控元素。

  • 首先累盗,ARchR將細(xì)胞沿著細(xì)胞軌跡進行分組寒矿,組數(shù)由用戶定義(默認(rèn)是1/100)
  • 然后,ArchR使用用戶定義平滑滑窗(默認(rèn)是9/100)對矩陣的特征進行平滑處理(調(diào)用data.table::frollmean函數(shù))
  • 最后幅骄,ArchR會返回一個SummarizedExperiment對象劫窒,它是一個平滑后的擬時間 X 特征矩陣,用于下游分析拆座。

ArchR還可以根據(jù)以下信息對任意兩個平滑后擬時間 X 特征矩陣進行關(guān)聯(lián)分析主巍,例如匹配的命名(如chromVAR TF deviations的正向調(diào)控因子和基因得分/整合譜),之前章節(jié)提到的利用低重疊細(xì)胞聚集的基因組位置重疊方法(例如 peak-to-gene 關(guān)聯(lián))挪凑。最終孕索,ArchR能為細(xì)胞軌跡的整合分析提供幫助,解釋多組學(xué)之間動態(tài)調(diào)控關(guān)系躏碳。

16.1 髓系軌跡-單核細(xì)胞分化

這一節(jié)搞旭,我們會創(chuàng)建一個細(xì)胞估計用以模擬HSC發(fā)育成分化后單核細(xì)胞的過程。 在開始之前菇绵,我們先來檢查保存在cellColData中的聚類和之前定義的細(xì)胞類型肄渗,分別是"Clusters"和"Clusters2"。我們通過UMAP來進行展示咬最,從中找到我們感興趣的細(xì)胞類型翎嫡。

p1 <- plotEmbedding(ArchRProj = projHeme5, colorBy = "cellColData", name = "Clusters", embedding = "UMAP")
p2 <- plotEmbedding(ArchRProj = projHeme5, colorBy = "cellColData", name = "Clusters2", embedding = "UMAP")
ggAlignPlots(p1, p2, type = "h")
Plot-UMAP-Clusters12-Combined

16.1.1 擬時間UMAP和特征單獨作圖

我們接下來會用到"Clusters2"里面定義的細(xì)胞類型。和之前提到的那樣永乌,我們會以干細(xì)胞("Progenitor")-骨髓祖細(xì)胞("GMP")-單核細(xì)胞("Mono")這個分化過程創(chuàng)建軌跡惑申。

第一步,我們需要以用一個向量記錄軌跡骨干翅雏,里面按順序記錄發(fā)育各過程中細(xì)胞分組的標(biāo)簽圈驼。

trajectory <- c("Progenitor", "GMP", "Mono")

第二步,我們使用addTrajectory()創(chuàng)建軌跡望几,并加入到ArchRProject中绩脆。我們將其命名為"MyeloidU"。該函數(shù)的作用就是在cellColData中新建一列,命名為"MyeloidU"衙伶,然后記錄每個細(xì)胞在軌跡中擬時間值祈坠。不在軌跡中的細(xì)胞記做NA

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.07479 53.75027 44.82834 43.18828 47.49617 43.21015

我們使用plotTrajectory()函數(shù)繪制軌跡躺同,它會用UMAP進行可視化,用擬時間值進行上色丸逸,箭頭標(biāo)識軌跡的發(fā)育方向蹋艺。非軌跡的細(xì)胞會以灰色標(biāo)識。在這個例子中黄刚,我們使用colorBy = "cellColData"name="MyeloidU"讓ArchR使用cellColData里"MyeloidU"作為擬時間軌跡捎谨。參數(shù)中trajectoryname都是"MyeloidU",可能不太容易理解憔维,ArchR根據(jù)trajectory來提取細(xì)胞涛救,根據(jù)name來對細(xì)胞進行著色。

p <- plotTrajectory(projHeme5, trajectory = "MyeloidU", colorBy = "cellColData", name = "MyeloidU")
p[[1]]
Plot-MyeloidU-Traj-UMAP

使用plotPDF()保存為可編輯的矢量圖

plotPDF(p, name = "Plot-MyeloidU-Traj-UMAP.pdf", ArchRProj = projHeme5, addDOC = FALSE, width = 5, height = 5)

我們還可以在UMAP嵌入圖中展示軌跡和其他特征业扒。這可以用來展示和我們軌跡有關(guān)的特征检吆。

如果你還沒有在projHeme5項目中加入推測權(quán)重,請先運行下面的代碼

projHeme5 <- addImputeWeights(projHeme5)

然后我們繪制"MyeloidU"軌跡程储,只不過顏色來自于"CEBPB"的基因得分蹭沛,這是一個已知的調(diào)控單核細(xì)胞功能的基因,會隨著發(fā)育而活躍章鲤。我們通過colorBy參數(shù)來指定表達(dá)量矩陣摊灭,使用name來指定特征

p1 <- plotTrajectory(projHeme5, trajectory = "MyeloidU", colorBy = "GeneScoreMatrix", name = "CEBPB", continuousSet = "horizonExtra")

重復(fù)上面的代碼,只不過這次使用的是GeneIntegrationMatrix作為基因表達(dá)量矩陣

p2 <- plotTrajectory(projHeme5, trajectory = "MyeloidU", colorBy = "GeneIntegrationMatrix", name = "CEBPB", continuousSet = "blueYellow")

plotTrajectory函數(shù)實際上返回了一系列圖败徊。列表中第一個圖是UMAP嵌入圖帚呼,根據(jù)函數(shù)調(diào)用進行上色。

通過比較基因得分和基因表達(dá)量的UMAP圖集嵌,不難發(fā)現(xiàn)CEBPB基因在單核細(xì)胞中特異性表達(dá),出現(xiàn)在你時序軌跡的后半部分御毅。

ggAlignPlots(p1[[1]], p2[[1]], type = "h")
Plot-UMAP-CEBPB-Combined

plotTrajectory()函數(shù)返回的是一個點圖根欧,x軸是擬時間,y軸是對應(yīng)特征的值端蛆,此處是CEBPB的基因得分或基因表達(dá)量凤粗。下圖中的細(xì)胞以擬時間進行著色

ggAlignPlots(p1[[2]], p2[[2]], type = "h")
Plot-UMAP-CEBPB-Combined2

16.1.2 擬時間熱圖

我們可以用熱圖的形式對特征隨著擬時間變化進行可視化。首先我們用getTrajectory()函數(shù)從ArchRProject中提取感興趣的軌跡,它會返回一個SummarizedExperiment對象嫌拣。通過設(shè)置useMatrix參數(shù)柔袁,我們可以用motif,基因得分异逐,基因表達(dá)量捶索,peak開放性來創(chuàng)建擬時間熱圖

trajMM  <- getTrajectory(ArchRProj = projHeme5, name = "MyeloidU", useMatrix = "MotifMatrix", log2Norm = FALSE)

接著將SummarizedExperiment傳給plotTrajectoryHeatmap()函數(shù)

p1 <- plotTrajectoryHeatmap(trajMM, pal = paletteContinuous(set = "solarExtra"))
Plot-MyeloidU-Traj-Heatmaps

同樣的分析可以使用基因得分繪制擬時間熱圖,只需要設(shè)置useMatrix = "GeneScoreMatrix"

trajGSM <- getTrajectory(ArchRProj = projHeme5, name = "MyeloidU", useMatrix = "GeneScoreMatrix", log2Norm = TRUE)
p2 <- trajectoryHeatmap(trajGSM,  pal = paletteContinuous(set = "horizonExtra"))
Plot-MyeloidU-Traj-Heatmaps_2

同樣的灰瞻,還可以繪制基因表達(dá)量的擬時間熱圖腥例,設(shè)置useMatrix = "GeneIntegrationMatrix".

trajGIM <- getTrajectory(ArchRProj = projHeme5, name = "MyeloidU", useMatrix = "GeneIntegrationMatrix", log2Norm = FALSE)
p3 <- plotTrajectoryHeatmap(trajGIM,  pal = paletteContinuous(set = "blueYellow"))
Plot-MyeloidU-Traj-Heatmaps_3

最后,我們可以通過設(shè)置useMatrix = "PeakMatrix"繪制peak開放性的擬時間熱圖

trajPM  <- getTrajectory(ArchRProj = projHeme5, name = "MyeloidU", useMatrix = "PeakMatrix", log2Norm = TRUE)
p4 <- plotTrajectoryHeatmap(trajPM, pal = paletteContinuous(set = "solarExtra"))
Plot-MyeloidU-Traj-Heatmaps_4

使用plotPDF()保存可編輯的矢量圖

plotPDF(p1, p2, p3, p4, name = "Plot-MyeloidU-Traj-Heatmaps.pdf", ArchRProj = projHeme5, addDOC = FALSE, width = 6, height = 8)

16.1.3 整合擬時間分析

我們也可以進行整合分析酝润,例如整合基因得分/基因表達(dá)量和motif開發(fā)狀態(tài)燎竖,鑒定隨擬時間變化的正向TF調(diào)控因子。這是一個非常有效的手段要销,例如鑒定分化相關(guān)的驅(qū)動因子构回。我們可以用correlateTrajectories()函數(shù)進行該分析,它接受兩個SummarizedExperiment對象疏咐,該對象可以用getTrajectories()函數(shù)獲取纤掸。

首先,讓我們找到開放狀態(tài)隨擬時間和TF基因的基因得分相關(guān)的motif

corGSM_MM <- correlateTrajectories(trajGSM, trajMM)

correlateTrajectories()函數(shù)的主要輸出是一個列表凳鬓,第一個是DataFrame對象茁肠。DataFrame的列名分別是idx1, matchname1, name1VarAssay1, 對應(yīng)索引,匹配名缩举,原名垦梆,傳遞給correlateTrajectories()函數(shù)的第一個軌跡的特征的方差分位數(shù)(variance quantile)。方差分位數(shù)是給定特征的標(biāo)準(zhǔn)化值仅孩,能用于比較不同來源assay里的相關(guān)值托猩。該DataFrame包括所有符合correlateTrajectories()函數(shù)里閾值的特征。

corGSM_MM[[1]]
## DataFrame with 36 rows and 12 columns
## idx1 idx2 matchname1 matchname2 name1 name2
##
## 1 82 1081 PRDM16 PRDM16 chr1:PRDM16 z:PRDM16_211
## … … … … … … …
## 36 22097 1565 RXRA RXRA chr9:RXRA z:RXRA_695
## Correlation VarAssay1 VarAssay2 TStat
##
## 1 0.859588836579798 0.999783802481948 0.860344827586207 16.6530781620713
## … … … … …
## 36 0.59509316489084 0.88640982401522 0.890229885057471 7.33039570155334
## Pval FDR
##
## 1 2.47466579579935e-30 4.04855324192774e-27
## … … …
## 36 6.60626612679289e-11 1.25672690505037e-09

我們?nèi)缓髲?code>SummarizedExperiment提取相應(yīng)的軌跡辽慕,

trajGSM2 <- trajGSM[corGSM_MM[[1]]$name1, ]
trajMM2 <- trajMM[corGSM_MM[[1]]$name2, ]

為了更好的對這些特征排序京腥,我們創(chuàng)建新的軌跡,它的值來自于原先的軌跡的相乘溅蛉。這可以讓我們的熱圖根據(jù)行進行排序

trajCombined <- trajGSM2
assay(trajCombined) <- t(apply(assay(trajGSM2), 1, scale)) + t(apply(assay(trajMM2), 1, scale))

我們可以從plotTrajectoryHeatmap()函數(shù)返回的結(jié)果提取最優(yōu)的行序公浪。

combinedMat <- plotTrajectoryHeatmap(trajCombined, returnMat = TRUE, varCutOff = 0)
rowOrder <- match(rownames(combinedMat), rownames(trajGSM2))

有了這個之后,我們就可以創(chuàng)建配對熱圖船侧。

首先欠气,我們根據(jù)基因得分軌跡創(chuàng)建熱圖。在rowOrder參數(shù)中設(shè)置給定的行序

ht1 <- plotTrajectoryHeatmap(trajGSM2,  pal = paletteContinuous(set = "horizonExtra"),  varCutOff = 0, rowOrder = rowOrder)

然后镜撩,我們根據(jù)motif軌跡創(chuàng)建熱圖预柒。在rowOrder參數(shù)中設(shè)置給定的行序

ht2 <- plotTrajectoryHeatmap(trajMM2, pal = paletteContinuous(set = "solarExtra"), varCutOff = 0, rowOrder = rowOrder)

通過將兩個熱圖并排排列,我們可以看到兩個熱圖的行是匹配的。你可能會發(fā)現(xiàn)該分析同時捕獲了GATA3和GATA3-AS1(一個GATA3的反義轉(zhuǎn)錄本)宜鸯。這是由于特征匹配所導(dǎo)致的憔古,我們需要在后續(xù)分析時進行手動過濾。

ht1 + ht2
Plot-MyeloidU-GS-TF

我們可以重復(fù)以上的分析淋袖,但這次使用GeneIntegrationMatrix而非基因得分鸿市。因為這是相同的分析流程,因此代碼就不再過多解釋

corGIM_MM <- correlateTrajectories(trajGIM, trajMM)
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
Plot-MyeloidU-GEx-T

16.2 淋巴軌跡-B細(xì)胞分化

第二個例子會根據(jù)祖細(xì)胞-淋巴祖細(xì)胞-前B細(xì)胞-分化后B細(xì)胞來構(gòu)建B細(xì)胞的分化軌跡适贸。由于該分析從本質(zhì)上是重復(fù)之前單核細(xì)胞軌跡分析灸芳,因此這里只介紹關(guān)鍵性的代碼不同。

第一處是trajectory變量的賦值拜姿。

trajectory <- c("Progenitor", "CLP", "PreB", "B")

第二處是使用addTrajectory()創(chuàng)建軌跡烙样,參數(shù)name=LymphoidU

projHeme5 <- addTrajectory(
    ArchRProj = projHeme5, 
    name = "LymphoidU", 
    groupBy = "Clusters2",
    trajectory = trajectory, 
    embedding = "UMAP", 
    force = TRUE
)

第三處, 我們需要注意plotTrajectory里的參數(shù)trajectoryname需要改成"LymphoidU"

p <- plotTrajectory(projHeme5, trajectory = "LymphoidU", colorBy = "cellColData", name = "LymphoidU")

后續(xù)的代碼基本上可以照搬上一節(jié)蕊肥。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谒获,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子壁却,更是在濱河造成了極大的恐慌批狱,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件展东,死亡現(xiàn)場離奇詭異赔硫,居然都是意外死亡,警方通過查閱死者的電腦和手機盐肃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門爪膊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人砸王,你說我怎么就攤上這事推盛。” “怎么了谦铃?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵耘成,是天一觀的道長。 經(jīng)常有香客問我驹闰,道長瘪菌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任嘹朗,我火速辦了婚禮师妙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘骡显。我一直安慰自己疆栏,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布惫谤。 她就那樣靜靜地躺著壁顶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪溜歪。 梳的紋絲不亂的頭發(fā)上若专,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機與錄音蝴猪,去河邊找鬼调衰。 笑死,一個胖子當(dāng)著我的面吹牛自阱,可吹牛的內(nèi)容都是我干的嚎莉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼沛豌,長吁一口氣:“原來是場噩夢啊……” “哼趋箩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起加派,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤叫确,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后芍锦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體竹勉,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年娄琉,在試婚紗的時候發(fā)現(xiàn)自己被綠了次乓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡车胡,死狀恐怖檬输,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情匈棘,我是刑警寧澤丧慈,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站主卫,受9級特大地震影響逃默,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜簇搅,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一完域、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瘩将,春花似錦吟税、人聲如沸凹耙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肖抱。三九已至,卻和暖如春异旧,著一層夾襖步出監(jiān)牢的瞬間意述,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工吮蛹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荤崇,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓潮针,卻偏偏與公主長得像术荤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子每篷,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359