RNA-seq練習 第三部分(DEseq2篩選差異表達基因,可視化)

DEseq2篩選差異表達基因并注釋(bioMart)

DESeq2對于輸入數據的要求
1.DEseq2要求輸入數據是由整數組成的矩陣。
2.DESeq2要求矩陣是沒有標準化的。
DESeq2包分析差異表達基因簡單來說只有三步:構建dds矩陣,標準化,以及進行差異分析。

(1)構建dds矩陣
構建dds矩陣需要:

a)表達矩陣:即上述代碼中的count,就是通過read count計算后并融合生成的矩陣,行為各個基因,列為各個樣品,中間為計算reads或者fragment得到的整數。我們后面要用的是這個文件(readcount.cvs)

b)樣品信息矩陣:即上述代碼中的colData,它的類型是一個dataframe(數據框),第一列是樣品名稱,第二列是樣品的處理情況(對照還是處理等),即condition,condition的類型是一個factor。這些信息可以從readcount.cvs中導出,也可以自己單獨建立。

c)差異比較矩陣:即design。 差異比較矩陣就是告訴差異分析函數是要從要分析哪些變量間的差異,簡單說就是說明哪些是對照哪些是處理。

構建dds矩陣的基本代碼:

dds <- DESeqDataSetFromMatrix(countData, DataFrame(condition), design= ~ condition )
> library(DESeq2)
> mycounts <- read.csv("/media/yanfang/FYWD/RNA_seq/matrix/readcount.csv")
> head(mycounts)
                X control1 control2 treat1 treat2
1 ENSG00000000003      807      357    800    963
2 ENSG00000000005        0        0      0      1
3 ENSG00000000419      389      174    405    509
4 ENSG00000000457      288      108    218    283
5 ENSG00000000460      505      208    451    543
6 ENSG00000000938        0        0      0      0
> rownames(mycounts)<-mycounts[,1] #把第一列當作行名來處理
> mycounts<-mycounts[,-1] #把帶X的列刪除
> head(mycounts)
                control1 control2 treat1 treat2
ENSG00000000003      807      357    800    963
ENSG00000000005        0        0      0      1
ENSG00000000419      389      174    405    509
ENSG00000000457      288      108    218    283
ENSG00000000460      505      208    451    543
ENSG00000000938        0        0      0      0
> condition <- factor(c(rep("control",2),rep("treat",2)), levels = c("control","treat"))
#condition是因子,不是樣本名稱;對照組和處理組,各兩個重復。conditions必須是cloData中的一列
> condition #看一下condition
[1] control control treat   treat  
Levels: control treat
> colData <- data.frame(row.names=colnames(mycounts), condition)
> colData #看一下colData
         condition
control1   control
control2   control
treat1       treat
treat2       treat
> dds <- DESeqDataSetFromMatrix(mycounts, colData, design= ~ condition)
#正式構建dds矩陣

DESeq標準化過程:有這些顯示說明是正常運行

DESeq標準化過程
> dds_norm <- DESeq(dds) #dds標準化
estimating size factors
estimating dispersions
gene-wise dispersion estimates
mean-dispersion relationship
final dispersion estimates
fitting model and testing

> dds_norm #查看標準化后的數據
class: DESeqDataSet 
dim: 62292 4 
metadata(1): version
assays(4): counts mu H cooks
rownames(62292): ENSG00000000003 ENSG00000000005 ... ENSG00000288110 ENSG00000288111
rowData names(22): baseMean baseVar ... deviance maxCooks
colnames(4): control1 control2 treat1 treat2
colData names(2): condition sizeFactor

獲取標準化后的數據:

#獲取標準化后的數據
> normalized_counts <- counts(dds_norm, normalized=TRUE)
> head(normalized_counts)
                control1 control2   treat1      treat2
