GSVA&ssGSEA:單樣本通路富集分析流程

  • ORA富集分析只需要提供差異基因列表绊汹,GSEA富集分析還需要提供對(duì)應(yīng)差異倍數(shù)信息芯勘。但二者都是基于差異分析得到的結(jié)果空执。
  • Gene set variation analysis (GSVA)與Single sample GSEA (ssGSEA)這兩種方法是都基于單樣本的基因表達(dá)信息計(jì)算每個(gè)通路的相對(duì)表達(dá)活性代咸,然后基于此可計(jì)算樣本間的通路表達(dá)活性的差異分析瞪醋。由于這兩種算法相似,就不做過多的區(qū)分休弃。
  • 相當(dāng)于把基因表達(dá)矩陣(列:樣本吞歼,行:基因 )變?yōu)橐粋€(gè)通路/基因集活性表達(dá)矩陣(列:樣本,行:通路/基因集)
  • 可使用GSVA包進(jìn)行分析塔猾,以下的學(xué)習(xí)代碼最主要來(lái)自該包的官方文檔:https://www.bioconductor.org/packages/release/bioc/vignettes/GSVA/inst/doc/GSVA.html

1篙骡、gsva()的兩個(gè)核心參數(shù)

#安裝加載包
BiocManager::install("GSVA")
library(GSVA)

#示例數(shù)據(jù)
BiocManager::install("GSVAdata")
library(GSVAdata)

形如gsva(expr, gset.idx.list),進(jìn)行GSVA分析需要兩個(gè)必要參數(shù)

(1)expr表達(dá)矩陣

  • 表達(dá)矩陣可以是單純的matrix格式丈甸,也可以是ExpressionSet/SummarizedExperiment對(duì)象糯俗;
  • 對(duì)于microarray或者經(jīng)過log-CPMs, log-RPKMs or log-TPMs之類標(biāo)準(zhǔn)化處理的RNA-seq數(shù)據(jù),使用默認(rèn)的參數(shù)即可睦擂;如果是原始count的RNA-seq表達(dá)水平得湘,需要添加kcdf="Poisson"參數(shù)。

(2)gset.idx.list通路基因集

  • 通路基因集的最直接顿仇、簡(jiǎn)單的格式就是list對(duì)象淘正,每個(gè)元素包含特定基因集的所有基因,元素名為通路基因名臼闻;
  • The Molecular Signatures Database (MSigDB)數(shù)據(jù)庫(kù)包含了多種主流的注釋基因集供下載使用
    https://www.gsea-msigdb.org/gsea/msigdb/
  • 值得注意的是文件為gmt格式鸿吆,可使用clusterProfiler::read.gmt()函數(shù)讀為數(shù)據(jù)框格式。建議下載Entrez基因id格式
c2.cp.kegg = clusterProfiler::read.gmt("c2.cp.kegg.v7.4.entrez.gmt")
c2.cp.reactome = clusterProfiler::read.gmt("c2.cp.reactome.v7.4.entrez.gmt")
genesets = rbind(c2.cp.kegg,c2.cp.reactome)
head(genesets)
#                         term   gene
# 1 KEGG_N_GLYCAN_BIOSYNTHESIS  79868
# 2 KEGG_N_GLYCAN_BIOSYNTHESIS  57171
# 3 KEGG_N_GLYCAN_BIOSYNTHESIS   6184
# 4 KEGG_N_GLYCAN_BIOSYNTHESIS 199857
# 5 KEGG_N_GLYCAN_BIOSYNTHESIS  11253
# 6 KEGG_N_GLYCAN_BIOSYNTHESIS  10195
genesets = split(genesets$gene, genesets$term)
str(head(genesets))

2述呐、gsva()分析示例

2.1 例1:膠質(zhì)母細(xì)胞瘤亞型GSVA分析

  • 目的:對(duì)于膠質(zhì)母細(xì)胞瘤GBM的四種亞型(proneural, classical, neural and mesenchymal)惩淳,給定的4個(gè)不同大腦細(xì)胞類型基因集的富集程度分布情況。
