1. Home
  2. PEAKFINDER procedure

PEAKFINDER procedure

Finds the locations of peaks in an observed series (D.B. Baird).


PRINT = string token Controls printed output (peaks); default peak
CURVE = string token Shape of curve to fit to peaks (normal, exponential); default norm
PLOT = string tokens What to plot (peaks, trace); default peak
METHOD = string token The method for finding the peaks (additive, local); default addi
BANDWIDTH = scalar Width of window to use when fitting peaks locally, or the number of low points at the edge of each zone when fitting peaks additively; default takes the number of points divided by ten, or six if this is greater
MINPEAK = scalar Minimum height of a peak; no default (must be set)
MINGAP = scalar Minimum number of points between two peaks when METHOD=additive; default 5
MINFALL = scalar Minimum fall around a peak before a new peak will be found when METHOD=additive; default MINPEAK/10
MINCOHERENCY = scalar Minimum coherency (i.e. proportion of variation explained) for a peak to be selected when METHOD=local; default 0.1
MAXSIGMA = scalar The maximum value of sigma for peaks when METHOD=local; default 4*BANDWIDTH
MAXRESIDUAL = scalar Limit on the absolute size of any residual for the adding of peaks to stop when METHOD=additive; default MINPEAK/3
WINDOW = scalar Window number for the plots; default 3
SCREEN = string token Whether to clear the screen before plotting or continue plotting on the old screen (clear, keep); default clea


Y = variates Series to search for peaks
X = variates X-coordinates for the series; default !(1...n) where n is the number of Y values
YPEAKS = variates Saves the y-values of the peaks
XPEAKS = variates Saves the positions of the peaks
FITTEDYPEAKS = variates Saves the heights of the peaks predicted by the fitted models
SIGMA = variates Saves the sigma values of the fitted Normal or exponential models, which provide a measure of the widths of the peaks
COHERENCY = variates Saves the coherency (i.e. the proportion of variation accounted for) of the model fitted to identify each peak model
TITLE = texts Titles for the plots


PEAKFINDER looks for peaks in a series of observations supplied, in a variate, by the Y parameter. The X parameter can supply a variate specifying x-values for the series; if this is not set, these are assumed to be the integers 1…n, where n is the number of values in Y.

The peaks are found by fitting curves to the y-values, as specified by setting of the CURVE option:

    normal fits a Normal curves EXP(-0.5*((X-p)/sigma)**2)
    exponential fits exponential curves EXP(-ABS(X-p)/sigma)

where p is the location of the peak, and sigma is a measure of its width.

The METHOD option controls how the peaks are fitted. With the default setting, additive, PEAKFINDER looks to see whether the series can be divided into separate zones. The criterion is that these must be separated by 2×b y-values of size less than m/2, where the value b is defined by the BANDWIDTH option, and m is defined by the MINPEAK option. MINPEAK must be set, while BANDWIDTH has a default of n/10, or 6 if n is less than 60. Then, in each zone, PEAKFINDER starts by fitting a single curve. If the maximum absolute residual from that fit is greater than the value specified by the MAXRESIDUAL option, it adds another curve. (So the model for Y in that zone is now the sum of two curves.) If the maximum absolute residual from the model is still greater than MAXRESIDUAL, it adds another curve. This continues until either the residuals are all less than MAXRESIDUAL, or the model contains ten curves. The success of the procedure depends on the value of MAXRESIDUAL. The default value is MINPEAK divided by three. Smaller values allow more complicated patterns of peaks to be identified, but may slow the procedure down and cause convergence problems. Two very close peaks can be generated with this method, when the shape of the peak does not follow that specified by the CURVE option. A second additive component at a close location but with a different value of sigma may then be added to provide a better fit to the shape of the peak. The MINGAP and MINFALL options attempt to control this behaviour, and ensure that only a single peak is given. The MINGAP option sets a lower limit on the number of points between any two peaks (default 5), and the MINFALL option sets a lower limit on the fall in y-values between peaks (default MINPEAK/10).

With the alternative setting, METHOD=local, PEAKFINDER fits the specified curve locally around each x-value in turn. The size of the local window for the fit is defined by the BANDWIDTH option, and can be sensitive to the value that is chosen. So this may need to be varied to tune the peak finding process. Ideally it should be equal to the width of the anticipated peaks. The MAXSIGMA option sets an upper limit on the value of sigma for a curve if the corresponding peak is to be accepted (default 4*BANDWIDTH), and the MINCOHERENCY option sets a limit on its coherency i.e. the proportion of variation of Y that the curve accounts for (default 0.1). Increasing MINCOHERENCY requires the peaks to conform more closely to the chosen shape, while increasing MAXSIGMA allows broader and flatter peaks to be found. This method will find only one peak in any area, unless there is valley or flat area of size at least BANDWIDTH between the peaks.

You can set option PRINT=peaks to print the peak locations, the corresponding y-values, their fitted heights, sigma values and coherency. These can also be saved using the XPEAKS, YPEAKS, FITTEDYPEAKS, SIGMA and COHERENCY parameters.

The PLOT option controls the graphs that are displayed, with settings:

    peaks to plot the fitted peaks, with a horizontal blue line showing the minimum peak height,
    trace to plot the components of the fitted model.

The WINDOW option specifies the window to use for the plots (default 3). The SCREEN option controls whether or not to clear the screen first (default clear). Note, however, that SCREEN is not used with PLOT=trace. You can supply a title for the plots using the TITLE parameter.



Action with RESTRICT

Any restrictions on the Y variate are ignored.

See also


Commands for: Calculations and manipulation.


CAPTION    'PEAKFINDER examples'; STYLE=meta
SET        [SEED=8174943]
SCALAR     N,NP,S; VALUE=1000,10,30 "Number of points & peaks and sigma"
CALCULATE  Peak = GRUNIFORM(NP; 0; N) "Random peak positions and amplitude"
&          Amp  = GRUNIFORM(NP; 0.2; 1)
&          P[1...NP] = #Amp*EXP(-0.5*(((X-#Peak)/S)**2)) 
&          YNorm = VSUM(P) + GRUNIFORM(N; 0; 0.2) "Sum Normal peaks"
&          P[1...NP] = #Amp*EXP(-ABS(X-#Peak)/S)
&          YExp = VSUM(P) + GRUNIFORM(N; 0; 0.2)  "Sum Exponential peaks"
PEAKFINDER [PLOT=peaks,trace; METHOD=local; CURVE=normal; BANDWIDTH=60;\
           MINPEAK=0.5] YNorm; TITLE='Normal curve, METHOD=local'
PEAKFINDER [PLOT=peaks,trace;METHOD=additive; CURVE=normal;BANDWIDTH=60;\
           MINPEAK=0.5] YNorm; TITLE='Normal curve, METHOD=additive'
PEAKFINDER [PLOT=peaks,trace; METHOD=local; CURVE=exponential; BANDWIDTH=60;\
           MINPEAK=0.5] YExp; TITLE='Exponential curve, METHOD=local'
PEAKFINDER [PLOT=peaks,trace; METHOD=additive; CURVE=exponential; BANDWIDTH=60;\
           SIGMA=WD; COHERENCY=CH; TITLE='Exponential curve, METHOD=additive'
Updated on March 6, 2019

Was this article helpful?