How to normalize Kallisto count matrix collapsed at gene-level with TMM/DESeq2?
1
0
Entering edit mode
2 days ago

Hi all,

Sorry for the simple question but I'm new to Kallisto and could not reach a definitive conclusion based on other posts.

I have two matrices of expression data (from a previous study) that I want to use for mRNA-miRNA correlation analysis. Based on the information provided by the authors, the mRNA expression matrix is derived using Kallisto. They did not mention the use of Tximport or any other tools but the read counts are already collapsed to gene-level, resulting in a matrix with gene names in the first column (e.g. TP53, A2M), genome-coordination in the second column (e.g. "chr17_7661779_7687550_-") and raw counts in the rest of the table (which are mostly non-integer values such as 1192.75812 and 2546.19874).

My question concerns how to normalize this data for correlation analysis. I have come to the conclusion that the best methods for normalization for correlation analysis are edgeR's TMM and DESeq2 normalization. Based on the other posts, I think the following scenarios would work out but I would appreciate it if someone could confirm this and correct my mistakes:

For edgeR: apparently, edgeR is capable of dealing with non-integer values and I think there is no need for any prior data transformation since the counts are already collapsed to the gene level. so simply using the following codes should prepare the matrices for correlation analysis -->

dgelist <- DGEList(matrix) ##the matrix with gene names as row names and counts in columns
norm-mat <- calcNormFactors(dgelist, method = "TMM")
norm-mat <- cpm(norm-mat, log = TRUE)


For DESeq2: DESeq2 requires integers as input. Others suggest using the function DESeqDataSetFromTximport() but I believe this works for outputs of Tximport, not a matrix of counts. apparently, this function also accounts for gene length bias for results of Kallisto but (correct me if I'm wrong) I don't think that's needed here since the counts are already collapsed to gene level. So the only thing I need to do is to use matrix <- round(matrix), create a DESeq dataset from this, and use the function counts(deseq.dataset, normalized = TRUE).

Q1: Is it OK to input this data as-is for normalization without any prior transformation regarding length and other stuff?

Q2: Does my scenario for edgeR work out? and is it appropriate for correlation analysis?

Q3: Does my scenario for DESeq2 work out? and is it appropriate for correlation analysis?

DESeq2 TMM Kallisto edgeR • 165 views
1
Entering edit mode
1 day ago

Yes, the correct thing to so, in the abscence of the original Kalisto data is to round the counts using round.

For correlation analysis I would recommend using the rlog or vst transformed values in DESeq2. Both the rlog and vst functions will perform normalisation for you. These two transforms will help to deal with the hetroskedicity in the data that might throw things like correclations off.

0
Entering edit mode

Thank you for your response. So it is my understanding that simply running the following codes separately for my two matrices (one matrix for mRNA and one for mRNA) would give me the prepared matrices for miRNA-mRNA correlation analysis am I right?

dds <- DESeqDataSetFromMatrix(matrix, colData = data.frame(colnames(matrix), design = ~ 1)
vst_mat <- vst(dds)
norm_mat <- assay(vst_mat)


Thanks again

0
Entering edit mode

Should do yes. As long as you've also done matrix <- round(matrix).

BTW, I'd avoid using the name "matrix", as this is a really commonly used R function that you would be over-writing.

Also, don't be suprised if you don't get good correlation between mRNA and miRNA, this analysis often doesn't result in many good correlations.

0
Entering edit mode

Thank you very much. I really appreciate it. And thanks for the tips! You have been a huge help