GEO數(shù)據(jù)挖掘?qū)W習(xí)筆記一

全部流程來(lái)自:GEO數(shù)據(jù)庫(kù)挖掘—生信技能樹(shù)B站視頻,建議去看原文氓侧!


第一步:找到相關(guān)的GEO數(shù)據(jù)集(文獻(xiàn)/搜索)瓢喉,以胃癌gastric cancer為例

可去文獻(xiàn)中查找摹蘑,用于練習(xí)

第二步:運(yùn)行R包GEOquery獲取數(shù)據(jù)(非趁祓校看網(wǎng)速扰法,盡量下載下一點(diǎn)的包)

library(GEOquery)

eSet <- getGEO("GSE118916",

? ? ? ? ? ? ? destdir = '.',? ?#下載在當(dāng)前目錄

? ? ? ? ? ? ? getGPL = F)??#平臺(tái)信息不要

#查看下載得到的文件大小,與GEO網(wǎng)頁(yè)中標(biāo)識(shí)的是否一致

第三步:得到表達(dá)矩陣

#使用列表取子集的方法提取eSet列表里的第一個(gè)元素:eSet[[1]]毅厚;并使用exprs函數(shù)把它轉(zhuǎn)化成矩陣:exp <- exprs(eSet[[1]])

eSet[[1]]

exp <- exprs(eSet[[1]])

exp[1:4,1:4]#查看前四行

#代碼邏輯塞颁,把probe_id轉(zhuǎn)換為--->symbol ID/entrez ID

#分兩步走:過(guò)濾probe_id,得到每個(gè)基因所對(duì)應(yīng)的唯一的probe_id

得到probe_id與symbol ID這件的轉(zhuǎn)換關(guān)系

ID轉(zhuǎn)換的第一步必須要加載特定的R包吸耿,下載哪個(gè)包殴边,需要根據(jù)GPL來(lái)定

eSet[[1]]@annotation #查看GPL平臺(tái)信息,即芯片信息

#Google直接搜索相關(guān)R包珍语,安裝并調(diào)用

#如果有對(duì)應(yīng)的R包

library(R包)

#如果找不到R包

library(Biobase)

library(GEOquery)

gpl<-getGEO('GPL15297',destdir=".")

colnames(Table(gpl))

head(Table(gpl)[,c(1,15,19)])## you need to check this , which column do you need

probe2symbol=Table(gpl)[,c(1,15)]

write.csv(Table(gpl)[,c(1,15)],"GPL15207.csv")

tail(sort(table(ids$symbol)))#看高頻數(shù)的樣本

table(rownames(exp)%in%ids$probe_id)#查看exp與id是否一致

exp=exp[rownames(exp)%in%ids$probe_id,]#去除不一致的項(xiàng)

ids=ids[match(rownames(exp),ids$probe_id),]#使exp與id完全對(duì)應(yīng)

tmp=by(exp,ids$symbol,function(x)rownames(x)[which.max(rowMeans(x))])

probes=as.character(tmp)

dim(exp)

exp=exp[rownames(exp)%in%probes,]# 過(guò)濾有多個(gè)探針的基因

dim(exp)

rownames(exp)=ids[match(rownames(exp),ids$probe_id),2]

head(exp)

第四步:獲取分組信息

pd <-pData(eSet[[1]])

library(stringr)

group_list=ifelse(str_detect(pd$title,"Control")==TRUE,"contorl","treat")group_list

str_detect(pd$title,"Control")

方法二:自己根據(jù)CSV里文件類(lèi)型自己寫(xiě)代碼

group_list=c(rep("control",times=3),rep("treat",times=3))

第五步:檢查表達(dá)矩陣

方法一:管家基因

exp['GAPDH',]#檢驗(yàn)用的管家基因

exp['ACTB',]#同上

boxplot(exp)

#使用ggplot2畫(huà)各個(gè)樣本表達(dá)量的boxplot圖

# 準(zhǔn)備畫(huà)圖所需數(shù)據(jù)exp_L

library(reshape2)

head(exp)

exp_L=melt(exp)

head(exp_L)

colnames(exp_L)=c('symbol','sample','value')

head(exp_L)

# 獲得分組信息

library(stringr)

group_list=ifelse(str_detect(pd$title,"Control")==TRUE,"contorl","treat")

group_list

exp_L$group=rep(group_list,each=nrow(exp))

head(exp_L)

# ggplot2畫(huà)圖 library(ggplot2)

