R語言GEO數(shù)據(jù)挖掘03-limma分析差異基因

limma分析差異基因

在經(jīng)過了前兩期中的數(shù)據(jù)下載,數(shù)據(jù)基本處理之后青扔,解決了一個探針對應多個基因數(shù)的
以及多個探針對應一個基因求平均值访敌,在此基礎(chǔ)上運用limma包分析差異基因
除此以外腊嗡,包括繪制火山圖,熱圖拧簸,PCA等劲绪,都在本文中解決

數(shù)據(jù)載入

if(T){
Sys.setlocale('LC_ALL','C')
library(dplyr)
##
if(T){
load("expma.Rdata")
load("probe.Rdata")
}
expma[1:5,1:5]
boxplot(expma)##看下表達情況
metdata[1:5,1:5]
head(probe)

## 查看Gene Symbol是否有重復
table(duplicated(probe$`Gene Symbol`))##12549 FALSE

## 整合注釋信息到表達矩陣
ID<-rownames(expma)
expma<-apply(expma,1,function(x){log2(x+1)})
expma<-t(expma)
eset<-expma[ID %in% probe$ID,] %>% cbind(probe)
eset[1:5,1:5]
colnames(eset)
}
image.png
## [1] "GSM188013"      "GSM188014"      "GSM188016"      "GSM188018"     
## [5] "GSM188020"      "GSM188022"      "ID"             "Gene Symbol"   
## [9] "ENTREZ_GENE_ID"

多個探針求平均值

test1<-aggregate(x=eset[,1:6],by=list(eset$`Gene Symbol`),FUN=mean,na.rm=T) 
test1[1:5,1:5]##與去重結(jié)果相吻合
##   Group.1 GSM188013 GSM188014 GSM188016 GSM188018
## 1          8.438846  8.368513  7.322442  7.813573
## 2    A1CF 10.979025 10.616926  9.940773 10.413311
## 3     A2M  6.565276  6.422112  8.142194  5.652593
## 4  A4GALT  7.728628  7.818966  8.679885  7.048563
## 5   A4GNT 10.243388 10.182382  9.391991  8.779887
dim(test1)##
## [1] 12549     7
colnames(test1)
## [1] "Group.1"   "GSM188013" "GSM188014" "GSM188016" "GSM188018" "GSM188020"
## [7] "GSM188022"
rownames(test1)<-test1$Group.1
test1<-test1[,-1]
eset_dat<-test1

PCA plot

Principal Component Analysis (PCA)分析使用的是基于R語言的 prcomp() and princomp()函數(shù).
完成PCA分析一般有兩種方法: princomp()使用的是一種的spectral decomposition方法
prcomp() and PCA()[FactoMineR]使用的是SVD法

data<-eset_dat
data[1:5,1:5]##表達矩陣
##        GSM188013 GSM188014 GSM188016 GSM188018 GSM188020
##         8.438846  8.368513  7.322442  7.813573  7.244615
## A1CF   10.979025 10.616926  9.940773 10.413311  9.743305
## A2M     6.565276  6.422112  8.142194  5.652593  5.550033
## A4GALT  7.728628  7.818966  8.679885  7.048563  5.929258
## A4GNT  10.243388 10.182382  9.391991  8.779887  9.431585
metdata[1:5,1:5]
##                                                              title
## GSM188013   DMSO treated MCF7 breast cancer cells [HG-U133A] Exp 1
## GSM188014 Dioxin treated MCF7 breast cancer cells [HG-U133A] Exp 1
## GSM188016   DMSO treated MCF7 breast cancer cells [HG-U133A] Exp 2
## GSM188018 Dioxin treated MCF7 breast cancer cells [HG-U133A] Exp 2
## GSM188020   DMSO treated MCF7 breast cancer cells [HG-U133A] Exp 3
##           geo_accession                status submission_date
## GSM188013     GSM188013 Public on May 12 2007     May 08 2007
## GSM188014     GSM188014 Public on May 12 2007     May 08 2007
## GSM188016     GSM188016 Public on May 12 2007     May 08 2007
## GSM188018     GSM188018 Public on May 12 2007     May 08 2007
## GSM188020     GSM188020 Public on May 12 2007     May 08 2007
##           last_update_date
## GSM188013      May 11 2007
## GSM188014      May 11 2007
## GSM188016      May 11 2007
## GSM188018      May 11 2007
## GSM188020      May 11 2007
##構(gòu)建group_list
group_list<-rep(c("Treat","Control"),3)
colnames(data)<-group_list
library(factoextra)
## Warning: package 'factoextra' was built under R version 3.5.3
## Loading required package: ggplot2
## Welcome! Related Books: `Practical Guide To Cluster Analysis in R` at https://goo.gl/13EFCZ
## 計算PCA
data<-t(data)##轉(zhuǎn)換數(shù)據(jù)至行為sample,列為gene
data<-as.data.frame(data)##注意數(shù)據(jù)要轉(zhuǎn)換為數(shù)據(jù)框
res.pca <- prcomp(data, scale = TRUE)
##展示主成分對差異的貢獻
fviz_eig(res.pca)
Fig2
## 可視化結(jié)果
fviz_pca_ind(res.pca,
             col.ind = group_list, # 顏色對應group信息
             palette = c("#00AFBB",  "#FC4E07"),
             addEllipses = TRUE, # Concentration ellipses
             ellipse.type = "confidence",
             legend.title = "Group",## Legend名稱
             repel = TRUE
             )
