author:小杜的生信筆記
DEseq2官方网址:http://www.bioconductor.org/packages/release/bioc/html/DESeq2.html
DESeq2是最常用的差异分析的方法,在上一个教程我们分享了limma差异分析 | ,差异分析--limma包 - 知乎 等平台,我们后续也会分享常用的差异分析方法,并进行一个比较。
DESeq2包是为高�维计数数据的归一化、可视化和差分分析而设计的。 它利用经验贝叶斯技术估计对数折叠变化和离散的先验,并计算这些量的后验估计。
1 导入所需包
#if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
#BiocManager::install("DESeq2")
library(DESeq2)
library(dplyr)
2 导入Counts数据矩阵
## 导入Counts数据矩阵
countdata <- read.table("Countdata.txt", header = T,row.names = 1)
countdata[1:10,1:6]
> countdata[1:10,1:6]
Control_01 Control_02 Control_03 Treat_01 Treat_02 Treat_03
gene01 11 11 11 10 11 10
gene02 14 14 14 13 14 13
gene03 14 14 14 13 14 13
gene04 7 7 7 6 7 6
gene05 11 11 11 11 11 10
gene06 14 14 14 13 14 12
gene07 13 13 13 12 13 12
gene08 11 11 10 10 11 9
gene09 11 11 11 10 11 9
gene10 10 12 12 12 12 10
3 数据过滤
## 过滤在所有重复样本中小于1的基因
countdata = countdata[rowMeans(countdata) > 1,]
4 数据样本信息
样本注释信息自己在本地后制作后进行导入
coldata <- read.csv("countdata.csv", header = T, row.names = 1)
head(coldata)
#############
> head(coldata)
condition
Control_01 CK
Control_02 CK
Control_03 CK
Treat_01 Treat
Treat_02 Treat
Treat_03 Treat
检查数据Counts文件与coldata数据是否匹配
all(rownames(coldata) %in% colnames(countdata))
all(rownames(coldata) == colnames(countdata))
当返回TRUE
时,表明两个数匹配。
> all(rownames(coldata) %in% colnames(countdata)) #
[1] TRUE
> all(rownames(coldata) == colnames(countdata))
[1] TRUE
5 差异分析
## 制作差异矩阵
dds <- DESeqDataSetFromMatrix(countData = countdata,colData = coldata,design = ~ condition)
dim(dds)
## 过滤
dds <- dds[rowSums(counts(dds)) > 1,]
nrow(dds)
## 差异比较
dep <- DESeq(dds)
res <- results(dep)
diff = res
diff <- na.omit(diff) ## 去除NA
dim(diff)
write.csv(diff,"all_diff.csv") # 导出所有的差异文件
DESeq输出的差异文件
> head(diff)
log2 fold change (MLE): condition Treat vs CK
Wald test p-value: condition Treat vs CK
DataFrame with 6 rows and 6 columns
baseMean log2FoldChange lfcSE stat pvalue padj
gene01 10.6594 -0.01071206 0.788745 -0.0135811 0.989164 0.999747
gene02 13.6626 0.00959682 0.713528 0.0134498 0.989269 0.999747
gene03 13.6626 0.00959682 0.713528 0.0134498 0.989269 0.999747
gene05 10.8224 0.03339267 0.783215 0.0426354 0.965992 0.999747
gene06 13.4731 -0.03001613 0.716954 -0.0418662 0.966605 0.999747
gene07 12.6616 0.00389414 0.735478 0.0052947 0.995775 0.999747
筛选差异基因,使用P值和LogFC进行筛选,这里我们就不多做解释,详情可以看我们前面的推文。
# 设置筛选标准
foldChange = 1
padj = 0.05
#
diffsig <- diff[(diff$pvalue < padj & abs(diff$log2FoldChange) > foldChange),]
dim(diffsig)
write.csv(diffsig, "All_diffsig.csv")
注:上调和下调的差异基因的筛选,我们在这里不在讲述,请查看我们前面的推文即可
6 差异基因热图
6.1 标准化Count值
我们后面的热图使用Count值进行分析,以及后续的分析也可以使用count值进行分析。我们的Count值是基因的原始表达量,因此需要进行标准化出来,我们这里使用vst
函数进行标准化处理。
## 标准化(标准化Counts值)
vsd <- vst(dds, blind = FALSE)
normalizeExp <- assay(vsd)
绘制差异基因热图
### 差异表达热图
df <- read.csv("All_diffsig.csv", header = T)
head(df)
df02 <- as.character(df$X)
## 标准化(标准化Counts值)
vsd <- vst(dds, blind = FALSE)
normalizeExp <- assay(vsd)
##
## 差异基因的Count
diff_expr <- normalizeExp[df02,]
head(diff_expr)
## 差异热图
library(pheatmap)
annotation_col <- data.frame(Group = factor(c(rep("CK",3), rep("Treat",3))))
rownames(annotation_col) <- colnames(diff_expr)
pdf("差异基因热图.pdf", height = 8, width = 12)
p <- pheatmap(diff_expr,
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()
获取本章节数据和代码:关注微信公众号:小杜的生信筆記(ID:Du_Bioinformatics),回复关键词:DESeq2差异分析
“小杜的生信筆記” 公众号、知乎、、B站平台,主要发表或收录生物信息学的教程,以及基于R的分析和可视化(包括数据分析,图形绘制等);分享感兴趣的文献和学习资料!
01.差异分析|使用limma包 -
02. 差异分析--limma包 - 知乎
03.R语言差异分析 | limma包 (公众号)