scRNA-Seq | 各個(gè)cluster top100 marker基因富集分析

據(jù)說莺戒,多種R包可以繪制雷達(dá)圖,對(duì)ggplot系列函數(shù)熟悉的小伙伴可以選擇ggradarecharts4r急波。fmsbradarchart也同樣能實(shí)現(xiàn)你的需求

下面惰匙,從單細(xì)胞差異分析入手冠王,直到GO富集分析

1.單細(xì)胞差異分析

  • FindAllMarkers
# 6. FindAllMarkers celltype----
sce
# An object of class Seurat 
# 25288 features across 13560 samples within 1 assay 
# Active assay: RNA (25288 features, 2000 variable features)
# 4 dimensional reductions calculated: pca, tsne, umap, harmony
table(sce$celltype)

Idents(sce) <- "celltype"
Idents(sce)
sce.markers <- FindAllMarkers(sce)


save(sce.markers,file = "harmony_celltype.markers.Rdata")
write.csv(sce.markers,file = "harmony_celltype.markers.csv")

2. 挑top100

head(harmony_celltype_markers)
#            p_val    avg_log2FC pct.1 pct.2     p_val_adj         cluster   gene
# FCER1A  0.000000e+00   2.016015 0.734 0.126  0.000000e+00 Inflammatory_DC FCER1A
# CD1C    0.000000e+00   1.647918 0.503 0.064  0.000000e+00 Inflammatory_DC   CD1C
# IL1R2  1.776186e-291   1.655928 0.567 0.099 4.491619e-287 Inflammatory_DC  IL1R2
# CD1E   3.616531e-250   1.093357 0.333 0.036 9.145483e-246 Inflammatory_DC   CD1E
# NAPSB  3.350806e-242   1.358380 0.521 0.097 8.473517e-238 Inflammatory_DC  NAPSB
# NR4A3  5.633118e-232   1.374079 0.625 0.145 1.424503e-227 Inflammatory_DC  NR4A3

sce.markers <- harmony_celltype_markers
DT::datatable(sce.markers)




# 對(duì)每一個(gè)cluster登颓,根據(jù) avg_log2FC惧磺,取前100個(gè)基因
top100 <- sce.markers %>% group_by(cluster) %>% top_n(100, avg_log2FC)
head(top100)
dim(top100) 
#1000    7

3. GO富集分析

  • bitr: 轉(zhuǎn)換ID
# GO富集分析
# https://mp.weixin.qq.com/s/z-Kk02I2g8vAESgcGuncUg
library(clusterProfiler)
# 挑選p_val<0.05
de_genes <- subset(top100, p_val<0.05)
length(de_genes$gene) # 1000
head(de_genes)

# 轉(zhuǎn)化ID
entrez_genes <- bitr(de_genes$gene, fromType="SYMBOL", 
                                    toType="ENTREZID", 
                                    OrgDb="org.Hs.eg.db") # 人
#  5.45% of input gene IDs are fail to map...

head(entrez_genes)
# SYMBOL ENTREZID
# 1 FCER1A     2205
# 2   CD1C      911
# 3  IL1R2     7850
# 4   CD1E      913
# 5  NAPSB   256236
# 6  NR4A3     8013

# 將原來的SYMBOL 和 ENTREZID 對(duì)應(yīng)起來
mix <- merge(de_genes,entrez_genes,by.x="gene",by.y="SYMBOL")
dim(mix) #950   8
head(mix)
#   gene         p_val avg_log2FC pct.1 pct.2     p_val_adj           cluster ENTREZID
# 1   A2M  4.322616e-68  0.4559287 0.402 0.183  1.093103e-63          TREM2_Mf        2
# 2   A2M  2.036888e-05  0.5190426 0.210 0.200  5.150881e-01 CCR2- HLA-DRhi C1        2
# 3 ABCA6  7.529550e-58  0.7018329 0.127 0.052  1.904073e-53 CCR2- HLA-DRhi C1    23460
# 4  ABI3 1.146337e-237  1.3451063 0.489 0.106 2.898856e-233        CD16+ Mono    51225
# 5  ABL2  0.000000e+00  1.3000718 0.501 0.180  0.000000e+00 CCR2+ HLA-DRhi C2       27
# 6 ACAP1 2.340444e-179  0.9188265 0.333 0.047 5.918515e-175         Mast cell     9744
  • merge : 整合
  • split : 拆分
  • compareCluster : 富集分析(多個(gè)clusters)
# 整合起來
de_gene_clusters <- data.frame(ENTREZID=mix$ENTREZID,
                               cluster=mix$cluster)