p=ggplot(exp_L,aes(x=sample,y=value,fill=group))+geom_boxplot()

print(p)

##boxplot圖精修版p=ggplot(exp_L,aes(x=sample,y=value,fill=group))+geom_boxplot()

p=p+stat_summary(fun.y="mean",geom="point",shape=23,size=3,fill="red")

p=p+theme_set(theme_set(theme_bw(base_size=20)))

p=p+theme(text=element_text(face='bold'),axis.text.x=element_text(angle=30,hjust=1),axis.title=element_blank())

print(p)

#查案畫(huà)出的箱型圖,如果均值不在一條線(xiàn)上竖幔,說(shuō)明樣本有批次效應(yīng)板乙,需要人工校正

library(limma)

exp=normalizeBetweenArrays(exp)

#除了箱型圖還可以畫(huà)其他的圖

p=ggplot(exp_L,aes(x=sample,y=value,fill=group))+geom_violin()

print(p)

p=ggplot(exp_L,aes(value,fill=group))+geom_histogram(bins=200)+facet_wrap(~sample,nrow=4)

print(p)

p=ggplot(exp_L,aes(value,col=group))+geom_density()+facet_wrap(~sample,nrow=4)

print(p)

p=ggplot(exp_L,aes(value,col=group))+geom_density()

print(p)

第四步:檢查樣本信息,檢查樣本分組信息,一般看PCA圖募逞,hclust圖

# 更改表達(dá)矩陣列名

head(exp)

colnames(exp)=paste(group_list,1:6,sep='')

head(exp)

# 定義nodePar

nodePar<-list(lab.cex=0.6,pch=c(NA,19),cex=0.7,col="blue")

# 聚類(lèi)

hc=hclust(dist(t(exp)))

par(mar=c(5,5,5,10))

# 繪圖

plot(as.dendrogram(hc),nodePar=nodePar,horiz=TRUE)

#繪PCA圖

library(ggfortify)

# 互換行和列蛋铆,再dim一下df=as.data.frame(t(exp))

# 不要view df,列太多放接,軟件會(huì)卡状汤病;

dim(df)

dim(exp)

exp[1:6,1:6]

df[1:6,1:6]

df$group=group_list

autoplot(prcomp(df[,1:ncol(df)-1)]),data=df,colour='group')

#保存數(shù)據(jù)

save(exp,group_list,file="step2output.Rdata")

第五步:差異分析

#limma包需要以下三個(gè)數(shù)據(jù)纠脾,表達(dá)矩陣(exp)玛瘸;分組矩陣(design);差異比較矩陣(contrast.matrix)

#表達(dá)矩陣(exp)我們?cè)缇偷玫搅斯兜福挥迷僦谱髁撕ǎ晃覀円驳玫搅舜娣欧纸M信息的向量group_list,用它來(lái)制作我們的分組矩陣

rm(list=ls())## 魔幻操作慧脱,一鍵清空

options(stringsAsFactors=F)

load(file="step2output.Rdata")#上步得到的EXP分組信息

dim(exp)

library(limma)# 做分組矩陣?

design<-model.matrix(~0+factor(group_list))

colnames(design)=levels(factor(group_list))

rownames(design)=colnames(exp)

design#查看得到的分組矩陣

#輸入數(shù)據(jù)—差異比較矩陣

contrast.matrix<-makeContrasts(paste0(c("treat","contorl"),collapse="-"),levels=design)

contrast.matrix

#limma包做差異分析渺绒,只有三個(gè)步驟:lmFit,eBayes菱鸥,topTable

##step1

fit<-lmFit(exp,design)

##step2

fit2<-contrasts.fit(fit,contrast.matrix)##這一步很重要宗兼,大家可以自行看看效果fit2<-eBayes(fit2) ##default no trend!!!

##eBayes()withtrend=TRUE

##step3

tempOutput=topTable(fit2,coef=1,n=Inf)nrDEG=na.omit(tempOutput)

#可以保存數(shù)據(jù) write.csv(nrDEG2,"limma_notrend.results.csv",quote = F)

head(nrDEG)

save(nrDEG,file="DEGoutput.Rdata") #保存差異數(shù)據(jù)nrDEG

#檢查差異數(shù)據(jù)的準(zhǔn)確性,進(jìn)行可視化

#熱圖

rm(list=ls())## 魔幻操作氮采,一鍵清空

options(stringsAsFactors=F)

load(file="DEGoutput.Rdata")

load(file="DEGinput.Rdata")

library(pheatmap)

