GEO數(shù)據(jù)挖掘(二)-- 基因差異表達(dá)分析及可視化全套代碼分享

前兩次教程“GEO數(shù)據(jù)挖掘(一)簡(jiǎn)單快速下載GEO數(shù)據(jù)”、“GEO數(shù)據(jù)挖掘(一)下載SRA庫原始測(cè)序數(shù)據(jù)”已經(jīng)分享過如何下載數(shù)據(jù),本次將分享如何將geo數(shù)據(jù)內(nèi)的差異基因提取出來,進(jìn)行差異化分析,找到上調(diào)下調(diào)基因撒穷,再進(jìn)行可視化展示。首先,我們得知道為什么需要對(duì)基因進(jìn)行差異表達(dá)分析望几。因?yàn)樵谘芯磕[瘤等疾病的發(fā)病過程中,一些原本沉默的基因可能高表達(dá)萤厅,而一些原本正常表達(dá)的基因橄抹,其表達(dá)量可能就會(huì)下降靴迫,而恰恰就是這些相較于正常樣本基因表達(dá)量發(fā)生變化的基因,它們控制或者影響著腫瘤的發(fā)生楼誓。因此玉锌,如果要研究腫瘤發(fā)生的機(jī)制,需要設(shè)立case(實(shí)驗(yàn)組)和control(對(duì)照組)進(jìn)行差異差分析疟羹,探究表征實(shí)驗(yàn)組和對(duì)照組的差異表達(dá)基因主守,構(gòu)建基因富集通路研究腫瘤發(fā)病機(jī)制,然后重點(diǎn)解讀這些富集通路榄融,并探究這些通路與樣本的表型之間有著怎樣的關(guān)系或者內(nèi)在機(jī)制参淫。

那么接下來將分四步為大家?guī)砘虿町惙治黾翱梢暬娜状a分享:


第一步:提取表達(dá)矩陣、臨床信息愧杯、芯片編號(hào)

使用列表取子集的方法提取eSet列表(我們下載好的原始數(shù)據(jù))里的第一個(gè)元素:eSet[[1]]涎才;并使用exprs函數(shù)把它轉(zhuǎn)化成矩陣;通常使用:head(100)力九,判斷數(shù)據(jù)是否需要轉(zhuǎn)換為log型耍铜。

#(1)提取表達(dá)矩陣exp----

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

exp[1:4,1:4]

#exp = log2(exp+1) #判斷是否需要log2

#(2)提取臨床信息----

使用pData()函數(shù)可以得到每個(gè)樣本的臨床信息,通常數(shù)據(jù)框的來源列(source)或者特征列(characterizes)會(huì)描述哪些樣本是control或者treatment跌前。

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

#(3)提取芯片平臺(tái)編號(hào)----

數(shù)據(jù)通常使用的是不同的芯片探針业扒,后續(xù)根據(jù)GPL平臺(tái)編號(hào)轉(zhuǎn)化成entrez ID或symbol ID;

gpl <- eSet[[1]]@annotation

p = identical(rownames(pd),colnames(exp));p

save(gse,exp,pd,gpl,file = "step1_output.Rdata")#儲(chǔ)存結(jié)果

第二步 構(gòu)建分組舒萎、芯片注釋

1.構(gòu)建分組信息

根據(jù)所GSE內(nèi)的樣本來源信息進(jìn)行分組程储。

rm(list = ls())

load("step1_output.Rdata")

library(stringr)

table(colnames(exp))

group_list = ifelse(str_detect(pd$source_name_ch1," tumor"),"test","normal")

group_list=factor(group_list,

? ? ? ? ? ? ? ? ? levels = c("test","normal"))

group_list

table(group_list)

2.芯片注釋

if(T){

? a = getGEO(gpl,destdir = ".")

? b = a@dataTable@table

? colnames(b)

? ids2 = b[,c("ID","GENE_SYMBOL")]

? colnames(ids2) = c("probe_id","symbol")

? ids2 = ids2[ids2$symbol!="" & !str_detect(ids2$symbol,"http:///"),]

}

save(group_list,ids2,exp,pd,file = "step2_output.Rdata")

第三步 數(shù)據(jù)檢查---PCA

然后利用FactoMineR,factoextra包進(jìn)行主成分分析臂寝,查看處理和對(duì)照是否有明顯分組章鲤。

繪制主成分分析圖

rm(list = ls())#清空環(huán)境

load("step1_output.Rdata")

load("step2_output.Rdata")

dat=as.data.frame(t(exp))

library(FactoMineR)

library(factoextra)

# pca的統(tǒng)一操作

dat.pca <- PCA(dat, graph = FALSE)

pca_plot <- fviz_pca_ind(dat.pca,

? ? ? ? ? ? ? ? ? ? ? ? geom.ind = "point", # show points only (nbut not "text")

? ? ? ? ? ? ? ? ? ? ? ? col.ind = group_list, # color by groups

? ? ? ? ? ? ? ? ? ? ? ? palette = c("#00AFBB", "#E7B800"),

? ? ? ? ? ? ? ? ? ? ? ? addEllipses = TRUE, # Concentration ellipses

? ? ? ? ? ? ? ? ? ? ? ? legend.title = "Groups"

)

print(pca_plot)

ggsave(plot = pca_plot,filename = paste0(gse,"PCA.png"))

save(pca_plot,file = "pca_plot.Rdata")

第四步 差異化分析及可視化展示—火山圖、熱圖

