count_transitions_between_clades {castor} | R Documentation |

Given a rooted phylogenetic tree, one or more pairs of tips and/or nodes, and the state of some discrete trait at each tip and node, calculate the number of state transitions along the shortest path between each pair of tips/nodes.

count_transitions_between_clades(tree, A, B, states, check_input=TRUE)

`tree` |
A rooted tree of class "phylo". The root is assumed to be the unique node with no incoming edge. |

`A` |
An integer vector or character vector of size Npairs, specifying the first of the two members of each pair of tips/nodes. If an integer vector, it must list indices of tips (from 1 to Ntips) and/or nodes (from Ntips+1 to Ntips+Nnodes). If a character vector, it must list tip and/or node names. |

`B` |
An integer vector or character vector of size Npairs, specifying the second of the two members of each pair of tips/nodes. If an integer vector, it must list indices of tips (from 1 to Ntips) and/or nodes (from Ntips+1 to Ntips+Nnodes). If a character vector, it must list tip and/or node names. |

`states` |
Integer vector of length Ntips+Nnodes, listing the discrete state of each tip and node in the tree. The order of entries must match the order of tips and nodes in the tree; this requirement is only verified if |

`check_input` |
Logical, whether to perform basic validations of the input data. If you know for certain that your input is valid, you can set this to |

The discrete state must be represented by integers (both negatives and positives are allowed); characters and other data types are not allowed. If tip/node states are originally encoded as characters rather than integers, you can use `map_to_state_space`

to convert these to integers (for example “`male`

” & “`female`

” may be represented as 1 & 2). Also note that a state must be provided for each tip and ancestral node, not just for the tips. If you only know the states of tips, you can use an ancestral state reconstruction tool to estimate ancestral states first.

The tree may include multi-furcations as well as mono-furcations (i.e. nodes with only one child). If `A`

and/or `B`

is a character vector, then `tree$tip.label`

must exist. If node names are included in `A`

and/or `B`

, then `tree$node.label`

must also exist.

An integer vector of size Npairs, with the i-th element being the number of state transitions between tips/nodes `A[i]`

and `B[i]`

(along their shortest connecting path).

Stilianos Louca

# generate a random tree Ntips = 100 tree = generate_random_tree(list(birth_rate_intercept=1),Ntips)$tree # pick 3 random pairs of tips or nodes Npairs = 3 A = sample.int(n=(Ntips+tree$Nnode), size=Npairs, replace=FALSE) B = sample.int(n=(Ntips+tree$Nnode), size=Npairs, replace=FALSE) # assign a random state to each tip & node in the tree # consider a binary trait states = sample.int(n=2, size=Ntips+tree$Nnode, replace=TRUE) # calculate number of transitions for each tip pair Ntransitions = count_transitions_between_clades(tree, A, B, states=states)

[Package *castor* version 1.6.7 Index]