Fig3

層次聚類圖-聚類結(jié)果也與PCA相似,結(jié)果并不好

聚類分析的結(jié)果也同樣可以進一步美化,但這里不做
計算距離時同樣需進行轉(zhuǎn)置贾富,但在前一步PCA分析中的data已經(jīng)經(jīng)過轉(zhuǎn)置歉眷,故未重復

dd <- dist(data, method = "euclidean")##data是經(jīng)過行列轉(zhuǎn)換的
hc <- hclust(dd, method = "ward.D2")
plot(hc)
Fig4
##對結(jié)果進行美化
# Convert hclust into a dendrogram and plot
hcd <- as.dendrogram(hc)
# Define nodePar
nodePar <- list(lab.cex = 0.6, pch = c(NA, 19), 
                cex = 0.7, col = "blue")
# Customized plot; remove labels
plot(hcd, ylab = "Height", nodePar = nodePar, leaflab = "none")
Fig5

limma分析差異基因

limma包的j具具具體用法參考 limma Users Guide
構(gòu)建分組信息,構(gòu)建好比較矩陣是關(guān)鍵
注意這里的表達矩陣信息 eset_dat是經(jīng)過處理后的颤枪,為轉(zhuǎn)置汗捡,行為gene,列為sample

library(limma)
library(dplyr)
group_list
## [1] "Treat"   "Control" "Treat"   "Control" "Treat"   "Control"
design <- model.matrix(~0+factor(group_list))
colnames(design)=levels(factor(group_list))
design
##   Control Treat
## 1       0     1
## 2       1     0
## 3       0     1
## 4       1     0
## 5       0     1
## 6       1     0
## attr(,"assign")
## [1] 1 1
## attr(,"contrasts")
## attr(,"contrasts")$`factor(group_list)`
## [1] "contr.treatment"
## 比較信息
contrast.matrix<-makeContrasts("Treat-Control",
                               levels = design)
contrast.matrix##查看比較矩陣的信息畏纲,這里我們設(shè)置的是Treat Vs. control
##          Contrasts
## Levels    Treat-Control
##   Control            -1
##   Treat               1
## 擬合模型
fit <- lmFit(eset_dat,design)
fit2 <- contrasts.fit(fit, contrast.matrix) 
fit2 <- eBayes(fit2) 
DEG<-topTable(fit2, coef=1, n=Inf) %>% na.omit()  ## coef比較分組 n基因數(shù)
head(DEG)
##             logFC   AveExpr          t      P.Value adj.P.Val         B
## ALDH3A1 -3.227263 10.302323 -10.710306 4.482850e-05 0.3134585 -4.048355
## CYP1B1  -3.033684 13.287607 -10.505888 4.995753e-05 0.3134585 -4.049713
## CYP1A1  -9.003353 11.481268  -8.371476 1.762905e-04 0.7374232 -4.069681
## HHLA2   -1.550587  6.595658  -7.443431 3.337672e-04 0.9308066 -4.083411
## SLC7A5  -2.470333 13.628775  -7.298868 3.708688e-04 0.9308066 -4.085966
## TIPARP  -1.581274 12.764218  -7.024252 4.552834e-04 0.9522252 -4.091192
dim(DEG)
## [1] 12549     6
save(DEG,file = "DEG_all.Rdata")

繪制火山圖

火山圖其實僅僅是一種可視化的方式扇住,能夠從整體上讓我們對整體的差異分析情況有個了解
篩選到差異基因后,可以直接繪制出火山圖
火山圖的橫坐標為logFC, 縱坐標為-log10(pvalue)盗胀,因此其實理論上講plot即可完成火山圖繪制

最簡單原始的畫法

colnames(DEG)
## [1] "logFC"     "AveExpr"   "t"         "P.Value"   "adj.P.Val" "B"
plot(DEG$logFC,-log10(DEG$P.Value))
Fig6

高級的畫法

借助于有人開發(fā)的更高級的包艘蹋,用于完成某些特殊的功能,或者更美觀

