提取Seurat数据做GSEA(Linux版)

在Linux上跑GSEA只是工程需要,在Windows上不能批量的跑;在单细胞数据上跑GSEA那是客户的需要。有需要就需要被满足,我们今天介绍一下如何提取Seurat数据做GSEA。这里的GSEA指的是GSEA官网软件,而不是fgsea, clusterProfiler等,该软件是由JAVA写的,所以应该安装合适的JAVA,为了能看懂一些常见的报错,建议学点JAVA(半年时间过去了)。

java安装与否
 which java
/usr/bin/java

 /usr/bin/java  -version 
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
gsea 安装与否

检查gsea是否安装成功

 java -Xmx512m -cp   gsea-3.0.jar   xtools.gsea.Gsea   -h 
xtools.api.param.MissingReqdParamException: 

Some required parameters (3) were not specified. The parameters are:
>gmx<   Gene sets database (gmx or gmt files - one or more are allowed)
>res<   Expression dataset - with rows as genes and columns as samples (for instance: res, gct, pcl files)
>cls<   Phenotype labels for the samples in the expression dataset (cls file)

    at xtools.api.param.ToolParamSet.check(ToolParamSet.java:340)
    at xtools.api.AbstractTool.init(AbstractTool.java:169)
    at xtools.api.AbstractTool.init(AbstractTool.java:193)
    at xtools.gsea.Gsea.<init>(Gsea.java:51)
    at xtools.gsea.Gsea.main(Gsea.java:139)

选择一个通路(gene set)

在整理这份资料的时候,发现关于GSEA的大部分疑难杂症我们生信技能树都有文章,正所谓:

生信教程技能树
入门生信谁敢坑

可参见:
批量下载GSEA基因集
制作自己的gene set文件给gsea软件

提示:通路名字中尽量不要有/,如GLYCOLYSIS / GLUCONEOGENESIS ,因为在Linux中/意味着路径,在输出文件中有以通路名命名的文件。细胞命名也最好不要有这个符号呀。

提取数据做GSEA
SeuratRunGSEA<-  function(seuo,group,test1,test2,gmt,outdir,testname){
        Idents(seuo) <- group
        seuo <- subset(seuo,idents=c(test1,test2))  
        seuo@assays$RNA@counts-> counts   # 是用count还是data? 
        expr_data <- as.matrix(counts)  # 数据量太大怎么办?可以取 pseudocell 啊,见参考。

# 整理GSEA需要的表达谱格式
          write.table(rbind(c('symbols',colnames(expr_data)),
                    cbind(rownames(expr_data),expr_data)),
              file='expr.txt',quote=F,sep='\t',col.names=F,row.names=F)

# 整理GSEA需要的分组格式
        pheno<-as.character(seuo@meta.data[,group])  # 注意顺序
        con<-file('pheno.cls',open='w')
        write(paste(length(pheno),'2 1'),con)
        write(paste('# ',test1,' ',test2,sep=''),con)
        classes<-''
        for (i in 1:length(pheno)){
                classes<-paste(classes,pheno[i])
        }
        write(classes,con)
        close(con)

#   GSEA 命令 
        command <- paste('java -Xmx512m -cp  gsea-3.0.jar xtools.gsea.Gsea -res expr.txt -cls pheno.cls#',test1,'_versus_',test2,' -gmx ',gmt,
                   ' -collapse false -nperm 1000 -permute gene_set -rnd_type no_balance -scoring_scheme weighted -rpt_label ',testname,
                   ' -metric Diff_of_Classes -sort real -order descending -include_only_symbols false -make_sets true -median false -num 100',
                   ' -plot_top_x 20 -rnd_seed 123456 -save_rnd_lists false -set_max 10000 -set_min 5 -zip_report false -out ', outdir, ' -gui false',sep='')

        system(command)

        com<-file('command.log',open='w')
        write(command,com)  # 保存运行的命令,以便在命令行中调参
        close(com)

}

照例,请出pbmc3k数据集,测试一番:

library(Seurat)
library(SeuratData)
gmt <- "c8.all.v7.2.symbols.gmt"
outdir = './'
base.name = './'
test1='B'
test2 = 'NK'
testname='seurat_annotations'
pbmc3k
An object of class Seurat 
13714 features across 2700 samples within 1 assay 
Active assay: RNA (13714 features, 0 variable features)
> head(pbmc3k@meta.data)
               orig.ident nCount_RNA nFeature_RNA seurat_annotations
