GEO下載與分析

轉(zhuǎn)自果子學(xué)生信
1.加載R包獲取數(shù)據(jù)

library(GEOquery)
gset = getGEO('GSE32575', destdir=".",getGPL = F)
gset=gset[[1]]

2.通過(guò)pData函數(shù)獲取分組信息

pdata=pData(gset)
group_list=c(rep('before',18),rep('after',18))
group_list=factor(group_list)
## 強(qiáng)制限定順序
group_list <- relevel(group_list, ref="before")

3.通過(guò)exprs函數(shù)獲取表達(dá)矩陣并校正

exprSet=exprs(gset)
##查看整體樣本的表達(dá)情況
boxplot(exprSet[,-c(1:12)],outline=FALSE, notch=T,col=group_list, las=2)
##整體表達(dá)不整齊项钮,使用limma包內(nèi)置函數(shù)人工校正
library(limma) 
exprSet=normalizeBetweenArrays(exprSet)
boxplot(exprSet,outline=FALSE, notch=T,col=group_list, las=2)

4.判斷是否需要進(jìn)行數(shù)據(jù)轉(zhuǎn)換

##根據(jù)分組信息绒极,去除前12個(gè)樣本
exprSet = as.data.frame(exprSet)[,-seq(1,12)]
##表達(dá)量很大燕酷,log轉(zhuǎn)換(選log2)
ex <- exprSet
qx <- as.numeric(quantile(ex, c(0., 0.25, 0.5, 0.75, 0.99, 1.0), na.rm=T))
LogC <- (qx[5] > 100) ||
  (qx[6]-qx[1] > 50 && qx[2] > 0) ||
  (qx[2] > 0 && qx[2] < 1 && qx[4] > 1 && qx[4] < 2)
if (LogC) { ex[which(ex <= 0)] <- NaN
exprSet <- log2(ex)
print("log2 transform finished")}else{print("log2 transform not needed")}

5.注釋基因

##導(dǎo)入R包和平臺(tái)的注釋信息對(duì)應(yīng)關(guān)系表格 platformMap
platformMap <- data.table::fread("platformMap.txt")
##獲取注釋平臺(tái)
index = gset@annotation
##使用代碼自動(dòng)獲取對(duì)應(yīng)注釋包
platformDB = paste0(platformMap$bioc_package[grep(index,platformMap$gpl)],".db")
##安裝、加載包
if(length(getOption("BioC_mirror"))==0) options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/")
if(!require("illuminaHumanv2.db")) BiocManager::install("illuminaHumanv2.db",update = F,ask = F)
library(illuminaHumanv2.db)
##獲取探針對(duì)應(yīng)的symbol信息
probeset <- rownames(exprSet)
## 使用lookup函數(shù),找到探針在illuminaHumanv2.db中的對(duì)應(yīng)基因名稱
SYMBOL <-  annotate::lookUp(probeset,"illuminaHumanv2.db", "SYMBOL")
## 轉(zhuǎn)換為向量
symbol = as.vector(unlist(SYMBOL))
##制作probe2symbol轉(zhuǎn)換文件
probe2symbol = data.frame(probeset,symbol,stringsAsFactors = F)

6.探針轉(zhuǎn)換與基因去重

library(dplyr)
library(tibble)
exprSet <- exprSet %>% 
  rownames_to_column(var="probeset") %>% 
  #合并探針的信息
  inner_join(probe2symbol,by="probeset") %>% 
  #去掉多余信息
  select(-probeset) %>% 
  #重新排列
  select(symbol,everything()) %>% 
  #求出平均數(shù)(這邊的點(diǎn)號(hào)代表上一步產(chǎn)出的數(shù)據(jù))
  mutate(rowMean =rowMeans(.[grep("GSM", names(.))])) %>% 
  #去除symbol中的NA
  filter(symbol != "NA") %>% 
  #把表達(dá)量的平均值按從大到小排序
  arrange(desc(rowMean)) %>% 
  # symbol留下第一個(gè)
  distinct(symbol,.keep_all = T) %>% 
  #反向選擇去除rowMean這一列
  select(-rowMean) %>% 
  # 列名變成行名
  column_to_rownames(var = "symbol")