choose_gene=head(rownames(nrDEG),25)

choose_matrix=exp[choose_gene,]

choose_matrix=t(scale(t(choose_matrix)))

pheatmap(choose_matrix)

#火山圖

rm(list=ls()) ## 魔幻操作殷绍,一鍵清空

options(stringsAsFactors=F)

load(file="DEGoutput.Rdata")

colnames(nrDEG)

plot(nrDEG$logFC,-log10(nrDEG$P.Value))

DEG=nrDEG

logFC_cutoff<-with(DEG,mean(abs(logFC))+2*sd(abs(logFC)))DEG$change=as.factor(ifelse(DEG$P.Value<0.05&abs(DEG$logFC)>logFC_cutoff,ifelse(DEG$logFC>logFC_cutoff,'UP','DOWN'),'NOT'))

head(DEG)

g=ggplot(data=DEG,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")+ggtitle(this_tile)+theme(plot.title=element_text(size=15,hjust=0.5))+scale_colour_manual(values=c('blue','black','red'))

print(g)

第六步:富集分析

#KEGG富集分析

library(clusterProfiler)

gene_up=deg[deg$change=='up','ENTREZID']

gene_down=deg[deg$change=='down','ENTREZID']

gene_diff=c(gene_up,gene_down)

gene_all=deg[,'ENTREZID']

kk.up<-enrichKEGG(gene=gene_up,organism='hsa',universe=gene_all,pvalueCutoff=0.9,qvalueCutoff=0.9)

head(kk.up)[,1:6]

dim(kk.up)

kk.down<-enrichKEGG(gene=gene_down,organism='hsa',universe=gene_all,pvalueCutoff=0.9,qvalueCutoff=0.9)

head(kk.down)[,1:6]

dim(kk.down)

kk.diff<-enrichKEGG(gene=gene_diff,organism='hsa',pvalueCutoff=0.05)

head(kk.diff)[,1:6]

kegg_diff_dt<-kk.diff@result

down_kegg<-kk.down@result%>%

? ? filter(pvalue<0.05) %>%mutate(group=-1)

up_kegg<-kk.up@result%>%

? ? filter(pvalue<0.05) %>%mutate(group=1)

kegg_plot<-function(up_kegg,down_kegg)

{

dat=rbind(up_kegg,down_kegg)colnames(dat)

dat$pvalue=-log10(dat$pvalue)

dat$pvalue=dat$pvalue*dat$group

dat=dat[order(dat$pvalue,decreasing=F),]

g_kegg<-ggplot(dat,aes(x=reorder(Description,order(pvalue,decreasing=F)),y=pvalue,fill=group))+geom_bar(stat="identity")+scale_fill_gradient(low="blue",high="red",guide=FALSE)+scale_x_discrete(name="Pathway names")+scale_y_continuous(name="log10P-value")+coord_flip()+theme_bw()+theme(plot.title=element_text(hjust=0.5))+ggtitle("Pathway Enrichment")

}

g_kegg<-kegg_plot(up_kegg,down_kegg)

g_kegg

ggsave(g_kegg,filename='kegg_up_down.png')#繪圖并保存

#GSEA是另一個(gè)常用的富集分析方法,目的是看看基因全局表達(dá)量的變化是否有某些特定的基因集合的傾向性扳抽。

data(geneList,package="DOSE")

head(geneList)

length(geneList)

names(geneList)

boxplot(geneList)

boxplot(deg$logFC)

geneList=deg$logFC

names(geneList)=deg$ENTREZID

geneList=sort(geneList,decreasing=T)

kk_gse<-gseKEGG(geneList=geneList,organism='hsa',nPerm=1000,minGSSize=120,pvalueCutoff=0.9,verbose=FALSE)

head(kk_gse)[,1:6]

gseaplot(kk_gse,geneSetID=rownames(kk_gse[1,]))

down_kegg<-kk_gse[kk_gse$pvalue<0.05&kk_gse$enrichmentScore<0,];down_kegg$group=-1

up_kegg<-kk_gse[kk_gse$pvalue<0.05&kk_gse$enrichmentScore>0,];up_kegg$group=1

gse_kegg=kegg_plot(up_kegg,down_kegg)

print(gse_kegg)

ggsave(gse_kegg,filename='kegg_up_down_gsea.png')

#GO富集分析

GO富集分析原理:有一個(gè)term注釋了100個(gè)差異表達(dá)基因參與了哪個(gè)過(guò)程篡帕,注釋完之后(模式生物都有現(xiàn)成的注釋包,不用我們自己注釋?zhuān)┟衬兀?jì)算相對(duì)于背景它是否顯著集中在某條通路镰烧、某一個(gè)細(xì)胞學(xué)定位、某一種生物學(xué)功能楞陷。

