GEO數(shù)據(jù)庫 mRNA芯片分析全流程

GEO數(shù)據(jù)庫 mRNA芯片分析全流程


我們演示的數(shù)據(jù)集是GSE19136,樣本可分為三組(對照組,支架組驼鞭,紫杉醇組)畦幢,具體實驗設(shè)計情況請查看鏈接。本篇文章主要對對照組和支架組 做差異分析判没。分析流程主要包括基于limma包的差異分析、pheatmap包的熱圖和ggplot2的火山圖(包括對基因的批量標(biāo)記)。

1. 差異分析

  • 數(shù)據(jù)下載

setwd("D:\\R\\wjh\\GSE19136")

library(GEOquery)    #用GEOquery包獲取GEO數(shù)據(jù)

eSet<-getGEO('GSE19136',destdir='./',getGPL=F)  #下載數(shù)據(jù)扶踊,構(gòu)建eSet對象

eset<-exprs(eSet[[1]])[,c(1,2,4,5,7,8,10,11)]    #提取基因表達(dá)矩陣

metadata<-pData(eSet[[1]])    #可以查看芯片的描述性信息,為后面分組做準(zhǔn)備

x<-metadata$title[c(1,2,4,5,7,8,10,11)]      #查看芯片的標(biāo)題郎任,可以選擇用于分組的字段

group_list<-factor(unlist(lapply(x,function(x) strsplit(as.character(x),"_")[[1]][5])))  #我們發(fā)現(xiàn)取第5個字段作為分組信息最好

  • ID轉(zhuǎn)換

gpl <- getGEO('GPL570', destdir=".")    #下載并獲取GSE19136對應(yīng)平臺的注釋信息

anno1<-Table(gpl)[,c(1,11)]    #提取探針I(yè)D秧耗,gene symbol

eset<-as.data.frame(eset)  #矩陣轉(zhuǎn)換成數(shù)據(jù)框,便于后面添加非數(shù)值型的列

eset$ID <- rownames(eset)  #添加一列(基因名)

merg<-merge(eset,anno1,by="ID")  #合并表達(dá)矩陣和基因名舶治,通過探針號索引

y<-merg$`Gene Symbol`

gene<-unlist(lapply(y,function(y) strsplit(as.character(y)," /// ")[[1]][1]))

merg$gene <- gene  #一個探針對應(yīng)多個基因的時候分井,取第一個基因

aggr<-aggregate(merg[,2:9],by=list(merg$gene),mean) #多個探針對應(yīng)一個基因的時候,取平均值

  • 差異分析

eset <- aggr[,2:9]

rownames(eset)<-aggr[,1]  #得到一個行名為unique的gene symbol矩陣

design<-model.matrix(~-1+group_list)    #構(gòu)建實驗設(shè)計矩陣

library(limma)     

contrast.matrix<-makeContrasts(contrasts = "group_listbare-group_listcontrol", levels = design)  #構(gòu)建對比模型霉猛,比較兩個實驗條件下表達(dá)數(shù)據(jù)尺锚,根據(jù)上面的group_list修改bare和control

fit <- lmFit(log2(eset),design)    #線性模型擬合

fit1 <- contrasts.fit(fit, contrast.matrix)  #根據(jù)對比模型進(jìn)行差值計算

fit2 <- eBayes(fit1)    #貝葉斯檢驗

tempOutput = topTable(fit2, coef="group_listbare-group_listcontrol", n=nrow(fit2),lfc=log2(1))    #生成所有基因的檢驗結(jié)果報表

dif<-tempOutput[tempOutput[,"P.Value"]<0.05,] #根據(jù)P值篩選全部差異表達(dá)基因(圖)

dim(dif)

head(dif)

write.csv(dif,file = "dif.csv",quote = F)

2. 畫熱圖


rt <- read.table("dif.csv",header = T,sep = ",",stringsAsFactors = F)

heat<-eset[rownames(eset) %in% c(head(rownames(subset(dif,dif$logFC>0)),15),head(rownames(subset(dif,dif$logFC<0)),15)),]  #對前15個上調(diào)基因和下調(diào)基因做熱圖

library(pheatmap)

x <- t(scale(t(heat)))  #事實證明用這個做歸一化,效果最好

pheatmap(x)

GSE19136heatmap30.png

3. 火山圖


##################### 火山圖  #################################

tempOutput1 = topTable(fit2, coef="group_listbare-group_listcontrol", n=nrow(fit2),lfc=log2(1))    #生成所有基因的檢驗結(jié)果報表

data<-tempOutput1[tempOutput1[,"P.Value"]<=1,]

data$gene<-rownames(data)

data$sig[data$P.Value>=0.05 | abs(data$logFC) < 1] <- "black"

data$sig[data$P.Value<0.05 & data$logFC >= 1] <- "red"

data$sig[data$P.Value<0.05 & data$logFC <= -1] <- "green"

library(ggplot2)

library(ggrepel)

library(dplyr)

ggplot(data=data, aes(x=logFC, y =-log10(P.Value),color =sig)) +

    geom_point() +theme_set(theme_bw())+theme(panel.grid=element_blank(),strip.text = element_blank())+

    scale_color_manual(values = c("black","green","red"))+

    geom_hline(yintercept = -log10(0.05),lty=4,lwd=0.6,alpha=0.8)+

    geom_vline(xintercept = c(log2(2),-log2(2)),lty=4,lwd=0.6,alpha=0.8)

