差异分析我一般只用DESeq2,所以写了个函数,把这个打包了
需要的包
library(DESeq2)
library(ggplot2)
library(ggrepel)
library(pheatmap)
打包函数如下 ↓
DEG_DESeq2 = function(exp, group){
colData <- data.frame(row.names =colnames(exp),
condition=group)
dds <- DESeqDataSetFromMatrix(countData = exp,
colData = colData,
design = ~ condition)
dds <- DESeq(dds) #这一步比较慢
res <- results(dds, contrast = c("condition",rev(levels(group))))
resOrdered <- res[order(res$pvalue),]
DEG <- as.data.frame(resOrdered)
DEG = na.omit(DEG)
logFC_cutoff <- with(DEG,mean(abs(log2FoldChange)) + 2*sd(abs(log2FoldChange)) ) # logFC 可以改
k1 = (DEG$pvalue < 0.05)&(DEG$log2FoldChange < -logFC_cutoff)
k2 = (DEG$pvalue < 0.05)&(DEG$log2FoldChange > logFC_cutoff)
DEG$change = ifelse(k1,"DOWN",ifelse(k2,"UP","NOT"))
write.csv(DEG, file = 'outport/DEG_DESeq2.csv') # 保存路径,也可以改
}
需要准备俩东西
- 表达矩阵 exp(counts)
- 分组信息 group
开跑 ↓
DEG_DESeq2(exp, group)
DEG = read.csv('outport/DEG_DESeq2.csv')
table(DEG$change)
代码说明:DEG_DESeq2函数里有俩地方可以改(代码里注释了)
- logFC_cutoff <- with(DEG,mean(abs(log2FoldChange)) + 2*sd(abs(log2FoldChange)) )
这一句是log_FC的值,可以改- write.csv(DEG, file = ‘outport/DEG_DESeq2.csv’) # 保存路径,也可以改
这一步是保存位置,我建了outport这个文件夹,如果没有建,可能会报错
箱图可视化(一些代码要根据数据改)
logFC_cutoff <- with(DEG,mean(abs(log2FoldChange)) + 2*sd(abs(log2FoldChange)) )
DEG$label = ifelse(DEG$X == 'HMOX1', 'HMOX1', '') # 这里是你要研究的基因
p1 = ggplot(DEG, aes(x=log2FoldChange, y=-log10(pvalue),color=change))+
geom_point(alpha=0.5, size=1.8)+
theme_set(theme_set(theme_bw(base_size=20)))+
xlab("log2FC") + ylab("-log10(pvalue)")+
scale_colour_manual(values = c("#377EB8",'grey', "#E41A1C"))+
theme_classic()+
theme(panel.border = element_rect(fill=NA,color="black", size=1, linetype="solid"))+
geom_hline(aes(yintercept = -log10(0.05)), linetype = 'dashed', size = 1)+
geom_vline(aes(xintercept = logFC_cutoff), linetype = 'dashed',size = 1)+
geom_vline(aes(xintercept = -logFC_cutoff), linetype = 'dashed', size = 1)+
geom_label_repel(aes(label = label))
p1
热图可视化(一些代码要根据数据改)
gene = c(DEG[DEG$change == 'UP','X'], DEG[DEG$change == 'DOWN','X'])
data = log2(edgeR::cpm(exp)+1)[gene,]
bk = c(seq(-1,-0.1,by=0.01),seq(0,1,by=0.01))
annotation_col = data.frame(risk = rep(c('HighRisk','LowRisk'), c(80,80)))
rownames(annotation_col) = rownames(cl)
ann_colors = list(
risk = c(HighRisk = "#E41A1C", LowRisk = "#377EB8")
)
p2 = pheatmap(data,
scale = "row",
show_colnames =F,
show_rownames = F,
cluster_cols = F,
cluster_rows = F,
color = c(colorRampPalette(colors = c("#377EB8","white"))(length(bk)/2),
colorRampPalette(colors = c("white","#E41A1C"))(length(bk)/2)),
breaks=bk,
annotation_col = annotation_col,
annotation_colors = ann_colors,
gaps_row = 620,
gaps_col = 80)