ENSG00000000003 680.3985 696.3627 670.5922 668.9699158
ENSG00000000005   0.0000   0.0000   0.0000   0.6946728
ENSG00000000419 327.9740 339.4037 339.4873 353.5884602
ENSG00000000457 242.8188 210.6644 182.7364 196.5924052
ENSG00000000460 425.7760 405.7239 378.0464 377.2073357
ENSG00000000938   0.0000   0.0000   0.0000   0.0000000
#根據基因在不同的樣本中表達變化的差異程度mad值對數據排序,差異越大的基因排位越前。
> normalized_counts_mad <- apply(normalized_counts, 1, mad)
> normalized_counts <- normalized_counts[order(normalized_counts_mad, decreasing=T), ]
# 標準化后的數據輸出
> write.table(normalized_counts, file="dds_normalized_counts.xls",
+             quote=F, sep="\t", row.names=T, col.names=T)
# 只在Linux下能運行,目的是填補表格左上角內容
> system(paste("sed -i '1 s/^/ID\t/'", "dds_normalized_counts.xls"))
# 把輸出的標準化后的count取一個log值,log轉換后的結果
> rld <- rlog(dds_norm, blind=FALSE)
> rlogMat <- assay(rld)
> rlogMat <- rlogMat[order(normalized_counts_mad, decreasing=T), ]
#把log轉化后的數據再輸出一個表格
> write.table(rlogMat, file="dds_normalized_counts_rlog.xls",
+             quote=F, sep="\t", row.names=T, col.names=T)
#填補表格左上角內容
> system(paste("sed -i '1 s/^/ID\t/'", "dds_normalized_counts_rlog.xls"))

差異基因分析

> res = results(dds_norm, contrast=c("condition", "control", "treat"))
#使用results()函數獲取結果,并賦值給res
# contrast: 定義誰和誰比較
> res = res[order(res$pvalue),]
> head(res)
log2 fold change (MLE): condition control vs treat 
Wald test p-value: condition control vs treat 
DataFrame with 6 rows and 6 columns
                        baseMean    log2FoldChange             lfcSE             stat               pvalue                 padj
                       <numeric>         <numeric>         <numeric>        <numeric>            <numeric>            <numeric>
ENSG00000178691  531.97208257559  2.89986543009505 0.234227480912105 12.3805516705499 3.33045617928295e-35 2.57277739849608e-31
ENSG00000135535 1195.85832961519  1.23459771315993 0.195266300782888 6.32263584760924 2.57138788753732e-10 9.93198571561288e-07
ENSG00000196504  1798.5833532804  1.12058684067728 0.200292976167903 5.59473857804131 2.20954442255512e-08 5.68957688807944e-05
ENSG00000141425 1314.98437636948 0.969266426507209 0.176627372789244  5.4876342845441 4.07352327905737e-08 7.86699183267955e-05
ENSG00000164172 256.736460977222  1.27926938242781 0.240962413113634  5.3089997145095  1.1022850607365e-07 0.000170303041883789
ENSG00000173905   551.3081531682  1.17836225683544 0.223950630573659 5.26170546524926 1.42725274324417e-07 0.000183758790692687
> summary(res) 
# 對res矩陣進行總結,利用summary命令統計顯示一共多少個genes上調和下調

out of 31349 with nonzero total read count
adjusted p-value < 0.1
LFC > 0 (up)       : 42, 0.13% #42個上調基因
LFC < 0 (down)     : 8, 0.026% #8個下調基因
outliers [1]       : 0, 0% #沒有離群值
low counts [2]     : 23624, 75% #75%基因表達量不高,屬于low count
(mean count < 166)
[1] see 'cooksCutoff' argument of ?results
[2] see 'independentFiltering' argument of ?results

> write.csv(res,file="All_results.csv") #將所有的數據輸出
> table(res$padj<0.05)#取padj小于0.05的數據,得到31行
FALSE  TRUE 
 7694    31 

image.png

提取差異基因分析的結果
在利用數據比較分析兩個樣品中同一個基因是否存在差異表達的時候,一般選取Foldchange值和經過FDR矯正過后的p值,取padj值(p值經過多重校驗校正后的值)小于0.05,log2FoldChange大于1的基因作為差異基因集

> diff_gene_deseq2 <-subset(res,padj < 0.05 & (log2FoldChange > 1 | log2FoldChange < -1))
#也可以寫成diff_gene_deseq2 <-subset(res, padj < 0.05 & abs(log2FoldChange) > 1)
> dim(diff_gene_deseq2) #訪問數組
[1] 15  6
> head(diff_gene_deseq2)
log2 fold change (MLE): condition control vs treat 
Wald test p-value: condition control vs treat 
DataFrame with 6 rows and 6 columns
                        baseMean   log2FoldChange             lfcSE             stat               pvalue                 padj
                       <numeric>        <numeric>         <numeric>        <numeric>            <numeric>            <numeric>
