Differential analysis heatmap without hclust
2
1
Entering edit mode
4.9 years ago
newbie ▴ 120

Hello,

I did a differential analysis between 160 tumor and 90 normal samples. I'm using edgeR package. I used the following code to make a differential analysis heatmap. I selected differential expressed genes based on FC > 2 and FDR < 0.05. This gave me 614 DEGs.

logCPM <- cpm(y, prior.count=2, log=TRUE)
o <- order(tr$table$PValue)
logCPM <- logCPM[o[1:614],] 
logCPM <- t(scale(t(logCPM)))
dim(logCPM)

library(matrixStats)
library(gplots)
library(ComplexHeatmap)
library(circlize)
library(RColorBrewer)

#Set annotation
ann <- data.frame(TvsN$Type)
colnames(ann) <- c("Type")
colours <- list("Type"=c("Tumor"="black","Normal"="brown"))
colAnn <- HeatmapAnnotation(df=ann, which="col", col=colours, annotation_width=unit(c(1, 4), "cm"), gap=unit(1, "mm"))

myCol <- colorRampPalette(c("navyblue", "white", "red"))(100)
myBreaks <- seq(-2,2, length.out=100)
hmap <- Heatmap(logCPM, name = "Z-Score",  col = colorRamp2(myBreaks, myCol), 
                show_row_names = FALSE, show_column_names = FALSE, cluster_rows = TRUE,
                cluster_columns = TRUE, show_column_dend = FALSE, show_row_dend = TRUE,
                row_dend_reorder = TRUE, column_dend_reorder = TRUE, clustering_method_rows = "ward.D2",
                clustering_method_columns = "ward.D2", width = unit(100, "mm"),
                top_annotation=colAnn)
draw(hmap, heatmap_legend_side="left", annotation_legend_side="right")

The heatmap was made using complex heatmap like above. I see that DEGs showing samples are clustered.

![heatmap][1]

I wanted to select 614 DEGs and sort the samples acc to their Type without using hclust like above. May I know how to do this?

thanq

RNA-Seq heatmap complexheatmap r hclust • 1.8k views
ADD COMMENT
2
Entering edit mode
4.9 years ago

Read the docs about clustering in ComplexHeatmap. You can suppress clustering (and provide the data in the order you want) or give a custom clustering function or precomputed dendrogram.

ADD COMMENT
0
Entering edit mode

In your case it would be cluster_rows which needs to be set to FALSE as by default it is TRUE and then uses Complete linkeage to cluster the rows. As Jean-Karim Heriche says, please read the manual, it is outstandingly comprehensive with an example plot for like every possible option.

ADD REPLY
1
Entering edit mode
3.9 years ago
dtm2451 ▴ 30

You can do this in dittoSeq. dittoHeatmap() will even automatically grab the proper genes data subset and automaatically generate metadata annotations.

# Import full dataset from edgeR DGEList to the format dittoSeq understands
RNAdata <- importDittoBulk(your_DGEList_object)

# If your `type` data was stored within the DGEList, it might be imported automatically
# but to give example code if not...
# Adding the 'Type' metadata
RNAdata$Type <- types_data

# Make the heatmap
dittoHeatmap(
    object = RNAdata,
    genes = DEG.genes,
    annot.by = "Type",
    order.by = "Type",
    cluster_cols = FALSE)

Note on dittoSeq installation: If you are in R 4.0, you can install through Bioconductor with BiocManager::install("dittoSeq"). If not, you can still install it via the github (I have tested myself for R≥3.6.2, but this method should let you install in any R version.) BiocManager::install("dtm2451/dittoSeq")

Additional tweaks to the plot can be made by providing additional ?dittoHeatmap or ?pheatmap inputs, but the above code should accomplish the goals that you mention here.

ADD COMMENT

Login before adding your answer.

Traffic: 1949 users visited in the last hour
Help About
FAQ
Access RSS
API
Stats

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.

Powered by the version 2.3.6