GSEA输入文件准备——转载自生信笔记

转载网址:https://www.bioinfo-scrounger.com/archives/557/

说到富集,富集是将基因根据一些先验的知识(也就是常见的注释)进行分类的过程。我们一般会想到最常见的是GO/KEGG富集,其思路是先筛选差异基因,然后确定这些差异基因的GO/KEGG注释,然后通过超几何分布计算出哪些通路富集到了,通常会选择一个阈值来卡一下,比如p值和FDR等。因此这会涉及到人为的阈值选择,具有一定的主观性,而且只能用于差异较大的基因,所以结果可能有一定的局限性。 根据上述情况,有了GSEA(Gene Set Enrichment Analysis),其思路是发表于2005年的Gene set enrichment analysis: a knowledge-based approach for interpreting genome-wide expression profiles,主要是要有两个概念:预先定义的基因集S(基于先验知识的基因注释信息)和待测基因集L(一般是表达矩阵);然后GSEA目的就是为了判断S基因集中的基因是随机分布于L(排序后的数据集),还是聚集分布在L的顶部或者底部(这也就是富集)。如果待测基因集中的某些基因显著富集在L的顶部或者底部,这说明这些基因的表达(因为其是根据表达谱数据)对你定义的分组(预先分组)的差异有显著影响(一致性),从而找到我们关注的基因集;在富集分析的理论中,GSEA可以认为是第二代,即Functional Class Scoring (FCS) Approaches

[图片上传失败...(image-bb36c6-1601799387196)]

<figcaption>GSEA-homegraphic.gif</figcaption>

GSEA的使用


这里不详细说算法,具体可看GSEA的文章,因为我也是一知半解。。。

下载地址http://software.broadinstitute.org/gsea/downloads.jsp,PS.会验证下你的邮箱,先注册下

第一次使用的话,而且数据不大的话,建议使用javaGSEA Desktop Application,Java的图形化界面,使用较为友好点,根据你的数据大小,选择不同内存的版本[1-8G不等],PS.记得看看系统的Java版本,2G内存开始的GSEA版本需要的是64位的Java 1.8版

打开后的界面如下:

[图片上传失败...(image-871c4d-1601799387196)]

<figcaption>gsea_software</figcaption>

数据准备

因为GSEA分析一般只作用于人物种的,所以我准备以TCGA的BRCA的mRNA数据作为测试数据,正好也试下UCSC xena 浏览器才是最简单的TCGA数据下载途径这个方法来下载TCGA数据(数据还蛮新的,2017年的)

数据下载地址:https://xenabrowser.net/datapages/?dataset=TCGA-BRCA%2FXena_Matrices%2FTCGA-BRCA.htseq_fpkm.tsv&host=https%3A%2F%2Fgdc.xenahubs.net

其还提供了ID/Gene Mapping的文件(整理好的),正好可以拿来用,因为虽然GSEA有EnsemblID转化的chip文件,但是感觉有些数据有点问题(可能是由于Ensembl的版本一直在更新的缘故),HUGO gene symbol最好

然后用R处理下,将癌组织和对应的癌旁组织的数据分别提取出来分别作为两组的表达矩阵(gct文件)以及或者分组文件(cls文件)

library(dplyr)
library(stringr)

data <- read.table(file = "TCGA-BRCA.htseq_fpkm.tsv", sep = "\t", header = T, stringsAsFactors = F, check.names = F)

data_df <- data[, -1]

normal_df <- data_df[, str_sub(names(data_df), 14, 15) %in% 11:19]
length(names(normal_df))

tumor_df <- data_df[, grepl(paste(str_sub(names(normal_df), 1, 12), collapse = "|"), names(data_df)) & !names(data_df) %in% names(normal_df)]
length(names(tumor_df))

idmapping <- read.table(file = "gencode.v22.annotation.gene.probeMap", sep = "\t", header = T, stringsAsFactors = F)
geneid <- data.frame(id = data$Ensembl_ID, stringsAsFactors = F)
geneid2symbol <- left_join(geneid, idmapping, by = "id")

all_df <- cbind(Name = geneid2symbol$gene, DESCRIPTION = "na", tumor_df, normal_df)

group <- c(rep("Tumor", 118), rep("Normal", 113))
group <- paste(group, collapse = " ")
group <- c(paste(c(118+113, 2, 1), collapse = " "), "# Tumor Normal", group)

write.table(file = "BRCA_fpkm.txt", all_df, sep = "\t", col.names = T, row.names = F, quote = F)
write.table(file = "group.cls", group, col.names = F, row.names = F, quote = F)

从上述代码,我获得118个癌组织样本和对应的113个癌旁样本的表达谱数据,并且将Ensembl ID均转化为了Gene symbol(避免之后用GSEA时,再用chip做ID转化);然后可以直接将txt文件作为输入,也可以将BRCA_fpkm.txt文件做一些处理变成GSEA标准的gct文件,如下图所示:分别加上前2行内容,第一行照抄就行,第二行则是geneid数目和样本数目

[图片上传失败...(image-1e9b2c-1601799387196)]

<figcaption>BRCA_gct_file</figcaption>

接着是Phenotype labels文件(上述代码直接出了),即cls文件,格式如下图所示:第一行231代表样本数目,2代表分2组,空格间隔,1照抄;第二行井号注释说明分组信息;第三行为每个样本对应的组名,空格分隔

[图片上传失败...(image-669c2f-1601799387196)]

<figcaption>BRCA_cls_file</figcaption>

上述文件的详细格式可参照网站:http://software.broadinstitute.org/cancer/software/gsea/wiki/index.php/Data_formats