ENSG00000178691  531.97208257559 2.89986543009505 0.234227480912105 12.3805516705499 3.33045617928295e-35 2.57277739849608e-31
ENSG00000135535 1195.85832961519 1.23459771315993 0.195266300782888 6.32263584760924 2.57138788753732e-10 9.93198571561288e-07
ENSG00000196504  1798.5833532804 1.12058684067728 0.200292976167903 5.59473857804131 2.20954442255512e-08 5.68957688807944e-05
ENSG00000164172 256.736460977222 1.27926938242781 0.240962413113634  5.3089997145095  1.1022850607365e-07 0.000170303041883789
ENSG00000173905   551.3081531682 1.17836225683544 0.223950630573659 5.26170546524926 1.42725274324417e-07 0.000183758790692687
ENSG00000172239 238.384608006302 1.30055924781765 0.252531313724155 5.15009100708309 2.60360094361487e-07 0.000287325961277498
> write.csv(diff_gene_deseq2,file= "DEG_treat_vs_control.csv") 
#把所有的差異表達基因輸出一個文件

用bioMart對差異表達基因進行注釋
bioMart包是一個連接bioMart數據庫的R語言接口,能通過這個軟件包自由連接到bioMart數據庫。這個包可以做以下幾個工作:
1.查找某個基因在染色體上的位置。反之,給定染色體每一區間,返回該區間的基因s;
2.通過EntrezGene的ID查找到相關序列的GO注釋。反之,給定相關的GO注釋,獲取相關的EntrezGene的ID;
3.通過EntrezGene的ID查找到相關序列的上游100bp序列(可能包含啟動子等調控元件);
4.查找人類染色體上每一段區域中已知的SNPs;
5.給定一組的序列ID,獲得其中具體的序列

> library('biomaRt')#載入R包,要用bioMart包從ensembl數據庫獲得基因的注釋
> library("curl")
> mart <- useDataset("hsapiens_gene_ensembl", useMart("ensembl"))
#用useMart函數選定數據庫,用useDataset()函數選定數據庫中的基因組.
#這條語句的意思是:選定ensembl數據庫中的hsapiens_gene_ensembl基因組
> my_ensembl_gene_id<-row.names(diff_gene_deseq2)
> hg_symbols<- getBM(attributes=c('ensembl_gene_id','external_gene_name',"description"),filters = 'ensembl_gene_id', values = my_ensembl_gene_id, mart = mart)
#用getBM()函數獲取注釋。這個函數有4個參數:
#attributers()里面的值為我們要獲取的注釋類型,filters()里面的值為我們已知的注釋類型
#values= 這個值就是我們已知的注釋類型的數據,把上面我們通過數據處理得到的ensembl基因序號作為ensembl_gene_id 的值
#mart= 這個值是我們所選定的數據庫的基因組
#mart <- useDataset("hsapiens_gene_ensembl", useMart("ensembl"))
> head(hg_symbols)
  ensembl_gene_id external_gene_name                                                                            description
1 ENSG00000064666               CNN2                                          calponin 2 [Source:HGNC Symbol;Acc:HGNC:2156]
2 ENSG00000135535              CD164                                      CD164 molecule [Source:HGNC Symbol;Acc:HGNC:1632]
3 ENSG00000140526              ABHD2                    abhydrolase domain containing 2 [Source:HGNC Symbol;Acc:HGNC:18717]
4 ENSG00000144357               UBR3 ubiquitin protein ligase E3 component n-recognin 3 [Source:HGNC Symbol;Acc:HGNC:30467]
5 ENSG00000152818               UTRN                                           utrophin [Source:HGNC Symbol;Acc:HGNC:12635]
6 ENSG00000163848             ZNF148                            zinc finger protein 148 [Source:HGNC Symbol;Acc:HGNC:12933]
> ensembl_gene_id<-rownames(diff_gene_deseq2)
> diff_gene_deseq2<-cbind(ensembl_gene_id,diff_gene_deseq2)
> colnames(diff_gene_deseq2)[1]<-c("ensembl_gene_id")
> diff_name<-merge(diff_gene_deseq2,hg_symbols,by="ensembl_gene_id")
#把注釋文件和基因表達量文件合并起來
> head(diff_name)
DataFrame with 6 rows and 9 columns
  ensembl_gene_id         baseMean    log2FoldChange             lfcSE              stat               pvalue                 padj
      <character>        <numeric>         <numeric>         <numeric>         <numeric>            <numeric>            <numeric>