表達(dá)矩陣數(shù)據(jù)
data(gbm_VerhaakEtAl)
exprs(gbm_eset)[1:4,1:4]
#           TCGA.02.0003.01A.01 TCGA.02.0010.01A.01 TCGA.02.0011.01B.01 TCGA.02.0014.01A.01
# AACS                0.51451            -0.36739             0.27668             0.71333
# FSTL1              -0.28438            -1.52133            -1.02120            -2.06326
# ELMO2               0.09697             0.32328             0.59386             0.41703
# CREB3L1             0.27977            -0.64587             0.37805            -0.60164
基因集數(shù)據(jù)
data(brainTxDbSets)
str(brainTxDbSets)
# List of 4
# $ astrocytic_up      : chr [1:85] "GRHL1" "GPAM" "PAPSS2" "MERTK" ...
# $ astroglia_up       : chr [1:88] "BST2" "SERPING1" "ACTA2" "C9orf167" ...
# $ neuronal_up        : chr [1:98] "STXBP1" "JPH4" "CACNG3" "BRUNOL6" ...
# $ oligodendrocytic_up: chr [1:70] "DCT" "ZNF536" "GNG8" "ELOVL6" ...
gsva()分析
gbm_es <- gsva(gbm_eset, brainTxDbSets)
# Estimating GSVA scores for 4 gene sets.
# Estimating ECDFs with Gaussian kernels
# |==========================================================================================================| 100%
class(gbm_es)
# [1] "ExpressionSet"
# attr(,"package")
# [1] "Biobase"
exprs(gbm_es)[1:4,1:3]
#                       TCGA.02.0003.01A.01 TCGA.02.0010.01A.01 TCGA.02.0011.01B.01
# astrocytic_up                -0.2785436          -0.2676394         -0.01994194
# astroglia_up                 -0.5038491          -0.5199252         -0.44371190
# neuronal_up                   0.5406985           0.1856688         -0.12880731
# oligodendrocytic_up           0.3049166           0.2399523          0.26027077
熱圖可視化
subtypeOrder <- c("Proneural", "Neural", "Classical", "Mesenchymal")
sampleOrderBySubtype <- sort(match(gbm_es$subtype, subtypeOrder),
                             index.return=TRUE)$ix
geneSetOrder <- c("astroglia_up", "astrocytic_up", "neuronal_up",
                  "oligodendrocytic_up")
library(pheatmap)
pheatmap(exprs(gbm_es)[geneSetOrder, sampleOrderBySubtype],
         show_colnames = F, cluster_cols = F, 
         annotation_col = pData(gbm_es[,sampleOrderBySubtype]))

2.2 例2:白血病亞型GSVA分析+差異分析

  • 目的:研究常規(guī)兒童急性淋巴母細(xì)胞白血病(ALL)與MLL(混合系白血病基因)易位的通路富集差異乓搬,并進(jìn)行差異分析思犁,得到在兩種亞型中明顯差異表達(dá)的通路基因集代虾。
表達(dá)矩陣數(shù)據(jù)
data(leukemia)
exprs(leukemia_eset)[1:4,1:4]
#           CL2001011101AA.CEL CL2001011102AA.CEL CL2001011104AA.CEL CL2001011105AA.CEL
# 1000_at            11.354426          10.932543          11.185906          11.251631
# 1001_at             9.185470           8.823661           8.687186           8.958305
# 1002_f_at           7.806993           8.127591           7.842353           8.319227
# 1003_s_at          10.164370          10.048514          10.006014          10.474046

#探針的基因名注釋
library(hgu95a.db)
ids = as.data.frame(hgu95aENTREZID)
fData(leukemia_eset)$ENTREZID = ids$gene_id[match(rownames(leukemia_eset), ids$probe_id)]
leukemia_eset = leukemia_eset[!is.na(fData(leukemia_eset)$ENTREZID),]
leukemia_eset = leukemia_eset[!duplicated(fData(leukemia_eset)$ENTREZID),]
rownames(leukemia_eset) = fData(leukemia_eset)$ENTREZID
exprs(leukemia_eset)[1:4,1:4]
#       CL2001011101AA.CEL CL2001011102AA.CEL CL2001011104AA.CEL CL2001011105AA.CEL
# 5595          11.354426          10.932543          11.185906          11.251631
# 7075           9.185470           8.823661           8.687186           8.958305
# 1557           7.806993           8.127591           7.842353           8.319227
# 643           10.164370          10.048514          10.006014          10.474046

#樣本分組
table(leukemia_eset$subtype)
# ALL MLL 
# 20  17 
通路基因集
  • 為1.2點(diǎn)整理的kegg、reactome基因集
