Decompose()
decomposes additive characters into a series of binary
characters, which is mathematically equivalent when analysed under
equal weights parsimony. (This equivalence is not exact
under implied weights or under probabilistic tree inference methods.)
Value
Decompose()
returns a phyDat
object in which the specified
ordered characters have been decomposed into binary characters.
The attribute originalIndex
lists the index of the character in
dataset
to which each element corresponds.
Details
An ordered (additive) character can be rewritten as a mathematically equivalent hierarchy of binary neomorphic characters Farris1970TreeTools. Two reasons to prefer the latter approach are:
It makes explicit the evolutionary assumptions underlying an ordered character, whether the underlying ordering is linear, reticulate or branched Mabee1989TreeTools.
It avoids having to identify characters requiring special treatment to phylogenetic software, which requires the maintenance of an up-to-date log of which characters are treated as additive and which sequence their states occur in, a step that may be overlooked by re-users of the data.
Careful consideration is warranted when evaluating whether a group of related characteristics ought to be treated as ordered Wilkinson1992TreeTools. On the one hand, the 'principle of indifference' states that we should treat all transformations as equally probable (/ surprising / informative); ordered characters fail this test, as larger changes are treated as less probable than smaller ones. On the other hand, ordered characters allow more opportunities for homology of different character states, and might thus be defended under the auspices of Hennig’s Auxiliary Principle Wilkinson1992TreeTools.
For a case study of how ordering phylogenetic characters can affect phylogenetic outcomes in practice, see Brady2024;textualTreeTools.
See also
Other phylogenetic matrix conversion functions:
MatrixToPhyDat()
,
StringToPhyDat()
Examples
data("Lobo")
# Identify character 11 as additive
# Character 11 will be replaced with two characters
# The present codings 0, 1 and 2 will be replaced with 00, 10, and 11.
decomposed <- Decompose(Lobo.phy, 11)
NumberOfChars <- function(x) sum(attr(x, "weight"))
NumberOfChars(Lobo.phy) # 115 characters in original
#> [1] 115
NumberOfChars(decomposed) # 116 characters in decomposed
#> [1] 116