1 ENSG00000064666 233.649167762814 -1.05516841956132 0.261201368199475 -4.03967416723294  5.3525508533232e-05   0.0179775892790964
2 ENSG00000135535 1195.85832961519  1.23459771315993 0.195266300782888  6.32263584760924 2.57138788753732e-10 9.93198571561288e-07
3 ENSG00000140526 454.248659298761  1.09955045620162 0.244298072590034  4.50085604255593 6.76803336861755e-06  0.00326769111078566
4 ENSG00000144357 411.010386096953  1.00761195016462 0.244841355759736  4.11536665053185 3.86564433730833e-05   0.0149310512528534
5 ENSG00000152818  568.00627589957  1.22331171400082 0.254288749757859  4.81071897661886 1.50388340150822e-06   0.0011617499276651
6 ENSG00000163848 315.923451036876  1.12786190454491 0.232224503174498  4.85677389391337 1.19313704152794e-06  0.00102410929397815
  external_gene_name                                                                            description
         <character>                                                                            <character>
1               CNN2                                          calponin 2 [Source:HGNC Symbol;Acc:HGNC:2156]
2              CD164                                      CD164 molecule [Source:HGNC Symbol;Acc:HGNC:1632]
3              ABHD2                    abhydrolase domain containing 2 [Source:HGNC Symbol;Acc:HGNC:18717]
4               UBR3 ubiquitin protein ligase E3 component n-recognin 3 [Source:HGNC Symbol;Acc:HGNC:30467]
5               UTRN                                           utrophin [Source:HGNC Symbol;Acc:HGNC:12635]
6             ZNF148                            zinc finger protein 148 [Source:HGNC Symbol;Acc:HGNC:12933]

查看CD164的情況:

> CD164 <- diff_name[diff_name$external_gene_name=="CD164",]
> CD164
DataFrame with 1 row and 9 columns
  ensembl_gene_id         baseMean   log2FoldChange             lfcSE             stat               pvalue                 padj external_gene_name
      <character>        <numeric>        <numeric>         <numeric>        <numeric>            <numeric>            <numeric>        <character>
1 ENSG00000135535 1195.85832961519 1.23459771315993 0.195266300782888 6.32263584760924 2.57138788753732e-10 9.93198571561288e-07              CD164
                                        description
                                        <character>
1 CD164 molecule [Source:HGNC Symbol;Acc:HGNC:1632]

數據可視化
1.MA plot
MA-plot ,也叫 mean-difference plot或者Bland-Altman plot,用來估計模型中系數的分布。 X軸, the “A” ( “average”);Y軸,the “M” (“minus”) – subtraction of log values is equivalent to the log of the ratio。M表示log fold change,衡量基因表達量變化,上調還是下調。A表示每個基因的count的均值。根據summary可知,low count的比率很高,所以大部分基因表達量不高,也就是集中在0的附近(log2(1)=0,也就是變化1倍).提供了模型預測系數的分布總覽。

library(ggplot2)
library(BiocGenerics)
plotMA(res,ylim=c(-2,2))
topGene <- rownames(res)[which.min(res$padj)]
with(res[topGene, ], {
  points(baseMean, log2FoldChange, col="dodgerblue", cex=6, lwd=2)
  text(baseMean, log2FoldChange, topGene, pos=2, col="dodgerblue")
})
image.png

lfcShrink 收縮log2 fold change

> res_order<-res[order(row.names(res)),]
#前面res結果已經按padj排序了,所以這次要按照行名升序再排列回來,否則和dds不一致
> res = res_order
> res.shrink <- lfcShrink(dds, contrast = c("condition","treat","control"), res=res)
#將DESeq函數處理后生成的的dds對象傳遞給lfcShrink函數即可
> plotMA(res.shrink, main="DESeq2", ylim = c(-5,5))
> topGene <- rownames(res)[which.min(res$padj)]
> with(res[topGene, ], {
+        points(baseMean, log2FoldChange, col="dodgerblue", cex=2, lwd=2)
+        text(baseMean, log2FoldChange, topGene, pos=2, col="dodgerblue")
+      })

效果好的話,收縮的圖形不會出現左寬右窄。

image.png

火山圖 原始數據來源:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE50177