GSE19136volcano.png

4. 基因標(biāo)記的火山圖


input <- data

Gene<-as.data.frame(row.names(heat))

volc = ggplot(input, aes(logFC, -log10(P.Value))) +

          geom_point(aes(col=sig)) + scale_color_manual(values=c("black","green", "red")) +

  ggtitle("Your title here")+geom_point(data=input[input$gene %in% Gene[,1],], aes(logFC, -log10(P.Value)), colour="blue", size=2) +

  geom_hline(yintercept = -log10(0.05),lty=4,lwd=0.6,alpha=0.8)+

          geom_vline(xintercept = c(log2(2),-log2(2)),lty=4,lwd=0.6,alpha=0.8)

volc+geom_text_repel(data=input[input$gene %in% Gene[,1],], aes(label=gene))

GSE19136MarkVolcano.png

5. GO和KEGG

library(clusterProfiler)
library(pathview)
rt <- read.table("dif.csv",header = T,sep = ",",stringsAsFactors = F)
colnames(rt)[1] <- "SYMBOL"
GeneSymbol <- rt$SYMBOL
gene.symbol.eg<- id2eg(ids=GeneSymbol, category='SYMBOL', org='Hs',na.rm = F) #如果是小鼠惜浅,就是Mm
merg<-merge(gene.symbol.eg,rt,by="SYMBOL")
mer <- subset(merg,merg$ENTREZID != "NA")
geneFC <- mer$logFC
gene <- mer$ENTREZID
names(geneFC) <- gene
kkd <- enrichGO(gene = gene,"org.Hs.eg.db",ont = "BP",qvalueCutoff = 0.05) #如果是小鼠瘫辩,就是Mm
write.table(kkd@result,file = "GO.xls",sep = "\t",quote = F,row.names = F)
barplot(kkd,drop=T,showCategory = 12)

cnetplot(kkd,categorySize = "geneNum",foldChange = geneFC)
GSE19136GO.png
kk <- enrichKEGG(gene = gene,organism = "human",qvalueCutoff = 0.05)   #如果是小鼠,就是mouse
write.table(kk@result,file = "KEGG.xls",sep = "\t",quote = F,row.names = F)
barplot(kk,drop=T,showCategory = 12)

cnetplot(kk,categorySize = "geneNum",foldChange = geneFC)
GSE19136KEGG.png
setwd("./pathview") #新建pathview文件夾坛悉,存放KEGG關(guān)系圖
keggxls<-read.table("KEGG.xls",sep = "\t",header = T)
keggxls<-subset(keggxls,keggxls$p.adjust<0.05)
for (i in keggxls$ID){
    pv.out <- pathview(gene.data = geneFC, pathway.id = i, species = "hsa", out.suffix = "pathview") #如果是小鼠mmu杭朱,看GSE70410
}

6. PPI

ppi<-read.table("string_interactions0.5.tsv",header = T,sep = "\t",stringsAsFactors = F)
ppi_attr1 <- rt[rt$SYMBOL %in% unique(c(ppi[,1],ppi[,2])),]  # rt即是dif
ppi_attr <- merge(ppi_attr1,as.data.frame(table(c(ppi[,1],ppi[,2]))),by.x="SYMBOL",by.y="Var1")
write.csv(ppi_attr,file = "ppi_attrabute.csv",quote = F,row.names = F)
write.table(ppi_attr,file = "ppi_attrabute.txt",quote = F,sep = "\t",row.names = F)

如果覺得好,請給我一點動力吹散!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末弧械,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子空民,更是在濱河造成了極大的恐慌刃唐,老刑警劉巖羞迷,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異画饥,居然都是意外死亡衔瓮,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門抖甘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來热鞍,“玉大人,你說我怎么就攤上這事衔彻∞背瑁” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵艰额,是天一觀的道長澄港。 經(jīng)常有香客問我,道長柄沮,這世上最難降的妖魔是什么回梧? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮祖搓,結(jié)果婚禮上狱意,老公的妹妹穿的比我還像新娘。我一直安慰自己拯欧,他們只是感情好详囤,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著哈扮,像睡著了一般纬纪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上滑肉,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天包各,我揣著相機與錄音,去河邊找鬼靶庙。 笑死问畅,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的六荒。 我是一名探鬼主播护姆,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼掏击!你這毒婦竟也來了卵皂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤砚亭,失蹤者是張志新(化名)和其女友劉穎灯变,沒想到半個月后殴玛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡添祸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年滚粟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刃泌。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡凡壤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出耙替,到底是詐尸還是另有隱情亚侠,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布林艘,位于F島的核電站盖奈,受9級特大地震影響混坞,放射性物質(zhì)發(fā)生泄漏狐援。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一究孕、第九天 我趴在偏房一處隱蔽的房頂上張望啥酱。 院中可真熱鬧,春花似錦厨诸、人聲如沸镶殷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绘趋。三九已至,卻和暖如春颗管,著一層夾襖步出監(jiān)牢的瞬間陷遮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工垦江, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留帽馋,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓比吭,卻偏偏與公主長得像绽族,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子衩藤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345