現(xiàn)在數(shù)據(jù)變成這個(gè)樣子

7.差異分析

##如果沒(méi)有配對(duì)信息
design=model.matrix(~ group_list)
fit=lmFit(exprSet,design)
fit=eBayes(fit) 
allDiff=topTable(fit,adjust='fdr',coef="group_listafter",number=Inf,p.value=0.05) 
##如果有配對(duì)信息
pairinfo = factor(rep(1:18,2))
design=model.matrix(~ pairinfo+group_list)
fit=lmFit(exprSet,design)
fit=eBayes(fit) 
allDiff_pair=topTable(fit,adjust='BH',coef="group_listafter",number=Inf,p.value=0.05)

分析結(jié)果的各列數(shù)據(jù)含義:
  “l(fā)ogFC”是兩組表達(dá)值之間以2為底對(duì)數(shù)化的的變化倍數(shù)锥债,一般表達(dá)相差2倍以上有意義岸售;
  “AveExpr”是該探針組所在所有樣品中的平均表達(dá)值;
  “t”是貝葉斯調(diào)整后T 檢驗(yàn)的 t 值翰灾;
  “P.Value”是貝葉斯檢驗(yàn)的 P 值缕粹;
  “adj.P.Val”是調(diào)整后的 P 值,更有參考價(jià)值纸淮;
  “B”是經(jīng)驗(yàn)貝葉斯得到的標(biāo)準(zhǔn)差的對(duì)數(shù)化值平斩。

8.作圖驗(yàn)證(非必要)
轉(zhuǎn)換為ggplot2喜歡的數(shù)據(jù)格式,行是觀測(cè)咽块,列是變量绘面,即清潔數(shù)據(jù)

data_plot = as.data.frame(t(exprSet))
data_plot = data.frame(pairinfo=rep(1:18,2),
                       group=group_list,
                       data_plot,stringsAsFactors = F)

以CAMKK2為例做配對(duì)圖

library(ggplot2)
ggplot(data_plot, aes(group,CH25H,fill=group)) +
  geom_boxplot() +
  geom_point(size=2, alpha=0.5) +
  geom_line(aes(group=pairinfo), colour="black", linetype="11") +
  xlab("") +
  ylab(paste("Expression of ","CH25H"))+
  theme_classic()+
  theme(legend.position = "none")

批量畫出差異最大的8個(gè)基因

library(dplyr)
library(tibble)
allDiff_arrange <- allDiff_pair %>% 
  rownames_to_column(var="genesymbol") %>% 
  arrange(desc(abs(logFC)))
genes <- allDiff_arrange$genesymbol[1:8]

plotlist <- lapply(genes, function(x){
  data =data.frame(data_plot[,c("pairinfo","group")],gene=data_plot[,x])
  ggplot(data, aes(group,gene,fill=group)) +
    geom_boxplot() +
    geom_point(size=2, alpha=0.5) +
    geom_line(aes(group=pairinfo), colour="black", linetype="11") +
    xlab("") +
    ylab(paste("Expression of ",x))+
    theme_classic()+
    theme(legend.position = "none")
})
library(cowplot)
plot_grid(plotlist=plotlist, ncol=4,labels = LETTERS[1:8])

9.后續(xù)分析
①熱圖:

library(pheatmap)
## 設(shè)定差異基因閾值,減少差異基因用于提取表達(dá)矩陣
allDiff_pair=topTable(fit,adjust='BH',coef="group_listafter",number=Inf,p.value=0.05,lfc =0.5) 
##提前部分?jǐn)?shù)據(jù)用作熱圖繪制
heatdata <- exprSet[rownames(allDiff_pair),]
##制作一個(gè)分組信息用于注釋
annotation_col <- data.frame(group_list)
rownames(annotation_col) <- colnames(heatdata)
pheatmap(heatdata, 
         cluster_rows = TRUE,
         cluster_cols = TRUE,
         annotation_col =annotation_col, 
         annotation_legend=TRUE, 
         show_rownames = F,
         show_colnames = F,
         scale = "row",
         color =colorRampPalette(c("blue", "white","red"))(100))

