單細(xì)胞之富集分析-3:GO和KEGG富集分析及繪圖


單細(xì)胞富集分析系列:


單細(xì)胞富集分析我最常用的是分組GSVA湃累,但最近用到了GO分析蒜焊,就復(fù)習(xí)一下GO和KEGG富集分析及繪圖。

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

library(Seurat)
library(patchwork)
library(clusterProfiler)
library(org.Mm.eg.db) ##加載小鼠
library(org.Hs.eg.db) ##加載人類
library(tidyverse)

載入無比熟悉的pbmc.3k數(shù)據(jù)集 (已注釋好猜拾,數(shù)據(jù)準(zhǔn)備見monocle)

pbmc <-readRDS("pbmc.rds")
table(pbmc$cell_type)

#  Naive CD4 T Memory CD4 T   CD14+ Mono            B        CD8 T FCGR3A+ Mono 
#          711          480          472          344          279          162 
#           NK           DC     Platelet 
#         144           32           14 

pbmc3k數(shù)據(jù)集只有1個(gè)樣本府适,沒辦法區(qū)分HC和病例組羔飞。
若有分組,可以使用subset函數(shù)將某種細(xì)胞取出檐春,來做這種細(xì)胞病例組和對照組相比的差異基因和富集分析

2. 計(jì)算差異基因

  • 使用seurat包的FindMarkers來計(jì)算差異基因逻淌。
    ident.1是病例組,ident.2是對照組疟暖。(這里只做演示卡儒,計(jì)算的是和Naive CD4 T相比,Memory CD4 T的差異基因)
dge.celltype <- FindMarkers(pbmc, ident.1 = 'Memory CD4 T',ident.2 = 'Naive CD4 T', 
                            group.by = 'cell_type',logfc.threshold = 0,min.pct = 0)
saveRDS(dge.celltype, file = "deg.rds")
sig_dge.all <- subset(dge.celltype, p_val_adj<0.05&abs(avg_log2FC)>0.15) #所有差異基因
View(sig_dge.all)
結(jié)果默認(rèn)按p_val_adj從小到大排列
  • 分組可視化
sig_dge.up <- subset(dge.celltype, p_val_adj<0.05&avg_log2FC>0.15)
sig_dge.up <- sig_dge.up[order(sig_dge.up$avg_log2FC,decreasing = T),]
sig_dge.up_TOP30 <- rownames(sig_dge.up[1:30,])
sig_dge.down <- subset(dge.celltype, p_val_adj<0.05&avg_log2FC< -0.15)
sig_dge.down <- sig_dge.down[order(sig_dge.down$avg_log2FC,decreasing = T),]
sig_dge.down_TOP30 <- rownames(sig_dge.down[1:30,])
diffall <-c(sig_dge.up_TOP30,sig_dge.down_TOP30) 

Idents(pbmc) <- 'cell_type'
pbmc_sub <- subset(pbmc,ident=c('Memory CD4 T','Naive CD4 T'))
Idents(pbmc_sub) <- 'cell_type'
View(pbmc_sub)
matrix <- AverageExpression(object = pbmc_sub,assays = 'RNA',slot = "scale.data")[[1]]
matrix <- matrix[rownames(matrix)%in%diffall,]
matrix[matrix>2]=2;matrix[matrix< -2]= -2
p=pheatmap( matrix ,show_colnames =T,
            show_rownames = T,
            cluster_cols = T, cluster_row = T,
            border_color = NA,
            color = colorRampPalette(c("navy", "white", "firebrick3"))(50))
save_pheatmap_pdf <- function(x, filename, width=8, height=15) {
    stopifnot(!missing(x))
    stopifnot(!missing(filename))
    pdf(filename, width=width, height=height)
    grid::grid.newpage()
    grid::grid.draw(x$gtable)
    dev.off()
  }
 save_pheatmap_pdf(p, "diff_heatmap.pdf")
替換數(shù)據(jù)畫所有樣本的差異基因熱圖原理一樣

3. GO富集分析(分為BP, CC和MF)

# BP, CC和MF三種通路都一起富集
ego_ALL <- enrichGO(gene          = row.names(sig_dge.all),
                    #universe     = row.names(dge.celltype),
                    OrgDb         = 'org.Hs.eg.db',
                    keyType       = 'SYMBOL',
                    ont           = "ALL",  #設(shè)置為ALL時(shí)BP, CC, MF都計(jì)算
                    pAdjustMethod = "BH",
                    pvalueCutoff  = 0.01,
                    qvalueCutoff  = 0.05)
ego_all <- data.frame(ego_ALL)
write.csv(ego_ALL,'enrichGO_all.csv')
View(ego_all)
# 分別對BP, CC和MF進(jìn)行富集
ego_CC <- enrichGO(gene          = row.names(sig_dge.all),
                   #universe     = row.names(dge.celltype),
                   OrgDb         = 'org.Hs.eg.db',
                   keyType       = 'SYMBOL',
                   ont           = "CC",
                   pAdjustMethod = "BH",
                   pvalueCutoff  = 0.01,
                   qvalueCutoff  = 0.05)
