Monocle擬時間分析

Monocle可以進(jìn)行下面三種類型的分析,可以與seurat無縫連接:

1 對細(xì)胞進(jìn)行聚類、分組和計算;
2.進(jìn)行擬時間分析;
3.差異表達(dá)分析;

2.Constructing Single Cell Trajectories

Trajectory step 1: choose genes that define a cell's progress

理論上希望找到一組能夠隨著研究過程的進(jìn)展而增加(或減少)表達(dá)的基因。同時盡可能少地使用正在研究的系統(tǒng)生物學(xué)的先驗知識。我們希望從數(shù)據(jù)中發(fā)現(xiàn)重要的排序基因,而不是依賴于文獻(xiàn)和教科書,因為這可能會在排序中引入偏見。將從一種簡單的方式開始,但是推薦使用另外一種更有效的方法“dpFeature”(后面會提到)。
首先,找到一組基因的有效方法之一是簡單地比較過程開始時和結(jié)束時收集的細(xì)胞(前提是你有這一組信息),并找到差異表達(dá)的基因。

#這一種情況適用于有一個明確的時間節(jié)點(diǎn)(這里就是換培養(yǎng)基)
diff_test_res <- differentialGeneTest(HSMM_myo[expressed_genes,],
              fullModelFormulaStr = "~Media")
ordering_genes <- row.names (subset(diff_test_res, qval < 0.01))

#確定ordering_genes之后,將它整合到HSMM對象中
HSMM_myo <- setOrderingFilter(HSMM_myo, ordering_genes)
plot_ordering_genes(HSMM_myo)
Trajectory step 2: reduce data dimensionality
#降維處理
HSMM_myo <- reduceDimension(HSMM_myo, max_components = 2,method = 'DDRTree')
Trajectory step 3: order cells along the trajectory
HSMM_myo <- orderCells(HSMM_myo)
plot_cell_trajectory(HSMM_myo, color_by = "Hours")

根據(jù)上面的擬時間軌跡,可以看出0時收集的細(xì)胞聚集在樹的一端,其他時期分布在數(shù)的兩條分支上。Monocle是不知道樹的哪邊是起始端,因此往往需要再次調(diào)用orderCells函數(shù),使用root_state參數(shù)去指定起始端。

#下面就是進(jìn)行的再次調(diào)用orderCells函數(shù)的步驟
#首先按照樹的分段進(jìn)行顏色區(qū)分(state參數(shù))
plot_cell_trajectory(HSMM_myo, color_by = "State")

可以看到,一共有5種狀態(tài),就是有五個顏色

#下面這個函數(shù)用來識別哪一段樹枝包含時間0的細(xì)胞最多?這里不是太理解
GM_state <- function(cds){
  if (length(unique(pData(cds)$State)) > 1){
    T0_counts <- table(pData(cds)$State, pData(cds)$Hours)[,"0"]
    return(as.numeric(names(T0_counts)[which
          (T0_counts == max(T0_counts))]))
  } else {
    return (1)
  }}
HSMM_myo <- orderCells(HSMM_myo, root_state = GM_state(HSMM_myo))
plot_cell_trajectory(HSMM_myo, color_by = "Pseudotime")
#如果你細(xì)胞數(shù)太多,可以分開看每個細(xì)胞亞群所處的位置
plot_cell_trajectory(HSMM_myo, color_by = "State") +
    facet_wrap(~State, nrow = 1)

如果沒有時間序列,就需要根據(jù)生物學(xué)知識找到root。就這個實(shí)驗而言,一個高度增殖的祖細(xì)胞群產(chǎn)生兩種有絲分裂的細(xì)胞。因此,root就應(yīng)該為高表達(dá)增殖marker的那一群。

blast_genes <- row.names(subset(fData(HSMM_myo),gene_short_name %in% c("CCNB2", "MYOD1", "MYOG")))
plot_genes_jitter(HSMM_myo[blast_genes,],grouping = "State",min_expr = 0.1)
#為了確認(rèn)順序是正確的,我們可以選擇幾個肌源性進(jìn)展過程中的標(biāo)記
HSMM_expressed_genes <-  row.names(subset(fData(HSMM_myo),num_cells_expressed >= 10))
HSMM_filtered <- HSMM_myo[HSMM_expressed_genes,]
my_genes <- row.names(subset(fData(HSMM_filtered),
          gene_short_name %in% c("CDK1", "MEF2C", "MYH3")))
cds_subset <- HSMM_filtered[my_genes,]
plot_genes_in_pseudotime(cds_subset, color_by = "Hours")

Alternative choices for ordering genes