table(de_gene_clusters$cluster)


# 只挑選其中3個(gè)cluster作富集
de_gene_clusters <- de_gene_clusters[(de_gene_clusters$cluster == 'CCR2- HLA-DRhi C1'|
                                      de_gene_clusters$cluster=='CCR2+ HLA-DRhi C2'|
                                      de_gene_clusters$cluster== 'CCR2+ HLA-DRhi C3'),]
table(de_gene_clusters$cluster)
# CCR2- HLA-DRhi C1 CCR2+ HLA-DRhi C2 CCR2+ HLA-DRhi C3 
# 96                98                95 

# 拆分成list
list_de_gene_clusters <- split(de_gene_clusters$ENTREZID,de_gene_clusters$cluster)

因?yàn)槲蚁旅婵梢暬轻槍?duì)某些通路,所以這里pvalueCutoff,qvalueCutoff都調(diào)的很大赏寇,盡可能富集出感興趣的通路出來

# 多個(gè)clusters富集分析
formula_res <- compareCluster(
  ENTREZID~cluster, 
  data=de_gene_clusters, 
  fun="enrichGO", 
  OrgDb="org.Hs.eg.db",
  ont = "ALL", # GO富集類型,One of "BP", "MF", and "CC" or "ALL"
  pAdjustMethod = "BH",
  pvalueCutoff  = 1,
  qvalueCutoff  =1,
  minGSSize = 5, # 最小的基因富集數(shù)量
  maxGSSize = 1000) # 最大的基因富集數(shù)量

head(formula_res)
f=as.data.frame(formula_res)
dim(f) #9805   12
  • 挑選感興趣的通路
enrich <- c("response to oxidative stress",
            "response to endoplasmic reticulum stress",
            "interleukin-10 production",
            'antigen processing and presentation',
            'endocytosis',
            'response to tumor necrosis factor',
            'I-kappaB kinase/NF-kappaB signaling',
            'response to interferon-gamma',
            'cytokine production',
            'leukocyte chemotaxis')

choose_f <- f[(f$Description %in% enrich),]
table(choose_f$Description)
df=choose_f

4. 氣泡圖

p=ggplot(df,aes(x = cluster, 
                y = Description, # 按照富集度大小排序
                size = Count,
                colour=p.adjust)) +
  geom_point(shape = 16)+                     # 設(shè)置點(diǎn)的形狀
  labs(x = "Ratio", y = "Pathway")+           # 設(shè)置x吉嫩,y軸的名稱
  scale_colour_continuous(                    # 設(shè)置顏色圖例
    name="Enrichment",                        # 圖例名稱
    low="#7fcdbb",                            # 設(shè)置顏色范圍
    high="#fc9272")+
  scale_radius(                               # 設(shè)置點(diǎn)大小圖例
    range=c(5,9),                             # 設(shè)置點(diǎn)大小的范圍
    name="Size")+                             # 圖例名稱
  guides(
    color = guide_colorbar(order = 1),        # 決定圖例的位置順序
    size = guide_legend(order = 2)
  )+theme_bw()                                # 設(shè)置主題
p
  • 如果名字太長(zhǎng),可以換行顯示
p + scale_y_discrete(labels=function(x) str_wrap(x, width=12)) +
  scale_x_discrete(labels=function(x) str_wrap(x, width=10)) # 名字換行

5. 雷達(dá)圖

  • dcast : 先換成短矩陣
ff <- choose_f[,c("Cluster","Description","Count")]
head(ff)
#          Cluster                         Description        Count
# 2   CCR2- HLA-DRhi C1                         endocytosis    17
# 51  CCR2- HLA-DRhi C1   response to tumor necrosis factor     7
# 74  CCR2- HLA-DRhi C1        response to interferon-gamma     5
# 93  CCR2- HLA-DRhi C1                leukocyte chemotaxis     6
# 128 CCR2- HLA-DRhi C1 antigen processing and presentation     4
# 785 CCR2- HLA-DRhi C1        response to oxidative stress     5

# 長(zhǎng)數(shù)據(jù)換成短數(shù)據(jù)形式
dd=dcast(ff,Cluster~Description,value.var = 'Count')
  • 調(diào)整格式
rownames(dd) <- dd[,1]
dd <- dd[,-1]

# 第一行包含每個(gè)變量的最大值
# 第二行包含每個(gè)變量的最小值
dd=rbind(rep(20,5) , rep(0,5) , dd)

