peakScoring {nucleR} | R Documentation

## Peak scoring function

### Description

Scores peaks detected with function `peakDetection` according the height and the sharpness (width) of the peak. This function can be called automatically from `peakDetection` if `score=TRUE`.

### Usage

    peakScoring(peaks, data, threshold = 0.25, ...)

    ## S4 method for signature 'list'
    peakScoring(peaks, data, threshold = "25%", mc.cores = 1)

    ## S4 method for signature 'IRangesList'
    peakScoring(
      peaks,
      data,
      threshold = "25%",
      weight.width = 1,
      weight.height = 1,
      dyad.length = 38,
      mc.cores = 1
    )

    ## S4 method for signature 'numeric'
    peakScoring(peaks, data, chromosome = NULL, threshold = "25%")

    ## S4 method for signature 'IRanges'
    peakScoring(
      peaks,
      data,
      chromosome = NULL,
      threshold = "25%",
      weight.width = 1,
      weight.height = 1,
      dyad.length = 38
    )

### Arguments

`peaks` | The identified peaks resulting from `peakDetection`. Could be a `numeric` vector with the position of the peaks, or a `IRanges` object with the extended range of the peak. For both types, list support is implemented as a `numeric` list or a `IRangesList`
`data` | Data of nucleosome coverage or intensites.
`threshold` | The non-default `threshold` previously used in `peakDetection` function, if applicable. Can be given as a percentage string (i.e., `"25\\%"` will use the value in the 1st quantile of `data`) or as an absolute coverage numeric value (i.e., `20` will not look for peaks in regions without less than 20 reads (or reads per million)).
`...` | Further arguments to be passed to or from other methods.
`mc.cores` | If input is a `list` or `IRangeList`, and multiple cores support is available, the maximum number of cores for parallel processing.
`weight.height, weight.width` | If the score is a range, the height and the widht score (coverage and fuzzynes) can be defined with different weigths with these parameters. See details.
`dyad.length` | How many bases account in the nucleosome dyad for sharpness description. If working with NGS data, works best with the reads width value for single-ended data or the `trim` value given to the `processReads` function.
`chromosome` | Optionally specify the name of the chromosome for input data that doesn't specify it.

### Details

This function scores each previously identified peak according its height and sharpness.

The height score (`score_h`) tells how large is a peak, higher means more coverage or intensity, so better positioned nucleosome. This score is obtained by checking the observed peak value in a Normal distribution with the mean and sd of `data`. This value is between 0 and 1.

The width score (`score_w`) is a mesure of how sharp is a peak. With a NGS coverage in mind, a perfect phased (well-positioned) nucleosome is this that starts and ends exactly in the same place many times. The shape of this ideal peak will be a rectangular shape of the lenght of the read. A wider top of a peak could indicate fuzzyness. The parameter `dyad.length` tells how long should be the "flat" region of an ideal peak. The optimum value for this parameter is the lenght of the read in single-ended data or the `trim` value of the function `processReads`. For Tiling Arrays, the default value should be fine.

This score is obtained calculating the ratio between the mean of the nucleosome scope (the one provided by range in the elements of `peaks`) and the `dyad.length` central bases. This value is normalized between 0 and 1.

For punctual, single points peaks (provided by `numeric` vector or list as `peaks` attribute) the score returned is the height score.

For range `peaks` the weighted sum of the heigth and width scores is used. This is: `((score_h * weigth.height) / sum.wei) + ((score_w * weigth.width) / sum.wei)`. Note that you can query for only one score by setting its weight to 1 and the other to 0.

### Value

In the case of `numeric` input, the value returned is a `data.frame` containing a 'peak' and a 'score' column. If the input is a `list`, the result will be a `list` of `data.frame`.

If input is a `IRanges` or `IRangesList`, the result will be a `data.frame` or GenomicRanges::GRanges object with one or multiple spaces respectively and a 3 data column with the mixed, width and heigh score.

### Author(s)

Oscar Flores oflores@mmb.cpb.ub.es

### See Also

`peakDetection()`, `processReads()`,

### Examples

    # Generate a synthetic map

    # Trimmed length nucleosome map
    map <- syntheticNucMap(nuc.len=40, lin.len=130)

    # Get the information of dyads and the coverage
    peaks <- c(map$wp.starts, map$fz.starts)
    cover <- filterFFT(coverage.rpm(map$syn.reads))

    # Calculate the scores
    scores <- peakScoring(peaks, cover)
    plotPeaks(scores$peak, cover, scores=scores$score, start=5000, end=10000)

[Package nucleR version 2.26.0 Index]