對(duì)GO database analysis一般從三個(gè)層面進(jìn)行:

Cellular component怔鳖,CC? 細(xì)胞成分

Biological process, BP? 生物學(xué)過(guò)程

Molecular function固蛾,MF? 分子功能

這三個(gè)層面具體是指:

Cellular component解釋的是基因存在在哪里结执,在細(xì)胞質(zhì)還是在細(xì)胞核?如果存在細(xì)胞質(zhì)那在哪個(gè)細(xì)胞器上艾凯?如果是在線(xiàn)粒體中那是存在線(xiàn)粒體膜上還是在線(xiàn)粒體的基質(zhì)當(dāng)中献幔?這些信息都叫Cellular component。

Biological process是在說(shuō)明該基因參與了哪些生物學(xué)過(guò)程趾诗,比如蜡感,它參與了rRNA的加工或參與了DNA的復(fù)制蹬蚁,這些信息都叫Biological process

Molecular function在講該基因在分子層面的功能是什么?它是催化什么反應(yīng)的郑兴?

library(clusterProfiler)

gene_up=deg[deg$change=='up','ENTREZID']

gene_down=deg[deg$change=='down','ENTREZID']

gene_diff=c(gene_up,gene_down)

head(deg)

#細(xì)胞組分

ego_CC<-enrichGO(gene=gene_diff,OrgDb=org.Hs.eg.db,ont="CC",pAdjustMethod="BH",minGSSize=1,pvalueCutoff=0.01,qvalueCutoff=0.01,readable=TRUE)

#生物過(guò)程犀斋,重要

ego_BP<-enrichGO(gene=gene_diff,OrgDb=org.Hs.eg.db,ont="BP",pAdjustMethod="BH",minGSSize=1,pvalueCutoff=0.01,qvalueCutoff=0.01,readable=TRUE)

#分子功能,很重要

ego_MF<-enrichGO(gene=gene_diff,OrgDb=org.Hs.eg.db,ont="MF",pAdjustMethod="BH",minGSSize=1,pvalueCutoff=0.01,qvalueCutoff=0.01,readable=TRUE)

save(ego_CC,ego_BP,ego_MF,file="ego_GPL6244.Rdata")

rm(list=ls())

load(file="ego_GPL6244.Rdata")

#第一種情连,條帶圖叽粹,按p從小到大排的#如果運(yùn)行了沒(méi)出圖,就dev.new()

barplot(ego_CC,showCategory=20,title="EnrichmentGO_CC")

barplot(ego_BP,showCategory=20,title="EnrichmentGO_CC")

#第二種却舀,點(diǎn)圖虫几,按富集數(shù)從大到小的dotplot(ego_CC,title="EnrichmentGO_BP_dot")

#保存

pdf(file="dotplot_GPL6244.pdf")

dotplot(ego_CC,title="EnrichmentGO_BP_dot")

dev.off()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者禁筏。
  • 序言:七十年代末持钉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子篱昔,更是在濱河造成了極大的恐慌每强,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件州刽,死亡現(xiàn)場(chǎng)離奇詭異空执,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)穗椅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)辨绊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人匹表,你說(shuō)我怎么就攤上這事门坷。” “怎么了袍镀?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵默蚌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我苇羡,道長(zhǎng)绸吸,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任设江,我火速辦了婚禮锦茁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘叉存。我一直安慰自己码俩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布歼捏。 她就那樣靜靜地躺著稿存,像睡著了一般够傍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挠铲,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音寂诱,去河邊找鬼拂苹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛痰洒,可吹牛的內(nèi)容都是我干的瓢棒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼丘喻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼脯宿!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起泉粉,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤连霉,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后嗡靡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體跺撼,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年讨彼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了歉井。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哈误,死狀恐怖哩至,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蜜自,我是刑警寧澤菩貌,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站袁辈,受9級(jí)特大地震影響菜谣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晚缩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一尾膊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧荞彼,春花似錦冈敛、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)暮蹂。三九已至,卻和暖如春癌压,著一層夾襖步出監(jiān)牢的瞬間仰泻,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工滩届, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留集侯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓帜消,卻偏偏與公主長(zhǎng)得像棠枉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子泡挺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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