差异分析我一般只用DESeq2,所以写了个函数,把这个打包了

    需要的包

    1. library(DESeq2)
    2. library(ggplot2)
    3. library(ggrepel)
    4. library(pheatmap)

    打包函数如下 ↓

    1. DEG_DESeq2 = function(exp, group){
    2. colData <- data.frame(row.names =colnames(exp),
    3. condition=group)
    4. dds <- DESeqDataSetFromMatrix(countData = exp,
    5. colData = colData,
    6. design = ~ condition)
    7. dds <- DESeq(dds) #这一步比较慢
    8. res <- results(dds, contrast = c("condition",rev(levels(group))))
    9. resOrdered <- res[order(res$pvalue),]
    10. DEG <- as.data.frame(resOrdered)
    11. DEG = na.omit(DEG)
    12. logFC_cutoff <- with(DEG,mean(abs(log2FoldChange)) + 2*sd(abs(log2FoldChange)) ) # logFC 可以改
    13. k1 = (DEG$pvalue < 0.05)&(DEG$log2FoldChange < -logFC_cutoff)
    14. k2 = (DEG$pvalue < 0.05)&(DEG$log2FoldChange > logFC_cutoff)
    15. DEG$change = ifelse(k1,"DOWN",ifelse(k2,"UP","NOT"))
    16. write.csv(DEG, file = 'outport/DEG_DESeq2.csv') # 保存路径,也可以改
    17. }

    需要准备俩东西

    • 表达矩阵 exp(counts)
    • 分组信息 group

    开跑 ↓

    1. DEG_DESeq2(exp, group)
    2. DEG = read.csv('outport/DEG_DESeq2.csv')
    3. 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这个文件夹,如果没有建,可能会报错

    箱图可视化(一些代码要根据数据改)

    1. logFC_cutoff <- with(DEG,mean(abs(log2FoldChange)) + 2*sd(abs(log2FoldChange)) )
    2. DEG$label = ifelse(DEG$X == 'HMOX1', 'HMOX1', '') # 这里是你要研究的基因
    3. p1 = ggplot(DEG, aes(x=log2FoldChange, y=-log10(pvalue),color=change))+
    4. geom_point(alpha=0.5, size=1.8)+
    5. theme_set(theme_set(theme_bw(base_size=20)))+
    6. xlab("log2FC") + ylab("-log10(pvalue)")+
    7. scale_colour_manual(values = c("#377EB8",'grey', "#E41A1C"))+
    8. theme_classic()+
    9. theme(panel.border = element_rect(fill=NA,color="black", size=1, linetype="solid"))+
    10. geom_hline(aes(yintercept = -log10(0.05)), linetype = 'dashed', size = 1)+
    11. geom_vline(aes(xintercept = logFC_cutoff), linetype = 'dashed',size = 1)+
    12. geom_vline(aes(xintercept = -logFC_cutoff), linetype = 'dashed', size = 1)+
    13. geom_label_repel(aes(label = label))
    14. p1

    热图可视化(一些代码要根据数据改)

    1. gene = c(DEG[DEG$change == 'UP','X'], DEG[DEG$change == 'DOWN','X'])
    2. data = log2(edgeR::cpm(exp)+1)[gene,]
    3. bk = c(seq(-1,-0.1,by=0.01),seq(0,1,by=0.01))
    4. annotation_col = data.frame(risk = rep(c('HighRisk','LowRisk'), c(80,80)))
    5. rownames(annotation_col) = rownames(cl)
    6. ann_colors = list(
    7. risk = c(HighRisk = "#E41A1C", LowRisk = "#377EB8")
    8. )
    9. p2 = pheatmap(data,
    10. scale = "row",
    11. show_colnames =F,
    12. show_rownames = F,
    13. cluster_cols = F,
    14. cluster_rows = F,
    15. color = c(colorRampPalette(colors = c("#377EB8","white"))(length(bk)/2),
    16. colorRampPalette(colors = c("white","#E41A1C"))(length(bk)/2)),
    17. breaks=bk,
    18. annotation_col = annotation_col,
    19. annotation_colors = ann_colors,
    20. gaps_row = 620,
    21. gaps_col = 80)