Fast, optimal, and reproducible weighted univariate
clustering by dynamic programming. Four problem are solved, including
univariate k-means (Wang & Song 2011) <doi:10.32614/RJ-2011-015>
(Song & Zhong 2020) <doi:10.1093/bioinformatics/btaa613>, k-median,
k-segments, and multi-channel weighted k-means. Dynamic programming
is used to minimize the sum of (weighted) within-cluster distances
using respective metrics. Its advantage over heuristic clustering in
efficiency and accuracy is pronounced at a large number of clusters.
Weighted k-means can also process time series to perform peak
calling. Multi-channel weighted k-means groups multiple univariate
signals into k clusters. An auxiliary function generates histograms
adaptive to patterns in data. This package provides a powerful set
of tools for univariate data analysis with guaranteed optimality,
efficiency, and reproducibility.

Fast, optimal, and reproducible weighted univariate
clustering by dynamic programming. Four problems are solved, including
univariate k-means (Wang & Song 2011) <doi:10.32614/RJ-2011-015>
(Song & Zhong 2020) <doi:10.1093/bioinformatics/btaa613>, k-median,
k-segments, and multi-channel weighted k-means. Dynamic programming
is used to minimize the sum of (weighted) within-cluster distances
using respective metrics. Its advantage over heuristic clustering in
efficiency and accuracy is pronounced at a large number of clusters.
Multi-channel weighted k-means groups multiple univariate
signals into k clusters. An auxiliary function generates histograms
adaptive to patterns in data. This package provides a powerful set
of tools for univariate data analysis with guaranteed optimality,
efficiency, and reproducibility, useful for peak calling on temporal,
spatial, and spectral data.

Measuring Morphological Diversity and Evolutionary Tempo
Measures morphological diversity from discrete character data and estimates evolutionary tempo on phylogenetic trees.

c(
person(given = "Graeme T.", family = "Lloyd",
email = "graemetlloyd@gmail.com", role = c("aut", "cre", "cph")),
person(given = "Thomas", family = "Guillerme", role = c("aut", "cph")),
person(given = "Emma", family = "Sherratt", role = c("aut", "cph")),
person(given = "Steve C.", family = "Wang", role = c("aut", "cph"))
)
gdata, graphics, grDevices, stats, utils
Measures morphological diversity from discrete character data and
estimates evolutionary tempo on phylogenetic trees. Imports morphological
data from #NEXUS (Maddison et al. (1997) <doi:10.1093/sysbio/46.4.590>)
format with ReadMorphNexus(), and writes to both #NEXUS and TNT format
(Goloboff et al. (2008) <doi:10.1111/j.1096-0031.2008.00217.x>). Main
functions are DiscreteCharacterRate(), which implements likelihood ratio
tests for discrete character rates introduced across Lloyd et al. (2012)
<doi:10.1111/j.1558-5646.2011.01460.x>, Brusatte et al. (2014)
<doi:10.1016/j.cub.2014.08.034>, Close et al. (2015)
<doi:10.1016/j.cub.2015.06.047>, and Lloyd (2016) <doi:10.1111/bij.12746>,
and MorphDistMatrix(), which implements multiple discrete character
distance metrics from Gower (1971) <doi:10.2307/2528823>, Wills (1998)
<doi:10.1006/bijl.1998.0255>, Lloyd (2016) <doi:10.1111/bij.12746>, and
Hopkins and St John (2018) <doi:10.1098/rspb.2018.1784>. Multiple functions
implement various morphospace plots: ChronoPhyloMorphospacePlot() implements
Sakamoto and Ruta (2012) <doi:10.1371/journal.pone.0039752>,
MorphospacePlot() implements Wills et al. (1994)
<doi:10.1017/S009483730001263X>, PlotCharacterChanges() implements Wang and
Lloyd (2016) <doi:10.1098/rspb.2016.0214>, and StackPlot() implements Foote
(1993) <doi:10.1017/S0094837300015864>. Other functions include
SafeTaxonomicReduction(), which implements Wilkinson (1995)
<doi:10.1093/sysbio/44.4.501>, and DolloSCM() implements the Dollo
stochastic character mapping of Tarver et al. (2018)
<doi:10.1093/gbe/evy096>.
Graeme T. Lloyd [aut, cre, cph],
Thomas Guillerme [aut, cph],
Emma Sherratt [aut, cph],
Steve C. Wang [aut, cph]