差異分析|使用limma包

獲取本章節(jié)數據和代碼:關注微信公眾號:小杜的生信筆記(ID:Du_Bioinformatics),回復關鍵詞:limma差異分析

------------------------

基于R語言進行差異分析的包有很多個毯辅,比如我自己常用的有DESeq2limma嚼贡、edge等等弥姻。我們本期的專題是進行各種包差異分析的專題。


本專題是使用limma包差異分析慢叨。

1.數據準備

差異分析是兩兩數據集間的比較盖矫,一個是對照組樣本(CK)丽惭,一個是處理組樣本(Treat)

    CK01    CK02    CK03    T1  T2  T3
gene0001    56  46  91  36  19  28
gene0002    0   0   5   0   31  8
gene0003    4   0   6   2   2   0
gene0004    257 254 235 241 162 183
gene0005    30  17  22  27  9   75
gene0006    503 565 490 369 426 480
gene0007    201 82  62  296 206 189
gene0008    56  6   12  108 62  0
gene0009    6   10  9   13  8   14
gene0010    19  0   0   27  0   0
gene0011    0   0   0   0   0   0

<center>樣本格式
</center>

注:數據樣本根據自己實驗數據決定


2.數據分析

2.1 導入所需的包

## 導入R包
library(limma)
library(dplyr)

2.2 加載數據

df <- read.table("Counts_data.txt", header = T, sep = "\t", row.names = 1, check.names = F)
head(df)

image.png

2.3 樣本信息注釋

list <- c(rep("Treat", 66), rep("CK",148)) %>% factor(., levels = c("CK", "Treat"), ordered = F)
##--------------
> head(list)
  CK Treat
1  0     1
2  0     1
3  0     1
4  0     1
5  0     1
6  0     1
.............
list <- model.matrix(~factor(list)+0)  #把group設置成一個model matrix
colnames(list) <- c("CK", "Treat")
df.fit <- lmFit(df, list)  ## 數據與list進行匹配

2.4 差異分析

df.matrix <- makeContrasts(tumor - normal, levels = list)
fit <- contrasts.fit(df.fit, df.matrix)
fit <- eBayes(fit)
tempOutput <- topTable(fit,n = Inf, adjust = "fdr")
> head(tempOutput)
               logFC  AveExpr         t      P.Value    adj.P.Val        B
gene11796 -1.2620803 5.551402 -8.392278 5.886136e-15 7.083964e-11 23.25729
gene7364  -0.9825962 7.471963 -7.598215 8.629186e-13 5.192613e-09 18.51600
gene11454 -1.3204341 6.238318 -7.368543 3.472935e-12 1.301549e-08 17.19354
gene11689 -1.0769861 4.967290 -7.331950 4.325880e-12 1.301549e-08 16.98503
gene11227 -1.2035217 5.925234 -7.263016 6.531456e-12 1.572122e-08 16.59390
gene3259  -2.3695741 9.467290 -6.962632 3.829470e-11 5.760959e-08 14.91576

到這部分炼彪,差異分析就結束了吐根。對U摺辐马! 沒錯就是這么簡簡單單...................


  • 后面的部分就是提取差異結果,和繪制火山圖。

2.5 導出差異結果

## 導出所有的差異結果
nrDEG = na.omit(tempOutput) ## 去掉數據中有NA的行或列
diffsig <- nrDEG  
write.csv(diffsig, "all.limmaOut.csv")  

2.6 篩選差異基因

差異基因基因的篩選喜爷,我們一般是使用P值和LogFC篩選冗疮,常用的篩選標準P<0.05,|LogFC| > 1,這是最常規(guī)的篩選標準檩帐,如果你的數據差異較大术幔,也可以更改P值和LogFC的大小。

## 我們使用|logFC| > 0.5湃密,padj < 0.05(矯正后P值)
foldChange = 0.5
padj = 0.05
## 篩選出所有差異基因的結果
All_diffSig <- diffsig[(diffsig$adj.P.Val < padj & (diffsig$logFC>foldChange | diffsig$logFC < (-foldChange))),]
#---------------------
> dim(All_diffSig)
[1] 0 6

## 我們發(fā)現竟然沒有差異基因诅挑,這是應該我這邊的數據是隨機的結果,如果你的數據有這樣的問題泛源,你需要在仔細檢查一下哦拔妥。
## 我們?yōu)榱讼旅娴牟僮髡_M行,我們選用的P值(未矯正)進行篩選达箍。
All_diffSig <- diffsig[(diffsig$P.Value < padj & (diffsig$logFC>foldChange | diffsig$logFC < (-foldChange))),]
write.csv(All_diffSig, "all.diffsig.csv")  ##輸出差異基因數據集
#-----------------
> dim(All_diffSig)
[1] 335   6
## 共有335個差異基因

7)篩選上調和下調的基因

diffup <-  All_diffSig[(All_diffSig$P.Value < padj & (All_diffSig$logFC > foldChange)),]
write.csv(diffup, "diffup.csv")
#
diffdown <- All_diffSig[(All_diffSig$P.Value < padj & (All_diffSig < -foldChange)),]
write.csv(diffdown, "diffdown.csv")

到這部分没龙,我們差異分析就全部結束了。已經拿到差異文件缎玫,及上調和下調的基因文件硬纤。


3. 繪制火山圖

