`pratchet`

implements the parsimony ratchet (Nixon, 1999) and is the
preferred way to search for the best parsimony tree. For small number of taxa
the function `bab`

can be used to compute all most parsimonious
trees.

## Usage

```
acctran(tree, data)
fitch(tree, data, site = "pscore")
random.addition(data, tree = NULL, method = "fitch")
parsimony(tree, data, method = "fitch", cost = NULL, site = "pscore")
optim.parsimony(tree, data, method = "fitch", cost = NULL, trace = 1,
rearrangements = "SPR", ...)
pratchet(data, start = NULL, method = "fitch", maxit = 1000,
minit = 100, k = 10, trace = 1, all = FALSE,
rearrangements = "SPR", perturbation = "ratchet", ...)
sankoff(tree, data, cost = NULL, site = "pscore")
```

## Arguments

- tree
tree to start the nni search from.

- data
A object of class phyDat containing sequences.

- site
return either 'pscore' or 'site' wise parsimony scores.

- method
one of 'fitch' or 'sankoff'.

- cost
A cost matrix for the transitions between two states.

- trace
defines how much information is printed during optimization.

- rearrangements
SPR or NNI rearrangements.

- ...
Further arguments passed to or from other methods (e.g. model="sankoff" and cost matrix).

- start
a starting tree can be supplied.

- maxit
maximum number of iterations in the ratchet.

- minit
minimum number of iterations in the ratchet.

- k
number of rounds ratchet is stopped, when there is no improvement.

- all
return all equally good trees or just one of them.

- perturbation
whether to use "ratchet", "random_addition" or "stochastic" (nni) for shuffling the tree.

## Value

`parsimony`

returns the maximum parsimony score (pscore).
`optim.parsimony`

returns a tree after NNI rearrangements.
`pratchet`

returns a tree or list of trees containing the best tree(s)
found during the search. `acctran`

returns a tree with edge length
according to the ACCTRAN criterion.

## Details

`parsimony`

returns the parsimony score of a tree using either the
sankoff or the fitch algorithm.
`optim.parsimony`

optimizes the topology using either Nearest Neighbor
Interchange (NNI) rearrangements or sub tree pruning and regrafting (SPR) and
is used inside `pratchet`

. `random.addition`

can be used to produce
starting trees and is an option for the argument perturbation in
`pratchet`

.

The "SPR" rearrangements are so far only available for the "fitch" method, "sankoff" only uses "NNI". The "fitch" algorithm only works correct for binary trees.

## References

Felsenstein, J. (2004). *Inferring Phylogenies*. Sinauer
Associates, Sunderland.

Nixon, K. (1999) The Parsimony Ratchet, a New Method for Rapid Parsimony
Analysis. *Cladistics* **15**, 407-414

## See also

`bab`

, `CI`

, `RI`

,
`ancestral.pml`

, `nni`

, `NJ`

,
`pml`

, `getClans`

, `ancestral.pars`

,
`bootstrap.pml`

## Author

Klaus Schliep klaus.schliep@gmail.com

## Examples

```
set.seed(3)
data(Laurasiatherian)
dm <- dist.hamming(Laurasiatherian)
tree <- NJ(dm)
parsimony(tree, Laurasiatherian)
#> [1] 9796
treeRA <- random.addition(Laurasiatherian)
treeSPR <- optim.parsimony(tree, Laurasiatherian)
#> Final p-score 9715 after 11 nni operations
# lower number of iterations for the example (to run less than 5 seconds),
# keep default values (maxit, minit, k) or increase them for real life
# analyses.
treeRatchet <- pratchet(Laurasiatherian, start=tree, maxit=100,
minit=5, k=5, trace=0)
# assign edge length (number of substitutions)
treeRatchet <- acctran(treeRatchet, Laurasiatherian)
# remove edges of length 0
treeRatchet <- di2multi(treeRatchet)
plot(midpoint(treeRatchet))
add.scale.bar(0,0, length=100)
parsimony(c(tree,treeSPR, treeRatchet), Laurasiatherian)
#> [1] 9796 9715 9713
```