>BiocManager::install("EnhancedVolcano")
>library(EnhancedVolcano)
>library(airway)
>EnhancedVolcano(res,
                lab = rownames(res),
                x = 'log2FoldChange',
                y = 'pvalue',
                xlim = c(-8, 8),
                title = 'resistant versus control',
                pCutoff = 10e-17,
                FCcutoff = 2,
                transcriptPointSize = 1.5,
                transcriptLabSize = 3.0,
                col=c('black', 'blue', 'green', 'red1'),
                colAlpha = 1,
                legend=c('NS','Log2 fold-change','P value',
                         'P value & Log2 fold-change'),
                legendPosition = 'right',
                legendLabSize = 14,
                legendIconSize = 5.0,
                )
image.png

箱圖

> plotCounts(dds, gene="ENSG00000064666", intgroup="condition", returnData=TRUE) %>%
+   ggplot(aes(condition, count)) + geom_boxplot(aes(fill=condition)) + scale_y_log10() + ggtitle("CNN2")
image.png

PCA(principal components analysis)
熱圖(heatmap), PCA或聚類(clustering)我們需要data的轉換后的格式。
在DESeq2包中專門由一個PCA分析的函數,即plotPCA。在DESeq2包中實際上已經有了歸一化的方法,rlog和vst。在使用的需要根據樣本量的多少來選擇方法。樣本量少于30的話,選擇rlog,多于30的話,建議選擇vst。

#歸一化,因為樣本量超過了30,因此用vst
> vsdata <- vst(dds, blind=FALSE)
> plotPCA(vsdata, intgroup="condition")
#intgroup:也就是在構建dds的時候的分組,實際上這個分組最后影響的是PCA圖中的顏色,但是并不影響PCA圖中各個樣本的位置。
#這個參數的作用就是當你的PCA圖需要加樣本名的時候,也就是你希望在PCA圖上知道哪個點是哪個樣本,你就需要導出這個。
image.png

熱圖
1.count matrix 熱圖

library("pheatmap")

有兩種方式,畫出來的圖是一樣的。
第一種:

> select<-order(rowMeans(counts(dds_norm, normalized = TRUE)),decreasing = TRUE)[1:20]
> df <- as.data.frame(colData(dds_norm)[,c("condition","sizeFactor")])
> pheatmap(assay(ntd)[select,], cluster_rows=FALSE, show_rownames=FALSE,cluster_cols=FALSE, annotation_col=df)

第二種:

> ntd <- normTransform(dds_norm)
> pheatmap(assay(ntd)[select,], cluster_rows=FALSE, show_rownames=FALSE,
+          cluster_cols=FALSE, annotation_col=df)

畫出來的圖都是這樣:

image.png

sample-to-sample distances熱圖
轉換數據還可以做出樣本聚類熱圖。用dist函數來獲得sample-to-sample距離。距離矩陣熱圖中可以清楚看到samples之間的相似與否的總概。需要給heatmap函數基于sample距離提供等級聚類hc。
首先調用RColorBrewer包,這個包的說明請見:http://www.lxweimin.com/p/a8856757a0d2

> library("RColorBrewer")
> sampleDists <- dist(t(assay(vsdata)))
> sampleDistMatrix <- as.matrix(sampleDists)
> rownames(sampleDistMatrix) <- paste(vsdata$condition, vsdata$type, sep="-")
> colnames(sampleDistMatrix) <- NULL
> colors <- colorRampPalette( rev(brewer.pal(9, "Oranges")) )(255)
> pheatmap(sampleDistMatrix,
+                   clustering_distance_rows=sampleDists,
+                   clustering_distance_cols=sampleDists,
+                   col=colors)
image.png