畫熱圖的意義:
第一看樣本質(zhì)量:本來(lái)before和after兩組應(yīng)該完全分開的侈沪,但是熱圖里面after有兩個(gè)樣本跟bfefore分不開揭璃,要考慮是不是測(cè)量失誤,還是本身樣本就特殊亭罪;
第二看差異基因:差異基因提取出來(lái)的熱圖瘦馍,就應(yīng)當(dāng)呈現(xiàn)橫豎兩條線,把表格分成四個(gè)象限应役,也就是差異基因有高有低情组,這才符合常識(shí)。

②火山圖

library(ggplot2)
library(ggrepel)
library(dplyr)
data <- topTable(fit,adjust='BH',coef="group_listafter",number=Inf) 
data$significant <- as.factor(data$adj.P.Val<0.05 & abs(data$logFC) > 0.5)
data$gene <- rownames(data)
ggplot(data=data, aes(x=logFC, y =-log10(adj.P.Val),color=significant)) +
  geom_point(alpha=0.8, size=1.2,col="black")+
  geom_point(data=subset(data, logFC > 0.5),alpha=0.8, size=1.2,col="red")+
  geom_point(data=subset(data, logFC < -0.5),alpha=0.6, size=1.2,col="blue")+
  labs(x="log2 (fold change)",y="-log10 (adj.P.Val)")+
  theme(plot.title = element_text(hjust = 0.4))+
  geom_hline(yintercept = -log10(0.05),lty=4,lwd=0.6,alpha=0.8)+
  geom_vline(xintercept = c(0.5,-0.5),lty=4,lwd=0.6,alpha=0.8)+
  theme_bw()+
  theme(panel.border = element_blank(),
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),   
        axis.line = element_line(colour = "black")) +
  geom_point(data=subset(data, abs(logFC) > 1),alpha=0.8, size=3,col="green")+
  geom_text_repel(data=subset(data, abs(logFC) > 1), 
                  aes(label=gene),col="black",alpha = 0.8)

③clusterprofiler作圖
GO分析:

suppressMessages(library(clusterProfiler))
#獲得基因列表
gene <- rownames(allDiff)
#基因名稱轉(zhuǎn)換箩祥,返回的是數(shù)據(jù)框
gene = bitr(gene, fromType="SYMBOL", toType="ENTREZID", OrgDb="org.Hs.eg.db")
de <- gene$ENTREZID
## GO分析
go <- enrichGO(gene = de, OrgDb = "org.Hs.eg.db", ont="all")
library(ggplot2)
p <- dotplot(go, split="ONTOLOGY") +facet_grid(ONTOLOGY~., scale="free")
p

KEGG通路富集分析:

EGG <- enrichKEGG(gene= gene$ENTREZID,
                  organism     = 'hsa',
                  pvalueCutoff = 0.05)
dotplot(EGG)

把富集的結(jié)果變成數(shù)據(jù)框院崇,查看凋亡通路hsa04210:

test <- data.frame(EGG)
browseKEGG(EGG, 'hsa04210')
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市袍祖,隨后出現(xiàn)的幾起案子底瓣,更是在濱河造成了極大的恐慌,老刑警劉巖盲泛,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件濒持,死亡現(xiàn)場(chǎng)離奇詭異键耕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)柑营,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門屈雄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人官套,你說(shuō)我怎么就攤上這事酒奶。” “怎么了奶赔?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵惋嚎,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我站刑,道長(zhǎng)另伍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任绞旅,我火速辦了婚禮摆尝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘因悲。我一直安慰自己堕汞,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布晃琳。 她就那樣靜靜地躺著讯检,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卫旱。 梳的紋絲不亂的頭發(fā)上人灼,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音顾翼,去河邊找鬼挡毅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛暴构,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播段磨,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼取逾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了苹支?” 一聲冷哼從身側(cè)響起砾隅,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎债蜜,沒(méi)想到半個(gè)月后晴埂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體究反,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年儒洛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了精耐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡琅锻,死狀恐怖卦停,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情恼蓬,我是刑警寧澤惊完,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站处硬,受9級(jí)特大地震影響小槐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜荷辕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一凿跳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧桐腌,春花似錦拄显、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蟆盐,卻和暖如春承边,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背石挂。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工博助, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人痹愚。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓富岳,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親拯腮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子窖式,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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