compare_motifs {universalmotif} | R Documentation

## Compare motifs.

### Description

Compare motifs using any of several available metrics. See the "Motif comparisons and P-values" vignette for detailed information.

### Usage

    compare_motifs(motifs, compare.to, db.scores, use.freq = 1,
      use.type = "PPM", method = "ALLR", tryRC = TRUE, min.overlap = 6,
      min.mean.ic = 0.25, min.position.ic = 0, relative_entropy = FALSE,
      normalise.scores = FALSE, max.p = 0.01, max.e = 10,
      progress = FALSE, BP = FALSE, nthreads = 1,
      score.strat = "a.mean", output.report, output.report.max.print = 10)

### Arguments

`motifs` | See `convert_motifs()` for acceptable motif formats.
`compare.to` | `numeric` If missing, compares all motifs to all other motifs. Otherwise compares all motifs to the specified motif(s).
`db.scores` | `data.frame` or `DataFrame`. See `details`.
`use.freq` | `numeric(1)`. For comparing the `multifreq` slot.
`use.type` | `character(1)` One of `'PPM'` and `'ICM'`. The latter allows for taking into account the background frequencies if `relative_entropy = TRUE`. Note that `'ICM'` is not allowed when `method = c(ALLR, ALLR_LL)`.
`method` | `character(1)` One of PCC, EUCL, SW, KL, ALLR, BHAT, HELL, SEUCL, MAN, ALLR_LL, WEUCL, WPCC. See details.
`tryRC` | `logical(1)` Try the reverse complement of the motifs as well, report the best score.
`min.overlap` | `numeric(1)` Minimum overlap required when aligning the motifs. Setting this to a number higher then the width of the motifs will not allow any overhangs. Can also be a number less than 1, representing the minimum fraction that the motifs must overlap.
`min.mean.ic` | `numeric(1)` Minimum mean information content between the two motifs for an alignment to be scored. This helps prevent scoring alignments between low information content regions of two motifs.
`min.position.ic` | `numeric(1)` Minimum information content required between individual alignment positions for it to be counted in the final alignment score. It is recommended to use this together with `normalise.scores = TRUE`, as this will help punish scores resulting from only a fraction of an alignment.
`relative_entropy` | `logical(1)` Change the ICM calculation affecting `min.position.ic` and `min.mean.ic`. See `convert_type()`.
`normalise.scores` | `logical(1)` Favour alignments which leave fewer unaligned positions, as well as alignments between motifs of similar length. Similarity scores are multiplied by the ratio of aligned positions to the total number of positions in the larger motif, and the inverse for distance scores.
`max.p` | `numeric(1)` Maximum P-value allowed in reporting matches. Only used if `compare.to` is set.
`max.e` | `numeric(1)` Maximum E-value allowed in reporting matches. Only used if `compare.to` is set. The E-value is the P-value multiplied by the number of input motifs times two.
`progress` | `logical(1)` Deprecated. Does nothing.
`BP` | `logical(1)` Deprecated. See `nthreads`.
`nthreads` | `numeric(1)` Run `compare_motifs()` in parallel with `nthreads` threads. `nthreads = 0` uses all available threads.
`score.strat` | `character(1)` How to handle column scores calculated from motif alignments. "sum": add up all scores. "a.mean": take the arithmetic mean. "g.mean": take the geometric mean. "median": take the median. "wa.mean", "wg.mean": weighted arithmetic/geometric mean. "fzt": Fisher Z-transform. Weights are the total information content shared between aligned columns.
`output.report` | `character(1)` Provide a filename for `compare_motifs()` to write an html ouput report to. The top matches are shown alongside figures of the match alignments. This requires the `knitr` and `rmarkdown` packages. (Note: still in development.)
`output.report.max.print` | `numeric(1)` Maximum number of top matches to print.

### Details

The following metrics are available:

- Euclidean distance (`EUCL`) (Choi et al. 2004)

- Weighted Euclidean distance (`WEUCL`)

- Kullback-Leibler divergence (`KL`) (Kullback and Leibler 1951; Roepcke et al. 2005)

- Hellinger distance (`HELL`) (Hellinger 1909)

- Squared Euclidean distance (`SEUCL`)

- Manhattan distance (`MAN`)

- Pearson correlation coefficient (`PCC`)

- Weighted Pearson correlation coefficient (`WPCC`)