在常規(guī)的差異分析之后,我們需要進行差異數據的可視化赃磨,火山圖差異基因熱圖是最常用的可視化圖形筝家。

## 導入R包
library(ggplot2)
library(ggrepel)
##  繪制火山圖
## 進行分類別
logFC <- diffsig$logFC
deg.padj <- diffsig$P.Value
data <- data.frame(logFC = logFC, padj = deg.padj)
data$group[(data$padj > 0.05 | data$padj == "NA") | (data$logFC < foldChange) & data$logFC > -foldChange] <- "Not"
data$group[(data$padj <= 0.05 & data$logFC > 1)] <-  "Up"
data$group[(data$padj <= 0.05 & data$logFC < -1)] <- "Down"
x_lim <- max(logFC,-logFC)

# 開始繪圖
pdf('volcano.pdf',width = 7,height = 6.5)  ## 輸出文件
label = subset(diffsig,P.Value <0.05 & abs(logFC) > 0.5)
label1 = rownames(label)

colnames(diffsig)[1] = 'log2FC'
Significant=ifelse((diffsig$P.Value < 0.05 & abs(diffsig$log2FC)> 0.5), ifelse(diffsig$log2FC > 0.5,"Up","Down"), "Not")

ggplot(diffsig, aes(log2FC, -log10(P.Value)))+
  geom_point(aes(col=Significant))+
  scale_color_manual(values=c("#0072B5","grey","#BC3C28"))+
  labs(title = " ")+
  geom_vline(xintercept=c(-0.5,0.5), colour="black", linetype="dashed")+
  geom_hline(yintercept = -log10(0.05),colour="black", linetype="dashed")+
  theme(plot.title = element_text(size = 16, hjust = 0.5, face = "bold"))+
  labs(x="log2(FoldChange)",y="-log10(Pvalue)")+
  theme(axis.text=element_text(size=13),axis.title=element_text(size=13))+
  str(diffsig, max.level = c(-1, 1))+theme_bw()

dev.off()

4. 繪制差異基因表達熱圖

注:本章節(jié),我們是只使用count值進行熱圖繪制邻辉,后續(xù)的分子中肛鹏,我們會對其進行優(yōu)化

## 導入R包
library(pheatmap)

## 提取差異基因的表達量
DEG_id <- read.csv("all.diffsig.csv", header = T)  # 讀取差異基因的文件
head(DEG_id)
## 匹配差異基因的表達量
DEG_id <- unique(DEG_id$X)
DEG_exp <- df[DEG_id,]
hmexp <- na.omit(DEG_exp)

## 樣本注釋信息 
annotation_col <- data.frame(Group = factor(c(rep("Treat", 66), rep("CK",148))))
rownames(annotation_col) <- colnames(hmexp)

##  繪制熱圖 
pdf(file = "heatmap02.pdf", height = 8, width = 12)
pheatmap(hmexp,
              annotation_col = annotation_col,
              color = colorRampPalette(c("green","black","red"))(50),
              cluster_cols = F,
              show_rownames = F,
              show_colnames = F,
              scale = "row", ## none, row, column
              fontsize = 12,
              fontsize_row = 12,
              fontsize_col = 6,
              border = FALSE)
print(p)
dev.off()
image.png

獲取本章節(jié)數據和代碼:關注微信公眾號:小杜的生信筆記(ID:Du_Bioinformatics),回復關鍵詞:limma差異分析

“小杜的生信筆記” 公眾號恩沛、知乎在扰、簡書、B站平臺雷客,主要發(fā)表或收錄生物信息學的教程芒珠,以及基于R的分析和可視化(包括數據分析,圖形繪制等)搅裙;分享感興趣的文獻和學習資料皱卓!

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市部逮,隨后出現的幾起案子娜汁,更是在濱河造成了極大的恐慌,老刑警劉巖兄朋,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掐禁,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機傅事,發(fā)現死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門缕允,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蹭越,你說我怎么就攤上這事障本。” “怎么了响鹃?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵驾霜,是天一觀的道長。 經常有香客問我买置,道長寄悯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任堕义,我火速辦了婚禮猜旬,結果婚禮上,老公的妹妹穿的比我還像新娘倦卖。我一直安慰自己洒擦,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布怕膛。 她就那樣靜靜地躺著熟嫩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪褐捻。 梳的紋絲不亂的頭發(fā)上掸茅,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音柠逞,去河邊找鬼昧狮。 笑死,一個胖子當著我的面吹牛板壮,可吹牛的內容都是我干的逗鸣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼绰精,長吁一口氣:“原來是場噩夢啊……” “哼撒璧!你這毒婦竟也來了?” 一聲冷哼從身側響起笨使,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤卿樱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后硫椰,有當地人在樹林里發(fā)現了一具尸體繁调,經...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡萨蚕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了涉馁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片门岔。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡爱致,死狀恐怖烤送,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情糠悯,我是刑警寧澤帮坚,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站互艾,受9級特大地震影響试和,放射性物質發(fā)生泄漏。R本人自食惡果不足惜纫普,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一阅悍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧昨稼,春花似錦节视、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至匾荆,卻和暖如春拌蜘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背牙丽。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工简卧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人烤芦。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓贞滨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拍棕。 傳聞我的和親對象是個殘疾皇子晓铆,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內容