導(dǎo)入前兩步的Rdata咆贬,使用limma包進(jìn)行差異分析败徊。簡(jiǎn)單來說,對(duì)基因差異分析就是對(duì)每個(gè)基因都進(jìn)行差異檢驗(yàn)掏缎,檢驗(yàn)基因的logFC值皱蹦、平均表達(dá)量、P.value是否顯著等眷蜈。差異分析的輸入文件:1.表達(dá)矩陣沪哺;2.分組信息。Limma包做差異分析分為三個(gè)步驟:lmFit,酌儒、eBayes,辜妓、topTable。使用這個(gè)包需要三個(gè)數(shù)據(jù):1.表達(dá)矩陣;2.差異比較矩陣籍滴;3.差異分析矩陣酪夷,分析結(jié)果需要重點(diǎn)看logFC值和P值。

rm(list = ls())

load("step1_output.Rdata")

load("step2_output.Rdata")

1.差異分析

library(limma)

design=model.matrix(~group_list)

fit=lmFit(exp,design)

fit=eBayes(fit)

deg=topTable(fit,coef=2,number = Inf)

head(deg)

2.為deg數(shù)據(jù)框添加幾列

#1.加probe_id列孽惰,把行名變成一列

library(dplyr)

deg <- mutate(deg,probe_id=rownames(deg))

#tibble::rownames_to_column()

head(deg)

#merge將兩個(gè)表整合起來

table(deg$probe_id %in% ids$probe_id)

#deg <- inner_join(deg,ids,by="probe_id")

deg <- merge(x = deg,y = ids2, by="probe_id")

deg <- deg[!duplicated(deg$symbol),]

dim(deg)

#2.加change列:上調(diào)或下調(diào)晚岭,火山圖要用

#logFC_t=mean(deg$logFC)+2*sd(deg$logFC)

logFC_t=1.5

change=ifelse(deg$P.Value>0.05,'stable',

? ? ? ? ? ? ? ifelse( deg$logFC >logFC_t,'up',

? ? ? ? ? ? ? ? ? ? ? ifelse( deg$logFC < -logFC_t,'down','stable') )

)

deg <- mutate(deg,change)

head(deg)

table(deg$change)

3.加ENTREZID列,后面富集分析要用

library(ggplot2)

library(clusterProfiler)

library(org.Hs.eg.db)

s2e <- bitr(unique(deg$symbol), fromType = "SYMBOL",

? ? ? ? ? ? toType = c( "ENTREZID"),

? ? ? ? ? ? OrgDb = org.Hs.eg.db)

head(s2e)

head(deg)

deg <- inner_join(deg,s2e,by=c("symbol"="SYMBOL"))

head(deg)

save(logFC_t,deg,file = "step4_output.Rdata")

數(shù)據(jù)可視化-----火山圖勋功、熱圖

rm(list = ls())

load("step1_output.Rdata")

load("step2_output.Rdata")

load("step4_output.Rdata")

library(dplyr)

1.火山圖

dat <- mutate(deg,v=-log10(P.Value))

if(T){

? for_label <- dat%>%

? ? filter(symbol %in% c("RUNX2","FN1"))

}

if(F){

? for_label <- dat %>% head(10)

}

if(F) {

? x1 = dat %>%

? ? filter(change == "up") %>%

? ? head(3)

? x2 = dat %>%

? ? filter(change == "down") %>%

? ? head(3)

? for_label = rbind(x1,x2)

}

p <- ggplot(data = dat,

? ? ? ? ? ? aes(x = logFC,

? ? ? ? ? ? ? ? y = v)) +

? geom_point(alpha=0.4, size=3.5,

? ? ? ? ? ? aes(color=change)) +

? ylab("-log10(Pvalue)")+

? scale_color_manual(values=c("blue", "grey","red"))+

? geom_vline(xintercept=c(-logFC_t,logFC_t),lty=4,col="black",lwd=0.8) +

? geom_hline(yintercept = -log10(0.05),lty=4,col="black",lwd=0.8) +

? theme_bw()

p

volcano_plot <- p +

? geom_point(size = 3, shape = 1, data = for_label) +

? ggrepel::geom_label_repel(

? ? aes(label = symbol),

? ? data = for_label,

? ? color="black"

? )

volcano_plot

ggsave(plot = volcano_plot,filename = paste0(gse,"volcano.png"))


2.繪制熱圖

cg=names(tail(sort(apply(exp,1,sd)),1000))

n=exp[cg,]

annotation_col=data.frame(group=group_list)

rownames(annotation_col)=colnames(n)

library(pheatmap)

heatmap_plot <- pheatmap(n,

? ? ? ? show_colnames =F,

? ? ? ? show_rownames = F,

? ? ? ? annotation_col=annotation_col,

? ? ? ? scale = "row")

#保存結(jié)果

library(ggplot2)

png(file = paste0(gse,"heatmap.png"))

ggsave(plot = heatmap_plot,filename = paste0(gse,"heatmap.png"))

dev.off()

目前我們已經(jīng)完成了GEO數(shù)據(jù)挖掘的基因差異分析及可視化部分坦报,已經(jīng)拿到了上調(diào)下調(diào)的顯著差異表達(dá)基因,但是疾病的發(fā)生往往不單單受某個(gè)基因的影響酝润,如果想繼續(xù)了解疾病癌癥的發(fā)生機(jī)制燎竖,還需要大家繼續(xù)關(guān)注后續(xù)即將分享的“基因富集通路”方面教程璃弄。

請(qǐng)持續(xù)關(guān)注“GEO數(shù)據(jù)挖掘”系列文章要销,每周一個(gè)實(shí)用干貨帶您上手生信分析。

?著作權(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)店門磨总,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狸涌,“玉大人袍榆,你說我怎么就攤上這事『迹” “怎么了?”我有些...
    開封第一講書人閱讀 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)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了充岛?” 一聲冷哼從身側(cè)響起保檐,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(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
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至媒吗,卻和暖如春仑氛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闸英。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國(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)容