ego_cc <- data.frame(ego_CC)
write.csv(ego_cc,'enrichGO_cc.csv') 
ego_MF <- enrichGO(gene          = row.names(sig_dge.all),
                   #universe     = row.names(dge.celltype),
                   OrgDb         = 'org.Hs.eg.db',
                   keyType       = 'SYMBOL',
                   ont           = "MF",
                   pAdjustMethod = "BH",
                   pvalueCutoff  = 0.01,
                   qvalueCutoff  = 0.05)
ego_mf <- data.frame(ego_MF)
write.csv(ego_mf,'enrichGO_mf.csv') 
ego_BP <- enrichGO(gene          = row.names(sig_dge.all),
                   #universe     = row.names(dge.celltype),
                   OrgDb         = 'org.Hs.eg.db',
                   keyType       = 'SYMBOL',
                   ont           = "BP",
                   pAdjustMethod = "BH",
                   pvalueCutoff  = 0.01,
                   qvalueCutoff  = 0.05) 
ego_bp <- data.frame(ego_BP)
write.csv(ego_bp,'enrichGO_bp.csv') 
繪圖
  • 最普通的圖俐巴,也是一般生信公司出報(bào)告的圖骨望,略丑。
p_BP <- barplot(ego_BP,showCategory = 10) + ggtitle("barplot for Biological process")
p_CC <- barplot(ego_CC,showCategory = 10) + ggtitle("barplot for Cellular component")
p_MF <- barplot(ego_MF,showCategory = 10) + ggtitle("barplot for Molecular function")
plotc <- p_BP/p_CC/p_MF
ggsave('enrichGO.pdf', plotc, width = 12,height = 10)
  • 使用ggplot繪圖(更靈活)
# 我一般只畫bp圖欣舵,感覺更有意義擎鸠。
ego_bp <- ego_bp[order(ego_bp$p.adjust),]
ego_bp_top30 <- ego_bp[1 : 30,]
ggplot(data=ego_bp_top30, aes(x=Description,y=Count)) + 
  geom_bar(stat="identity", width=0.8,fill='salmon1') + 
  coord_flip() +  xlab("GO term") + ylab("Num of Genes") + 
  theme_bw()
top30 BP通路,縱軸也可設(shè)為log10P.value等缘圈。

之所以長短不齊不按順序是因?yàn)闆]有排序

#按照p值排序
ego_bp <- ego_bp[order(ego_all$pvalue,decreasing = T),]
ego_bp$Description <- factor(ego_bp$Description, levels = ego_bp$Description)

排完續(xù)之后再畫p值就是按順序的了

4. KEGG富集分析

genelist <- bitr(row.names(sig_dge.all), fromType="SYMBOL",
                 toType="ENTREZID", OrgDb='org.Hs.eg.db')
genelist <- pull(genelist,ENTREZID)               
ekegg <- enrichKEGG(gene = genelist, organism = 'hsa')
p1 <- barplot(ekegg, showCategory=20)
p2 <- dotplot(ekegg, showCategory=20)
plotc = p1/p2
ggsave("enrichKEGG.png", plot = plotc, width = 12, height = 10)

附:單細(xì)胞測序數(shù)據(jù)的差異表達(dá)分析方法總結(jié)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末劣光,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子糟把,更是在濱河造成了極大的恐慌赎线,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件糊饱,死亡現(xiàn)場離奇詭異垂寥,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)另锋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門滞项,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人夭坪,你說我怎么就攤上這事文判。” “怎么了室梅?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵戏仓,是天一觀的道長疚宇。 經(jīng)常有香客問我,道長赏殃,這世上最難降的妖魔是什么敷待? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮仁热,結(jié)果婚禮上榜揖,老公的妹妹穿的比我還像新娘。我一直安慰自己抗蠢,他們只是感情好举哟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著迅矛,像睡著了一般妨猩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上秽褒,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天册赛,我揣著相機(jī)與錄音,去河邊找鬼震嫉。 笑死森瘪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的票堵。 我是一名探鬼主播扼睬,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼悴势!你這毒婦竟也來了窗宇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤特纤,失蹤者是張志新(化名)和其女友劉穎军俊,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捧存,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡粪躬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了昔穴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片镰官。...
    茶點(diǎn)故事閱讀 39,688評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖吗货,靈堂內(nèi)的尸體忽然破棺而出泳唠,到底是詐尸還是另有隱情,我是刑警寧澤宙搬,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布笨腥,位于F島的核電站拓哺,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏脖母。R本人自食惡果不足惜士鸥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望镶奉。 院中可真熱鬧,春花似錦崭放、人聲如沸哨苛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽建峭。三九已至,卻和暖如春决摧,著一層夾襖步出監(jiān)牢的瞬間亿蒸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工掌桩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留边锁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓波岛,卻偏偏與公主長得像茅坛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子则拷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評論 2 353

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