length(genesets)
#[1] 1790
str(head(genesets))
# List of 6
# $ KEGG_N_GLYCAN_BIOSYNTHESIS                         : chr [1:46] "79868" "57171" "6184" "199857" ...
# $ KEGG_OTHER_GLYCAN_DEGRADATION                      : chr [1:16] "64772" "2720" "4126" "4125" ...
# $ KEGG_O_GLYCAN_BIOSYNTHESIS                         : chr [1:30] "8693" "117248" "168391" "11226" ...
# $ KEGG_GLYCOSAMINOGLYCAN_DEGRADATION                 : chr [1:21] "9955" "10855" "60495" "2720" ...
# $ KEGG_GLYCOSAMINOGLYCAN_BIOSYNTHESIS_KERATAN_SULFATE: chr [1:15] "9435" "11041" "10678" "8534" ...
# $ KEGG_GLYCEROLIPID_METABOLISM                       : chr [1:49] "129642" "57678" "9388" "8525" ...
gsva()分析
leukemia_es <- gsva(leukemia_eset, genesets, min.sz=10, max.sz=500)
exprs(leukemia_es)[1:4,1:3]         
#                                                     CL2001011101AA.CEL CL2001011102AA.CEL CL2001011104AA.CEL
# KEGG_N_GLYCAN_BIOSYNTHESIS                                 0.056098397        -0.21254643          0.3442295
# KEGG_OTHER_GLYCAN_DEGRADATION                             -0.371743215        -0.43330368          0.3012659
# KEGG_GLYCOSAMINOGLYCAN_DEGRADATION                         0.044683884        -0.04355861         -0.1263370
# KEGG_GLYCOSAMINOGLYCAN_BIOSYNTHESIS_KERATAN_SULFATE       -0.002049164        -0.59098416         -0.1913861
limma差異分析
library(limma)
mod <- model.matrix(~ factor(leukemia_es$subtype))
colnames(mod) <- c("ALL", "MLLvsALL")
fit <- lmFit(leukemia_es, mod)
fit <- eBayes(fit)
tt <- topTable(fit, coef=2, n=Inf)
head(tt)
#                                                       logFC      AveExpr         t      P.Value    adj.P.Val        B
# REACTOME_DCC_MEDIATED_ATTRACTIVE_SIGNALING           -0.4364816 -0.015338411 -6.356475 1.035005e-07 0.0001322736 7.597326
# REACTOME_GLYCOSPHINGOLIPID_METABOLISM                 0.3490613 -0.008042234  5.201199 5.022153e-06 0.0032091556 4.015100
# REACTOME_RESPONSE_TO_METAL_IONS                       0.5102309 -0.009041289  4.864142 1.526901e-05 0.0039353010 2.988990
# REACTOME_REGULATION_OF_MECP2_EXPRESSION_AND_ACTIVITY -0.3540451  0.004755112 -4.859177 1.551936e-05 0.0039353010 2.973992
# REACTOME_OTHER_SEMAPHORIN_INTERACTIONS                0.3638330  0.013275406  4.792116 1.932383e-05 0.0039353010 2.771837
# KEGG_PROXIMAL_TUBULE_BICARBONATE_RECLAMATION          0.2701284 -0.003998529  4.782970 1.990926e-05 0.0039353010 2.744324
差異分析可視化:火山圖
library(ggplot2)
library(ggrepel)
#自定義閾值 adj.P.Val < 0.05 激蹲;abs(tt$logFC) > 0.25
tt$change = as.factor(ifelse(tt$adj.P.Val < 0.05 & abs(tt$logFC) > 0.25,
                                   ifelse(tt$logFC > 0.25 ,'UP','DOWN'),'NOT'))

up_gs = rownames(subset(tt,logFC > 0))[1:3]
down_gs = rownames(subset(tt,logFC < 0))[1:3]
label_gs = tt[c(up_gs,down_gs),]
label_gs$name = rownames(label_gs)
ggplot(data=tt, 
           aes(x=logFC, y=-log10(P.Value), 
               color=change)) +
  geom_point(alpha=0.4, size=1.75) +
  theme_set(theme_set(theme_bw(base_size=20)))+
  xlab("log2 fold change") + ylab("-log10 p-value") +
  theme(plot.title = element_text(size=15,hjust = 0.5))+
  scale_colour_manual(values = c('blue','black','red')) +
  geom_text_repel(
    data = label_gs,
    aes(label = name),min.segment.length = 0) 
差異分析可視化:分組熱圖
tt_sig = subset(tt, adj.P.Val < 0.1)
pheatmap(leukemia_es[rownames(tt_sig),],
         show_colnames = F, cluster_cols = F,
         annotation_col = pData(leukemia_es))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末褐着,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子托呕,更是在濱河造成了極大的恐慌含蓉,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件项郊,死亡現(xiàn)場(chǎng)離奇詭異馅扣,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)着降,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門差油,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人任洞,你說(shuō)我怎么就攤上這事蓄喇。” “怎么了交掏?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵妆偏,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我盅弛,道長(zhǎng)钱骂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任挪鹏,我火速辦了婚禮见秽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘讨盒。我一直安慰自己解取,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布返顺。 她就那樣靜靜地躺著禀苦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪创南。 梳的紋絲不亂的頭發(fā)上伦忠,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天省核,我揣著相機(jī)與錄音稿辙,去河邊找鬼。 笑死气忠,一個(gè)胖子當(dāng)著我的面吹牛邻储,可吹牛的內(nèi)容都是我干的赋咽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼吨娜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼脓匿!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起宦赠,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤陪毡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后勾扭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毡琉,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年妙色,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了桅滋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡身辨,死狀恐怖丐谋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情煌珊,我是刑警寧澤号俐,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站定庵,受9級(jí)特大地震影響萧落,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜洗贰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一找岖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧敛滋,春花似錦许布、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至庶艾,卻和暖如春袁余,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咱揍。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工颖榜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓掩完,卻偏偏與公主長(zhǎng)得像噪漾,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子且蓬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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