AAACATACAACCAC     pbmc3k       2419          779       Memory CD4 T
AAACATTGAGCTAC     pbmc3k       4903         1352                  B
AAACATTGATCAGC     pbmc3k       3147         1129       Memory CD4 T
AAACCGTGCTTCCG     pbmc3k       2639          960         CD14+ Mono
AAACCGTGTATGCG     pbmc3k        980          521                 NK
AAACGCACTGGTAC     pbmc3k       2163          781       Memory CD4 T

运行:

SeuratRunGSEA(pbmc3k,testname,test1,test2,gmt,outdir,testname)

结果在seurat_annotations.Gsea.XXXXXXXXXXXXX下,导出,用浏览器打开index.html文件即可:

剩下的就是结合生物学意义解读结果了,网上有许多的介绍,这砖不搬了。


两个参数注意一啊,我们用的都是默认的:

-create_svgs <Boolean>
    Create SVG plot images along with PNGs (GZ compressed to save space as these are very large)
    Default: false
    Hints  : true,false

-create_gcts <Boolean>
    Create GCT files for the data backing the Gene Set Enrichment Heatmaps
    Default: false
    Hints  : true,false

preRank 模式

对应细胞数较多的情况。

runGSEA_preRank<-function(seuo,group,test1,test2,gmt,testname){
  set.seed(1314)    
  Idents(seuo) <- group
  mk <- FindMarkers(seuo,ident.1 = "C")
  mk$gene <- rownames(mk)
  
  mk %>% filter(p_val_adj >0) ->mk1 
  mk$p_val_adj[which(mk$p_val_adj==0)] <-  min(mk1$p_val_adj) 
  mk %>% mutate(sign = ifelse(avg_logFC>0,1,-1),Pstatistics=-1*log(p_val_adj)*sign) -> mk
  
  preRank.matrix<- mk[,c("gene","Pstatistics")] 
  prerank <- paste0(testname,'_prerank.rnk')
   write.table(preRank.matrix,
              file=prerank,
              quote=F,
              sep='\t',
              col.names=F,
              row.names=F)
  
  #call java gsea version
  command <- paste('java -Xmx512m -cp  gsea-3.0.jar xtools.gsea.GseaPreranked -gmx ', gmt, ' -norm meandiv -nperm 1000 -rnk ', prerank ,
                   ' -scoring_scheme weighted -make_sets true -rnd_seed 123456 -set_max 500 -set_min 1 -zip_report false ',
                   ' -out preRankResults -create_svgs true -gui false -rpt_label ',testname, sep='')
  
    system(command)

    com<-file(paste0(testname,'_command.log'),open='w')
        write(command,com)
        close(com)

}


Known_Issues
批量运行GSEA,命令行版本
https://ccsb.stanford.edu/content/dam/sm/ccsb/documents/education/cbio243course/2013-sweetcorderonotes.pdf
http://software.broadinstitute.org/cancer/software/gsea/wiki/index.php/Data_formats
https://software.broadinstitute.org/cancer/software/gsea/wiki/index.php/Using_RNA-seq_Datasets_with_GSEA
Metabolic landscape of the tumor microenvironment at single cell resolution
单细胞转录组中的pseudocell又是什么
如何实现GSEA-基因富集分析?
GSEA-基因富集分析

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • GSEA的分析汇总 学习GSEA 生信技能树 GSEA的统计学原理试讲 GSEA GSEA这个java软件使用非常...
    天涯清水阅读 3,435评论 0 17
  • 本文转自 http://www.bio-info-trainee.com/1282.html What is GS...
    bioinfo2011阅读 1,904评论 1 3
  • 1.为什么写? 网上教程一抓一大把,有的能重复,有的不能重复不了,很多原因。别人能做的不代表你能复制,实践出真知。...
    生物信息与育种阅读 6,355评论 0 19
  • 网页上关于GSEA富集分析的教程很多,对自己这个生信小白来说比较简单通俗易懂的当数生信宝典和生信技能树的教程了。感...
    阿糖胞苷_SYSU阅读 16,820评论 0 38
  • 渐变的面目拼图要我怎么拼? 我是疲乏了还是投降了? 不是不允许自己坠落, 我没有滴水不进的保护膜。 就是害怕变得面...
    闷热当乘凉阅读 4,233评论 0 13