如果网络不佳的话,接下来最好将Gene sets file(也就是GSEA软件上需要输入的Gene sets database),作者将gene sets都储存在Signature Database (MSigDb)中,去官网下载即可http://software.broadinstitute.org/gsea/downloads.jsp,比如下载个c2.cp.kegg.v6.1.symbols.gmt文件作为Gene sets database

如果数据是芯片数据或者需要GSEA的chip文件做ID转化的话,则也可以先将chip文件下载下来,FTP地址:ftp://ftp.broadinstitute.org/pub/gsea/annotations

软件使用

因为是windows桌面式软件,使用就比较简单了。首先将BRCA_fpkm.txtgroup.cls文件导入,如果网速不好的话(比如我自己),那也把上述下载下来的c2.cp.kegg.v6.1.symbols.gmt文件也导入

[图片上传失败...(image-5f63db-1601799387196)]

<figcaption>GSEA_inputfile</figcaption>

接下来点击RUN GSEA,就是几个指定参数的选择了,如下图所示:

[图片上传失败...(image-a90686-1601799387196)]

<figcaption>GSEA_paramter</figcaption>

  1. Expression dataset:输入的表达矩阵

  2. Gene sets database:gene sets文件,这里是c2.cp.kegg.v6.1.symbols.gmt文件;PS.这个文件也可以自己创建哦

  3. Number of permutations:置换检验的次数

  4. Phenotype labels:选择比较组,如果你输入的文件就只有2个组别的话,这个就很方便选一个就行了;如果你输入的有三个组别及以上的话,则这里就要跟你的需要选择两个组别的比较组,而且GSEA也会根据你的组别信息去表达矩阵中提取相对应的数据

  5. Collapse dataset to gene symbols: 如果你已经ID转化为HUGO gene symbol,那么这里选FALSE,否则选择TRUE

  6. Permutation type:选择置换的类型,是random phenotype还是random gene sets,一般每组样本数目大于7个时,建议选择phenotype,否则选择gene sets(这句话一直没在官网上找到。。。似乎在文章里?)

  7. Chip platform:早些时候主要都是芯片数据,那时必须要将芯片id转化为HUGO gene symbol,所以这个参数一直叫做chip(我猜的。。。),其实就是对ID进行注释,即ID转化,选择你ID对应的chip文件即可,如果已自行转化了ID的话,则这里空着就行(记得Collapse dataset to gene symbols选择否)

除了Required field参数外,下面还有Basic fields和Advanced fields,具体参见官网吧(注:或者鼠标悬浮在对应参数名称上,有简单的参数介绍哦)

最后点击RUN,等待左下角的Running变成Success,然后点击Success即可查看完整的结果,也可以点击Show results folder,GSEA将所有结果都放在一个文件夹中了!!!

分析结果

来看下文章里最常见的GSEA的结果图片,如下图所示:

[图片上传失败...(image-79944b-1601799387196)]

<figcaption>GSEA_result</figcaption>

从图上,我们一般关注ES值,峰出现在前端还是后端(ES值大于0在前端,小于0在后端)以及Leading-edge subset(即对富集贡献最大的部分,领头亚集);在ES图中出现领头亚集的形状,表明这个功能基因集在某处理条件下具有更显著的生物学意义;对于分析结果中,我们一般认为|NES|>1,NOM p-val<0.05,FDR q-val<0.25的通路下的基因集合是有意义的

除了上述的结果外,GSEA还提供了Running the Leading Edge Analysis等操作,也可以看看

GSEA的结果解读我也不是太熟悉,还是得多看看文献中的解释说明啦

多于多个样本的批处理,GSEA也有服务器版本,通过命令行即可操作,适合批处理操作;其还提供了R脚本可供使用(但官网上说似乎并一定可行,需要自己调整?),反正我也正准备都试试看。。。

参考资料:

功能数据库专题-GSEA
GSEA富集分析 - 界面操作
http://software.broadinstitute.org/gsea/doc/desktop_tutorial.jsp
http://software.broadinstitute.org/gsea/doc/GSEAUserGuideFrame.html
GSEA使用(初级)

借鉴代码根据实际情况改变

library(dplyr)
library(stringr)
library(limma)
data <- read.table(file = "symbol.txt", sep = "\t", header = T, stringsAsFactors = F, check.names = F)
data <- data[,-(2:105)]
data=as.matrix(data)
rownames(data)=data[,1]
exp=data[,2:ncol(data)]
dimnames=list(rownames(exp),colnames(exp))
data=matrix(as.numeric(as.matrix(exp)),nrow=nrow(exp),dimnames=dimnames)
data=avereps(data)
data=data[rowMeans(data)>0,]
data["IGF2BP1",]
data_df <- data
low_df <- colnames(data)[str_sub(data["IGF2BP1",]) <12 ]
low_df_rt <- data_df[,low_df]
high_df <- colnames(data)[str_sub(data["IGF2BP1",]) >=12 ]
high_df_rt <- data_df[,high_df]
length(low_df)
length(high_df)
all_df <- cbind(Name = rownames(data_df), DESCRIPTION = "na", high_df_rt, low_df_rt)

group <- c(rep("high", 344), rep("low", 101))
group <- paste(group, collapse = " ")
group <- c(paste(c(344+101, 2, 1), collapse = " "), "# high low", group)

write.table(file = "LUAD.txt", all_df, sep = "\t", col.names = T, row.names = F, quote = F)
write.table(file = "group.txt", group, col.names = F, row.names = F, quote = F)
dim(all_df)

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