1. #单细胞差异分析后的gsea富集分析
    2. rm(list = ls())
    3. library(Seurat)
    4. library(SeuratData)
    5. library(ggplot2)
    6. library(patchwork)
    7. library(dplyr)
    8. load(file = 'deg-by-MAST-for-mono-2-cluster.Rdata')
    9. colnames(deg)
    10. head(deg)
    11. #得到差异基因列表后取出 ,p值和logFC
    12. nrDEG=deg[,c(2,1)]
    13. colnames(nrDEG)=c('log2FoldChange','pvalue')
    14. head(nrDEG)
    15. library(org.Hs.eg.db)
    16. #Y叔的R包,把SYMBOL转换为ENTREZID,后面可以直接做 KEGG 和 GO
    17. library(clusterProfiler)
    18. gene <- bitr(rownames(nrDEG), #转换的列是nrDEG的列名
    19. fromType = "SYMBOL", #需要转换ID类型
    20. toType = "ENTREZID", #转换成的ID类型
    21. OrgDb = org.Hs.eg.db) #对应的物种,小鼠的是org.Mm.eg.db
    22. #让基因名、ENTREZID、logFC对应起来
    23. gene$logFC <- nrDEG$log2FoldChange[match(gene$SYMBOL,rownames(nrDEG))]
    24. head(gene)
    25. geneList=gene$logFC
    26. names(geneList)=gene$ENTREZID
    27. #按照logFC的值来排序geneList
    28. geneList=sort(geneList,decreasing = T)
    29. head(geneList)
    30. library(clusterProfiler)
    31. kk_gse <- gseKEGG(geneList = geneList,
    32. organism = 'hsa',
    33. nPerm = 1000,
    34. minGSSize = 10,
    35. pvalueCutoff = 0.9,
    36. verbose = FALSE)
    37. #提取结果
    38. tmp=kk_gse@result
    39. kk=DOSE::setReadable(kk_gse,
    40. OrgDb='org.Hs.eg.db',
    41. keyType='ENTREZID')
    42. tmp=kk@result
    43. pro='test_gsea'
    44. write.csv(kk@result,paste0(pro,'_kegg.gsea.csv'))
    45. if(F){
    46. #按照enrichment score从高到低排序,便于查看富集通路
    47. kk_gse=kk
    48. sortkk<-kk_gse[order(kk_gse$enrichmentScore, decreasing = T),]
    49. head(sortkk)
    50. dim(sortkk)
    51. #write.table(sortkk,"gsea_output2.txt",sep = "\\t",quote = F,col.names = T,row.names = F)
    52. #可以根据自己想要的通路画出需要的图
    53. library(enrichplot)
    54. gseaplot(kk_gse, "hsa04510")
    55. gseaplot2(kk_gse, "hsa04510", color = "firebrick",
    56. rel_heights=c(1, .2, .6))#改变更多参数,为了美观
    57. ##同时展示多个pathways的结果
    58. #画出排名前四的通路
    59. gseaplot2(kk_gse, row.names(sortkk)[1:4])
    60. #上图用的是ES排名前4个画图,也可以用你自己感兴趣的通路画图
    61. # 自己在刚才保存的txt文件里挑选就行。
    62. paths <- c("hsa04510", "hsa04512", "hsa04974")
    63. paths <- row.names(sortkk)[5:8]
    64. paths
    65. gseaplot2(kk_gse, paths)
    66. #这里的GSEA分析其实由三个图构成,GSEA分析的runningES折线图
    67. # 还有下面基因的位置图,还有所谓的蝴蝶图。如果不想同时展示,还可以通过subplots改变。
    68. gseaplot2(kk_gse, paths, subplots=1)#只要第一个图
    69. gseaplot2(kk_gse, paths, subplots=1:2)#只要第一和第二个图
    70. gseaplot2(kk_gse, paths, subplots=c(1,3))#只要第一和第三个图
    71. #如果想把p值标上去,也是可以的。
    72. gseaplot2(kk_gse, paths, color = colorspace::rainbow_hcl(4),
    73. pvalue_table = TRUE)
    74. #最后的总结代码
    75. gseaplot2(kk_gse,#数据
    76. row.names(sortkk)[39],#画那一列的信号通路
    77. title = "Prion disease",#标题
    78. base_size = 15,#字体大小
    79. color = "green",#线条的颜色
    80. pvalue_table = TRUE,#加不加p
    81. ES_geom="line")#是用线,还是用d
    82. }
    83. ###当然,这里不知道具体需要什么通路,就全部都画出来
    84. # 这里找不到显著下调的通路,可以选择调整阈值,或者其它。
    85. down_kegg<-kk_gse[kk_gse$pvalue<0.1 & kk_gse$enrichmentScore < -0.4,];down_kegg$group=-1
    86. up_kegg<-kk_gse[kk_gse$pvalue<0.1 & kk_gse$enrichmentScore > 0.4,];up_kegg$group=1
    87. dat=rbind(up_kegg,down_kegg)
    88. colnames(dat)
    89. dat$pvalue = -log10(dat$pvalue)
    90. dat$pvalue=dat$pvalue*dat$group
    91. dat=dat[order(dat$pvalue,decreasing = F),]
    92. library(ggplot2)
    93. #条形图
    94. g_kegg<- ggplot(dat, aes(x=reorder(Description,order(pvalue, decreasing = F)), y=pvalue, fill=group)) +
    95. geom_bar(stat="identity") +
    96. scale_fill_gradient(low="blue",high="red",guide = FALSE) +
    97. scale_x_discrete(name ="Pathway names") +
    98. scale_y_continuous(name ="log10P-value") +
    99. coord_flip() + theme_bw(base_size = 15)+
    100. theme(plot.title = element_text(hjust = 0.5), axis.text.y = element_text(size = 15))+
    101. ggtitle("Pathway Enrichment")
    102. g_kegg
    103. print(g_kegg)
    104. ggsave(g_kegg,filename = paste0(pro,'_kegg_gsea.pdf'))
    105. library(enrichplot)
    106. gesa_res=kk@result
    107. ###画出每张kegg通路
    108. lapply(1:nrow(down_kegg), function(i){
    109. gseaplot2(kk,down_kegg$ID[i],
    110. title=down_kegg$Description[i],pvalue_table = T)
    111. ggsave(paste0(pro,'_down_kegg_',
    112. gsub('/','-',down_kegg$Description[i])
    113. ,'.pdf'))
    114. })
    115. lapply(1:nrow(up_kegg), function(i){
    116. gseaplot2(kk,up_kegg$ID[i],
    117. title=up_kegg$Description[i],pvalue_table = T)
    118. ggsave(paste0(pro,'_up_kegg_',
    119. gsub('/','-',up_kegg$Description[i]),
    120. '.pdf'))
    121. })
    122. ego <- gseGO(geneList = geneList,
    123. OrgDb = org.Hs.eg.db,
    124. ont = "ALL",
    125. nPerm = 1000, ## 排列数
    126. minGSSize = 100,
    127. maxGSSize = 500,
    128. pvalueCutoff = 0.9,
    129. verbose = FALSE) ## 不输出结果
    130. go=ego@result
    131. write.csv(go,file = 'gse_go.csv')