Among the list of phytools functions that may sometimes be overlooked,
I'd like to mention the simple but neat density S3 method for
the phytools object class "multiSimmap".
The function computes (and an associated plot method graphs)
a posterior density on the number of changes between states for the
character across our sample of stochastic character maps. The following
is a short demo of how that looks.
First, here are some data & a tree:
library(phytools)
tree
##
## Phylogenetic tree with 150 tips and 149 internal nodes.
##
## Tip labels:
## t23, t50, t51, t72, t73, t102, ...
##
## Rooted; includes branch lengths.
x
## t23 t50 t51 t72 t73 t102 t103 t93 t64 t94 t95 t11 t19 t89 t90
## a a a a a a a a a a a b a a a
## t3 t54 t55 t56 t81 t82 t27 t57 t91 t92 t38 t39 t37 t47 t145
## a a a a b b b b a b b b b b b
## t146 t2 t24 t58 t59 t60 t61 t123 t124 t6 t42 t43 t100 t101 t16
## b b a a a a a b b a a b a b a
## t8 t9 t7 t74 t75 t69 t143 t144 t41 t132 t133 t1 t129 t130 t35
## a b a a a a b b a b b b b b b
## t36 t31 t65 t119 t120 t118 t87 t52 t53 t108 t109 t141 t142 t20 t21
## b b b a b b b b b a a b b a b
## t25 t26 t45 t46 t104 t105 t98 t99 t30 t83 t84 t138 t139 t106 t107
## a a a a a a a a a a a a a a a
## t85 t86 t71 t12 t67 t68 t62 t63 t28 t29 t33 t34 t136 t137 t125
## a a b a a a a a b b a a b b a
## t126 t10 t4 t5 t17 t18 t114 t115 t22 t127 t128 t96 t97 t70 t147
## a a b a a a a a a a a a a a a
## t148 t131 t48 t32 t79 t80 t66 t116 t117 t88 t112 t113 t49 t121 t122
## a a a a a a b b b b b b b b b
## t44 t76 t77 t110 t111 t13 t14 t140 t149 t150 t78 t134 t135 t40 t15
## b b b b b b b a a a a a a a b
## Levels: a b
Now, let's undertake our stochastic mapping:
mtrees<-make.simmap(tree,x,nsim=500,model="ARD")
## make.simmap is sampling character histories conditioned on the transition matrix
##
## Q =
## a b
## a -0.8282081 0.8282081
## b 0.9020183 -0.9020183
## (estimated using likelihood);
## and (mean) root node prior probabilities
## pi =
## a b
## 0.5 0.5
## Done.
mtrees
## 500 phylogenetic trees with mapped discrete characters
Finally, we'll use our density method:
d<-density(mtrees)
d
##
## Distribution of changes from stochastic mapping:
## a->b b->a
## Min. :10 Min. :3
## Median :20 Median :10
## Mean :19.38 Mean :10.64
## Max. :28 Max. :23
##
## 95% HPD interval(a->b): [13, 24]
## 95% HPD interval(b->a): [4, 17]
par(family="mono")
plot(d)
Just for interest, the tree & data were simulated as follows:
library(phytools)
Q<-matrix(c(-0.8,0.8,0.4,-0.4),2,2,byrow=TRUE)
rownames(Q)<-colnames(Q)<-letters[1:2]
tree<-pbtree(n=150,scale=1)
x<-sim.Mk(tree,Q)
No comments:
Post a Comment
Note: due to the very large amount of spam, all comments are now automatically submitted for moderation.