require(EnhancedVolcano)
EnhancedVolcano(DEG,
                
                lab = rownames(DEG),
                
                x = "logFC",
                
                y = "P.Value",
                
                selectLab = rownames(DEG)[1:5],
                
                xlab = bquote(~Log[2]~ "fold change"),
                
                ylab = bquote(~-Log[10]~italic(P)),
                
                pCutoff = 0.05,## pvalue閾值
                
                FCcutoff = 1,## FC cutoff
                
                xlim = c(-5,5),
                
                transcriptPointSize = 1.8,
                
                transcriptLabSize = 5.0,
                
                colAlpha = 1,
                
                legend=c("NS","Log2 FC"," p-value",
                         " p-value & Log2 FC"),
                
                legendPosition = "bottom",
                
                legendLabSize = 10,
                
                legendIconSize = 3.0)

Fig7

繪制熱圖

熱圖的使用比較頻繁票灰,得到差異基因后可以直接繪制熱圖
相對簡單好用的要屬pheatmap包了
管道中的常規(guī)提取需要加上特殊的占位符.

## 首先提取出想要畫的數(shù)據(jù)
head(DEG)
## 提取FC前50
up_50<-DEG %>% as_tibble() %>% 
  mutate(genename=rownames(DEG)) %>% 
  dplyr::arrange(desc(logFC)) %>% 
  .$genename %>% .[1:50] ## 管道符中的提取
## FC低前50
down_50<-DEG %>% as_tibble() %>% 
  mutate(genename=rownames(DEG)) %>% 
  dplyr::arrange(logFC) %>% 
  .$genename %>% .[1:50] ## 管道符中的提取
index<-c(up_50,down_50)  

## 開始繪圖-最簡單的圖
library(pheatmap)
pheatmap(eset_dat[index,],show_colnames =F,show_rownames = F)
Fig8

稍微調(diào)整細節(jié)

index_matrix<-t(scale(t(eset_dat[index,])))##歸一化
index_matrix[index_matrix>1]=1
index_matrix[index_matrix<-1]=-1
head(index_matrix)

## 添加注釋
anno=data.frame(group=group_list)
rownames(anno)=colnames(index_matrix)
anno##注釋信息的數(shù)據(jù)框
pheatmap(index_matrix,
           show_colnames =F,
           show_rownames = F,
           cluster_cols = T, 
           annotation_col=anno)
   
Fig9

本期內(nèi)容就到這里女阀,我是白介素2,下期再見

廣而告之

說一個事米间,鑒于簡書平臺在信息傳播方面有不足之處强品,應粉絲要求,白介素2的個人微信平臺已經(jīng)開啟屈糊,繼續(xù)聊臨床與科研的故事的榛,R語言,數(shù)據(jù)挖掘逻锐,文獻閱讀等內(nèi)容夫晌。當然也不要期望過高,微信平臺目前的定位是作為自己的讀書筆記昧诱,如果對大家有幫助最好撼嗓。如果感興趣, 可以掃碼關(guān)注下止潮。

qrcode_for_gh_9eaa04438675_258.jpg

相關(guān)閱讀:
R語言GEO數(shù)據(jù)挖掘01-數(shù)據(jù)下載及提取表達矩陣
R語言GEO數(shù)據(jù)挖掘02-解決GEO數(shù)據(jù)中的多個探針對應一個基因

如果沒有時間精力學習代碼把敢,推薦了解:零代碼數(shù)據(jù)挖掘課程

轉(zhuǎn)載請注明出處

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蜈亩,隨后出現(xiàn)的幾起案子懦窘,更是在濱河造成了極大的恐慌,老刑警劉巖稚配,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畅涂,死亡現(xiàn)場離奇詭異,居然都是意外死亡道川,警方通過查閱死者的電腦和手機午衰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門立宜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人臊岸,你說我怎么就攤上這事橙数。” “怎么了扇单?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵商模,是天一觀的道長。 經(jīng)常有香客問我蜘澜,道長施流,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任鄙信,我火速辦了婚禮瞪醋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘装诡。我一直安慰自己银受,他們只是感情好,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布鸦采。 她就那樣靜靜地躺著宾巍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪渔伯。 梳的紋絲不亂的頭發(fā)上顶霞,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機與錄音锣吼,去河邊找鬼选浑。 笑死,一個胖子當著我的面吹牛玄叠,可吹牛的內(nèi)容都是我干的古徒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼读恃,長吁一口氣:“原來是場噩夢啊……” “哼隧膘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起寺惫,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤疹吃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肌蜻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體互墓,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡必尼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年蒋搜,在試婚紗的時候發(fā)現(xiàn)自己被綠了篡撵。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡豆挽,死狀恐怖育谬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情帮哈,我是刑警寧澤膛檀,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站娘侍,受9級特大地震影響咖刃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜憾筏,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一嚎杨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧氧腰,春花似錦枫浙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至黄痪,卻和暖如春紧帕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背满力。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工焕参, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人油额。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓叠纷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親潦嘶。 傳聞我的和親對象是個殘疾皇子涩嚣,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

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