Hi, I have some doubts on cpm function in edgeR package. Given this initial part of the code:


    > library(edgeR)
    > data_clean<- read.table("unito.txt", header = TRUE)
    > group<-factor(c("A", "A", B","B"))
    > y <- DGEList(counts=data_clean,group=group)
    > y <- calcNormFactors(y)


I obtain different values if I calculate cpm  in this way

    > cpm <- cpm(y, log = FALSE, normalized.lib.sizes=TRUE)

Or in this one


    > cpm <- cpm(y$counts, log = FALSE, normalized.lib.sizes=TRUE)


Why are them different? What does it change? What is the correct way to calculate them?  I noticed that if I calculate them with the standard formula "by hand", I obtain the same values as the second formula (y$counts). In the edge manual it seems just to use the y argument.

Thank you,
Francesca

This is normal and expected. If you use the first chunk the function will use the `norm.factors` from `calcNormFactors` to correct the counts for both library size **and** composition, see [this][1] video for the theory of library normalization.

With the second chunk of code you are providing only the count matrix so the function has no `norm.factors` therefore only correct per-million so for library size. That is why this matches with your `by hand` calculation.

The first method is the one you should use.


  [1]: https://www.youtube.com/watch?v=Wdt6jdi-NQo