功能富集分析
A:差異基因富集分析(不需要表達值,只需要gene name)
最常用的基因注釋工具是GOKEGG注釋,這基本上是差異基因分析一定做的兩件事。GO可以在GO:BP(生物過程),GO:MF(分子功能),GO:CC(細胞組分)三個方面分別進行注釋,用的比較多的是GO:BP,但其他兩方面也很重要。得到的差異表達基因列表就可以,也就是說不需要其他的值(http://www.lxweimin.com/p/5d82acad6008
拿什么來富集? 得到的差異表達基因列表就可以。
B: 基因集(gene set)富集分析(不管有無差異,需要全部genes表達值)
好處:可以發現被差異基因舍棄的genes可能參與了某重要生理過程或信號通路。工具:GSEA

library(clusterProfiler)
library(DOSE)
library(org.Hs.eg.db)
setwd("/media/yanfang/FYWD/RNA_seq/matrix/")
sig.gene<-read.csv(file="readcount_all.csv")#用DEG_treat_vs_control.csv后續分析沒有富集到,所以換用這個
head(sig.gene)
gene<-sig.gene[,2] #ID所在的列
head(gene)
gene.df<-bitr(gene, fromType = "ENSEMBL", 
              toType = c("SYMBOL","ENTREZID"),
              OrgDb = org.Hs.eg.db)
# 人類樣品用org.Hs.eg.db;小鼠用org.Mm.eg.db
head(gene.df)
library("stringr") 

GO_CC富集

ego_cc <- enrichGO(gene       = gene.df$ENSEMBL,
                   OrgDb      = org.Hs.eg.db,
                   keyType    = 'ENSEMBL',
                   ont        = "CC",
                   pAdjustMethod = "BH",
                   pvalueCutoff = 0.01,
                   qvalueCutoff = 0.05)
barplot(ego_cc,showCategory = 18,title="The GO_CC enrichment analysis of all DEGs ")+ 
     scale_size(range=c(2, 12))+
     scale_x_discrete(labels=function(ego_cc)  str_wrap(ego_cc,width = 25))

GO_BP富集

ego_bp <- enrichGO(gene       = gene.df$ENSEMBL,
                   OrgDb      = org.Hs.eg.db,
                   keyType    = 'ENSEMBL',
                   ont        = "BP",
                   pAdjustMethod = "BH",
                   pvalueCutoff = 0.01,
                   qvalueCutoff = 0.05)
barplot(ego_bp,showCategory = 18,title="The GO_BP enrichment analysis of all DEGs ")+ 
     scale_size(range=c(2, 12))+
     scale_x_discrete(labels=function(ego_bp) str_wrap(ego_bp,width = 25))
image.png

image.png
#功能富集分析氣泡圖
#這個結果是另一篇文獻中的數據得來的
dotplot(ego_bp, font.size=10)
image.png
#GO圖
plotGOgraph(ego_bp)
image.png

KEGG富集分析
KEGG將基因組信息和高一級的功能信息有機地結合起來,通過對細胞內已知生物學過程的計算機化處理和將現有的基因功能解釋標準化,對基因的功能進行系統化的分析。
KEGG的另一個任務是一個將基因組中的一系列基因用一個細胞內的分子相互作用的網絡連接起來的過程,如一個通路或是一個復合物,通過它們來展現更高一級的生物學功能。
參考文章:http://blog.sciencenet.cn/blog-364884-779116.html
KEGG物種縮寫:http://www.genome.jp/kegg/catalog/org_list.html
GO和KEGG輸出文件解讀:http://www.bio-info-trainee.com/370.html

#這里我用另外的一篇文獻里的原始數據做的圖
>library(stringr)
>kk<-enrichKEGG(gene      =gene.df$ENTREZID,
                 organism = 'hsa',
                 pvalueCutoff = 0.05)
>kk[1:30]
>barplot(kk,showCategory = 25, title="The KEGG enrichment analysis of all DEGs")+
  scale_size(range=c(2, 12))+
  scale_x_discrete(labels=function(kk) str_wrap(kk,width = 25))
>dotplot(kk,showCategory = 25, title="The KEGG enrichment analysis of all DEGs")+
  scale_size(range=c(2, 12))+
  scale_x_discrete(labels=function(kk) str_wrap(kk,width = 25))
image.png

Gene Set Enrichment Analysis(GSEA)
基因集富集分析 (Gene Set Enrichment Analysis, GSEA) 的基本思想是使用預定義的基因集(通常來自功能注釋或先前實驗的結果),將基因按照在兩類樣本中的差異表達程度排序,然后檢驗預先設定的基因集合是否在這個排序表的頂端或者底端富集。基因集合富集分析檢測基因集合而不是單個基因的表達變化,因此可以包含這些細微的表達變化,預期得到更為理想的結果。(http://www.lxweimin.com/p/4910d7cec5c8
參考資料:GSEA分析是什么鬼(上)GSEA分析是什么鬼(下)

setwd("/media/yanfang/FYWD/RNA_seq/matrix/")
sig.gene <- read.csv(file="DEG_resistant_vs_control.csv")
genelist <- sig.gene$log2FoldChange
names(genelist) <- sig.gene[,1]
genelist <- sort(genelist, decreasing = TRUE)
gsemf <- gseGO(genelist, OrgDb = org.Hs.eg.db, keyType = "ENSEMBL", ont="BP")#OrgDb:指定物種注釋數據。keytype:ID類型
head(gsemf)
gseaplot(gsemf, geneSetID="GO:0030198")
image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯系作者。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容