- Sandelin-Wasserman similarity (`SW`), or sum of squared distances (Sandelin and Wasserman 2004)

- Average log-likelihood ratio (`ALLR`) (Wang and Stormo 2003)

- Lower limit ALLR (`ALLR_LL`) (Mahony et al. 2007)

- Bhattacharyya coefficient (`BHAT`) (Bhattacharyya 1943)

Comparisons are calculated between two motifs at a time. All possible alignments are scored, and the best score is reported. In an alignment scores are calculated individually between columns. How those scores are combined to generate the final alignment scores depends on `score.strat`.

See the "Motif comparisons and P-values" vignette for a description of the various metrics. Note that PCC, WPCC, SW, ALLR, ALLR_LL and BHAT are similarities; higher values mean more similar motifs. For the remaining metrics, values closer to zero represent more similar motifs.

Small pseudocounts are automatically added when one of the following methods is used: KL, ALLR, ALLR_LL. This is avoid zeros in the calculations.

To note regarding p-values: P-values are pre-computed using the `make_DBscores()` function. If not given, then uses a set of internal precomputed P-values from the JASPAR2018 CORE motifs. These precalculated scores are dependent on the length of the motifs being compared; this takes into account that comparing small motifs with larger motifs leads to higher scores, since the probability of finding a higher scoring alignment is higher.

The default P-values have been precalculated for regular DNA motifs; they are of little use for motifs with a different number of alphabet letters (or even the `multifreq` slot).

### Value

`matrix` if `compare.to` is missing; `DataFrame` otherwise. For the latter, function args are stored in the `metadata` slot.

### Author(s)

Benjamin Jean-Marie Tremblay, b2tremblay@uwaterloo.ca

### References

Bhattacharyya A (1943). “On a measure of divergence between two statistical populations defined by their probability distributions.” Bulletin of the Calcutta Mathematical Society, 35, 99–109.

Choi I, Kwon J, Kim S (2004). “Local feature frequency profile: a method to measure structural similarity in proteins.” PNAS, 101, 3797–3802.

Hellinger E (1909). “Neue Begrundung der Theorie quadratischer Formen von unendlichvielen Veranderlichen.” Journal fur die reine und angewandte Mathematik, 136, 210–271.

Khan A, Fornes O, Stigliani A, Gheorghe M, Castro-Mondragon J, van der Lee R, Bessy A, Cheneby J, Kulkarni SR, Tan G, Baranasic D, Arenillas D, Sandelin A, Vandepoele K, Lenhard B, Ballester B, Wasserman W, Parcy F, Mathelier A (2018). “JASPAR 2018: update of the open-access database of transcription factor binding profiles and its web framework.” Nucleic Acids Research, 46, D260-D266.

Kullback S, Leibler RA (1951). “On information and sufficiency.” The Annals of Mathematical Statistics, 22, 79-86.

Itakura F, Saito S (1968). “Analysis synthesis telephony based on the maximum likelihood method.” In 6th International Congress on Acoustics, C-17–C-20.

Mahony S, Auron P, Benos P (2007). “DNA Familial Binding Profiles Made Easy: Comparison of Various Motif Alignment and Clustering Strategies.” PLoS Computational Biology, 3(3), e61.

Pietrokovski S (1996). “Searching databases of conserved sequence regions by aligning protein multiple-alignments.” Nucleic Acids Research, 24, 3836–3845.

Roepcke S, Grossmann S, Rahmann S, Vingron M (2005). “T-Reg Comparator: an analysis tool for the comparison of position weight matrices.” Nucleic Acids Research, 33, W438–W441.

Sandelin A, Wasserman W (2004). “Constrained binding site diversity within families of transcription factors enhances pattern discovery bioinformatics.” Journal of Molecular Biology, 338(2), 207–215.

Wang T, Stormo G (2003). “Combining phylogenetic data with co-regulated genes to identify motifs.” Bioinformatics, 19(18), 2369–2380.

### See Also

`convert_motifs()`, `motif_tree()`, `view_motifs()`, `make_DBscores()`

### Examples

    motif1 <- create_motif()
    motif2 <- create_motif()
    motif1vs2 <- compare_motifs(list(motif1, motif2), method = "PCC")
    ## to get a dist object:
    as.dist(1 - motif1vs2)

[Package universalmotif version 1.4.10 Index]