Hi everyone I have some values of intensities from images of yeast colony plates. I need to be able to find the peak values from the intensity values. Below is an example image showing how the values look when graphed.
Example of some of the values
5.7 5.3 8.2 16.5 34.2 58.8 **75.4** 75 65.9 62.6 58.6 66.4 71.4 53.5 40.5 26.8 14.2 8.6 5.9 7.7 14.9 30.5 49.9 69.1 **75.3** 69.8 58.8 57.2 56.3 67.1 69 45.1 27.6 13.4 8 5
These values show two peaks at 75.4 and 75.3, you can see that the values increase then decrease. The change is not always the same.
Graph of intensity values
http://lh4.ggpht.com/_aEDyS6ECO8s/THKTLgDPhaI/AAAAAAAAAio/HQW7Ut-HBhA/s400/peaks.pngFrom researchOne of the things that I am thinking of doing is to store each of the groups i.e. mountains in a hash then look for the largest value in a group. One if the issues that I am seeing though is how to determine the boundaries of each of the groups.
Here is a link to the code that I have so far: http://paste-it.net/public/y485822/
Here is a link to a complete data set: http://paste-it.net/public/ub121b4/
I am writing my code in Perl. Any help would be greatly appreciated. Thank you
Note that this considers the first value a local maximum, and also the values 71.4 and 69. I'm not sure how you are distinguishing which ones you want included.
You need to decide how local you want the peaks to be. The approach here finds peaks and troughs within broad regions of the data.
}
Output:
Do you have a control data set? If so, I'd recommend normalizing your data using say, a simple log ratio between yeast intensities and control images.
You could then use the perl port of ChiPOTle to grab the significant peaks, which sounds way more robust than searching local/global maxima, etc.
ChiPOTle "is a peak-finding algorithm used to analyze ChIP-chip microarray data", but I've used it successfully in many other applications (like ChIP-seq, which admittedly is closer to its original purpose than in your case).
The resulting log(yeast/control) negative values would be used to build a Gaussian background model for significance estimation. The algorithm then uses the false-discovery rate for multiple testing correction.
Here's the original paper.