# 變量需要換成數(shù)值形式
for (i in 1:10) {
  #i=1
  dd[,i] <- as.numeric(dd[,i])

}
str(dd)
# 'data.frame': 5 obs. of  10 variables:
# $ antigen processing and presentation     : num  20 0 4 1 3
# $ cytokine production                     : num  20 0 7 15 17
# $ endocytosis                             : num  20 0 17 4 4
# $ I-kappaB kinase/NF-kappaB signaling     : num  20 0 1 6 4
# $ interleukin-10 production               : num  20 0 1 1 NA
# $ leukocyte chemotaxis                    : num  20 0 6 11 10
# $ response to endoplasmic reticulum stress: num  20 0 2 6 2
# $ response to interferon-gamma            : num  20 0 5 4 3
# $ response to oxidative stress            : num  20 0 5 12 8
# $ response to tumor necrosis factor       : num  20 0 7 14 3
  • radarchart : 終于到畫圖了
library(fmsb)
colnames(dd)
# 有些名字太長(zhǎng)了嗅定,需要調(diào)整下距離
# https://stackoverflow.com/questions/69306607/how-to-move-radar-chart-spider-chart-labels-in-r-fmsb-for-r-shiny-so-labels-do
f=c("antigen processing and presentation" ,"cytokine production" ,                    
  "endocytosis" ,"       NF-kappaB 
  signaling",     
  "interleukin-10 
  production" ,"leukocyte chemotaxis" ,                   
  "       response to
                                  endoplasmic reticulum stress" ,
  "           response to 
              interferon-gamma",            
  "       response to 
               oxidative stress" ,
  "    response to 
                  tumor necrosis factor" )

# https://zhuanlan.zhihu.com/p/363992240
{cairo_pdf(file = "mouse-heart/fig8_radarchart.pdf", 
          width = 20,
          height = 10, 
          family = "STSong")
#?radarchart
radarchart(dd, 
           axistype=0, # 坐標(biāo)軸的類型
           vlcex=2, # 標(biāo)簽大小
           palcex=5, # 軸四周字體大小縮放比例
           pcol=colors_border , #設(shè)置顏色
           pfcol=colors_in , # 內(nèi)部填充色
           plwd=1.3 , #線條粗線
           plty=1,#虛線自娩,實(shí)線
           vlabels = c(f), # 標(biāo)簽
           pty=32, # 點(diǎn)的形狀
           cglcol="black", # 雷達(dá)圖網(wǎng)絡(luò)格顏色
           cglty=3,  #背景線條虛線,實(shí)線
           cglwd=0.6 #背景線條粗細(xì)
)

legend(x=1.5, y=0.90, legend = rownames(dd[-c(1,2),]), 
       bty = "n", 
       pch=20 , 
       col=colors_border, 
       text.col = "black", 
       cex=1.5, pt.cex=2)

dev.off()
}

參考:https://mp.weixin.qq.com/s/QbSgYG_y1wsrMqdzGBRrQg

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末渠退,一起剝皮案震驚了整個(gè)濱河市忙迁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌碎乃,老刑警劉巖姊扔,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異梅誓,居然都是意外死亡恰梢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門梗掰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嵌言,“玉大人,你說我怎么就攤上這事及穗〈蒈睿” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵埂陆,是天一觀的道長(zhǎng)苛白。 經(jīng)常有香客問我娃豹,道長(zhǎng),這世上最難降的妖魔是什么购裙? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任懂版,我火速辦了婚禮,結(jié)果婚禮上缓窜,老公的妹妹穿的比我還像新娘。我一直安慰自己谍咆,他們只是感情好禾锤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著摹察,像睡著了一般恩掷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上供嚎,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天黄娘,我揣著相機(jī)與錄音,去河邊找鬼克滴。 笑死逼争,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的劝赔。 我是一名探鬼主播誓焦,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼着帽!你這毒婦竟也來了杂伟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤仍翰,失蹤者是張志新(化名)和其女友劉穎赫粥,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體予借,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡越平,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了灵迫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喧笔。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖龟再,靈堂內(nèi)的尸體忽然破棺而出书闸,到底是詐尸還是另有隱情,我是刑警寧澤利凑,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布浆劲,位于F島的核電站嫌术,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏牌借。R本人自食惡果不足惜度气,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望膨报。 院中可真熱鬧磷籍,春花似錦、人聲如沸现柠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽够吩。三九已至比然,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間周循,已是汗流浹背强法。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留湾笛,地道東北人饮怯。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像嚎研,于是被迫代替她去往敵國和親硕淑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

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