Ordering based on genes that differ between clusters(上述提到的dpFeature算法,我用的是這種方法挑選的差異基因)
#我理解的意思就是通過算法使得細(xì)胞分成和實(shí)驗差不多的結(jié)果(給出的例子就是同一時間收的細(xì)胞聚在一起,在這里我用的是seurat分群的結(jié)果作為依據(jù)),然后挑選出這些分群的基因,作為擬時間分析的基因。
#挑選出至少在5%的細(xì)胞中表達(dá)的基因
HSMM_myo=HSMM
HSMM_myo <- detectGenes(HSMM_myo, min_expr = 0.1)
fData(HSMM_myo)$use_for_ordering <-fData(HSMM_myo)$num_cells_expressed > 0.05 * ncol(HSMM_myo)

#然后就是進(jìn)行PCA分析,根據(jù)下面的圖選擇合適的PC
plot_pc_variance_explained(HSMM_myo, return_all = F)

#然后重新降維,這里的num_dim我用的是seurat中選擇的PC數(shù)
HSMM_myo <- reduceDimension(HSMM_myo,
                              max_components = 2,
                              norm_method = 'log',
                              num_dim = 3,
                              reduction_method = 'tSNE',
                              verbose = T)
#隨后進(jìn)行密度峰值聚類,鑒定cluster
#The densityPeak algorithm clusters cells based on each cell's local density (Ρ) and the nearest distance (Δ) of a cell to another cell with higher distance
#可以人為自己設(shè)定Ρ和Δ
#默認(rèn)參數(shù)進(jìn)行聚類
HSMM_myo <- clusterCells(HSMM_myo, verbose = F)
#查看聚類結(jié)果,主要是看一下用聚類分出來的結(jié)果和實(shí)驗分群結(jié)果(seurat分群結(jié)果)是否一致,如果一致,那就可以進(jìn)一步找這些cluster中的基因,作為分群的基因,不一致就要自己調(diào)參數(shù)
plot_cell_clusters(HSMM_myo, color_by = 'as.factor(Cluster)')
plot_cell_clusters(HSMM_myo, color_by = 'as.factor(Hours)') 

感覺用默認(rèn)閾值聚類出來的效果不好,嘗試自己設(shè)定閾值

#查看每一個細(xì)胞的Ρ和Δ,然后自己設(shè)定閾值,圖片中的黑色點(diǎn)代表cluster的數(shù)量
plot_rho_delta(HSMM_myo, rho_threshold = 2, delta_threshold = 4)
#按照設(shè)定的閾值重新聚類
HSMM_myo <- clusterCells(HSMM_myo,
                 rho_threshold = 2,
                 delta_threshold = 10,
                 skip_rho_sigma = T,
                 verbose = F)
#查看聚類結(jié)果,兩種結(jié)果圖很一致,那么就找這些群的基因
plot_cell_clusters(HSMM_myo, color_by = 'as.factor(Cluster)')
plot_cell_clusters(HSMM_myo, color_by = 'as.factor(Hours)')

#這里的res.0.2是fData(HSMM_myo)的列名,可以根據(jù)自己的需要進(jìn)行選擇,我這里選擇的是分辨率為0.2的seurat聚類結(jié)果。
#head(fData(HSMM_myo))

當(dāng)我們覺得這個聚類make sense時,就可以進(jìn)行下一步,找到區(qū)分這些cluster的基因

#找到差異基因
HSMM_expressed_genes <-  row.names(subset(fData(HSMM_myo),
                                          num_cells_expressed >= 10))
#這一步耗時很長
clustering_DEG_genes <-
    differentialGeneTest(HSMM_myo[HSMM_expressed_genes,],
          fullModelFormulaStr = '~Cluster',
          cores = 1)
#選取前1000個基因進(jìn)行擬時間軌跡分析
#和之前的步驟一樣,第一步確定合適的基因
HSMM_ordering_genes <-row.names(clustering_DEG_genes)[order(clustering_DEG_genes$qval)][1:1000]
#將基因添加到HSMM對象中
HSMM_myo <-setOrderingFilter(HSMM_myo,ordering_genes = HSMM_ordering_genes)
#第二步用DDRTree進(jìn)行降維
HSMM_myo <-reduceDimension(HSMM_myo, method = 'DDRTree')
#第三步構(gòu)建擬時間曲線
HSMM_myo <-orderCells(HSMM_myo)

HSMM_myo <-orderCells(HSMM_myo, root_state = GM_state(HSMM_myo))
#這一步出圖
plot_cell_trajectory(HSMM_myo, color_by = "Hours")

小結(jié):
構(gòu)建擬時間軌跡一共分為三步,其中第一步選擇較多,二三步基本一致:
第一步:確定合適的基因(這里僅針對前兩種進(jìn)行說明);
· 簡單地比較過程開始時和結(jié)束時收集的細(xì)胞,找出差異表達(dá)的基因;
· 基于不同的cluster找差異基因(官網(wǎng)推薦使用的);
· 選擇細(xì)胞間高度分散的基因(這里沒有提到);
第二步:用DDRTree算法降維
第三步:構(gòu)建擬時間曲線

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容