library(dplyr)
library(stringr)
library(ggplot2)
library(DESeq2)
Bulk RNA Seq Analysis
本文档使用DESeq2包对组织的转录组测序进行下游分析,从raw counts数据到差异表达基因(Differentially Expressed Genes, DEGs),绘制火山图,再进一步做通路富集分析。
数据读取和清洗
读取counts矩阵,注意此处不能是reads,也不能是基因表达矩阵。 清洗数据,使每行为一个基因,每列为一个样本,并设置行名为基因名,列名为样本名。
<- file.path('_')
f <- readxl::read_xlsx(f)
countData countData
设置分组信息。是一个只有一列的数据框,行名为样本名。此处演示前8个样本为实验组,后10个样本为对照组。
<- data.frame(
coldata row.names = colnames(countData),
condition = c(rep('treatment', 8), rep('control', 10))
)
DESeq2流程
# 构建 DESeq2 数据对象
<- DESeqDataSetFromMatrix(countData = countData,
dds colData = coldata,
design = ~ condition)
# 过滤低表达基因,此步骤可有可无,对结果几乎无影响。
<- dds[rowSums(counts(dds)) > 10, ]
dds
# 差异表达分析
<- DESeq(dds)
dds
# 获取结果。
# 注意此处contrast参数的顺序,表示分组信息储存在condition中,计算treatment相对于 control的变化,也就是 > 0 表示在实验组上调。
<- results(dds, contrast = c("condition", "treatment", "control"))
res
head(res)
明确上调和下调的判断标准,一般log2FoldChange设置为1.5或1.2或1。
# calculate statistical difference ----
<- res |>
res_sig ::rownames_to_column(var = 'gene') |>
tibble::mutate(signif = case_when(
dplyr> 1 & pvalue < 0.05 ~ 'up',
log2FoldChange < -1 & pvalue < 0.05 ~ 'down',
log2FoldChange .default = 'ns'
))count(res_sig, signif)
# 保存数据
::write_csv(res_sig, file = '_.csv') readr