Question: Voom Normalization and negative numbers
0
5.2 years ago by
Michael Breen350
Michael Breen350 wrote:
Hi all, We are applying Voom normalization to RNA-Seq Counts with the following code: library(edgeR) count <- read.delim("Counts.txt", check.names=FALSE, stringsAsFactors=FALSE) targets <- read.delim("Targets.txt", check.names=FALSE, stringsAsFactors=FALSE) #filter y <- DGEList(counts=rawdata[,2:31], genes=rawdata[,1:1]) keep <- rowSums(cpm(y)>10) >= 15 y <- y[keep,] dim (y) #norm y <- calcNormFactors(y) #voom VST <- voom(y,design=NULL,plot=TRUE) voom_matrix <- cbind(VST$genes, VST$E) write.table (voom_matrix, "VOOM_Matrix.txt", sep="\t") However, I find that even after this filtering step, I am finding negative expression values within my voom normalized matrix. Why is this? Michael -- M.S. Breen PhD, Bioinformatics and Genomics Clinical and Experimental Sciences Univ. of Southampton [[alternative HTML version deleted]]
normalization • 4.4k views
modified 5.2 years ago by Davis, Wade350 • written 5.2 years ago by Michael Breen350
Answer: Voom Normalization and negative numbers
0
5.2 years ago by
Pekka Kohonen190
Sweden
Pekka Kohonen190 wrote:
Dear Michael, Could this be because some counts (after normalization) are less than 1? And log of a number > 0 and < 1 is a negative number? Best, Pekka 2014-04-01 10:12 GMT+01:00 Michael Breen <breenbioinformatics at="" gmail.com="">: > Hi all, > > We are applying Voom normalization to RNA-Seq Counts with the following > code: > > > library(edgeR) > count <- read.delim("Counts.txt", check.names=FALSE, stringsAsFactors=FALSE) > targets <- read.delim("Targets.txt", check.names=FALSE, > stringsAsFactors=FALSE) > > #filter > y <- DGEList(counts=rawdata[,2:31], genes=rawdata[,1:1]) > keep <- rowSums(cpm(y)>10) >= 15 > y <- y[keep,] > dim (y) > > #norm > y <- calcNormFactors(y) > > #voom > VST <- voom(y,design=NULL,plot=TRUE) > voom_matrix <- cbind(VST$genes, VST$E) > write.table (voom_matrix, "VOOM_Matrix.txt", sep="\t") > > > However, I find that even after this filtering step, I am finding negative > expression values within my voom normalized matrix. Why is this? > > Michael > > > > > > > > > -- > M.S. Breen > PhD, Bioinformatics and Genomics > Clinical and Experimental Sciences > Univ. of Southampton > > [[alternative HTML version deleted]] > > _______________________________________________ > Bioconductor mailing list > Bioconductor at r-project.org > https://stat.ethz.ch/mailman/listinfo/bioconductor > Search the archives: http://news.gmane.org/gmane.science.biology.informatics.conductor
Answer: Voom Normalization and negative numbers
0
5.2 years ago by
Hi Micheal, As described in the help file (?voom) the $E component of the output object contains a "numeric matrix of normalized expression values on the log2 scale". So negative values indicate low levels of (normalized) expression. Even though your filtering step filters out genes with 14 or less samples (~ half the samples) with cpm >10 you could easily get low levels of expression for any particular sample. Imagine, for a given gene, that half you samples have cpm >10 and the other half have cpm=0.1. You would expect to see the later half with negative normalized expression levels. Wade ________________________________________ From: Michael Breen [breenbioinformatics@gmail.com] Sent: Tuesday, April 01, 2014 4:12 AM To: bioconductor at r-project.org Subject: [BioC] Voom Normalization and negative numbers Hi all, We are applying Voom normalization to RNA-Seq Counts with the following code: library(edgeR) count <- read.delim("Counts.txt", check.names=FALSE, stringsAsFactors=FALSE) targets <- read.delim("Targets.txt", check.names=FALSE, stringsAsFactors=FALSE) #filter y <- DGEList(counts=rawdata[,2:31], genes=rawdata[,1:1]) keep <- rowSums(cpm(y)>10) >= 15 y <- y[keep,] dim (y) #norm y <- calcNormFactors(y) #voom VST <- voom(y,design=NULL,plot=TRUE) voom_matrix <- cbind(VST$genes, VST$E) write.table (voom_matrix, "VOOM_Matrix.txt", sep="\t") However, I find that even after this filtering step, I am finding negative expression values within my voom normalized matrix. Why is this? Michael -- M.S. Breen PhD, Bioinformatics and Genomics Clinical and Experimental Sciences Univ. of Southampton [[alternative HTML version deleted]] ADD COMMENTlink written 5.2 years ago by Davis, Wade350 Thank you for the explanation. It was in fact quite obvious. However, does there arise conceptual problems with comprehending negative expression values? We know, the cpm is somewhere between 0-1, but does the log derivative of these numbers cause any down-stream problems? Differential expression or correlation analysis for example. Michael On Tue, Apr 1, 2014 at 6:19 PM, Davis, Wade <davisjwa@health.missouri.edu>wrote: > Hi Micheal, > As described in the help file (?voom) the$E component of the output > object contains a "numeric matrix of normalized expression values on the > log2 scale". > > So negative values indicate low levels of (normalized) expression. > > Even though your filtering step filters out genes with 14 or less samples > (~ half the samples) with cpm >10 you could easily get low levels of > expression for any particular sample. > > Imagine, for a given gene, that half you samples have cpm >10 and the > other half have cpm=0.1. You would expect to see the later half with > negative normalized expression levels. > > Wade > > ________________________________________ > From: Michael Breen [breenbioinformatics@gmail.com] > Sent: Tuesday, April 01, 2014 4:12 AM > To: bioconductor@r-project.org > Subject: [BioC] Voom Normalization and negative numbers > > Hi all, > > We are applying Voom normalization to RNA-Seq Counts with the following > code: > > > library(edgeR) > count <- read.delim("Counts.txt", check.names=FALSE, > stringsAsFactors=FALSE) > targets <- read.delim("Targets.txt", check.names=FALSE, > stringsAsFactors=FALSE) > > #filter > y <- DGEList(counts=rawdata[,2:31], genes=rawdata[,1:1]) > keep <- rowSums(cpm(y)>10) >= 15 > y <- y[keep,] > dim (y) > > #norm > y <- calcNormFactors(y) > > #voom > VST <- voom(y,design=NULL,plot=TRUE) > voom_matrix <- cbind(VST$genes, VST$E) > write.table (voom_matrix, "VOOM_Matrix.txt", sep="\t") > > > However, I find that even after this filtering step, I am finding negative > expression values within my voom normalized matrix. Why is this? > > Michael > > > > > > > > > -- > M.S. Breen > PhD, Bioinformatics and Genomics > Clinical and Experimental Sciences > Univ. of Southampton > > [[alternative HTML version deleted]] > > > -- M.S. Breen PhD, Bioinformatics and Genomics Clinical and Experimental Sciences Univ. of Southampton [[alternative HTML version deleted]]
There should be no conceptual problems with comprehending negative expression values, aside from the strange look collaborators may give you the first time they encounter it. But this is really not much different from Q-PCR experiments when the âCt level for the target gene is more abundant than the reference gene (aka housekeeping gene): you get negative numbers. Ultimately, these are measure of relative expression, unless you have done spike-ins with careful calibration. Even then, many would argue that it is still not an absolute measure. With that in mind, the scale itself is somewhat arbitrary, even if with the concept of log2 cpm. These issues would not impact the results of differential expression or correlation; they are all still valid with negative expression measures. Wade From: Michael Breen [mailto:breenbioinformatics@gmail.com] Sent: Wednesday, April 02, 2014 6:08 AM To: Davis, Wade Cc: bioconductor@r-project.org Subject: Re: [BioC] Voom Normalization and negative numbers Thank you for the explanation. It was in fact quite obvious. However, does there arise conceptual problems with comprehending negative expression values? We know, the cpm is somewhere between 0-1, but does the log derivative of these numbers cause any down-stream problems? Differential expression or correlation analysis for example. Michael On Tue, Apr 1, 2014 at 6:19 PM, Davis, Wade <davisjwa@health.missouri.edu<mailto:davisjwa@health.missouri.edu>> wrote: Hi Micheal, As described in the help file (?voom) the $E component of the output object contains a "numeric matrix of normalized expression values on the log2 scale". So negative values indicate low levels of (normalized) expression. Even though your filtering step filters out genes with 14 or less samples (~ half the samples) with cpm >10 you could easily get low levels of expression for any particular sample. Imagine, for a given gene, that half you samples have cpm >10 and the other half have cpm=0.1. You would expect to see the later half with negative normalized expression levels. Wade ________________________________________ From: Michael Breen [breenbioinformatics@gmail.com<mailto:breenbioinformatics@gmail.com>] Sent: Tuesday, April 01, 2014 4:12 AM To: bioconductor@r-project.org<mailto:bioconductor@r-project.org> Subject: [BioC] Voom Normalization and negative numbers Hi all, We are applying Voom normalization to RNA-Seq Counts with the following code: library(edgeR) count <- read.delim("Counts.txt", check.names=FALSE, stringsAsFactors=FALSE) targets <- read.delim("Targets.txt", check.names=FALSE, stringsAsFactors=FALSE) #filter y <- DGEList(counts=rawdata[,2:31], genes=rawdata[,1:1]) keep <- rowSums(cpm(y)>10) >= 15 y <- y[keep,] dim (y) #norm y <- calcNormFactors(y) #voom VST <- voom(y,design=NULL,plot=TRUE) voom_matrix <- cbind(VST$genes, VST$E) write.table (voom_matrix, "VOOM_Matrix.txt", sep="\t") However, I find that even after this filtering step, I am finding negative expression values within my voom normalized matrix. Why is this? Michael -- M.S. Breen PhD, Bioinformatics and Genomics Clinical and Experimental Sciences Univ. of Southampton [[alternative HTML version deleted]] -- M.S. Breen PhD, Bioinformatics and Genomics Clinical and Experimental Sciences Univ. of Southampton [[alternative HTML version deleted]] ADD REPLYlink written 5.1 years ago by Davis, Wade350 Thanks Wade, Is there not a difference when interpreting a calculated negative â between two relative measures of expression and a calculated negative log cpm for just one measure? I also believe that differential expression or correlation analysis would not be harmed by this. But I thought to get other opinons as well. Yours, Michael On Wed, Apr 2, 2014 at 3:58 PM, Davis, Wade <davisjwa@health.missouri.edu>wrote: > There should be no conceptual problems with comprehending negative > expression values, aside from the strange look collaborators may give you > the first time they encounter it. But this is really not much different > from Q-PCR experiments when the âCt level for the target gene is more > abundant than the reference gene (aka housekeeping gene): you get negative > numbers. > > > > Ultimately, these are measure of relative expression, unless you have done > spike-ins with careful calibration. Even then, many would argue that it is > still not an absolute measure. With that in mind, the scale itself is > somewhat arbitrary, even if with the concept of log2 cpm. > > > > These issues would not impact the results of differential expression or > correlation; they are all still valid with negative expression measures. > > > > Wade > > > > > > *From:* Michael Breen [mailto:breenbioinformatics@gmail.com] > *Sent:* Wednesday, April 02, 2014 6:08 AM > *To:* Davis, Wade > *Cc:* bioconductor@r-project.org > *Subject:* Re: [BioC] Voom Normalization and negative numbers > > > > Thank you for the explanation. It was in fact quite obvious. > > However, does there arise conceptual problems with comprehending negative > expression values? We know, the cpm is somewhere between 0-1, but does the > log derivative of these numbers cause any down-stream problems? > Differential expression or correlation analysis for example. > > Michael > > > > On Tue, Apr 1, 2014 at 6:19 PM, Davis, Wade <davisjwa@health.missouri.edu> > wrote: > > Hi Micheal, > As described in the help file (?voom) the$E component of the output > object contains a "numeric matrix of normalized expression values on the > log2 scale". > > So negative values indicate low levels of (normalized) expression. > > Even though your filtering step filters out genes with 14 or less samples > (~ half the samples) with cpm >10 you could easily get low levels of > expression for any particular sample. > > Imagine, for a given gene, that half you samples have cpm >10 and the > other half have cpm=0.1. You would expect to see the later half with > negative normalized expression levels. > > Wade > > ________________________________________ > From: Michael Breen [breenbioinformatics@gmail.com] > Sent: Tuesday, April 01, 2014 4:12 AM > To: bioconductor@r-project.org > Subject: [BioC] Voom Normalization and negative numbers > > > Hi all, > > We are applying Voom normalization to RNA-Seq Counts with the following > code: > > > library(edgeR) > count <- read.delim("Counts.txt", check.names=FALSE, > stringsAsFactors=FALSE) > targets <- read.delim("Targets.txt", check.names=FALSE, > stringsAsFactors=FALSE) > > #filter > y <- DGEList(counts=rawdata[,2:31], genes=rawdata[,1:1]) > keep <- rowSums(cpm(y)>10) >= 15 > y <- y[keep,] > dim (y) > > #norm > y <- calcNormFactors(y) > > #voom > VST <- voom(y,design=NULL,plot=TRUE) > voom_matrix <- cbind(VST$genes, VST$E) > write.table (voom_matrix, "VOOM_Matrix.txt", sep="\t") > > > However, I find that even after this filtering step, I am finding negative > expression values within my voom normalized matrix. Why is this? > > Michael > > > > > > > > > -- > M.S. Breen > PhD, Bioinformatics and Genomics > Clinical and Experimental Sciences > Univ. of Southampton > > [[alternative HTML version deleted]] > > > > > -- > > M.S. Breen > > PhD, Bioinformatics and Genomics > > Clinical and Experimental Sciences > > Univ. of Southampton > -- M.S. Breen PhD, Bioinformatics and Genomics Clinical and Experimental Sciences Univ. of Southampton [[alternative HTML version deleted]]
Itâs not a perfect analogy, but the end is the same: you have a negative number that represents an expression level, and that is my point. In the qPCR example, it would be because the difference between the reference and the target; in log cpm, it is because the expression is low. The reason for the log transform of the cpm is that the resulting measure has infinite support and this leads to nicer mathematical properties; otherwise you have problems near the 0 lower bound. Some the same reasons, people model log odds rather than odds. In practical terms, if Iâm looking at the results of a study and the average expression of a gene (after a voom-based analysis) is negative, I donât get as excited about that gene. With limited resources to do deeper sequencing and follow-up experiments, most people will pursue the higher expressed genes before those with cpm < 1. Of course, you should always visualize your data when you have many groups, because the expression signal could be strong in a single group, but the mean across all samples/groups is low. These are just my thoughts; others may have a different opinion! Wade From: Michael Breen [mailto:breenbioinformatics@gmail.com] Sent: Wednesday, April 02, 2014 11:33 AM To: Davis, Wade Cc: bioconductor@r-project.org Subject: Re: [BioC] Voom Normalization and negative numbers Thanks Wade, Is there not a difference when interpreting a calculated negative â between two relative measures of expression and a calculated negative log cpm for just one measure? I also believe that differential expression or correlation analysis would not be harmed by this. But I thought to get other opinons as well. Yours, Michael On Wed, Apr 2, 2014 at 3:58 PM, Davis, Wade <davisjwa@health.missouri.edu<mailto:davisjwa@health.missouri.edu>> wrote: There should be no conceptual problems with comprehending negative expression values, aside from the strange look collaborators may give you the first time they encounter it. But this is really not much different from Q-PCR experiments when the âCt level for the target gene is more abundant than the reference gene (aka housekeeping gene): you get negative numbers. Ultimately, these are measure of relative expression, unless you have done spike-ins with careful calibration. Even then, many would argue that it is still not an absolute measure. With that in mind, the scale itself is somewhat arbitrary, even if with the concept of log2 cpm. These issues would not impact the results of differential expression or correlation; they are all still valid with negative expression measures. Wade From: Michael Breen [mailto:breenbioinformatics@gmail.com<mailto:breen bioinformatics@gmail.com="">] Sent: Wednesday, April 02, 2014 6:08 AM To: Davis, Wade Cc: bioconductor@r-project.org<mailto:bioconductor@r-project.org> Subject: Re: [BioC] Voom Normalization and negative numbers Thank you for the explanation. It was in fact quite obvious. However, does there arise conceptual problems with comprehending negative expression values? We know, the cpm is somewhere between 0-1, but does the log derivative of these numbers cause any down-stream problems? Differential expression or correlation analysis for example. Michael On Tue, Apr 1, 2014 at 6:19 PM, Davis, Wade <davisjwa@health.missouri.edu<mailto:davisjwa@health.missouri.edu>> wrote: Hi Micheal, As described in the help file (?voom) the $E component of the output object contains a "numeric matrix of normalized expression values on the log2 scale". So negative values indicate low levels of (normalized) expression. Even though your filtering step filters out genes with 14 or less samples (~ half the samples) with cpm >10 you could easily get low levels of expression for any particular sample. Imagine, for a given gene, that half you samples have cpm >10 and the other half have cpm=0.1. You would expect to see the later half with negative normalized expression levels. Wade ________________________________________ From: Michael Breen [breenbioinformatics@gmail.com<mailto:breenbioinformatics@gmail.com>] Sent: Tuesday, April 01, 2014 4:12 AM To: bioconductor@r-project.org<mailto:bioconductor@r-project.org> Subject: [BioC] Voom Normalization and negative numbers Hi all, We are applying Voom normalization to RNA-Seq Counts with the following code: library(edgeR) count <- read.delim("Counts.txt", check.names=FALSE, stringsAsFactors=FALSE) targets <- read.delim("Targets.txt", check.names=FALSE, stringsAsFactors=FALSE) #filter y <- DGEList(counts=rawdata[,2:31], genes=rawdata[,1:1]) keep <- rowSums(cpm(y)>10) >= 15 y <- y[keep,] dim (y) #norm y <- calcNormFactors(y) #voom VST <- voom(y,design=NULL,plot=TRUE) voom_matrix <- cbind(VST$genes, VST\$E) write.table (voom_matrix, "VOOM_Matrix.txt", sep="\t") However, I find that even after this filtering step, I am finding negative expression values within my voom normalized matrix. Why is this? Michael -- M.S. Breen PhD, Bioinformatics and Genomics Clinical and Experimental Sciences Univ. of Southampton [[alternative HTML version deleted]] -- M.S. Breen PhD, Bioinformatics and Genomics Clinical and Experimental Sciences Univ. of Southampton -- M.S. Breen PhD, Bioinformatics and Genomics Clinical and Experimental Sciences Univ. of Southampton [[alternative HTML version deleted]]