If I subtract input counts from ChIP counts (for every gene, since I have one peak per gene) I get negative values for most genes. This makes sense to me, because (as can be seen in the figure) input and IP have same sequencing depth but IP is very biased towards few genes with lots of counts.


Elsevier was informed that the business model which they offered does not meet the demands. How should I implement input normalization?

P.S. The subtraction idea is from Bioconductor

  • $\begingroup$ What is your goal? $\endgroup$ – Devon Ryan Jun 19 '18 at 18:37
  • $\begingroup$ My goal is to compare RNA-polII ChIP experiments between different stress conditions and different strains $\endgroup$ – aerijman Jun 19 '18 at 18:49
  • $\begingroup$ I think if you can clarify your question you will be more likely to get the help you need. $\endgroup$ – Bioathlete Jun 27 '18 at 3:03

I strongly suggest that you not try to come up with your own package for this when things like CSAW already exist in bioconductor and provide a number of useful normalization options.

For visualization purposes, I think it's best to simply take the log2 ratio (e.g., using bamCompare from deepTools) or alternatively normalize by total coverage (possibly excluding blacklist regions, if applicable for your organism).

| improve this answer | |
  • $\begingroup$ package ‘csaw’ is not available (for R version 3.4.3) I was not very precise. I am evaluating transcription initiation.I am not interested in detecting peaks. I am comparing regions around the TSSs. So far I have been simply normalizing through a spike-in dna from pombe into cerevisiae (my model organism). Any other alternative available before I try to re-invent the wheel? $\endgroup$ – aerijman Jun 29 '18 at 4:45
  • $\begingroup$ It's a bioconductor package, so follow the appropriate installation instructions. This is also appropriate for your situation. $\endgroup$ – Devon Ryan Jun 29 '18 at 6:48

If you want to compare conditions (or strains), I don't see why you need Input at all (unless you want to define intervals).

It isn't clear from you question (and subsequent comment) on what you want to achieve, but I can see 2 possible scenarios:

  1. You already have predefined intervals to test on

    In your case (Pol2-ChIP), this might be for example gene promoters. You could compare the Pol2-ChiP libraries directly using standard test for count data as established for RNA-Seq (i.e. edgeR, baySeq etc) in which the intervals are genes (as opposed to promoters or so). No need for input in this scenario, all you need are ChIP libraries for both conditions (don't forget to do replicates).

  2. You don't have predefined intervals

    You could defined them through peak calling, in this case you'd in fact need input. A nice approach for this is described in Diaz et al and implemented in deeptools. It poses an elegant method to separate the IP signal from background input, which is probably what you want I suppose. Having defined peaks, you could do scenario 1) using them as intervals.

| improve this answer | |
  • $\begingroup$ Case 1 is my scenario, nevertheless. I have been normalizing the samples with spiked-in foreign dna but I am trying to find out if the inputs make a better job. I do use limma for downstream analysis, but I try to find the best way to standardize obtaining counts from reads, minimizing the noise. $\endgroup$ – aerijman Jun 22 '18 at 23:31

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.