From f507bf916301e1670902ccd9f5254ec44310466d Mon Sep 17 00:00:00 2001 From: James-Thorson-NOAA Date: Thu, 1 Feb 2024 19:51:28 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20James-Th?= =?UTF-8?q?orson-NOAA/phylosem@9027c4d2c0a31e20bc5512d2332bd3668494cf7a=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- articles/comparison.html | 28 +++++++++--------- .../figure-html/unnamed-chunk-4-1.png | Bin 54931 -> 57111 bytes pkgdown.yml | 2 +- search.json | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/articles/comparison.html b/articles/comparison.html index d2dae2d..463ad32 100644 --- a/articles/comparison.html +++ b/articles/comparison.html @@ -166,7 +166,7 @@

Comparison with phylolmstart_time = Sys.time() plm_bm = phylolm::phylolm(y ~ 1 + x, data=Data, phy=tree, model="BM" ) Sys.time() - start_time -#> Time difference of 0.006282568 secs +#> Time difference of 0.006439447 secs knitr::kable(summary(plm_bm)$coefficients, digits=3) @@ -201,7 +201,7 @@

Comparison with phylolm tree = tree, control = phylosem_control(quiet = TRUE) ) Sys.time() - start_time -#> Time difference of 0.2023404 secs +#> Time difference of 0.196418 secs knitr::kable(summary(psem_bm)$coefficients, digits=3)

@@ -261,7 +261,7 @@

Comparison with phylolmstart_time = Sys.time() plm_ou = phylolm::phylolm(y ~ 1 + x, data=Data, phy=tree, model="OUrandomRoot" ) Sys.time() - start_time -#> Time difference of 0.01971412 secs +#> Time difference of 0.02001715 secs start_time = Sys.time() psem_ou = phylosem( sem = "x -> y, p", @@ -270,7 +270,7 @@

Comparison with phylolm estimate_ou = TRUE, control = phylosem_control(quiet = TRUE) ) Sys.time() - start_time -#> Time difference of 0.2175765 secs +#> Time difference of 0.2204044 secs knitr::kable(summary(psem_ou)$coefficients, digits=3)

@@ -377,7 +377,7 @@

Comparison with phylolmstart_time = Sys.time() plm_lambda = phylolm::phylolm(y ~ 1 + x, data=Data, phy=tree, model="lambda" ) Sys.time() - start_time -#> Time difference of 0.04006314 secs +#> Time difference of 0.0403533 secs start_time = Sys.time() psem_lambda = phylosem( sem = "x -> y, p", @@ -386,7 +386,7 @@

Comparison with phylolm estimate_lambda = TRUE, control = phylosem_control(quiet = TRUE) ) Sys.time() - start_time -#> Time difference of 0.1816416 secs +#> Time difference of 0.1862426 secs knitr::kable(summary(psem_lambda)$coefficients, digits=3)

@@ -493,7 +493,7 @@

Comparison with phylolmstart_time = Sys.time() plm_kappa = phylolm::phylolm(y ~ 1 + x, data=Data, phy=tree, model="kappa", lower.bound = 0, upper.bound = 3 ) Sys.time() - start_time -#> Time difference of 0.01122952 secs +#> Time difference of 0.01028705 secs start_time = Sys.time() psem_kappa = phylosem( sem = "x -> y, p", @@ -502,7 +502,7 @@

Comparison with phylolm estimate_kappa = TRUE, control = phylosem_control(quiet = TRUE) ) Sys.time() - start_time -#> Time difference of 0.156039 secs +#> Time difference of 0.1678932 secs knitr::kable(summary(psem_kappa)$coefficients, digits=3)

@@ -947,7 +947,7 @@

Compare with phylopath model = "BM", measurement_error = FALSE ) Sys.time() - start_time -#> Time difference of 0.01085401 secs +#> Time difference of 0.01140714 secs plot(result)

@@ -965,7 +965,7 @@ 

Compare with phylopath tree = rhino_tree, control = phylosem_control(quiet = TRUE) ) Sys.time() - start_time -#> Time difference of 0.4487958 secs +#> Time difference of 0.4308579 secs plot( as_fitted_DAG(psem) )

@@ -1019,7 +1019,7 @@

Comparison with semstart_time = Sys.time() Sem <- sem(model, data=Data) Sys.time() - start_time -#> Time difference of 0.0172503 secs +#> Time difference of 0.01481318 secs # Specify star phylogeny tree_null = TreeTools::StarTree(n_obs) @@ -1033,7 +1033,7 @@

Comparison with sem= tree_null, control = phylosem_control(quiet = TRUE) ) Sys.time() - start_time -#> Time difference of 0.07748628 secs +#> Time difference of 0.07840085 secs

We then compare estimated values for standardized coefficients

@@ -1169,7 +1169,7 @@

Comparison with Rphylopars phylo_correlated = TRUE, pheno_correlated = FALSE) Sys.time() - start_time -#> Time difference of 0.1071289 secs +#> Time difference of 0.1159289 secs # Display estimates for missing values knitr::kable(cbind( "Estimate"=pars$anc_recon["t1",], "Var"=pars$anc_var["t1",] ), digits=3) @@ -1217,7 +1217,7 @@

Comparison with Rphylopars covs = "BM, NL, DD, RS, LS", control = phylosem_control(quiet = TRUE) ) Sys.time() - start_time -#> Time difference of 0.674578 secs +#> Time difference of 0.6971498 secs # Display estimates for missing values knitr::kable(cbind( diff --git a/articles/demonstration_files/figure-html/unnamed-chunk-4-1.png b/articles/demonstration_files/figure-html/unnamed-chunk-4-1.png index d727c9b0fadace4f5f2baaa2b4347986afe309ea..a19b5faf96e851d1e341872f1c8395748350f4ee 100644 GIT binary patch literal 57111 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 literal 54931 zcmdSBc|4ST`#*f5(xT*|l(i62C|hZ&U63P0rYCI0ZT%kh$-Glp?KM*q=-jLhA^up<~w<*cqp z%ygf(2f_UY*Q&cjv5kI-(aeP(nV)5k-~Ijm&zo~Jtbgqmh*75X72K8lTHfx{>CS*% zUBS#EBNif$y3Di7BnWwTaYJp}X>rkiomYQOBVea}?x^z4Y$IG+yLCQmpQQL$$n}uU zrOYx`oKj=M7^%}wU%aX${bXZ#l&61^QHI_gv`me(jB)gerHgLg4=>80Iv5SSO33_w z_s^oGM7ngCF}%CG+h@6CpiyDDH#Ey<^cr$3sd?BZ>K?r7_m|UbP`r-|yPksHf_x;dRs6 z+pO~+Fn{?aOR_Oe(msA_S9+Ot>g$369i@jP$ruZQjmNF2>FIR;AlfMP)DD$qSz^&x zTl!2g%uk!CjJ|Xmcr-J0!r8VW;ONoJGYM&zplQXb=fis zRyjF2c}!skds<=PnXxn1v}{Jb%esSGxWs8#dTab40QVX`nq%O zsN-+j+l%bkvuC@&gM7(Tr>=XRj-FEvTlO~<`)ix9F znf&ewe}DVWLxH67*{93`PE~u)yf?}ieI)90Ly=soH7XuYzD)c)94tS1HKcC2e7VeL zkdFKF;N^(<&r@N$K!;Ys8rLudv^Cex>k*dn!-ud$yheChZF zQLmP2Z*Ol>%$U3YZhl16-}5||dzl!rpA1!+*E;Od%l0YLJ%zLBg`Ph`<6iTTe|44@ z97Q^WTLLgv;!7^ntw;PBJEMWh)0b~Y|9O}x+M+Q7ie>g)BF!_I*k-$q(i6(^B3a%D)9vPs&tW6~O94P(a@D`=z`w_m{zSBD4`WnGbp zj*E-qOBRVVP1S9hitbL5CmLBG^^xK?*PRucX4ji$3CaGe$=tuSzFKs2c1Dz!mnYt; zEVi<-sjsY5Zar<@7vp(N)#_q-;2AD``oPf1>|qEh%!A3R6p>Oo^Knmzjo?gh$HC%FeeXD=x-x&rVF#&d<-wC^e1h zh(t_nADo>0Nc-}`&+hI>Lfa8a*&}I*=LH1?tIK4yB&Ukmu@(k+cG7{4#F0A}Lq4dO zP$U?Dx9uqq#)-+ucsBK%Jb98&=2}C{taqg7$h}T69e=Qza`LFNpO2ec0VQ0Vtt!&t zuz`VrM@`~>w${NxbI`PPepHs0L@bd=wC&D0hRgZ<*)EW1_nFj*2fJZCcyONF?5~KM&r4RY`%k-Z`GxfJS}nyB(9x}Xu?XS7x#8tw@zCfyf$fOL;klfb80N^J|YsVk4bW6VTs+I+xIs% zoCvUTGo@+kDy7{S6|wgS@+tmgj22$4oOb{J;h!@X=wY#JW=VSW*9FE%`R}U5^K+uU z1TV>#o76Qs^x>PdQ^!3pVJ(_%7-oWZ5EU7jq#Gu8{Fr~JDD|r~uIHlayt}ve?n^r= z%SyL1VAy9X|NPId$JQG|nv5uXwfDo?^s}Z7F5&_J&Ut@ry}okB&Ld zzcwlDa3bF*Q}I;XaF{ioFk!qp9~Jv>dou06{ z2ddpR)%(lIL_{-kr^YLZ$;K$mSX`iCyN@L2Vem68tn{X>SpLs3ePZvc_?{p7R{U5~ zJoVzGcBA>pPfssrWb)%Enp*Dmy=A$Bx|qpMq@F)7?UkG){GFUca6dXb!sRZi{|v<$71H+a40$D4v_nQ0tPQ|-VoHeJuT{r+5fo2KyQdR=8fsiU|5 zmsITYA*#62Guh+o22N)2;kbI*BclV|SwU~llaT*$5khmT=WDxf;qXlb+Djq9@3R_} zxG}b{tU<7^4Ih6`83&H|kMRSgmii*IM4?kmScDp~hBo0&>!Qg@mC>|zzS`V^rIE=m z_aErcIHsZnDfjgVFpl|)p5(_Z*Vg}4;sYgOjqiwsf0VA5v>T0!6SgDV#e3+3iZaz(}V614vc(>;EO0O$m)yjK59`oGzQp;grio?ri zmYkS9)PLPp5bFp+x-@F3h>UFH=1_{{n-B`i@gHz3o}pk8!bp>OZ%_m{!~bD&%zfW% z({ORg?#tUMy%1tm-eZ{F?gV=b*PNxu7y7H47T@v)T^Tq~7j(2j@^lzHdPC3z z{rGo~8P-UZobYewYOPUsON&sd)lak6E;$u}@z`#oP8mQ~f5NlxOYJJTxKEDsPd^dK z?iE!41U;L46LG0mw~*}a`j&alG$CdE`)dCgS3a|NvrG7C!3a{TZ`JVlikq4FI^7FG=E@Ld`sn=4% z36i%$BTWo7@Fx9zVP_a;grr!oM_XgAcD?FepL-gL!}k{yOmlPMlKZ#=!jU}&@RNeR zC6z9==x(g{5A}K4>RW=Y1f!6=qiRg@qtf=huq^VjCXaF3%{GfN+MbX;fL)-9mAS}o z{R+kFt_%+OMydO4tuIfpE(YrU`6yM>bL*7pIX;|f>g$bnyxl)Wk1JtRf$vr_Fs;oB z;r!eP&2|&@_4M?}IxG^=T6ZjGrcSJrzuv^( zhR|-`cP2(k--mvXfjX?Ydu&X7#!qn^UK<}W&0g2Egsi;Fg}R=E4|@8fkDs2dlJiS; zkQRh}xAW7Q=c1UeO!u(^uOF;o;gyf)D@rUB=$zp?344qVLn2^nd7KtaeVvlcFse?QsP*O7AG1T`hkT&7? zmKauIc~wcO)mr>GuU~59uJKF7(-bUw2Qr21T|UnDjyuH3n$sTy~rp`SgJd`hFdb(y!b?G1W3d}$q2|=(W zIV85GLc!}K?uV(+NU$$&x6zUWXF&dl+#U>LA*h}>QRL>6<5zyKxk>(QVF~!O#0j(! z7IOeN?ezRkiP{?Y_37~bQYS}M2u@biJT6$Np`$u)N!o+M$IguO7CZ3S1^QzK0#v!1 zo5{*V81F*~F~?oHd+4)JbGh6DMfIc%;WbriJ`C8KfJ|iXpNfMANx|nKs#o-u z2!IR((WokD)TwEe|1ftCZ>sc=`y*pG;npkENP_lF38TWr-it#>#mP1?;4VT0ewB7 z3E5L|k0w+5;^Sur@c!l0$o}uk4$<;46(%NXcn0^pvC&s=KM%@b7pR8Ewl>Tx;9ULc z9S&ch?bK5~G;Jly8nZhoye`D`*|ci#WN7U7;Fm`u(hCQ9_xH>f~7T zG7 zcWctwq-A6X&&zx zwfBTB%Uib%*!lR;+4Ao`l9QeNvc0`M@s=Zvm$&!N9`8wO9ukRUXk;WL&6J+;<;xeS z$$)3!kaJ5Pm(KoBTvC#Ir#_so_V@3b2M-?Ht@%&VYF}ix&+5XlffDtk-g0-rdI8P% z*UZ+$fbZ~6%E=lEO0KA=7~feb`w7_->xA)hb#mj=)KzjHV6S0nkPFB~d8hJ%K}yF~ zI@hwM{3ysESJU-Cj=(GtP7HYdCpuJzoc2w}p^9t9s+s;`;LW)m0gY4$#X6o_twk_v zZs5n&A<)c;^Y7NN!K6e7k^nQ)au^skPBChBG@qH~YB*4)0R9y4m^vsa57a(F|J}J1 zyj0#--OM!CIUAzmpFhaF9pn1tBxAitS@C=TtspJEma0<1BrxRPF^@&#W11TuTTYG{ zt3J+6E<@?uk%Aukb1GO@$n#s5igj{xR+r36OZ$lv63qWXrt*JV3wthhsq90z)$c>H zTt$($KE#E=ugKH}kM^E+mN1h(9lyY zx=_*A;BV@+lbU+e2&ZSA9PaPuX>LqurAD}a#bZO0Gm2pqh6sFp$Q7SG+<)DX2m9=S zoXsOZtBI>#z%t|*PF5`mFodRAbaE3WAu{j{*26GhX4(|}J$Z7hkYT1yYuSbM%}z`t z7Ue5Vwq?@V)YUxE&#y0&)6n%e7;UD`PYC5 zfdz4OAK|PjdA@f$HgyTCS-GBE_O5!qdsqO^cRfjaX_j5H5YlRNQv=YM^wy_}iOkArfjF8Z5wiMET z<5tXwDz^{w5zo~Y(?zPi7JJ(lfR@2(`ya4X@}V3GNzsTH2nbvv0&LBC^o_5U zxU>XWTpDHZK|kuS>7sEl&5x5U@nGcK-Dh4yp1*mXrjnm3fTJ22nWJI1h8IaT?t4d} zUWTFui;kcUs*`ani!Hig!TK1^>4Jk+W{-k_qY&0rN*y)EIN5SODbyK<&loA_Rg{eh z#t(60(o`egJJLMLIuA&CmHd$Ryr+sPs?N+wD7Lno3fBKvv|6bGkdCibeMiAaM1h?! z_>Qd~iUDlrgaNo~jRKm%;kjog8%hF~A&+Bhe^XcV=P6h@cS!6dyh}KsF5aaN$&Ext zEQabo(fw4|`pdV>HH=8yw*Nd#x=IW=~9Xqx>OYHis@opU!r ztxB)w!l1g*a&sTa*oqPw=crrxGY6>kakUm7Lap6OvUrgaB`ljCJ;_4cJSj3#$j{i> zd}i-#Z3q>$Vo_A{I`^Nb)im4A##BB#1Hwd$3H8az?@v>GEK!yABsjR#|F$3!o{c*4 z*&B+!(<*+m8N-4*5{V z1@v68?A6rKk95O^sj)^B&$%VadX?PMhCbR!Z#h3Jn-*xGf;^;VMk(N!K9*Q%b{iVyu#F|$(31Wk<=6DHkM4KBd`pr z_@az6sYP0YKJ4W`P-}uK5`%#=Lah!bfsY83`{hikxnlB%6MKe`vbn|v)bK^aHLZL& zIg9Ejx_L1r&16maO0 zM8V<+)x9p-M=C~bD*iuUYo!GO{e$>E@rpOgmo>odX8S_RI5{CZVNEDF4dNU0go?cW z#pE>apr7|&c0jShksry2H6xs`NG~7`sfLgIG_$GH&PpHZ@c?=>r(-K+vB6f+ef>86 zeTi-z!Y@4=Gyxij_N=@>?)a^3AM*w{Fv%PN|Fn`caN0^}Z2-k;zNg(NlPkLB$3$Pe z+4MkE1Ot_ja1=q?6zOu%&>ZPO8L_n~*vEV}4rN4JQ|h&vvEcZIO*!#szT**UMZN=$ z1!47|YK)7ThDdJap2xD}qz#qKD!fktXgCg~jiVxRpqPkuBVkc)_U2D&5Ga-l7e?~s z=#kX7;@a3qnaggq$}wuZM$ez4 zEtkJes;BFj4=GqisNk~!dX$T>3V{OXN8J3IrlwL$5BD!mu>f_%4h;G!N_xw0Qc$3v z(m7QVHl#czj4g7O0K}v(m9tdRRjRmSrSDgqjH=s8BgE&u*Y^ ztb3m0@Cq|C`3YZQtd# z=B%E4UahGqVbE4~2hx^sI<>rwC77EiX}~YK!=43!G#MXW4PyweyUa z1Ut;A{CpLd=Th&|hWJ{dgYX}=i`$pV`~ zairxYl((n+1gUIJ$P}?o4hUaJiw622*MNg0hY+rM%V3li!_>Mf9Hjf){IP^oMjTAp865AaCYj#3E#u@=ZhaM&rnM5E}K*AskBZ&P=~2YKx3j_ z+8sAHseuimyK}R`GU0?7S#5M|jI>g%r0C#BiWVi$L2uf5EY^KA&1}Oum`fq5UZmt? zvsXv%{6eyl!pLLtL{CyLD`sT}pfdAtbd7Bip3l?T%)!rY3}sr3U4zEuS3G4ReiSd6H7R7 zJV4X?D|6h-smv0QW{>aUIhM_F3rkCxwZnc(x$zp%ZVuBojf^N?NSYuLHB)u#T3W8y z7f*bE6AHb)%YBhiQAR)4Xt4}Ci+sEd5V;Dj-c$>mo?7R+fj`91SF7pAiu)jQp3aUB+N)P zH#Zl`ay9(_>aANWZ^w*!DxxAA{T1(t;ePaNWy-uYI!suDCNDUcLuN5qwjU7;|qZs+663dX_irNf+KJ~3%o<+33j|L}65Ub^$>fUA~P$cZnlE^5hUsaJ%; zehdtlIkFiT+u1E|tY?&z$Z>LV+AMWBhpCxTI+YscCx+r#XW1IAg>VFQQnFt)t#d3( zmd?E{HQFB)PHV-Pk)F<1d!919-r!%OpVq!g)+TxvaJcumcFJ&%9TWA$$;xfq&c2#o zxYqn;6i5#r-^A3g`VnWp&GJK8D`~U9&_VpEUUC^*s@^at?)Wn|bdJo{@1du!|2!B= zXLg`5R$Zo4t@jJZ=ceikEtuG}E(nR>XO_>r>)zWfYt%QFCx`z~A=sqa5|`axVAF&WlMacOKv$ zjE1`LQ`(903Y{k~YrDVngmd=X!s6lqP8y&J6I>;vrQh($_^kYqIpejDQ+6@581?CG z+y>~a9US~?dK#LVyizS6rnXxznt=q@%Gem9f|?zoG=QAiEY?fAK0mgimJuGYVRceK zONoeR`F6UVjl%OcntbAZllGgF{*=FU>JbT3w5)uC8wOiq7)in8M)&l*qMP22|>8 zExYMVX(KlOy8@Cjp$VYBf@QpelQ?4vvz|CSa#_aJm9JmVDQ=RR1#ododC3{wzBB7NIsBf<`zE!Ato5fLL=&C ztJ-inK&!3L2+qOBB$IF$kr(+I1Pu z0!{I@Kwtkt^?k|qzP?yt;{rYzNrM0E1x^tFyX$o!-{)c5IQ$7O@A+=kkPq(&Wo9f6 z=H>~Mbx$v^;z0?M6gY~p%Cf!1aE@Z4pZnmM%eIPb6 zGSbAY`;I3>s8~xyQY542_AILX#wa@7{$NVkYHZv9%l-2bjtgXA*2<Llm;w4`DxCJOv2x{ zs{{R%qRh#rj7moCI>rcn{C{>jT27(#w0CeBs9z|$L;0YKt+@20Y~pS%1f&>lNXV7^ z%Y8{Bz(_&$<_o|gvHl|czo@h5F71qP)R}tgWxYJcx>`6Izi%H4Kp86ulyWtuGnjSA zqrX$r6oOsy#vbx|qn=*nBUHTEYHv=g)cV+3NKqRd+?=&rjSgjA>eX|@&<~wCT%uG_ zZes}qFX~+E$>5q2fv zk+rbsTI-jSotk?$OU-*aNnv9Rl+rz50qc$P@B@Vgsf|ux(?>VSLk8t#pIs^jD#i#V8=WIRfRm@>uv*b! zHmI4J9Sqc?XDj1Af_Jjnh_lFsot@`p{puY_w3ty4_h}j|{T*-?Tm|bm{JStUdqw$N z8i1dAsM0VH$miQ6j?a-w?j0xp(|RklqeJp9tR)dy(9~_>Q)xfef~U@Iaceu6}!&9_yM$*CJ|w{MqVvirj~Qoxp?wf(RbHy-I!i)f&9G z`ukLgk`{s?wl~oT&;RtNP9TDX52&26eL#U!@}sWIXJs>anfL)kc^xHxk1QC(+!;|; zCIL^w+M)eeTE0e_jFp?Wr9Oa&K54BjGBYkx+|A#w3Kr9Xp>>VbqPHp3w_niP8uXTt zdc!#NE%j3>2hBL7fVQk;4ZE_EN6T~e7$i1lct6f9q(0z*981l(kfu3tpge?qeoqjoIz z!)BDJ+x!PDv==5*t}mG)^lrHME8av8h`|F1NkLiZqX+2uC&y6buaph4lsF95(vrjV zd5r`li_-@23qsuK3e->g#ev3^D_hG2a+K+~6qYwxt_KLTbQ57xzqZJj)0YONUQ613dHTC>X zY|fftYY;E&+MvOV5W#1qX4$h*)Q_e_(Lh-z2S#&5$)m*uEvy%v0kRT;dJE%1+mQ$g z1LKxQ2B7>Gx=V#vxTYgQwK5EcMhIQ``n0Im38qq2MN;TRl#N6w1YpnhFKcf8riC`A zlq^B=38>94k(WC|F+u;NvboCVOYTlyg0nA|k!}VN|E63;T@vDYmCsY(BJy6j3Q5rM z2KBAya@zvva|sv_paqaV-=gXs0iIQILF+4q|G98O-ecKP)z3{GH6$^%hiG>@mx&Y( zg|amgp+C-~(AyFM`M<9)_HGm*E3NcIo)R4gDhN_#6=yb#VJw9^YrSyCTHsl-<31Xws%bjmDcy{tU06bZKS z7_ye=x{`ewW6({Z9_5l->W0mIM&||0f3865l{7Q~!c+t*{5+ao1f|d}mZsvh+%5lU zM2A{fn$U2oC@()k5hlAF$?Gk3kxHEKv}h-!pJW`*?I z{Q5=L|1GHDt(FtUMcbMZ_MRA4DvCWY}e9W&6@^C!4cKzY~8Q^LLA7o@^e(1Aj zmpHb0ClpE>C~Q#!8DQ~Gz`K0tg#Y}!6KZio)glb%@}V$?YEo2oALFoU{Rwh=#p={5 zIp}Xw2dj&cg*P7w4gj{WeRXj#CTw& zw6wGf)q}J#hF#Z$4*2^^NX8FD_c-N;`!7ADlW_z8&VNWp>F4?ysbsjU@W#Srl$`-J zySXkV&;&eR3Qny8<40#Mpm&mUT?Q~E;wDXAE6MtaamOk~5ulW@TMNvswg<-Y141bx zUFg{3C>(oS5A1vBxf)&$4Jqu;6{L*qhz5gmIcw0~Sk0t{;(uL0T53T_q|y_ac*`5= zTk5B%O;K58l-V(#Lr0HtB=rXBcvW6&Z>z}hBq&_3BfDcmCg^d=-(~%_y`0l#Up%6i zFg8SON+;73VN&9kbucSH+-Msy?cHwv{V3ri97P6_ivm-NJeuzzvNjC_ zmQahLcJT-mGvxxH@bsK$AN;-_7mMC z#IJ|0ZJ5G2ZOVG{rhJIs!n;n{eVAh)q{`4m61)3M!_QUf4of8c_jFx%?+X+4n|n_F z&06sW9Z+9h>w+&!Jgkf7lkr>kh?{?%OxU!XZK_HX>QM^tZ)RYq%HFv%p7)=}Z%qdn2TRy(we8xML5H>x>z{`klDK3_gd*yVa(-h;0=Z<~iZ`}s3) zoV74-5ocf+Xm)j7jB$>0Zt}fYP&DRAtiCOFoO2%&6Vm~~^tI4C2WhYy{ibie6)UO0 zPy2)4yAr_bYG<;uvu{?1i<<4j3_d#^z0A)nCNAEZsw03YYis}IM(j;>k%s$q6Ri5; z&Ci_a*f`3=!}IYXix$SI;H7Kd`SDs>*C#DS@-|abQ;(4_{RF+Vp{c180*^5Bs=&Q! zkI%!yf`-duX{)aL2_M{?bkXd(SK;~V4jI@lqujaZ|0EO`D zp2v*bda@imJc-sJuKrKp=hED^E2gG#?Hdsy*J&{ZF8R-0ei?cv3bRbhK2n$1&NfBa z58GuL4A^$1uh?~DDZ{vsu;fs&u>-S$e}AIj`D*RV%*>LiU=JTV`ioyRYzgDN4{eG~ zXQtEII+^6;y*Sy91*|Sku};N@hw~SDFB3Di#@AD^kP1(-z|8x&K?aGFnseJ)hC`G@ z3I#Nx{)Xpo41W)j_F5499>UFd=1k$ujXkP6Xe!5B--Yda{NzcBQL)9T-{1c3arHOd zW$~{eF28)%^hG=1i@EZ~>f)=I7?a;!k>ZwWmuaSYi^Ol=J5VACn>;jMwkj~~|z4y>#1>||vN z`rdtG|0_B{McPa6S_l7m%52qNN}h>M(KRS?y7QEv<>Dd%3&SvO|Mk8PS27X*K+mW2E5gkZh2Z~bN7G#GG2t}23X zbNlWswY`$uhr?(Bj_gd)&oWK*m31dhr}Qv0F?EN?4rgtg@02I=ly?4my43CEw*|>dJ0s z`{EV9C8El9YKXr&<{!=igoY8guIGEhl zTm1B4f0nk5)PMP)?z0k2?83#1zvRQ?<3m)reOa)UBz0CFQsWt?d3p$;UkCg*gDm5H z4}voU#>XS8d$SGxm!qSiw=X>TK-L;_&6Wk6R*otjkV& z`)>}sJ86vy?SmfDGxD4~$*{IOs|p_ExW01lb4kew&cB$LUa1%55}W-W(6xqcxmpU# zvn<*IPm+b_Was=yy*i)&Gwrl?g96*b*kH5L=IsqwNuroR+8T-HU!pz?{+wZ2W@P_3 zFfhEk0#1H8c{fH$Qr(}R{V(Yg10m+5qzD#W|1}(s0RwKg7P0drQ-XF>>zvAQF6AnHz5Xpuv79=pt4*_~l`1mYLF4 zIQda`wwC7Z>l? z>G7~8t?WEfsofyM!$bS()vNJe`Du-Qv9hjT!5cqWHgoZ#Ao~o3wvQj*_Zq*n=Q~?h z>*fX?s;kmHl{awg?EaQyE$;QD9*3IR+Oy}*(c1TZrondZ+jsHOrJX)LJ{+#zU=>1* zMt$4|>M8rL-Z_SIRPx?IRAu}U<3l(4pwE;dd1Jio!1n@9EbP3ZH$M-LoXklY-PiCv zNuxZg`v--MbpM$_dXWHANEEujGF0Tv-mAHJ_4i95g#*9J`;UPfQoA~BrFeye zc0)jszW00EU(C!itBGZfLl54aLs2Quuc_|)nF~{twmmnH&=+)5M~p|WhlNijT!Pt7 zLNJU~^5^nhT{sK=+#UNA1XFZk2e0Y60Ioldo#St!X&l-q{FnrRUo|vbb{TJ>DYWmy zFS|~6F@drDjclxt7bg2Le{5H1W;L&BUfagR)bOK76v3|jeTc=RoN|9;N=rqh?y5XZ z-tF4IWXM0?9@H%qp)P8{eR;`KK z`61z^q@*|)dkMCP7_TTgu;#-H_`0<`IFhxGyK5i7Z-VZdpYzhqge2- zUeScs5~fe3aJa~F!Y_72PL7>SCTj*ixnwA5)A9F_o%=5^-MxFaX zKi!>64_{?XT3REI#h-SYHXw|ShW`>35TFMHH}BSJ`Rw`g^JQL(YB9NvL+2Wz&oE-A z{3$-Aq$auj+s@97)igI(-wII(oarevR_HJH_2y9YImD>6eu{^e_p}q?l5Kx!_vj*+ zI7oS1+bs0YAIEgF3a+@g^yeuo-&C;!8;QCkdU+whB zb?Ph^F2~AV)1;gzSd$dGJ06lcQeWS@}4cD&o>HkC@1eYeE2XZ8MOZ7>C>~( zQg)buMVdURL0l?}iHj>Z-fwl+y?ggSyKqyYAP*P_+7*}2pR-u_Kh@>FYw4!Lbzvtw zh90pJW|%yW?)eA%*I5AGi-RFbl$TkSVv#SSqMp&w?=x?BbJ|TQ9uTC5hjck*)ds7C zly%y3{`O-9Rb5>cx7q%^n4`P9=u$Bo!;W>(`FMA(00{FjuWImXHg6vvdGIEnDoLcO zBhNPWc6*qEhw z=F#(k=FM>mR`3<*rZ@%f&gM&n#}#Q){5Dp*a_;QG%Tr7t6u)>YI48{4Gf`T`$)cZ7Uep-IXy+?a^Uz3k-9c z`E~8Lho4`0%=+EVOioj;iKLQZt*cL;K83PH5_WR6#LW%>2r&+?q}<(nZ>mFBhAa-A z8@;TPstd5pFm+jsEeP=WF>J7kQ7JES{dj3VyF)1rChbm)x&Ejm)%KabmFDHkDuDd{ z_-`)zzftm6WRtK80KeV8v9_!l#3or66KasG$(eK>T-T}iFIWFk*Efd^e%4-PV(Q~; zZ@lfX?suubiG5+G&H9z3(|+qK+9B@aEobfHrSF}K!@DF$pK-WJ8g1+vM&e|Z0%<-|)3cU33~ zq0GD?!8S5eS}HH|&WiDo<$FlE*LJ&iY>>@1_M=q)5r-cva+kaE$D*+-leyvOF?|6Z zr|_?MzJe58Aqkrf23Aqif0EQA(w98pFbjc6aOo6V(6_$?&e-?9?8z|7&smc#K;gw+ z^}>bj*!7~$F+tg&+#6MaNpUB3(h@5+{Wui7+9u}`FBAq{y!EN{tRcgWhkd@aQs67F zmaF%S#dAOLNOGbCnzMQ|rBIG)iAerT5Y z{;A{zda2&2ac&IN)r2M95c!*(*2Zc|j}_FsI}&-lYGhcrX&~vp&5=VpX6~4zxcvMC zHOw`QbDC1}`-l;RBzlJXgtx9YRaA~$ukhmxVn0*hX~J^BE{i}MnWwuqm z(aGz@EC^}K)PqP16F;Rww$szs&zSjtqkwanp)y2(l*I0Uf-8Ok1(%+?UCBA1s7#*!s=t7(aPk;I(MIKL6LIH6)F3HbwJAd~^B;`kei zp_;JI*X8M#N&a*gpZnhVRmL4GZ+@M7p9cj_w~18mZLu5kgxdL~%KLQBIYo^kE~e!x z6bp-p?1SR?Q{ylf7uO+4YZmMXKmQIh-^H-&pCXcs3+<)drVq7QOE$&GJcKIa$cYna zDoROlRXsiIfX8XEbff&;@Fzwh+Wis*f5V?4IU(tmq4!)M&Vv@qcA3zI)7lZg;$K&9 zgR1Ejoh<^7PDdYn!Dh;1=L?RebMpqJ`;KMyI&3bH_HKt|;mHH16b_ObgMK~wXN`K_G@x{Y$Y#vv(WQIcBlVjJB zZU{BE$9$~-Dv8eS9~>PGEU@e00r6wNOU=y`4unhVziX}GHPqJ8VLEt_zq8?LsxDaU zKZM%Q8)A{LpmgnFt6zC{KM}q`@znyc3HC&&vT z`#LkPpN9nhETb!l;LLF76yi0un;Qn%^nSiKKlM>Btrh;f%k)46H&{N@Tqm%4HJc6z z+phfszRR(tWgc@k^Q_xIxl@b)EbhVpbjLFXTq|lZaXmOqP@53t17|4*Q__;_)cqbbX-OqxCOC z0YPWnRl>fc8|G%ijM3G;K0b&5Xv;Din4G)t{NP&v>r%~~*7;9@f-Y3}-N_0#En0c+l9-G<6JsKj2}()7LXo;GEm^uY7f` zX<+|sa%YiUfhfKV3{GN<`693_>oSg=-M^om{W;)pR`uOLb?$qo8lor5l5-y1=rVt3ZdHPl zAcqD$27g%T+i1gIMGyX)O}JGk9NFz5)g*S=P!-vgx+c=`=REPByDxjyxN8SzXBl13Hs&VkXs1~JSzLT{@!dVQLnCg#|JmgN zWoJNA_Py2v$tgEu6uk8`1uv+mm_vesDu(!eMeL8Ep`p_q2kgzM8?=g>>!iQbe~yff z-h@E7GO$UZ#}1vb=h(5AZJUyk(iRN)jCb|77K1ACT9gnkXH->1O^+wzUSV9u z_Se66F%xDW_{)eM%E8SYHwX89mG%V6-dh0jkKvU9?rf`q(@;-O-};Va>#kCU9&^7& zTx`uydizEsVvBUcaDU}_yDJMGI%aR(cX0H(Ml1&llT1B;@N6i5*5MdxO=IIDKHN*b zT{1Ez1cAHIj%cY$f!+l8<67sf~%E5jjM z1ehbW(D^PoXHF z&OMbm#lP^!)MGe=yAxp!;F6t6aH0HnmPCy_%f=Dsb?r-dgRM_=I8CMYvZdk1{7dpwBZ$V&9`ySa|Dc$k%i}}kQYdH$0 zcfjzRn5d{0l^Ej)M49iv-FHjp1O+wi?OS$!Zz%v3K8dmG%D#aZ?gHEH2Q@X9)*%qq z)YYAHbUfv?IQa;qJorkL>psXo_k5DJU>s(R@GFqT1|KQ(+qZ}PQsU)3Z(n%#=f$mg zc+BvpUZJ_ZrDU1iUz>pD5#A`M^nM6-=e5g`j||Aj=}$UpY)9eFo%o_DR!&ZirI`Mi z77e?E)yrPfav#sgjpqmbM7%@*X5Cpbx+&JglDbAxq7posry>*j%C7fIEsgJORjPan zAn6qzF@rJESM8gjumwn+*L_A-mQCEEA$x0xMI8&N@{)H%Ekq(;Juv1+I09aPVW&?W zBFC1<0ei-yjR(2~Y9@0?H}gw?L|#Bm0G_)S(L9=Q@=qa{-l%zbbmyKup=%oPikuKU zub@^2&xJn2WlJsuc=lZByBt{ES{1(cY=Gb3m4K&qJUkJJ9(#{qD}Zh8kw!H<@@5Swe8BET!e1_DPF9X zM%61D)Y>%R?G<_%MvoxF0~Y#eQ30hP;-sK#3W$zA?{pOm=oun^BhWx1l?qZjKK>0o zHGCoCJooez0bo!K6GxQm1hC3}8;kk`0^!KfqcqT019yP${H7Qeia<+&(-Wvao^ROz zJ&Smb%CU2`(i3J%DG!f&TEzk<#3ZBkh@oU|Y3btggTe;G;C~6XR8a#8Rh8Kj@*E$d#`IX5Y+(j-}gVMbOKDc(uq8?!Rtx3C`Y zBH`Rkz|VvwD92N%^tAhkb~#P%utQA`=^R_3ry_Sb^BFR zGBqJi!QaG+=mBQxM6Q2Nf!)Xw`B3EJpsuxt=W4VWa z_4QylTI`VQa)69rSM6D*zOtAYj!WCkny)$o_-wclg-SmM{Twob|lVvJfGFF{bO?}8tn30yBqdxZLoZpP8)dq4C6CJzLa&c*qT|f z3(kIdy!AXaI!uF|s}SmXDXYwrX%WKgak7L(&hcL8@T7b_9*42XIKA)ngL18Iy2AVm zZIOb{isROd^@!f(VLdj!*m98=UbyJX^?;D-3?+~XfdNRKuT@oV+pXbzij>_~Rx_U) zxk76>cj~jP+l878U=mfIcYejZ`agWV1yohtw>G{hkx-OS5tNn|5S5S;6(pon zQbLe!kUXLwqSB>Of^>s`bcvLLv~)|SGy?y*kH35G_y6t~-#gwh9K+*2XRo#9n(;i( zT+1&KyDwyEiV1!70S6N>Csj2cy4DUQzb5$n`)S>epkmtCenZWVGB?@!RTt5e1`g!Q zhf>06vG0^>s(k2y*THfrgi3X+rK#wB7Z{(xN8hpkQ?(0$P1-R6(2~IPsf)xXX-Dth zRl6kgY3Uep2sBr#-0YG=FflO~{w^9E7Y-ahCljlMB8T=Y;L4#7pvHX~fUc(B$tx6} zJs790?*#J(c>krAzN@B(q7^@1^Hc|roWDw$MdXwg$|OBGT;{mDQ**qW&I^0n>U~1Y zo0`C$!@Z=d=rS$Zi94LheB*>*E>M!*nO#ABen4ys0~3ZA>LpUB@TK(iFHcTQg~r63 zlnGM;SOQW=gIp?@TeZ%W?1Q38Z$11kXbD<&!ddp3NYLdHtCP5!WTyzUhM*>S=xC0c z9-@(TuRHZYC**yBUoL?aWWa-e9_C0m^{w9_Vstp0baHvcTB2@K!?;4>%wnIbgA%Nq z)#(qYS5TwY&N|?)x?*XBzAain6Rkr5-9)%Yw(W?z4>fAF=9Bb*T}4Dt0*(c8t}72X zCQING7OZ=^hPo%howlK;hyD^9Yj&tvsA&sw;V{dP-?SZlQ#$HSV%8qZZlC=V0(#)r zuh7T@=dY0nloGedz{}qFidyBuXF?ZA-U|ql`a8$aqO%pdc}yol*bSdPeL6Q%AplmS z&ba58Hax6bd3c6_*VmWF0A0Og(R_{J~;SiAbZ{8#%+oHz**a{c1;7Tpr~+w{V6 zfG-m}%|qV3(`ML#Fn8wq#kV56$%Xpey+X`5*B^hs02Lq}0;%k4w4&yS+|q%3(g4LK zgcu>pWd7b@CZfn|Vv0r$;~vr8-p|Xw*llOUf02a+=TR^*X4W$kfi+K?v^DnVy=^fG zll!cOpWK%RXGZHMPGtCM=S$Jx~ktwn_{*GNe=x1T@)7@Qwj^|!#>sEa~<+G|@Qxz%KU@?8}B zRG1WAL8I51hW*>bC!HK#+})7^Dm{>jb9y`J-fOF%zwFb?%iN`k31V30UG0Z;Yjb_3 zQ`_2Of!no(`_9_a#9@1Dxw1r`E!eB;_ggZ=|tZi&aj#YaVfMS6BaMN8>L_`Ft z1)YVSEWHYs+sU1VP=30Izh;(!H>d^B#}|V^0A$5`e&SSp>Vps2?aUlmS=3N|+9BZ*PYotD9rhp>H3h`}>-5;3UEV z$-Y#z0R&&Gz=$AK{+%y`(nl-9WrB9&5(Q@LWHMnP@$o@WYZH{P)4aPb@BR3vR1Tc@taO{^CL{kWZ|U94Ck9USlzkfVxa%Ug*ua| zCTekCa`*_){bu|v!N9p5%B^NzU$^c5$nOv1)N8~cwbglR!-NexaobcEC6m1 zbR=KDeMvs-Z^kwj5Z5#T7IE8#@YrAQ0av>((a zS+kH-odXYC%$b_qbc<0RmiaqHFR$MU(HmsDYZgc~AP;tNN7z0NX?!l!IS} zDgO$jUV+uXHF%2yV|c2CXm;VSvT@W@Cf2q=(RP*LSv$-L~b#D_@e>gtxQYQKYA z#QbZ(*`F50&24QBU}Y!|cJYRV)}gP6=Wc#%EsCZ z29Rb{?u>e%dktC?eW#~Q@CklBY4@bK0}Qug$NvL z@^7j!Fh*CRA5T$Zy} zcGlJ;ASbs6gJx!7`3PHtWgie@Ez$n5F*+o>ZdeI*S>Do3}A5Z)<8ot4x$kky&^Up{xDx(U!-=y5*LAd3LlxCnTb4z zk9;>tL=Uby8z7uuv3<6#?(WWPZGO+qPU*(X7qBW9AW}3!s>-km#YbFs>NT0L7od?t z^5Zjl=ABTo8*=nBmo9Oe;brN-c8VOS{7SQXtD`UxEn-8nx}=tIHlqYgfBV0EL~M;# zbsS_Z9dy5Ks#>3ho!mMa*>=w9M}CWujodQ{nwpw2{-Xtw4j|wBpuWgz>a|!@otFDh z4V|5Skl6wRN`+zo<<5&Ikd5&mI5v8SMi}r^90cI9n+N##T4LYjWC}`Tb>^*l8Ltl8 zE`Aa1?$2ZdG6W}T!pKjxLPbS|_fh=|Bceng*3QXcNn1QZVcTC8Qd0hvxbKP|nIWjF zM`~AVj`gjLA*uO(^RdYUAvUp3t9GaUpQM?V_{$s(RZ<|M%fjiFj+&()4l4OW!dqgA z4uz4!I5r&;>l+&?oAEqVo8*`w8ITomS^dh#f!cNMS3&YfKfC-2AI`;$`pKK=6>@FMU0L9^-RP_!)X{PfC^q>t){@L((E-04ddo_h|FuUpKo zPr~lI84OBDl8bMDUu9x3V|$;Wk=1KA6-YN-zqGes9b#J>%joPgnoaR$rMg7?6q7@0 zQcXXqO7;&Q!4D_8d|=aG%lmT6kAwFYU&7qz^Q45>KZ_qSaa%?%rSd5@c>O4q&`8}< zfT0Dyc`;pU)b6?nFscUOsSBhho)Y8_7DvYUyFiYa4ABdfLjXuW?U(qwBf-{D?d=Ue zPCoz%$rMGmB6`LA48;df&KhD4MA4T6R#M;yK@5TCrV&=w zs;wQh7oU=&rEwvv&JZ(TRq`$(;|-swsp$l$H4C1`QE_S{TI-y?l$(hKrsIkl=p9Z* z$`Xi+*Qgv!zrQD6x%N_bhqdxC^1Iahg!g3y^=D~mW+{6f0UYApxz@aCX*kG>L54N= zxkt5iKH;NTh2H+EGsdVS%2)ONv)jD#-Z%>eOdt3EFu$lzYO%QS^~w*1?G>_uk}Y?k z_U%E-yhlLeu#oe>9w9J%_bhqyfB;}&ATf+4zrI2-UldG5(3+{$Ij&x~mQyqLEAS6W zM(PD1nc>o}ynqDeNJ+V-NvdpIe0u_jP|0Mew;Yo$Ga7=TIiD}yy%)}z#3n3)qehL| z;T!!*H|jK7ZHq_Of4YxXX#9Bhmw_>wiRDV|U%5Ks3SXqO>6_aAG?{W_a(A7G9ou(2 ze~IQ+{O?z4`^m!KOf)9W-j;AyKAT}d&+P#-z{7p(3~PV?_%NehE4DXH@p9M|QoR^K zd&YR5qo*-H9*g{4YnX{oRR?AktpLr8E_VEv7N8z*U<~A&hTyKgKmcMmiQAqaj@1!L zC7*?CQ4-)5+6~%Xq9&8c?VmmM?{D?NHEqN>^KCJ@o(mo z{G~(6H!%eomlDH{4pTeLr=J-9r72p-2-p#hjF&Yvc#tTIqVe^yLXP=>JCZkzdLLLj ztqcz^>}+jse*@20;4mYL)cPF#NvJ4qhe{lhLxR7M*|?2ABb22jJ9VlNlHL_|jY2zF zTwqWve}QTvEG+CNsPG_F`kv8{VA+$7leoz;xJ7UW85thtF!}U0jBjsucO3YhlBXg} zOn8u-x>BDBl~+-)7E}GXO_9?Bc|6ZFuo_(KfT;)!#o|C0MEaQ%kB1wdI)wdnDr_#vvB0f*k$l_F;kj2bKr z3K(>V9dJoOf8fAXVib(|@Zq)e<)`?V6y6?G6}7Yri>{RPB|I;W2ZRBgU+j%j8Vckl zc#EMpAIwg1obsQc_#MchrH8dvuFa$uGWJ9cBMG;~Mq|!h7@tlL2#8=cF{@+R$5h7k z`<(owB8z`Ud5iMm#lYSy&7qOwdOwns%XC0`Fw1cK5e8x$AF145$V$2LgqTEVC`l!Q z*XZlXHy8MlzIzNh{wR#M1sKcWEwknC_PEz&jGB_XxIlTs-wNdZQD~w64hIgc{Xr$>xnLAV9b7g4~9@)^IlfRqW zgjVZ%g8!-3X(l0#25^C19?kgxVxboip=Dr*bo9H<0m5*liF8VYCCct#I$Uua0;i__ zQv%4 zD-3}#&!VocfP@6L&(iR+PWV?IO6AZyb=ebHGdhS$dSCv0VCy6Jp01BBEI1gdd`8@^ zt}gnMxR8~t!%_8kNEDa$QJf9U>U>RprHMs?=i%>UvW@j`j?dK1{7y3_ZL9?Zy$CU8Pvr9NdA|NE2nCqt z;4%b15TQ;1l71Id@Nt(;56JvKwf-|*u=hOyQ`?2q*dBQPPbn!MwTm8K5VWHQJ(o{^ zWRo@b>O-fR99*5CKq$&Gu^i%65L?&d zhSRhE&FhDX0Ok5HrUOm&rV8Q*OZ=4}CHw-xzM!|7Std*xA9P)i@9DMJHJ^quQGv4- zbSP=vx6`_D@;wvmsoflI9O2vu<$U#%2)C=dE1!XhqT@ImALVCsruJj^@2P8anvUC! zlsB4=X9yNi>t{vXcIKx>LdJ5=lcF#d>W-;*0l;FFzB4le%@jORs#E~ItF^p%p^!H9 za!+jn3Wpv@kc4oY;4A=C_lZoi%&*X1hL))R=~z(nyZd{3(kJ7I;NO0N>DP=R>Kvc{ zY}OJTE_bG&`zrVQ)UUHbdrbQTwZBBO-|&MyFD374bv4oX=-Qx?NkGRNV2{{u&M8AC zei_8%jtVu0+aHEu8-GSYWo0UQ+1jjEEpC$*w2Vcz3^j@R@AWC|r=u?Kp+C@z;SfEw z^3o@?^v{XYPyp}F7Q-HYzJ&4izXwoZ{O^7R77)Jc zW!qv~7PtsjfXAIOBKQav;lA5s_?1;)IsGgHl92L=q0yu&UkoU+-!8u?d-}OeDVY@& zr?;r*&^_MVD`+DB1aztPE5kxxo0^ye1kRtjcs>99aHmD_uL@V_n+B0w&`CeYtIHCK z3Lkw=b4kXZV<8$UDqMHMBs5IHK-hf6&JU)GZn)@=-3}4aUIgWC#7w?Sqc43TDB4oC z=ZDLRl5IeUtNzts@5IY(R>sVw&!Hall-VcDYa791chCatbw`>90=mz0e)BE z%?r?})TyoaycZdh0+WSkPpLmXfz;9hN}Of`n>c+Tl$l6{iuRH&m2qljFcIM64#dydCPt<| z>>9`pwAGw{e_=e>pB4wy#1dZo)bEX7a?|)?DxXbY29I6{0L387i4Lbni@ zWqt3~?^0v0H9>iY7`iAuh_xA@ghwSW?Mx;-=;{7q{3y;a+d}F5#r9}c#`B4# zi69ai>(4%Fii6@Fx>0bXVbIEc%~bck%gKLR*pz>2kpF=usxRv~VU;t2nSX`@aTMbe zcRJ$=KW?wZ?!05&XMlQ$88|84KR*B!8V=c=|H75^c+o+f-f^wQ3D0Yq@~pl++TSrm zBDc_cd;HS9L;~c8sA#9;8TvrRuFWzkTJE!<&+n6eK5)Iw`_TK``-j7Xpt4pt4ZSUy z*v^*bN6g4rn(27)SCi@U*)9`TPP*l2(5Lp2Vgm1Y1f*ZIudq93bG`$z6f&~uEgBR~ z20-c&s$QpM?6&%ry~}LX)*8BV!_Kt{WN34V-NJm=U_Du7rd7rr8;ai-6T_;? zGigw*{C#`AGI#ks*0c5}k}GXv^2o$8bZDwAa>XU?_6AEkF~87>dhtc8RP4>Nun@|S zW!hj{ZW;r~^O;#rk%Xxla>Q)RFr3u7ph9xIkymHbepih<`;$}i&iUt7gv0x5Xz3#E<7Wp z{P5>!3swMXYUO4%)5GyQ`+8)g7+!Y`BajeheAj zofQBUQ#$4N6sU7p%wEDa()bEZL;H%jK{LNw4hB6e3bMUVUbGmFyFh(bnT1~F=gKRL z;Y~c`&5k(Y`25?yRV*Ub4!oDw&jbRoXdZ)afSk5D+W$;uB9s zDsgw}ggmsf;n;~g5-%)j;vivZtQ-3x((ae>hP86If-7{V|7B{N14G0gbs$$W%pJAAD zoH$!7J=(q~aB{6jh>wwxgGaeg-nsvaIrp9L7T^lB9_{d7d`smnUf9ks5Cy_ZQd+?? zot>Sg+dn`#58?UwX)2E5gVq{ljBt_resz0_??*ZqWyoQtt~E0S)6>%}xd`M(jb{@#dH7w@U1Oa_i3o;kH6Qs33MlN}C)5?Sd zo|{$kmHPt9L)fA6VmMggk3LU3pP;!Uf7EX_O)>eB-ZP|#fo zZy9)`BsAwFJm(bk5EtsZ=8im(nt*2K*sj?}AU)5$U~}wCH@Wz>k)inP_+!zGyompj zKbikI&!?=O^8f3b8nP8kw^$eaLic`*3#_M+IYo~2RE&F*=pn}jmIvH(9qVPcg3 z084GKNC0r}Bn-0fhhxp&ZyFTJ|Lsdf^7>)EAr4eeI#y$V>8yj`$QYLE0_ar?0f^5 zJ3Af^0W=?0lC4BBj2Q*@0TL*550XkoQE=IaRCdp*>iq>y`42aLSg0(3APo=+Npo{H zDAm;`cTrh_N%NTx>l*kVCb{&FH}h|`uKSku_1>x%ZwPLr5ZO!E;?*T zCzI#%emYletJFWyLdTetdEe{LiR(?oViQ#O(`3YXQSg^$ayQ?f2@TcGJ+A)p$S29c z_VLZWPpOfM`#w?E3hxtv8mBh@QA0>b2%=0G3KcLoN<0LN{5eQXKg=pXW(u@=9f+AB zasq)?eSGAB)B=Vb5*n(UeGJ3I(F(iM2k{&D!Ou?t|KtYg2|V|mmA5EzS^&0B<@ozMsw=#!d{;x`9BiG_ zh}%*@(@)UrksqIfvJoE<+3HcfDb25rHpjrZUW_~)gf+j30ZFyO@m~rS#uTuG=`lV4l2{o-Zhf8=y-qjg-+Vzp&XN zP7jCUocvGgg^c+?#B{hEgk%n8?w?FN)E2s6KT$}*#PP&I=>eC8Qt2--7HP!K-+vN} zkY!=T8@LEJxC9aH`MWD6^-$Cml1@7P!oOzYLpp(Wbq`h^RFhHg}gSp2;CMPGAKul}YFDEB=2ee}V_FvWg zf&t z6h$6sE=@-K)k31t)PL*mD&{qI&z(IE68sVT}q$ETB z{{7RT5e!!!9$zi!7#X<)8~giP zdXL2g_Whk7C`!W?Yt-MvUMSk6PBeUAXG{M>8Yk;Vwt#Q^+2_>k3DAqQ5NW^rNn5Fh z%K$2?`|9SK_@P-(((Rk%il4VSw`WFN|MXtAueM<3T`khX))cYZu3uhwYvehA6xt)J z6BExsXpP#=eOXya;7lyf`~5d*67u1L&g3s>+Cf=3F0Fi|$gCqOToGD8?zp=P1EYio z1a^fHkNkLq28|i?$L<1X0{Y~2BR+YM&+$~Q;d&qKnTZ@M6`>MpXe+mLT$6dEyo9o9 ze`Y&M2h;2V`(X2#Zhgu5E2R`NW7$4vNvb7PiWg!gC-fQuHbk3NqD1I)nKC%u*UUJq z0jF0c3R(&*?XSX2{lIM{;Vx~t^Fg#ndLLff;>*N$gk!a5&cY$Gi6f;HzMa>SMt)6- z#k?lxkWrZVkEB*3R*}pC7e^a^AC*~y< zySQjLy`m5s0GRnWC^_f)a%hldzewmHx3-}fEjku+*nNwY7?QS4hn5Q?lfjKhKYw;?i;&y`=eRs zK;28;-0G70k^Vv``Z<%V$$->n9GtLui?FG?PLF<{l>Hmmv$jOFb(z4 zHuo|lw9Aqm>ksu?58!_vlenk+tWzM`Wn;LcaPl?=W z!*<{C8A}zg8vuOx{3W5K{F$>t?{7z}J??t&rfQq4i&$)AO*L!X>-ib3Yzop~*$pBB zP>Eido~<(;Q+RqyJX@UEb||5qLU~60PR=*~$8X0C1asP26C}woI}0xp6Y^aBzC9+> zakhhYo=RM;M;}d7h9M6^b1hV909?}3b3cLYv<~tuNVQAJ2f_QmlIoW(w}b8FoXa4m zH-~mEG+lz0Vl-#~x$+IfL^|09kBm4N8S7Ve(biq)%I3|qv(N3#78$A9|bUdzC!ZaI}J9(9&LtZSB*$XJ{{wlS|%j&Yvxg7blNa!ogdL8@oK3SF>@*qJ40O z#??j4BWEnksdl9Kv>6btVV|J3q02wIJ-b#hcBlXdx@b~tBO@z82(#A=r$Hz9q0<$F zKj9eO3<$E9?K}h#2^%<7R=TLPGA-H|??Z=nn9T+4EW)N6S?q4R-SIdGU7@Ru=J?Dk zA)(GX!E5IBczj}gRo+C8ZN`jc3-jF`b6~p-Al70&+(LK{jOQ@ z%qN~du&OUC|$-_Yk)5h#KfAqN=+S`_vYOL-o zMn6b)zWvlCkB|_P6y3sBIoZ%gNIvVSqM s2WG&Bm18{Ck^e1zd8HKbcgo=j886w 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 Time difference of 0.006282568 secs knitr::kable(summary(plm_bm)$coefficients, digits=3) start_time = Sys.time() psem_bm = phylosem( sem = \"x -> y, p\", data = Data, tree = tree, control = phylosem_control(quiet = TRUE) ) Sys.time() - start_time #> Time difference of 0.2023404 secs knitr::kable(summary(psem_bm)$coefficients, digits=3) # Compare using OU start_time = Sys.time() plm_ou = phylolm::phylolm(y ~ 1 + x, data=Data, phy=tree, model=\"OUrandomRoot\" ) Sys.time() - start_time #> Time difference of 0.01971412 secs start_time = Sys.time() psem_ou = phylosem( sem = \"x -> y, p\", data = Data, tree = tree, estimate_ou = TRUE, control = phylosem_control(quiet = TRUE) ) Sys.time() - start_time #> Time difference of 0.2175765 secs knitr::kable(summary(psem_ou)$coefficients, digits=3) knitr::kable(summary(plm_ou)$coefficients, digits=3) knitr::kable(c( \"phylolm_alpha\"=plm_ou$optpar, \"phylosem_alpha\"=exp(psem_ou$parhat$lnalpha) ), digits=3) # Compare using Pagel's lambda start_time = Sys.time() plm_lambda = phylolm::phylolm(y ~ 1 + x, data=Data, phy=tree, model=\"lambda\" ) Sys.time() - start_time #> Time difference of 0.04006314 secs start_time = Sys.time() psem_lambda = phylosem( sem = \"x -> y, p\", data = Data, tree = tree, estimate_lambda = TRUE, control = phylosem_control(quiet = TRUE) ) Sys.time() - start_time #> Time difference of 0.1816416 secs knitr::kable(summary(psem_lambda)$coefficients, digits=3) knitr::kable(summary(plm_lambda)$coefficients, digits=3) knitr::kable(c( \"phylolm_lambda\"=plm_lambda$optpar, \"phylosem_lambda\"=plogis(psem_lambda$parhat$logitlambda) ), digits=3) # Compare using Pagel's kappa start_time = Sys.time() plm_kappa = phylolm::phylolm(y ~ 1 + x, data=Data, phy=tree, model=\"kappa\", lower.bound = 0, upper.bound = 3 ) Sys.time() - start_time #> Time difference of 0.01122952 secs start_time = Sys.time() psem_kappa = phylosem( sem = \"x -> y, p\", data = Data, tree = tree, estimate_kappa = TRUE, control = phylosem_control(quiet = TRUE) ) Sys.time() - start_time #> Time difference of 0.156039 secs knitr::kable(summary(psem_kappa)$coefficients, digits=3) knitr::kable(summary(plm_kappa)$coefficients, digits=3) knitr::kable(c( \"phylolm_kappa\"=plm_kappa$optpar, \"phylosem_kappa\"=exp(psem_kappa$parhat$lnkappa) ), digits=3)"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/comparison.html","id":"generalized-linear-models","dir":"Articles","previous_headings":"","what":"Generalized linear models","title":"Comparison with other packages","text":"also compare results among software fitting phylogenetic generalized linear models (PGLM).","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/comparison.html","id":"poisson-distributed-response","dir":"Articles","previous_headings":"Generalized linear models","what":"Poisson-distributed response","title":"Comparison with other packages","text":"First, specifically explore Poisson-distributed PGLM, comparing phylosem phylolm::phyloglm (uses Generalized Estimating Equations) phyr::pglmm_compare (uses maximum likelihood). also compare results brms (fits Bayesian hierarchical model), although load results compiled run brms avoid users install STAN run vignettes phylosem: instance (others explored), results phylolm::phyloglm generally different phylosem, phyr::pglmm_compare, brms close quite identical.","code":"# Settings Ntree = 100 sd_x = 0.3 sd_y = 0.3 b0_x = 1 b0_y = 0 b_xy = 1 # Simulate tree set.seed(1) tree = ape::rtree(n=Ntree) # Simulate data x = b0_x + sd_x * phylolm::rTrait(n = 1, phy=tree) ybar = b0_y + b_xy*x y_normal = ybar + sd_y * phylolm::rTrait(n = 1, phy=tree) y_pois = rpois( n=Ntree, lambda=exp(y_normal) ) # Construct, re-order, and reduce data Data = data.frame(x=x,y=y_pois) # Compare using phylolm::phyloglm pglm = phylolm::phyloglm(y ~ 1 + x, data=Data, phy=tree, method=\"poisson_GEE\" ) knitr::kable(summary(pglm)$coefficients, digits=3) # pglmm = phyr::pglmm_compare( y ~ 1 + x, family = \"poisson\", data = Data, phy = tree ) knitr::kable(summary(pglmm), digits=3) #> Generalized linear mixed model for poisson data fit by restricted maximum likelihood #> #> Call:y ~ 1 + x #> #> logLik AIC BIC #> -173.4 354.7 360.6 #> #> Phylogenetic random effects variance (s2): #> Variance Std.Dev #> s2 0.05511 0.2348 #> #> Fixed effects: #> Value Std.Error Zscore Pvalue #> (Intercept) -0.57009 0.30469 -1.8710 0.06134 . #> x 1.18137 0.19807 5.9645 2.454e-09 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # pgsem = phylosem( sem = \"x -> y, p\", data = Data, family = c(\"fixed\",\"poisson\"), tree = tree, control = phylosem_control(quiet = TRUE) ) knitr::kable(summary(pgsem)$coefficients, digits=3) # Comare using Bayesian implementation in brms library(brms) Amat <- ape::vcv.phylo(tree) Data$tips <- rownames(Data) mcmc <- brm( y ~ 1 + x + (1 | gr(tips, cov = A)), data = Data, data2 = list(A = Amat), family = 'poisson', cores = 4 ) knitr::kable(fixef(mcmc), digits = 3) # Plot them together library(ggplot2) pdat <- rbind.data.frame( coef(summary(pglm))[, 1:2], data.frame(Estimate = pglmm$B, StdErr = pglmm$B.se), setNames(as.data.frame(fixef(mcmc))[1:2], c('Estimate', 'StdErr')), setNames(summary(pgsem)$coefficients[2:3, 3:4], c('Estimate', 'StdErr')) ) pdat$Param <- rep(c('Intercept', 'Slope'), 4) pdat$Method <- rep( c('phylolm::phyloglm', 'phyr::pglmm_compare', 'brms::brm', 'phylosem::phylosem'), each = 2) figure = ggplot(pdat, aes( x = Estimate, xmin = Estimate - StdErr, xmax = Estimate + StdErr, y = Param, color = Method )) + geom_pointrange(position = position_dodge(width = 0.6)) + theme_classic() + theme(panel.grid.major.x = element_line(), panel.grid.minor.x = element_line())"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/comparison.html","id":"binomial-regression","dir":"Articles","previous_headings":"Generalized linear models","what":"Binomial regression","title":"Comparison with other packages","text":"also compare results Bernoulli-distributed response using PGLM. compare phylosem phyr::pglmm_compare, explore threshold models expect give different results due differences assumptions latent variables affect measurements. instance, phylosem phyr::pglmm_compare give similar estimates standard errors slope term.","code":"# Settings Ntree = 100 sd_x = 0.3 sd_y = 0.3 b0_x = 1 b0_y = 0 b_xy = 1 # Simulate tree set.seed(1) tree = ape::rtree(n=Ntree) # Simulate data x = b0_x + sd_x * phylolm::rTrait(n = 1, phy=tree) ybar = b0_y + b_xy*x y_normal = ybar + sd_y * phylolm::rTrait(n = 1, phy=tree) y_binom = rbinom( n=Ntree, size=1, prob=plogis(y_normal) ) # Construct, re-order, and reduce data Data = data.frame(x=x,y=y_binom) # pglmm = phyr::pglmm_compare( y ~ 1 + x, family = \"binomial\", data = Data, phy = tree ) knitr::kable(summary(pglmm), digits=3) #> Generalized linear mixed model for binomial data fit by restricted maximum likelihood #> #> Call:y ~ 1 + x #> #> logLik AIC BIC #> -63.74 135.47 141.32 #> #> Phylogenetic random effects variance (s2): #> Variance Std.Dev #> s2 0.1076 0.328 #> #> Fixed effects: #> Value Std.Error Zscore Pvalue #> (Intercept) 0.23179 0.60507 0.3831 0.7017 #> x 0.44548 0.45708 0.9746 0.3297 # pgsem = phylosem( sem = \"x -> y, p\", data = Data, family = c(\"fixed\",\"binomial\"), tree = tree, control = phylosem_control(quiet = TRUE) ) knitr::kable(summary(pgsem)$coefficients, digits=3)"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/comparison.html","id":"summary-of-pglm-results","dir":"Articles","previous_headings":"Generalized linear models","what":"Summary of PGLM results","title":"Comparison with other packages","text":"Based two comparisons, conclude phylosem provides interface maximum-likelihood estimate phylogenetic generalized linear models (PGLM), extends class include mixed data (.e., combination different measurement types), missing data, non-recursive structural linkages. However, also encourage cross-testing different software fitting phylogenetic generalized linear models.","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/comparison.html","id":"compare-with-phylopath","dir":"Articles","previous_headings":"","what":"Compare with phylopath","title":"Comparison with other packages","text":"next compare single run phylopath. confirms runtimes within order magnitude results identical standardized unstandardized coefficients.","code":"library(phylopath) library(phylosem) # make copy of data that's rescaled rhino_scaled = rhino rhino_scaled[,c(\"BM\",\"NL\",\"LS\",\"DD\",\"RS\")] = scale(rhino_scaled[,c(\"BM\",\"NL\",\"LS\",\"DD\",\"RS\")]) # Fit and plot using phylopath dag <- DAG(RS ~ DD, LS ~ BM, NL ~ BM, DD ~ NL) start_time = Sys.time() result <- est_DAG( DAG = dag, data = rhino, tree = rhino_tree, model = \"BM\", measurement_error = FALSE ) Sys.time() - start_time #> Time difference of 0.01085401 secs plot(result) # Fit and plot using phylosem model = \" DD -> RS, p1 BM -> LS, p2 BM -> NL, p3 NL -> DD, p4 \" start_time = Sys.time() psem = phylosem( sem = model, data = rhino_scaled[,c(\"BM\",\"NL\",\"DD\",\"RS\",\"LS\")], tree = rhino_tree, control = phylosem_control(quiet = TRUE) ) Sys.time() - start_time #> Time difference of 0.4487958 secs plot( as_fitted_DAG(psem) )"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/comparison.html","id":"comparison-with-sem","dir":"Articles","previous_headings":"","what":"Comparison with sem","title":"Comparison with other packages","text":"next compare syntax runtime R-package sem. confirms runtimes within order magnitude specifying star-phylogeny phylosem match assumed structure sem compare estimated values standardized coefficients also compare values unstandardized coefficients:","code":"library(sem) library(TreeTools) # Simulation parameters n_obs = 50 # Intercepts a1 = 1 a2 = 2 a3 = 3 a4 = 4 # Slopes b12 = 0.3 b23 = 0 b34 = 0.3 # Standard deviations s1 = 0.1 s2 = 0.2 s3 = 0.3 s4 = 0.4 # Simulate data E1 = rnorm(n_obs, sd=s1) E2 = rnorm(n_obs, sd=s2) E3 = rnorm(n_obs, sd=s3) E4 = rnorm(n_obs, sd=s4) Y1 = a1 + E1 Y2 = a2 + b12*Y1 + E2 Y3 = a3 + b23*Y2 + E3 Y4 = a4 + b34*Y3 + E4 Data = data.frame(Y1=Y1, Y2=Y2, Y3=Y3, Y4=Y4) # Specify path diagram (in this case, using correct structure) equations = \" Y2 = b12 * Y1 Y4 = b34 * Y3 \" model <- specifyEquations(text=equations, exog.variances=TRUE, endog.variances=TRUE) # Fit using package:sem start_time = Sys.time() Sem <- sem(model, data=Data) Sys.time() - start_time #> Time difference of 0.0172503 secs # Specify star phylogeny tree_null = TreeTools::StarTree(n_obs) tree_null$edge.length = rep(1,nrow(tree_null$edge)) rownames(Data) = tree_null$tip.label # Fit using phylosem start_time = Sys.time() psem = phylosem( data = Data, sem = equations, tree = tree_null, control = phylosem_control(quiet = TRUE) ) Sys.time() - start_time #> Time difference of 0.07748628 secs"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/comparison.html","id":"comparison-with-rphylopars","dir":"Articles","previous_headings":"","what":"Comparison with Rphylopars","title":"Comparison with other packages","text":"Finally, compare syntax runtime R-package Rphylopars. confirms can impute identical estimates using packages, specifying full-rank covariance phylosem note phylosem also allows parsimonious representations trait covariance via inputted SEM structure.","code":"library(Rphylopars) # Format data, within no values for species t1 Data = rhino[,c(\"BM\",\"NL\",\"DD\",\"RS\",\"LS\")] rownames(Data) = tree$tip.label Data['t1',] = NA # fit using phylopars start_time = Sys.time() pars <- phylopars( trait_data = cbind(species=rownames(Data),Data), tree = tree, pheno_error = FALSE, phylo_correlated = TRUE, pheno_correlated = FALSE) Sys.time() - start_time #> Time difference of 0.1071289 secs # Display estimates for missing values knitr::kable(cbind( \"Estimate\"=pars$anc_recon[\"t1\",], \"Var\"=pars$anc_var[\"t1\",] ), digits=3) # fit using phylosem start_time = Sys.time() psem = phylosem( data = Data, tree = tree, sem = \"\", covs = \"BM, NL, DD, RS, LS\", control = phylosem_control(quiet = TRUE) ) Sys.time() - start_time #> Time difference of 0.674578 secs # Display estimates for missing values knitr::kable(cbind( \"Estimate\"=as.list(psem$sdrep,\"Estimate\")$x_vj[ match(\"t1\",tree$tip.label), ], \"Var\"=as.list(psem$sdrep,\"Std. Error\")$x_vj[ match(\"t1\",tree$tip.label), ]^2 ), digits=3)"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/demonstration.html","id":"estimability-for-multiple-covariance-transformations","dir":"Articles","previous_headings":"","what":"Estimability for multiple covariance transformations","title":"Demonstration of selected features","text":"default, phylosem takes input phylogenetic tree constructs covariance Brownian motion evolutionary model. However, also allows combination following transformations: Ornstein-Uhlenbeck (OU); Pagel’s lambda; Pagel’s kappa; results eight possible covariance models formed including excluding transformation. first show transformations simultaneously estimable reference data set. see minimum eigenvalue precision matrix (corresponds maximum eigenvalue covariance matrix) greater zero, precision invertible Hessian matrix full rank. can see parameters estimable applying three transformations. also see transformation parameters perfectly correlated, although logit-lambda ln-alpha parameters correlation approximately 0.75. can also extract standard errors, calculated square-root diagonal elements covariance matrix. extract estimated values lnalpha, logitlambda, lnkappa plot plot 95% confidence interval estimates plus minus 1.96 times standard errors. values unbounded construction. However, also convert estimates, lower, upper confidence-interval bounds conventional parameters alpha, lambda, kappa, plot well. derived quantities bounded expected Ornstein-Uhlenbeck Pagel parameters: confidence intervals suggest parameter lnkappa overlaps 0.0, suggesting Pagel’s kappa overlaps 1.0 instead turned thereby fixed default value.","code":"# Compare using Pagel's kappa library(phylopath) # Run phylosem model = \" DD -> RS, p1 BM -> LS, p2 BM -> NL, p3 NL -> DD, p4 \" psem = phylosem( sem = model, data = rhino[,c(\"BM\",\"NL\",\"DD\",\"RS\",\"LS\")], estimate_ou = TRUE, estimate_lambda = TRUE, estimate_kappa = TRUE, tree = rhino_tree, control = phylosem_control( getJointPrecision = TRUE, quiet = TRUE) ) # V = psem$sdrep$cov.fixed Rsub = cov2cor(V)[c('lnalpha','logitlambda','lnkappa'),c('lnalpha','logitlambda','lnkappa')] knitr::kable(c(\"minimum_eigenvalue\"=min(eigen(psem$sdrep$jointPrecision)$values), \"maximum_eigenvalue\"=max(eigen(psem$sdrep$jointPrecision)$values)), digits=3) knitr::kable(Rsub, digits=3) library(ggplot2) # Compile estimates and SEs pdat = data.frame( \"Estimate\" = psem$sdrep$par.fixed[c('lnalpha','logitlambda','lnkappa')], \"StdErr\" = sqrt(diag(V)[c('lnalpha','logitlambda','lnkappa')]) ) pdat = cbind( pdat, \"Param\" = rownames(pdat)) # pdat$lower = pdat$Estimate - 1.96*pdat$StdErr pdat$upper = pdat$Estimate + 1.96*pdat$StdErr pdat$type = \"estimated\" # Transform from log / logit-space to natural space pdat2 = pdat pdat2$Param = c(\"alpha\", \"lambda\", \"kappa\") pdat2['lnalpha',c(\"Estimate\",\"lower\",\"upper\")] = exp(pdat2['lnalpha',c(\"Estimate\",\"lower\",\"upper\")]) pdat2['lnkappa',c(\"Estimate\",\"lower\",\"upper\")] = exp(pdat2['lnkappa',c(\"Estimate\",\"lower\",\"upper\")]) pdat2['logitlambda',c(\"Estimate\",\"lower\",\"upper\")] = plogis(as.numeric(pdat2['logitlambda',c(\"Estimate\",\"lower\",\"upper\")])) pdat2$type = \"derived\" # Plot ggplot( rbind(pdat,pdat2), aes( x=Param, y = Estimate, ymin = lower, ymax = upper)) + geom_pointrange(position = position_dodge(width = 0.6)) + theme_classic() + facet_grid( rows=vars(type), scales=\"free\" )"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/demonstration.html","id":"scaling-of-runtime-with-increased-tree-size","dir":"Articles","previous_headings":"","what":"Scaling of runtime with increased tree size","title":"Demonstration of selected features","text":"package phylolm expected “linear runtime”, .e., proportional increase runtime increasing tree size. therefore compare runtime phylosem phylolm using simulated tree across three orders magnitude (10, 100, 1000, 10000 tips). Results show packages approximately linear runtime, phylolm approximately 10-100 times faster given tree size.","code":"# Settings Ntree_config = c( 1e1, 1e2, 1e3, 1e4 ) Nreplicates = 5 sd_x = 0.3 sd_y = 0.3 b0_x = 1 b0_y = 0 b_xy = 1 # Simulate tree set.seed(1) Time_rcz = array(NA, dim=c(Nreplicates,length(Ntree_config),2), dimnames=list(NULL,\"tree_size\"=Ntree_config,\"package\"=c(\"phylolm\",\"phylosem\")) ) for( rI in seq_len(Nreplicates) ){ for( cI in seq_along(Ntree_config) ){ # Simulate data tree = ape::rtree(n=Ntree_config[cI]) x = b0_x + sd_x * phylolm::rTrait(n = 1, phy=tree) ybar = b0_y + b_xy*x y_normal = ybar + sd_y * phylolm::rTrait(n = 1, phy=tree) Data = data.frame(x=x, y=y_normal)[] # Run phylolm start_time = Sys.time() plm_bm = phylolm::phylolm(y ~ 1 + x, data=Data, phy=tree, model=\"BM\" ) Time_rcz[rI,cI,\"phylolm\"] = Sys.time() - start_time # Run phylosem start_time = Sys.time() psem_bm = phylosem( sem = \"x -> y, p\", data = Data, tree = tree, control = phylosem_control( quiet = TRUE, newton_loops = 0, getsd = FALSE) ) Time_rcz[rI,cI,\"phylosem\"] = Sys.time() - start_time }} # Format df = apply( Time_rcz, MARGIN=2:3, FUN=mean ) df = cbind( expand.grid(dimnames(df)), \"time_seconds\"=as.vector(df) ) # Plot library(ggplot2) ggplot(data=df, aes(x=tree_size, y=time_seconds, group=package, color=package)) + geom_line() + geom_point() + scale_y_log10()"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/fisheries.html","id":"preparing-the-then-et-al--mortality-database","dir":"Articles","previous_headings":"","what":"Preparing the Then et al. mortality database","title":"Phylogenetic comparative methods in fisheries science","text":"demonstrate potential role PCM fisheries science, re-analyze foundational dataset compiled et al.. specifically download file “Mlifehist_ver1.0.csv” include copy data object package phylosem simplify following demonstration. demonstration provides basic syntax output PCM, showing relationship natural mortality rate, longevity, growth parameters. , first load phylogeny fishes using package fishtree, includes several versions phylogeny fishes develoepd Rabosky et al.. associate trait data tip label phylogeny, provide convenient names modeled variables.","code":"# Load packages library(phylosem) library(fishtree) # Download tree out = fishtree_complete_phylogeny() tree = out[[1]] # Load data object data( Mlifehist_ver1_0 ) Data = Mlifehist_ver1_0 # Reformat to match tree$tip.label Data$Genus_species = factor( paste0(Data$Genus, \"_\", Data$Species) ) # Drop duplicates ... not dealing with variation among stocks within species Data = Data[match(unique(Data$Genus_species),Data$Genus_species), ] # log-transform to simplify later syuntax Data = cbind( Data, \"logM\" = log(Data[,'M']), \"logK\" = log(Data[,'K']), \"logtmax\" = log(Data[,'tmax']), \"logLinf\" = log(Data[,'Linf']) ) # Identify species in both datasets species_to_use = intersect( tree$tip.label, Data$Genus_species ) species_to_drop = setdiff( Data$Genus_species, tree$tip.label ) # Drop tips not present in trait-data # Not strictly necessary, but helpful to simplify later plots tree = ape::keep.tip( tree, tip=species_to_use ) # Drop trait-data not in phylogeny # Necessary to define correlation among data rows_to_use = which( Data$Genus_species %in% species_to_use ) Data = Data[rows_to_use,] # Only include modeled variables in trait-data passed to phylosem rownames(Data) = Data$Genus_species Data = Data[,c('logM','logK','logtmax','logLinf')]"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/fisheries.html","id":"fitting-and-selecting-among-phylogenetic-structural-equation-models","dir":"Articles","previous_headings":"","what":"Fitting and selecting among phylogenetic structural equation models","title":"Phylogenetic comparative methods in fisheries science","text":"define path diagram specifying set linkages among variables. following, use path diagram ensures mortality rate statistically independent growth, conditional upon measurement longevity. specification ensures , longevity available, sole information used predict mortality rate. However, longevity available, model reverts predicting mortality growth parameters. fit model using phylogenetic structural equation models. specifically apply grid-search across eight models formed combination modeled transformations phylogenetic tree. use marginal AIC select model, list estimated path coefficients.","code":"# Specify SEM structure sem_structure = \" logK -> logtmax, b1 logLinf -> logtmax, b2 logtmax -> logM, a \" # Grid-search model selection using AIC for transformations Grid = expand.grid( \"OU\" = c(FALSE,TRUE), \"lambda\" = c(FALSE,TRUE), \"kappa\" = c(FALSE,TRUE) ) psem_grid = NULL for( i in 1:nrow(Grid)){ psem_grid[[i]] = phylosem( data=Data, tree = tree, sem = sem_structure, estimate_ou = Grid[i,'OU'], estimate_lambda = Grid[i,'lambda'], estimate_kappa = Grid[i,'kappa'], control = phylosem_control(quiet = TRUE) ) } # Extract AIC for each model and rank-order by parsimony Grid$AIC = sapply( psem_grid, \\(m) AIC(m) ) Grid = Grid[order(Grid$AIC,decreasing=FALSE),] # Select model with lowest AIC psem_best = psem_grid[[as.numeric(rownames(Grid[1,]))]]"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/fisheries.html","id":"visualizing-output","dir":"Articles","previous_headings":"","what":"Visualizing output","title":"Phylogenetic comparative methods in fisheries science","text":"Finally, can convert output formats packages, use existing third-party PCM packages plot, query, post-process output. also show plot output using phylosignal, although currently unavailable CRAN therefore commented :","code":"# Plot path diagram my_fitted_DAG = as_fitted_DAG(psem_best) plot(my_fitted_DAG, type=\"color\") # Total, direct, and indirect effects my_sem = as_sem(psem_best) effects(my_sem) #> #> Total Effects (column on row) #> logK logtmax logLinf #> logtmax -0.4480233 0.000000 0.4073488 #> logM 0.4579994 -1.022267 -0.4164192 #> #> Direct Effects #> logK logtmax logLinf #> logtmax -0.4480233 0.000000 0.4073488 #> logM 0.0000000 -1.022267 0.0000000 #> #> Indirect Effects #> logK logtmax logLinf #> logtmax 0.0000000 0 0.0000000 #> logM 0.4579994 0 -0.4164192 # Load for plotting, # https://r-pkgs.org/vignettes.html#sec-vignettes-eval-option library(phylosignal) # Plot using phylobase my_phylo4d = as_phylo4d( psem_best ) barplot(my_phylo4d)"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/fisheries.html","id":"sensitivity-to-using-taxonomic-tree","dir":"Articles","previous_headings":"","what":"Sensitivity to using taxonomic tree","title":"Phylogenetic comparative methods in fisheries science","text":"analysis, can also conduct sensivity analyses. , show construct taxonomic tree use place phylogenetic information. , requires code reformat data statistical analysis simple specify. estimated path coefficients similar estimates using phyogeny.","code":"library(ape) Data = Mlifehist_ver1_0 # Make taxonomic factors Data$Genus_species = factor( paste0(Data$Genus, \"_\", Data$Species) ) Data$Genus = factor( Data$Genus ) Data$Family = factor( Data$Family ) Data$Order = factor( Data$Order ) # Make taxonomic tree tree = ape::as.phylo( ~Order/Family/Genus/Genus_species, data=Data, collapse=FALSE) tree$edge.length = rep(1,nrow(tree$edge)) tree = collapse.singles(tree) tmp = root(tree, node=ape::Ntip(tree)+1 ) # Drop duplicates ... not dealing with variation among stocks within species Data = Data[match(unique(Data$Genus_species),Data$Genus_species), ] # log-transform to simplify later syuntax Data = cbind( Data, \"logM\" = log(Data[,'M']), \"logK\" = log(Data[,'K']), \"logtmax\" = log(Data[,'tmax']), \"logLinf\" = log(Data[,'Linf']) ) # Only include modeled variables in trait-data passed to phylosem rownames(Data) = Data$Genus_species Data = Data[,c('logM','logK','logtmax','logLinf')] # Fit model psem_taxon = phylosem( data=Data, tree = tree, sem = sem_structure, estimate_ou = TRUE, control = phylosem_control(quiet = TRUE) ) # Plot path diagram my_fitted_DAG = as_fitted_DAG(psem_taxon) plot(my_fitted_DAG, type=\"color\")"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/phylopath.html","id":"model-comparison-some-important-differences","dir":"Articles","previous_headings":"","what":"Model comparison: some important differences","title":"Detailed comparison with `phylopath`","text":"Let’s start loading Rhinogrades example data phylogeny. supply data model comparison functions, already two important differences flag . Firstly, phylo_path consciders columns data actually used models. compare_phylosem . rhino, first column contains copy species names, need exclude column (using rhino[-1]). , using phylosem, make sure data.frame contains variables ’d like inlcude analysis. Secondly, get standardized path coefficients, phylopath standardize data variable unit variance, phylosem keeps data original scale. make better comparison packages, ’ll standardize data manually . Now can define causal models want compare. First phylopath, use formulas can use DAG() define model, define_model_set() create list models: phylosem, can define models similarly, need use strings instead. Also note need write parameter front varialble (e.g. b1, b2, etc.). compare multiple models, collect models list: can now run model comparison. phylopath use d-separation , phylosem fitting structural equation model . Note phylo_path, specify want Brownian motion model (\"BM\"), default compare_phylosem. models perform? phylopath can use summary get table CICc values: phylosem, can extract AIC values model: Even though methodology used quite different, obtain similar result: model 5 fits much better models. However, methods somewhat differ ranking models. largely due different philosophies two approaches. phylopath uses PPA method described Von Hardenberg & Gonzalez-Voyer, uses Shipley’s d-separation. essence, method finds pairs variables causal model claims independent (conditionally independent), tests whether indeed case. phylosem hand directly evaluates fit casual model data. sense, phylosem analyzes paths included model phylopath analyzes paths included. Another source difference CICc metric used phylopath employs correction small sample sizes phylosem’s AIC metric . conclusion, cases one model clearly fits best (Brownian motion model) expect methods lead conclusion, don’t expect model comparison results match closely.","code":"data(rhino, rhino_tree, package = 'phylopath') rhino_std <- rhino[-1] rhino_std[] <- lapply(rhino_std, scale) models_pp <- phylopath::define_model_set( one = c(RS ~ DD), two = c(DD ~ NL, RS ~ LS + DD), three = c(RS ~ NL), four = c(RS ~ BM + NL), five = c(RS ~ BM + NL + DD), six = c(NL ~ RS, RS ~ BM), seven = c(NL ~ RS, RS ~ LS + BM), eight = c(NL ~ RS), nine = c(NL ~ RS, RS ~ LS), .common = c(LS ~ BM, NL ~ BM, DD ~ NL) ) models_ps <- list( one = 'RS = b1 * DD', two = 'DD = b1 * NL; RS = b2 * LS + b3 * DD', three = 'RS = b1 * NL', four = 'RS = b * BM + b2 * NL', five = 'RS = b1 * BM + b2 * NL + b3 * DD', six = 'NL = b1 * RS; RS = b2 * BM', seven = 'NL = b1 * RS; RS = b2 * LS + b3 * BM', eight = 'NL = b1 * RS', nine = 'NL = b1 * RS; RS = b2 * LS' ) # we add the .common paths, by pasting them at the end of each of the model strings, e.g.: models_ps <- lapply( models_ps, \\(x) paste(x, c('LS = b1_ * BM; NL = b2_ * BM; DD = b3_ * NL'), sep = '; ') ) result_pp <- phylopath::phylo_path( models_pp, data = rhino_std, tree = rhino_tree, model = 'BM' ) library(phylosem) result_ps <- phylosem::compare_phylosem( models_ps, tree = rhino_tree, data = rhino_std ) summary(result_pp) #> model k q C p CICc delta_CICc l w #> five five 4 11 60.7 3.39e-10 85.7 0.0 1.00e+00 1.00e+00 #> eight eight 6 9 101.9 2.22e-16 121.9 36.2 1.38e-08 1.38e-08 #> three three 6 9 111.8 0.00e+00 131.8 46.0 1.00e-10 1.00e-10 #> nine nine 5 10 110.7 0.00e+00 133.2 47.5 4.85e-11 4.85e-11 #> six six 5 10 111.0 0.00e+00 133.5 47.8 4.25e-11 4.25e-11 #> one one 6 9 113.9 0.00e+00 133.9 48.2 3.49e-11 3.49e-11 #> four four 5 10 113.7 0.00e+00 136.2 50.5 1.08e-11 1.08e-11 #> two two 5 10 115.2 0.00e+00 137.6 51.9 5.31e-12 5.31e-12 #> seven seven 4 11 114.2 0.00e+00 139.2 53.5 2.45e-12 2.45e-12 sapply(result_ps, AIC) |> sort() #> five eight four six nine two seven one #> 1680.150 1730.808 1732.720 1732.720 1732.739 1733.104 1734.716 1735.057 #> three #> 1736.103"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/phylopath.html","id":"model-fitting-sometimes-different","dir":"Articles","previous_headings":"","what":"Model fitting: sometimes different","title":"Detailed comparison with `phylopath`","text":"take best model, particular model, perform model averaging, phylopath phylosem work largely way. packages implemented best(), choice() average() methods respective output types. can get best model (model 5) using best(). phylopath paths now fitted, phylosem already done model just extracted compare_phylosem object: compare two, can convert phylosem result DAG format phylopath uses, use included plot functionality: phylopath now actually fitting causal model , performing d-separation procedure. makes methods much closely aligned, can see output matches closely. However, generally hold true assuming Brownian motion. deviate assumption using (example) Pagel’s lambda model, default phylopath, longer true: reason happens phylosem implements additional parameters estimating single estimated parameter variables model. phylopath, hand, estimates separate lambda residuals regression ran. est_DAG() means one lambda variable modelled cause, phylo_path() means one lambda tested d-separation statement.","code":"best_pp <- phylopath::best(result_pp) best_ps <- phylosem::best(result_ps) plot(best_pp) plot(as_fitted_DAG(best_ps)) phylopath::est_DAG( models_pp$five, data = rhino_std, tree = rhino_tree, model = 'lambda' ) |> plot() phylosem::phylosem( models_ps$five, tree = rhino_tree, data = rhino_std, estimate_lambda = TRUE ) |> as_fitted_DAG() |> plot()"},{"path":"https://james-thorson-noaa.github.io/phylosem/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"James Thorson. Author, maintainer. Wouter van der Bijl. Contributor.","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Thorson, J. T., Maureaud, . ., Frelat, R., Mérigot, B., Bigman, J. S., Friedman, S. T., Palomares, M. L. D., Pinsky, M. L., Price, S. ., & Wainwright, P. (2023). Identifying direct indirect associations among traits merging phylogenetic comparative methods structural equation models. Methods Ecology Evolution, 14(5), 1259–1275. https://doi.org/10.1111/2041-210X.14076 Thorson, J. T., & van der Bijl, W. (2023). phylosem: fast simple R package phylogenetic inference trait imputation using phylogenetic structural equation models. Journal Evolutionary Biology. 36(10): 1357-1364. https://doi.org/10.1111/jeb.14234","code":"@Article{, title = {Identifying direct and indirect associations among traits by merging phylogenetic comparative methods and structural equation models}, journal = {Methods in Ecology and Evolution}, volume = {14}, number = {5}, pages = {1259–1275}, year = {2023}, doi = {10.1111/2041-210X.14076}, url = {https://doi.org/10.1111/2041-210X.14076}, author = {J. T. Thorson and A. A. Maureaud and R. Frelat and B. Mérigot and J. S. Bigman and S. T. Friedman and M. L. D. Palomares and M. L. Pinsky and S. A. Price and P. Wainwright}, } @Article{, title = {phylosem: A fast and simple R package for phylogenetic inference and trait imputation using phylogenetic structural equation models}, journal = {Journal of Evolutionary Biology}, volume = {36}, number = {10}, pages = {1357-1364}, year = {2023}, doi = {10.1111/jeb.14234}, url = {https://doi.org/10.1111/jeb.14234}, author = {James T. Thorson and & Wouter {van der Bijl}}, }"},{"path":"https://james-thorson-noaa.github.io/phylosem/index.html","id":"phylogenetic-structural-equation-models","dir":"","previous_headings":"","what":"Phylogenetic structural equation models","title":"Phylogenetic Structural Equation Model","text":"Package phylosem combines features structural equation models (SEM), phylogenetic comparative methods (PCM), generalized linear mixed models (GLMM). , incorporates broad feature-set: Comparing multiple evolutionary models similar phylopath Estimating trade-offs among multiple traits similar phylolm Predicting missing trait values (associated standard errors) similar Rphylopars Estimating tradeoffs including recursive (cyclic) dependencies similar package sem Applying ordination multiple traits, similar phylogenetic factor analysis package FishLife phylosem specifically intended minimal implementation, uses standard packages input/output formatting: Input: phylogenetic relatedness defined using class phylo package ape Input: structural trade-offs specified using syntax defined package sem Output: visualizing trade-offs using semPlot, diagrammeR, ggraph Output: assembling trait predictions standard errors using phylobase Output: plotting trait predictions using phylosignal Please see package vignettes details regarding syntax features.","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/Mlifehist_ver1_0.html","id":null,"dir":"Reference","previous_headings":"","what":"Fisheries natural mortality example — Mlifehist_ver1_0","title":"Fisheries natural mortality example — Mlifehist_ver1_0","text":"Data used demonstrate phylogenetic comparative methods fisheries science. Specifically copy et al. database doi:10.1093/icesjms/fsu136 using file \"Mlifehist_ver1.0.csv\" accessed https://www.vims.edu/research/departments/fisheries/programs/mort_db/","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/Mlifehist_ver1_0.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fisheries natural mortality example — Mlifehist_ver1_0","text":"","code":"data(Mlifehist_ver1_0)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_fitted_DAG.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert phylosem to phylopath output — as_fitted_DAG","title":"Convert phylosem to phylopath output — as_fitted_DAG","text":"Convert output package phylosem phylopath","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_fitted_DAG.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert phylosem to phylopath output — as_fitted_DAG","text":"","code":"as_fitted_DAG(object)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_fitted_DAG.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert phylosem to phylopath output — as_fitted_DAG","text":"object Output phylosem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_fitted_DAG.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert phylosem to phylopath output — as_fitted_DAG","text":"Convert output format supplied est_DAG","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_phylo4d.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert phylosem to phylo4d — as_phylo4d","title":"Convert phylosem to phylo4d — as_phylo4d","text":"Convert output package phylosem phylo4d object package phylobase","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_phylo4d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert phylosem to phylo4d — as_phylo4d","text":"","code":"as_phylo4d(object, what = c(\"Estimate\", \"Std. Error\"))"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_phylo4d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert phylosem to phylo4d — as_phylo4d","text":"object Output phylosem Select convert (Estimate / Std. Error).","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_phylo4d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert phylosem to phylo4d — as_phylo4d","text":"phylosem output converted format supplied phylo4d","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_phylo4d.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Convert phylosem to phylo4d — as_phylo4d","text":"package intended use using plots assocaited package sem, e.g., using package plotSEM semPlot::semPlotModel","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_sem.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert phylosem to sem output — as_sem","title":"Convert phylosem to sem output — as_sem","text":"Convert output package phylosem output package sem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_sem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert phylosem to sem output — as_sem","text":"","code":"as_sem(object)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_sem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert phylosem to sem output — as_sem","text":"object Output phylosem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_sem.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert phylosem to sem output — as_sem","text":"Output converted format supplied sem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/average.compare_phylosem.html","id":null,"dir":"Reference","previous_headings":"","what":"Choose model — average.compare_phylosem","title":"Choose model — average.compare_phylosem","text":"Choose model","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/average.compare_phylosem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Choose model — average.compare_phylosem","text":"","code":"# S3 method for compare_phylosem average(x, cut_off = 2, avg_method = \"conditional\")"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/average.compare_phylosem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Choose model — average.compare_phylosem","text":"x output compare_phylosem cut_off threshold model delta-AIC greater value excluded average avg_method see average_DAGs","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/average.compare_phylosem.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Choose model — average.compare_phylosem","text":"Returns AIC-weighted average fitted models compare_phylosem conversion format est_DAG","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/average.html","id":null,"dir":"Reference","previous_headings":"","what":"Choose model — average","title":"Choose model — average","text":"Choose model","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/average.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Choose model — average","text":"","code":"average(x, cut_off, avg_method)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/average.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Choose model — average","text":"x output compare_phylosem cut_off threshold model delta-AIC greater value excluded average avg_method see average_DAGs","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/average.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Choose model — average","text":"Returns AIC-weighted average fitted models compare_phylosem conversion format [phylopath::est_DAG]","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/best.compare_phylosem.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract best fitted model — best.compare_phylosem","title":"Extract best fitted model — best.compare_phylosem","text":"Extract best fitted model","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/best.compare_phylosem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract best fitted model — best.compare_phylosem","text":"","code":"# S3 method for compare_phylosem best(x)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/best.compare_phylosem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract best fitted model — best.compare_phylosem","text":"x output compare_phylosem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/best.compare_phylosem.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract best fitted model — best.compare_phylosem","text":"Returns best model fitted using compare_phylosem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/best.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract best fitted model — best","title":"Extract best fitted model — best","text":"Extract best fitted model","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/best.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract best fitted model — best","text":"","code":"best(x)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/best.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract best fitted model — best","text":"x output compare_phylosem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/best.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract best fitted model — best","text":"Returns best model fitted using compare_phylosem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/checkDepPackageVersion.html","id":null,"dir":"Reference","previous_headings":"","what":"Check for version mismatch in dependent binary packages — checkDepPackageVersion","title":"Check for version mismatch in dependent binary packages — checkDepPackageVersion","text":"Copied glmmTMB permission","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/checkDepPackageVersion.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check for version mismatch in dependent binary packages — checkDepPackageVersion","text":"","code":"checkDepPackageVersion( dep_pkg = \"TMB\", this_pkg = \"phylosem\", write_file = FALSE, warn = TRUE )"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/checkDepPackageVersion.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check for version mismatch in dependent binary packages — checkDepPackageVersion","text":"dep_pkg upstream package this_pkg downstream package write_file (logical) write version file quit? warn give warning?","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/checkDepPackageVersion.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check for version mismatch in dependent binary packages — checkDepPackageVersion","text":"logical: TRUE binary versions match","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/choice.compare_phylosem.html","id":null,"dir":"Reference","previous_headings":"","what":"Choose model — choice.compare_phylosem","title":"Choose model — choice.compare_phylosem","text":"Choose model","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/choice.compare_phylosem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Choose model — choice.compare_phylosem","text":"","code":"# S3 method for compare_phylosem choice(x, choice)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/choice.compare_phylosem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Choose model — choice.compare_phylosem","text":"x output compare_phylosem choice Integer indicating model extract","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/choice.compare_phylosem.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Choose model — choice.compare_phylosem","text":"Returns chosen model fitted using compare_phylosem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/choice.html","id":null,"dir":"Reference","previous_headings":"","what":"Choose model — choice","title":"Choose model — choice","text":"Choose model","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/choice.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Choose model — choice","text":"","code":"choice(x, choice)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/choice.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Choose model — choice","text":"x output compare_phylosem choice Integer indicating model extract","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/choice.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Choose model — choice","text":"Returns chosen model fitted using compare_phylosem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/coef.phylosem.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract path coefficients — coef.phylosem","title":"Extract path coefficients — coef.phylosem","text":"Extract path coefficients.","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/coef.phylosem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract path coefficients — coef.phylosem","text":"","code":"# S3 method for phylosem coef(object, standardized = FALSE, ...)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/coef.phylosem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract path coefficients — coef.phylosem","text":"object Output phylosem standardized Whether standardize regression coefficients ... used","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/coef.phylosem.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract path coefficients — coef.phylosem","text":"Data-frame listing path coefficients, parameter index estimated values","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/compare_phylosem.html","id":null,"dir":"Reference","previous_headings":"","what":"Compare phylogenetic structural equation models — compare_phylosem","title":"Compare phylogenetic structural equation models — compare_phylosem","text":"Fits several phylogenetic structural equation model comparison","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/compare_phylosem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compare phylogenetic structural equation models — compare_phylosem","text":"","code":"compare_phylosem( sem_set, tree, data, family = rep(\"fixed\", ncol(data)), covs, estimate_ou = FALSE, estimate_lambda = FALSE, estimate_kappa = FALSE, control = phylosem_control(), ... )"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/compare_phylosem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compare phylogenetic structural equation models — compare_phylosem","text":"sem_set named list structural equation model specifications, element passed argument sem phylosem tree phylogenetic structure, using class .phylo data data-frame providing variables modeled. Missing values inputted NA. SEM includes latent variable (.e., variable available measurements) still must inputted column data entirely NA values. family Character-vector listing distribution used column data, element must fixed, normal, binomial, poisson. family=\"fixed\" default behavior assumes given variable measured exactly. options correspond different specifications measurement error. covs optional: character vector one elements, element \tgiving string variable names, separated commas. Variances covariances \tamong variables string added model. confirmatory \tfactor analysis models specified via cfa, covs defaults \tfactors model, thus specifying variances covariances among factors. \tWarning: covs=\"x1, x2\" covs=c(\"x1\", \"x2\") \tequivalent: covs=\"x1, x2\" specifies variance x1, variance \tx2, covariance, covs=c(\"x1\", \"x2\") specifies \tvariance x1 variance x2 covariance. estimate_ou Boolean indicating whether estimate autoregressive (Ornstein-Uhlenbeck) process using additional parameter lnalpha, corresponding model=\"OUrandomRoot\" parameterization phylolm listed doi:10.1093/sysbio/syu005 estimate_lambda Boolean indicating whether estimate additional branch lengths phylogenetic tips (.k.. Pagel-lambda term) using additional parameter logitlambda estimate_kappa Boolean indicating whether estimate nonlinear scaling branch lengths (.k.. Pagel-kappa term) using additional parameter lnkappa control Output phylosem_control, used define user settings, see documentation function details. ... Additional arguments passed phylosem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/compare_phylosem.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compare phylogenetic structural equation models — compare_phylosem","text":"object (list) class `compare_phylosem`, containing list output phylosem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/list_parameters.html","id":null,"dir":"Reference","previous_headings":"","what":"List fixed and random effects — list_parameters","title":"List fixed and random effects — list_parameters","text":"list_parameters lists fixed random effects","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/list_parameters.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"List fixed and random effects — list_parameters","text":"","code":"list_parameters(Obj, verbose = TRUE)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/list_parameters.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"List fixed and random effects — list_parameters","text":"Obj Compiled TMB object verbose Boolean, whether print messages terminal","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/list_parameters.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"List fixed and random effects — list_parameters","text":"Tagged-list fixed random effects, returned invisibly printed screen","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/parse_path.html","id":null,"dir":"Reference","previous_headings":"","what":"Parse path — parse_path","title":"Parse path — parse_path","text":"parse_path copied sem::parse.path","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/parse_path.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Parse path — parse_path","text":"","code":"parse_path(path)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/parse_path.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Parse path — parse_path","text":"path text parse","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/parse_path.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Parse path — parse_path","text":"Tagged-list defining variables direction specified path coefficient","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/parse_path.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Parse path — parse_path","text":"Copied permission John Fox licence GPL (>= 2)","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/phylosem.html","id":null,"dir":"Reference","previous_headings":"","what":"Fit phylogenetic structural equation model — phylosem","title":"Fit phylogenetic structural equation model — phylosem","text":"Fits phylogenetic structural equation model","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/phylosem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fit phylogenetic structural equation model — phylosem","text":"","code":"phylosem( sem, tree, data, family = rep(\"fixed\", ncol(data)), covs = colnames(data), estimate_ou = FALSE, estimate_lambda = FALSE, estimate_kappa = FALSE, data_labels = rownames(data), tmb_inputs = NULL, control = phylosem_control() )"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/phylosem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fit phylogenetic structural equation model — phylosem","text":"sem structural equation model structure, passed either specifyModel specifyEquations parsed control set path coefficients variance-covariance parameters tree phylogenetic structure, using class .phylo data data-frame providing variables modeled. Missing values inputted NA. SEM includes latent variable (.e., variable available measurements) still must inputted column data entirely NA values. family Character-vector listing distribution used column data, element must fixed, normal, binomial, poisson. family=\"fixed\" default behavior assumes given variable measured exactly. options correspond different specifications measurement error. covs optional: character vector one elements, element \tgiving string variable names, separated commas. Variances covariances \tamong variables string added model. confirmatory \tfactor analysis models specified via cfa, covs defaults \tfactors model, thus specifying variances covariances among factors. \tWarning: covs=\"x1, x2\" covs=c(\"x1\", \"x2\") \tequivalent: covs=\"x1, x2\" specifies variance x1, variance \tx2, covariance, covs=c(\"x1\", \"x2\") specifies \tvariance x1 variance x2 covariance. estimate_ou Boolean indicating whether estimate autoregressive (Ornstein-Uhlenbeck) process using additional parameter lnalpha, corresponding model=\"OUrandomRoot\" parameterization phylolm listed doi:10.1093/sysbio/syu005 estimate_lambda Boolean indicating whether estimate additional branch lengths phylogenetic tips (.k.. Pagel-lambda term) using additional parameter logitlambda estimate_kappa Boolean indicating whether estimate nonlinear scaling branch lengths (.k.. Pagel-kappa term) using additional parameter lnkappa data_labels row data, listing corresponding name tree$tip.label. Default pulls data_labels rownames(data) tmb_inputs optional tagged list overrides default constructor TMB inputs (use risk) control Output phylosem_control, used define user settings, see documentation function details.","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/phylosem.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fit phylogenetic structural equation model — phylosem","text":"object (list) class `phylosem`. Elements include: data Copy argument data SEM_model SEM model parsed sem using specifyModel specifyEquations obj TMB object MakeADFun tree Copy argument tree tmb_inputs list inputs passed MakeADFun opt output nlminb sdrep output sdreport report output obj$report() parhat output obj$env$parList() containing maximum likelihood estimates empirical Bayes predictions","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/phylosem.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Fit phylogenetic structural equation model — phylosem","text":"Note parameters logitlambda, lnkappa, lnalpha estimated estimated single value applies modeled variables. differs default behavior phylolm, parameters apply \"response\" \"predictor\" variables. also differs default behavior phylopath, different value estimated call phylolm d-separation estimate path coefficients. However, consistent default behavior Rphylopars, estimates comparable case. additional parameters estimated unbounded support, differs somewhat default bounded estimates phylolm, although parameters match overriding phylolm defaults use unbounded support. Finally, phylosem allows three parameters estimated combination, expanded functionality relative single-option functionality phylolm. Also note phylopath default uses standardized coefficients. achieve matching parameter estimates phylosem phylopath, standardize variable standard deviation 1.0 prior fitting phylosem.","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/phylosem.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Fit phylogenetic structural equation model — phylosem","text":"**Introducing package, features, comparison software (cite using phylosem):** Thorson, J. T., & van der Bijl, W. (press). phylosem: fast simple R package phylogenetic inference trait imputation using phylogenetic structural equation models. Journal Evolutionary Biology. doi:10.1111/jeb.14234 *Statistical methods phylogenetic structural equation models* Thorson, J. T., Maureaud, . ., Frelat, R., Merigot, B., Bigman, J. S., Friedman, S. T., Palomares, M. L. D., Pinsky, M. L., Price, S. ., & Wainwright, P. (2023). Identifying direct indirect associations among traits merging phylogenetic comparative methods structural equation models. Methods Ecology Evolution, 14(5), 1259-1275. doi:10.1111/2041-210X.14076 *Earlier development computational methods, originally used phlogenetic factor analysis:* Thorson, J. T. (2020). Predicting recruitment density dependence intrinsic growth rate fishes worldwide using data-integrated life-history model. Fish Fisheries, 21(2), 237-251. doi:10.1111/faf.12427 Thorson, J. T., Munch, S. B., Cope, J. M., & Gao, J. (2017). Predicting life history parameters fishes worldwide. Ecological Applications, 27(8), 2262-2276. doi:10.1002/eap.1606 *Earlier development phylogenetic path analysis:* van der Bijl, W. (2018). phylopath: Easy phylogenetic path analysis R. PeerJ, 6, e4718. doi:10.7717/peerj.4718 von Hardenberg, ., & Gonzalez-Voyer, . (2013). Disentangling evolutionary cause-effect relationships phylogenetic confirmatory path analysis. Evolution; International Journal Organic Evolution, 67(2), 378-387. doi:10.1111/j.1558-5646.2012.01790.x *Interface involving SEM `arrow notation` repurposed :* Fox, J., Nie, Z., & Byrnes, J. (2020). Sem: Structural equation models. R package version 3.1-11. https://CRAN.R-project.org/package=sem *Coercing output phylo4d depends upon:* Bolker, B., Butler, M., Cowan, P., de Vienne, D., Eddelbuettel, D., Holder, M., Jombart, T., Kembel, S., Michonneau, F., & Orme, B. (2015). phylobase: Base package phylogenetic structures comparative data. R Package Version 0.8.0. https://CRAN.R-project.org/package=phylobase *Laplace approximation parameter estimation depends upon:* Kristensen, K., Nielsen, ., Berg, C. W., Skaug, H., & Bell, B. M. (2016). TMB: Automatic differentiation Laplace approximation. Journal Statistical Software, 70(5), 1-21. doi:10.18637/jss.v070.i05","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/phylosem.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fit phylogenetic structural equation model — phylosem","text":"","code":"# Load data set data(rhino, rhino_tree, package=\"phylopath\") # Run phylosem model = \" DD -> RS, p1 BM -> LS, p2 BM -> NL, p3 NL -> DD, p4 \" psem = phylosem( sem = model, data = rhino[,c(\"BM\",\"NL\",\"DD\",\"RS\",\"LS\")], tree = rhino_tree ) #> NOTE: it is generally simpler to use specifyEquations() or cfa() #> see ?specifyEquations #> List of estimated fixed and random effects: #> Coefficient_name Number_of_coefficients Type #> 1 beta_z 9 Fixed #> 2 x_vj 495 Random #> Running nlminb_loop #1 #> Running newton_loop #1 #> Running sdreport # Convert and plot using phylopath library(phylopath) #> #> Attaching package: ‘phylopath’ #> The following objects are masked from ‘package:phylosem’: #> #> average, best, choice my_fitted_DAG = as_fitted_DAG(psem) coef_plot( my_fitted_DAG ) #> The fitted model does not contain confidence intervals, so showing standard errors instead. Fit the model with `boot` larger than 0 to get confidence intervals, or set `error_bar = \"se\"` to avoid this warning. plot( my_fitted_DAG ) # Convert to phylo4d to extract estimated traits and Standard errors # for all ancestors and tips in the tree. # In this rhino example, note that species are labeled s1-s100 # and ancestral nodes are not named. (traits_est = as_phylo4d(psem)) #> label node ancestor edge.length node.type BM NL #> 1 s1 1 107 0.5640308162 tip -0.76690456 -2.01757398 #> 2 s2 2 107 0.5640308162 tip -1.00970438 -1.74246592 #> 3 s3 3 106 0.6358275951 tip -1.22528123 -2.46855326 #> 4 s4 4 105 0.7144448083 tip 1.33053521 0.34055901 #> 5 s5 5 104 1.1830950600 tip 2.49234369 1.22400475 #> 6 s6 6 109 0.0361022107 tip 1.42514860 2.96922655 #> 7 s7 7 109 0.0361022107 tip 0.35610742 2.01122280 #> 8 s8 8 112 0.5022074646 tip -0.53161422 0.18490174 #> 9 s9 9 112 0.5022074646 tip -0.15373314 0.81809201 #> 10 s10 10 111 1.7871837580 tip 1.11171876 1.24302184 #> 11 s11 11 116 0.5913975424 tip 0.19579448 2.13282693 #> 12 s12 12 119 0.0477228892 tip 0.20125048 3.08972748 #> 13 s13 13 119 0.0477228892 tip 1.52219709 2.96228199 #> 14 s14 14 120 0.1142573039 tip -1.00338251 1.86652322 #> 15 s15 15 120 0.1142573039 tip 1.07689653 1.52906374 #> 16 s16 16 121 0.2756963162 tip 1.61531748 3.57241266 #> 17 s17 17 121 0.2756963162 tip -0.17420285 0.43146654 #> 18 s18 18 122 0.5512595516 tip 2.90711896 3.25268633 #> 19 s19 19 123 0.0349638989 tip 2.40453010 2.24981247 #> 20 s20 20 123 0.0349638989 tip 0.82895203 1.20324781 #> 21 s21 21 114 0.8767527377 tip 2.64255460 3.86427495 #> 22 s22 22 113 1.7461743450 tip -0.07719953 3.19026617 #> 23 s23 23 125 0.9075157185 tip -0.30484408 3.51060091 #> 24 s24 24 125 0.9075157185 tip 1.52258759 3.21435348 #> 25 s25 25 126 0.5415591015 tip 1.23860573 2.04363009 #> 26 s26 26 127 0.1089356405 tip 1.95343200 3.06738965 #> 27 s27 27 127 0.1089356405 tip 1.68648719 4.22039397 #> 28 s28 28 130 3.0857795440 tip 1.23934345 2.26507981 #> 29 s29 29 131 1.6399242000 tip -1.10263719 -1.63892351 #> 30 s30 30 132 0.8944032869 tip 0.08301170 0.42665712 #> 31 s31 31 133 0.7715950937 tip 1.01879042 0.03819250 #> 32 s32 32 133 0.7715950937 tip 0.02167732 -0.37157709 #> 33 s33 33 136 0.8699913472 tip 0.73065935 1.95289384 #> 34 s34 34 137 0.8479589114 tip 2.72407349 3.49784027 #> 35 s35 35 137 0.8479589114 tip 3.76646555 4.49878875 #> 36 s36 36 138 0.4591954289 tip -2.33729326 1.74995773 #> 37 s37 37 139 0.1736071099 tip 0.30205947 2.68777644 #> 38 s38 38 139 0.1736071099 tip -1.33960415 1.76434408 #> 39 s39 39 141 2.0905969730 tip 4.27686830 3.21806190 #> 40 s40 40 143 0.0744131178 tip 1.25068016 -0.71254314 #> 41 s41 41 143 0.0744131178 tip 1.41155371 -0.43526905 #> 42 s42 42 144 0.9370864528 tip 0.08393879 0.23591102 #> 43 s43 43 145 0.0881684468 tip 2.84964114 0.68816551 #> 44 s44 44 145 0.0881684468 tip 2.99095373 1.80145127 #> 45 s45 45 147 1.7204295900 tip 5.13749665 4.26473497 #> 46 s46 46 149 1.1842473100 tip 2.58859925 1.56946821 #> 47 s47 47 149 1.1842473100 tip 1.43384898 1.65242204 #> 48 s48 48 150 1.0253154590 tip 2.80876268 3.24344386 #> 49 s49 49 152 0.7195368746 tip 1.22593514 5.02896634 #> 50 s50 50 152 0.7195368746 tip 2.61927222 0.67351377 #> 51 s51 51 153 0.3613256451 tip 2.30223945 1.34901806 #> 52 s52 52 153 0.3613256451 tip 2.56528288 1.45099218 #> 53 s53 53 155 0.3002640020 tip 0.40340933 -1.65526609 #> 54 s54 54 155 0.3002640020 tip 0.88479865 -1.98334601 #> 55 s55 55 154 0.5937157619 tip 0.46893874 -0.62261098 #> 56 s56 56 156 3.2486997580 tip 2.95039314 4.03454344 #> 57 s57 57 161 0.4215356986 tip 1.53656023 0.46891422 #> 58 s58 58 161 0.4215356986 tip 2.50142020 0.45568152 #> 59 s59 59 162 0.0698869058 tip 2.33417280 -0.61028405 #> 60 s60 60 162 0.0698869058 tip 2.39854268 0.90424064 #> 61 s61 61 164 0.9090035873 tip 1.15944783 0.14368777 #> 62 s62 62 165 0.7237639845 tip 0.59250982 -1.00793024 #> 63 s63 63 167 0.3390345394 tip -0.70393275 -1.59874559 #> 64 s64 64 167 0.3390345394 tip 1.58394613 0.45296021 #> 65 s65 65 168 0.3269574705 tip 1.59263345 0.56850859 #> 66 s66 66 168 0.3269574705 tip 2.15658024 -0.88396728 #> 67 s67 67 170 0.4816150364 tip 5.26743199 2.18963416 #> 68 s68 68 171 0.0359279485 tip 1.34622701 -1.84421537 #> 69 s69 69 171 0.0359279485 tip 2.18241698 -0.76580964 #> 70 s70 70 173 0.6413136611 tip 2.93983039 -0.11351013 #> 71 s71 71 175 0.0945133814 tip 3.01129396 1.25866166 #> 72 s72 72 176 0.0006422211 tip 2.59398228 1.21303645 #> 73 s73 73 176 0.0006422211 tip 2.71938915 1.62942984 #> 74 s74 74 174 0.3139612126 tip 2.60745101 0.91920273 #> 75 s75 75 177 0.0359670563 tip 4.86547665 0.44478185 #> 76 s76 76 177 0.0359670563 tip 5.43684487 0.22107243 #> 77 s77 77 180 0.8668137583 tip 1.58687164 1.50654438 #> 78 s78 78 181 0.5981367654 tip 0.09365673 0.40527336 #> 79 s79 79 182 0.0727809267 tip 0.27286020 0.21689207 #> 80 s80 80 182 0.0727809267 tip 2.25220200 -1.07873909 #> 81 s81 81 179 1.5434906440 tip 1.05736541 -0.05289912 #> 82 s82 82 183 0.8078943991 tip 4.69785604 0.33163484 #> 83 s83 83 184 0.4661635151 tip 3.52231773 1.69620670 #> 84 s84 84 185 0.1900157199 tip 1.60779377 2.53614523 #> 85 s85 85 185 0.1900157199 tip 1.90789841 2.74261353 #> 86 s86 86 188 0.2378751898 tip 3.94393984 -1.28344814 #> 87 s87 87 190 0.0040209131 tip 2.67507049 -0.72928762 #> 88 s88 88 190 0.0040209131 tip 4.02248087 1.27038228 #> 89 s89 89 189 0.0295310172 tip 4.11611390 0.89924275 #> 90 s90 90 195 0.3502461608 tip 2.45594624 0.51529773 #> 91 s91 91 196 0.1859710332 tip 4.14053815 2.17333172 #> 92 s92 92 196 0.1859710332 tip 3.16070940 -0.62189645 #> 93 s93 93 194 0.8106943515 tip 2.97788577 -0.22596947 #> 94 s94 94 193 0.8259283637 tip 3.93086602 1.00077297 #> 95 s95 95 197 0.4469879611 tip 1.54045681 0.11089573 #> 96 s96 96 197 0.4469879611 tip 1.04974779 2.05813396 #> 97 s97 97 198 0.2644025504 tip 4.08564283 1.22297875 #> 98 s98 98 198 0.2644025504 tip 3.47019109 1.80421473 #> 99 s99 99 199 0.0717127012 tip -1.51698326 -2.66773226 #> 100 s100 100 199 0.0717127012 tip -1.55493000 -1.25446488 #> 101 101 0 NA root 1.37537396 1.29911665 #> 102 102 101 0.3278789676 internal 1.16700652 1.46268576 #> 103 103 102 0.0448143702 internal 1.14127151 1.44843940 #> 104 104 103 1.7536273230 internal 0.80116123 -0.04630783 #> 105 105 104 0.4686502517 internal 0.04035308 -0.94897241 #> 106 106 105 0.0786172132 internal -0.22924544 -1.24229608 #> 107 107 106 0.0717967789 internal -0.36298395 -1.37170519 #> 108 108 103 0.5388417629 internal 0.93634388 1.73643821 #> 109 109 108 2.3617784090 internal 0.89097477 2.48450717 #> 110 110 108 0.1838847379 internal 0.86994281 1.77647687 #> 111 111 110 0.4268121240 internal 0.68585957 1.45889941 #> 112 112 111 1.2849762930 internal -0.17453886 0.65800392 #> 113 113 110 0.4678215366 internal 0.90278222 2.22643059 #> 114 114 113 0.8694216075 internal 1.45174623 2.58275128 #> 115 115 114 0.0071530214 internal 1.44654748 2.57522749 #> 116 116 115 0.2782021739 internal 0.86447464 2.32881108 #> 117 117 116 0.1696001798 internal 0.70138920 2.23479250 #> 118 118 117 0.1745800373 internal 0.52173009 2.28117789 #> 119 119 118 0.1994944362 internal 0.82540175 2.94643376 #> 120 120 118 0.1329600215 internal 0.18250929 1.87312200 #> 121 121 117 0.1461010464 internal 0.71125182 2.11498215 #> 122 122 115 0.3183401648 internal 1.88123312 2.52235493 #> 123 123 122 0.5162956527 internal 1.62540354 1.75259450 #> 124 124 102 1.5076279270 internal 1.07467482 2.69406705 #> 125 125 124 0.5663931071 internal 0.81605854 3.06517183 #> 126 126 124 0.9323497240 internal 1.44328773 2.84469772 #> 127 127 126 0.4326234610 internal 1.77783916 3.55452384 #> 128 128 101 0.0206999989 internal 1.38852884 1.28879004 #> 129 129 128 0.2000464880 internal 1.33869173 1.25256763 #> 130 130 129 0.0028896898 internal 1.33645716 1.25093770 #> 131 131 130 1.4458553430 internal 0.26389060 -0.03977885 #> 132 132 131 0.7455209135 internal 0.33208018 0.02167613 #> 133 133 132 0.1228081933 internal 0.37751187 -0.02380741 #> 134 134 129 0.6949407786 internal 1.70295554 1.51871663 #> 135 135 134 0.9138552433 internal 1.13478525 2.30724483 #> 136 136 135 0.6098818644 internal 1.98297090 2.97989486 #> 137 137 136 0.0220324358 internal 2.04532689 3.03020353 #> 138 138 135 1.0206777830 internal -0.91929472 2.06222134 #> 139 139 138 0.2855883190 internal -0.61213304 2.18786984 #> 140 140 134 0.0802496379 internal 1.79491314 1.48020658 #> 141 141 140 0.2228818440 internal 1.93611785 1.40251215 #> 142 142 141 0.2076500851 internal 1.83517586 1.14979654 #> 143 143 142 1.8085337700 internal 1.34127779 -0.53915958 #> 144 144 142 0.9458604351 internal 1.63368609 0.88198103 #> 145 145 144 0.8489180060 internal 2.85678218 1.22689695 #> 146 146 140 0.1770607381 internal 1.88563084 1.45696065 #> 147 147 146 0.4159884892 internal 2.40357460 2.04245093 #> 148 148 147 0.1695261804 internal 2.34525741 2.06207604 #> 149 149 148 0.3666560998 internal 2.21751655 1.88955477 #> 150 150 148 0.5255879506 internal 2.34756636 2.37022333 #> 151 151 150 0.2079515725 internal 2.25494138 2.31503928 #> 152 152 151 0.0978270115 internal 2.18389259 2.42967093 #> 153 153 151 0.4560382411 internal 2.38302136 1.65964448 #> 154 154 146 1.5427023170 internal 0.75523426 -0.91688085 #> 155 155 154 0.2934517599 internal 0.68171630 -1.51387805 #> 156 156 128 0.0400159638 internal 1.42392811 1.27607295 #> 157 157 156 0.4026925133 internal 1.59094851 0.80617095 #> 158 158 157 0.7951233038 internal 1.94014906 0.57576258 #> 159 159 158 0.3736798197 internal 2.09528413 0.38387613 #> 160 160 159 1.1492712710 internal 2.14639670 0.34532781 #> 161 161 160 0.1063971509 internal 2.10365653 0.38456695 #> 162 162 160 0.4580459438 internal 2.35076674 0.16103746 #> 163 163 159 0.2335971502 internal 2.18187420 0.27175804 #> 164 164 163 0.5346033834 internal 1.43309091 -0.13103237 #> 165 165 164 0.1852396028 internal 1.22940201 -0.32658223 #> 166 166 165 0.1474062575 internal 1.19702794 -0.34342541 #> 167 167 166 0.2373231876 internal 0.75543298 -0.47728109 #> 168 168 166 0.2494002564 internal 1.60632063 -0.23125539 #> 169 169 163 0.4262080943 internal 2.93682275 0.38831503 #> 170 170 169 0.5357838400 internal 3.31558918 0.40274303 #> 171 171 170 0.4456870879 internal 1.82442522 -1.23884620 #> 172 172 169 0.3680846598 internal 3.32860306 0.47906468 #> 173 173 172 0.0080005555 internal 3.31402225 0.48288912 #> 174 174 173 0.3273524485 internal 2.90843309 0.94379679 #> 175 175 174 0.2194478311 internal 2.84691345 1.26996664 #> 176 176 175 0.0938711603 internal 2.65733422 1.42071746 #> 177 177 172 0.6133471602 internal 5.09924499 0.33708989 #> 178 178 158 0.3661103260 internal 1.94894404 0.65767175 #> 179 179 178 0.1412829703 internal 1.78053559 0.59541556 #> 180 180 179 0.6766768859 internal 1.29098355 0.58146426 #> 181 181 180 0.2686769929 internal 1.00489189 0.28918765 #> 182 182 181 0.5253558386 internal 1.24584098 -0.38427402 #> 183 183 178 0.8768792154 internal 3.01524389 1.24025010 #> 184 184 183 0.3417308840 internal 2.71906704 1.85162298 #> 185 185 184 0.2761477952 internal 2.00389796 2.43773069 #> 186 186 157 0.4967710625 internal 1.57881801 0.37044145 #> 187 187 186 0.8026320886 internal 2.63989652 0.47536690 #> 188 188 187 1.3087289040 internal 3.73176237 -0.25942644 #> 189 189 188 0.2083441725 internal 3.71974615 0.52049204 #> 190 190 189 0.0255101041 internal 3.37587615 0.28880652 #> 191 191 187 0.3703056422 internal 2.82049596 0.73168597 #> 192 192 191 0.1968950188 internal 2.73597270 0.72052113 #> 193 193 192 0.1534750686 internal 2.96263400 0.63791542 #> 194 194 193 0.0152340122 internal 2.96727375 0.62302314 #> 195 195 194 0.4604481907 internal 3.10148300 0.65510394 #> 196 196 195 0.1642751276 internal 3.45213971 0.73212244 #> 197 197 192 0.5324154713 internal 1.72111346 0.97689560 #> 198 198 191 0.9118959007 internal 3.65669043 1.41459293 #> 199 199 186 2.2775234810 internal -1.48767902 -1.92496075 #> DD RS LS #> 1 -0.792261887 -3.392696532 -0.094767133 #> 2 1.764320772 -1.046718911 -2.146334945 #> 3 -1.806155037 -2.859660611 -0.632068429 #> 4 0.948874128 -0.278689412 -0.134264890 #> 5 1.624151256 0.220814157 0.608236202 #> 6 2.252422051 2.426804694 3.085533985 #> 7 4.108146451 1.633655726 1.223147978 #> 8 -1.160995541 0.999431600 0.517537813 #> 9 1.341758025 1.304985166 1.521502859 #> 10 0.570073147 0.720705268 1.017846421 #> 11 2.828030732 2.001705516 -0.919563025 #> 12 2.980595831 1.521314671 0.131015359 #> 13 1.359162717 2.162885763 1.163026706 #> 14 1.848692884 1.583433981 0.927126010 #> 15 2.141254323 0.189198068 1.812639133 #> 16 1.560178083 2.781747914 3.347392203 #> 17 -0.073939690 0.027354662 0.900742360 #> 18 3.402771712 -0.457261541 -0.106852864 #> 19 2.876235296 0.463291813 1.744751921 #> 20 2.660581053 0.222790773 -0.532153665 #> 21 2.299374032 3.217700305 -1.138669460 #> 22 1.993843377 2.765155326 -0.621091021 #> 23 2.443433385 2.335835676 0.469978073 #> 24 3.979027350 3.226436578 2.780465714 #> 25 2.034137013 0.942969691 3.576663764 #> 26 3.027626293 1.238032443 3.065084710 #> 27 3.714825776 1.176979136 1.534261968 #> 28 0.675597786 2.317952086 -0.218626950 #> 29 -2.974709277 -1.760554760 -1.239583231 #> 30 0.867846728 2.592129904 0.021198341 #> 31 -1.320245499 0.237320570 -0.105135494 #> 32 -1.143376610 0.425657695 0.271740269 #> 33 3.123728954 1.116995185 3.162476646 #> 34 1.753272053 2.688262363 4.250866454 #> 35 1.210588042 1.223837757 2.943572655 #> 36 0.909660193 2.451038343 1.895478114 #> 37 1.859861867 0.828466484 2.481719676 #> 38 2.717730773 0.796806294 1.126178674 #> 39 4.477326061 2.610442179 1.465738306 #> 40 2.277574874 0.484494584 1.791592125 #> 41 1.593822132 1.454823177 0.729183055 #> 42 2.322463839 0.204364321 -0.885061737 #> 43 2.292615149 -1.418461690 3.138543805 #> 44 2.146223656 -0.184209303 3.099199564 #> 45 2.055324236 2.083887955 2.952789127 #> 46 2.486684424 1.457198741 4.701207454 #> 47 1.420995810 1.601339097 1.396442779 #> 48 3.405244971 1.876423665 4.818320993 #> 49 2.446367879 4.942733281 1.918220026 #> 50 0.373382213 -0.811619200 2.145960417 #> 51 0.858730865 2.844229971 2.215893641 #> 52 2.048278126 1.876438183 2.253066255 #> 53 -0.979401859 0.066992787 1.239294862 #> 54 -1.520667823 -0.517780882 0.002562199 #> 55 0.649664697 0.296776545 0.993825267 #> 56 4.379073801 2.422662868 0.795863984 #> 57 -0.328722937 1.480830939 -1.445882168 #> 58 0.646239216 0.424770897 -1.916304907 #> 59 0.835999391 0.217055270 -0.355409430 #> 60 0.142267982 2.659357457 -0.333557662 #> 61 1.587819101 2.699486648 -0.405668792 #> 62 1.082524348 -0.011507182 0.161447095 #> 63 -1.299067758 1.555475543 -0.651822690 #> 64 0.351846112 0.605027979 2.046577980 #> 65 -0.279595862 1.236295365 -0.684431280 #> 66 0.115635072 -0.342677375 -0.311295514 #> 67 2.599415169 -0.513369614 2.115479969 #> 68 -0.943343694 -0.906440767 0.753327404 #> 69 -0.891525122 -0.467958901 1.752160922 #> 70 -0.375173649 1.154414206 0.965969722 #> 71 -0.592328994 -0.336852088 1.329634282 #> 72 0.719152392 1.226426188 0.316414278 #> 73 1.599438191 0.789638349 0.899306546 #> 74 -0.332396124 -0.433700522 0.629458828 #> 75 0.175928921 0.707616811 2.808930860 #> 76 -0.311789389 -1.996944450 3.564422436 #> 77 2.868493105 0.326425814 -0.441878566 #> 78 -0.250515866 1.272618452 0.526962588 #> 79 0.398301132 0.929595781 2.317926260 #> 80 0.382728205 -0.729808449 2.075454233 #> 81 1.380853148 -0.655486117 1.238821897 #> 82 1.096240272 0.151342211 1.187553629 #> 83 0.794919057 3.466323051 1.677363592 #> 84 0.659773370 3.554223820 -1.116737022 #> 85 1.416964480 3.808228110 -0.272035393 #> 86 0.430344619 -0.918540236 3.601938769 #> 87 -1.503773245 -0.173989015 2.884114421 #> 88 -0.529029913 0.420256120 5.698224578 #> 89 1.230771112 -0.287094234 2.761662804 #> 90 0.560078571 2.048855290 1.138288790 #> 91 1.959411459 0.763497433 1.756392549 #> 92 0.698357920 0.787654206 1.640998942 #> 93 0.678480280 -0.093837593 1.648291943 #> 94 0.840604819 0.001959162 3.568538018 #> 95 0.992731804 2.524498697 2.340271301 #> 96 1.033125330 3.258153919 2.484460337 #> 97 0.270032796 3.015785994 2.745792037 #> 98 0.144785071 4.052392486 1.909532374 #> 99 -1.029371553 -1.760670551 -1.074155886 #> 100 -0.954367914 1.702235497 -0.555582075 #> 101 1.308843827 1.116983364 0.941671321 #> 102 1.500843440 1.095518802 0.946854714 #> 103 1.494577889 1.072951763 0.919909252 #> 104 0.798558133 -0.636985822 0.003413918 #> 105 0.285513704 -1.433753796 -0.481099535 #> 106 0.126453352 -1.694516361 -0.600543380 #> 107 0.199419762 -1.801089988 -0.706065112 #> 108 1.633109628 1.327025910 0.877534736 #> 109 3.168548867 2.024896376 2.144656353 #> 110 1.560837730 1.359395853 0.764417737 #> 111 1.135439910 1.220869473 0.851058307 #> 112 0.261217479 1.163432444 0.991981768 #> 113 1.843241992 1.593584710 0.381671289 #> 114 2.293090839 1.445486375 0.169633396 #> 115 2.296740634 1.429809245 0.178562730 #> 116 2.068841007 1.518722645 0.489558785 #> 117 1.712187338 1.434417686 1.083257103 #> 118 1.940872105 1.366000045 1.054468126 #> 119 2.145414094 1.791237720 0.690549218 #> 120 1.978714109 1.030478751 1.275088906 #> 121 1.213570447 1.419050458 1.618787592 #> 122 2.719952322 0.630368111 0.220090980 #> 123 2.766821179 0.352451641 0.593650281 #> 124 2.594464616 1.756013836 1.877177529 #> 125 2.936896160 2.325167049 1.737290454 #> 126 2.707100980 1.227585072 2.682779876 #> 127 3.296961835 1.209751107 2.342513313 #> 128 1.296722306 1.118338487 0.941344078 #> 129 1.164383097 1.118495599 0.943855518 #> 130 1.160313003 1.118077898 0.940846150 #> 131 -0.649041547 0.346875063 -0.021614045 #> 132 -0.524727502 0.907274878 0.035813489 #> 133 -0.695460246 0.768245367 0.047280182 #> 134 1.683466167 1.219494219 1.676302177 #> 135 1.810253231 1.473661832 2.372100281 #> 136 1.964019245 1.607147790 3.098631717 #> 137 1.940204635 1.624383130 3.123261340 #> 138 1.694523083 1.534142041 1.933333163 #> 139 2.150272810 0.980817437 1.834108238 #> 140 1.732274565 1.208837658 1.699781795 #> 141 2.018227402 1.159933763 1.598592939 #> 142 2.040386417 0.970299146 1.517515220 #> 143 1.937808809 0.969671787 1.265570786 #> 144 2.194970191 0.106828516 1.279967184 #> 145 2.218212435 -0.756502792 3.028091758 #> 146 1.612798864 1.224175296 1.831972593 #> 147 1.806870188 1.544144043 2.386029080 #> 148 1.861477377 1.621354858 2.555974674 #> 149 1.896798692 1.586139397 2.744450307 #> 150 1.980146158 1.911214308 2.812690102 #> 151 1.738063572 2.032954829 2.507484513 #> 152 1.667901811 2.039924690 2.405852377 #> 153 1.534247640 2.267440783 2.311944520 #> 154 -0.147891799 0.171198695 0.928999717 #> 155 -0.877011852 -0.091166271 0.725195972 #> 156 1.299761980 1.120926701 0.940209099 #> 157 0.948655082 0.985615977 0.946679770 #> 158 0.826966290 0.854360177 0.652302687 #> 159 0.621612795 0.779146856 0.439322451 #> 160 0.336050797 1.090538403 -0.928180900 #> 161 0.276575654 1.044332560 -1.180755300 #> 162 0.478283058 1.413563401 -0.385856446 #> 163 0.551283293 0.668836582 0.584137161 #> 164 0.594216305 1.017376552 0.175590443 #> 165 0.406613061 0.795359672 0.152480195 #> 166 0.119665632 0.783019034 0.132263730 #> 167 -0.226411699 0.956404490 0.461912941 #> 168 -0.002138993 0.579930789 -0.248365631 #> 169 0.388736091 0.189700133 1.174068323 #> 170 0.679411860 -0.359701226 1.522352945 #> 171 -0.855565241 -0.674511032 1.263190047 #> 172 0.048661117 0.153345062 1.444276295 #> 173 0.042746877 0.162667651 1.428068822 #> 174 0.014082113 0.037885115 1.000794444 #> 175 0.237042152 0.283856183 0.973912293 #> 176 1.156151241 1.005563482 0.609108318 #> 177 -0.064609116 -0.621932444 3.137044171 #> 178 0.972129054 0.867613889 0.725424288 #> 179 1.025171086 0.716639048 0.757475405 #> 180 1.123283232 0.595091884 0.699959101 #> 181 0.621294968 0.630106695 1.031045258 #> 182 0.405464837 0.134241374 2.121178648 #> 183 0.990603910 1.836390418 0.701632784 #> 184 0.953120717 2.926692616 0.486821499 #> 185 1.016547218 3.488081666 -0.392022456 #> 186 0.591549056 0.900698445 1.138580809 #> 187 0.563944049 1.086133686 2.126388552 #> 188 0.268872389 -0.355935806 3.459696990 #> 189 0.080471955 -0.092747344 3.547370950 #> 190 -0.936271794 0.107362828 4.236832864 #> 191 0.634698796 1.579721293 2.204867160 #> 192 0.752897750 1.473613342 2.223438386 #> 193 0.792236063 1.103061208 2.199555594 #> 194 0.795248656 1.086589529 2.171934487 #> 195 0.952624971 1.259177316 1.634498265 #> 196 1.192887579 0.950371055 1.675491901 #> 197 0.936047239 2.472161931 2.356507086 #> 198 0.261511431 3.286631493 2.312114168 #> 199 -0.967327452 -0.014804246 -0.784591384 (traits_SE = as_phylo4d(psem, what=\"Std. Error\")) #> label node ancestor edge.length node.type BM NL DD #> 1 s1 1 107 0.5640308162 tip NA NA NA #> 2 s2 2 107 0.5640308162 tip NA NA NA #> 3 s3 3 106 0.6358275951 tip NA NA NA #> 4 s4 4 105 0.7144448083 tip NA NA NA #> 5 s5 5 104 1.1830950600 tip NA NA NA #> 6 s6 6 109 0.0361022107 tip NA NA NA #> 7 s7 7 109 0.0361022107 tip NA NA NA #> 8 s8 8 112 0.5022074646 tip NA NA NA #> 9 s9 9 112 0.5022074646 tip NA NA NA #> 10 s10 10 111 1.7871837580 tip NA NA NA #> 11 s11 11 116 0.5913975424 tip NA NA NA #> 12 s12 12 119 0.0477228892 tip NA NA NA #> 13 s13 13 119 0.0477228892 tip NA NA NA #> 14 s14 14 120 0.1142573039 tip NA NA NA #> 15 s15 15 120 0.1142573039 tip NA NA NA #> 16 s16 16 121 0.2756963162 tip NA NA NA #> 17 s17 17 121 0.2756963162 tip NA NA NA #> 18 s18 18 122 0.5512595516 tip NA NA NA #> 19 s19 19 123 0.0349638989 tip NA NA NA #> 20 s20 20 123 0.0349638989 tip NA NA NA #> 21 s21 21 114 0.8767527377 tip NA NA NA #> 22 s22 22 113 1.7461743450 tip NA NA NA #> 23 s23 23 125 0.9075157185 tip NA NA NA #> 24 s24 24 125 0.9075157185 tip NA NA NA #> 25 s25 25 126 0.5415591015 tip NA NA NA #> 26 s26 26 127 0.1089356405 tip NA NA NA #> 27 s27 27 127 0.1089356405 tip NA NA NA #> 28 s28 28 130 3.0857795440 tip NA NA NA #> 29 s29 29 131 1.6399242000 tip NA NA NA #> 30 s30 30 132 0.8944032869 tip NA NA NA #> 31 s31 31 133 0.7715950937 tip NA NA NA #> 32 s32 32 133 0.7715950937 tip NA NA NA #> 33 s33 33 136 0.8699913472 tip NA NA NA #> 34 s34 34 137 0.8479589114 tip NA NA NA #> 35 s35 35 137 0.8479589114 tip NA NA NA #> 36 s36 36 138 0.4591954289 tip NA NA NA #> 37 s37 37 139 0.1736071099 tip NA NA NA #> 38 s38 38 139 0.1736071099 tip NA NA NA #> 39 s39 39 141 2.0905969730 tip NA NA NA #> 40 s40 40 143 0.0744131178 tip NA NA NA #> 41 s41 41 143 0.0744131178 tip NA NA NA #> 42 s42 42 144 0.9370864528 tip NA NA NA #> 43 s43 43 145 0.0881684468 tip NA NA NA #> 44 s44 44 145 0.0881684468 tip NA NA NA #> 45 s45 45 147 1.7204295900 tip NA NA NA #> 46 s46 46 149 1.1842473100 tip NA NA NA #> 47 s47 47 149 1.1842473100 tip NA NA NA #> 48 s48 48 150 1.0253154590 tip NA NA NA #> 49 s49 49 152 0.7195368746 tip NA NA NA #> 50 s50 50 152 0.7195368746 tip NA NA NA #> 51 s51 51 153 0.3613256451 tip NA NA NA #> 52 s52 52 153 0.3613256451 tip NA NA NA #> 53 s53 53 155 0.3002640020 tip NA NA NA #> 54 s54 54 155 0.3002640020 tip NA NA NA #> 55 s55 55 154 0.5937157619 tip NA NA NA #> 56 s56 56 156 3.2486997580 tip NA NA NA #> 57 s57 57 161 0.4215356986 tip NA NA NA #> 58 s58 58 161 0.4215356986 tip NA NA NA #> 59 s59 59 162 0.0698869058 tip NA NA NA #> 60 s60 60 162 0.0698869058 tip NA NA NA #> 61 s61 61 164 0.9090035873 tip NA NA NA #> 62 s62 62 165 0.7237639845 tip NA NA NA #> 63 s63 63 167 0.3390345394 tip NA NA NA #> 64 s64 64 167 0.3390345394 tip NA NA NA #> 65 s65 65 168 0.3269574705 tip NA NA NA #> 66 s66 66 168 0.3269574705 tip NA NA NA #> 67 s67 67 170 0.4816150364 tip NA NA NA #> 68 s68 68 171 0.0359279485 tip NA NA NA #> 69 s69 69 171 0.0359279485 tip NA NA NA #> 70 s70 70 173 0.6413136611 tip NA NA NA #> 71 s71 71 175 0.0945133814 tip NA NA NA #> 72 s72 72 176 0.0006422211 tip NA NA NA #> 73 s73 73 176 0.0006422211 tip NA NA NA #> 74 s74 74 174 0.3139612126 tip NA NA NA #> 75 s75 75 177 0.0359670563 tip NA NA NA #> 76 s76 76 177 0.0359670563 tip NA NA NA #> 77 s77 77 180 0.8668137583 tip NA NA NA #> 78 s78 78 181 0.5981367654 tip NA NA NA #> 79 s79 79 182 0.0727809267 tip NA NA NA #> 80 s80 80 182 0.0727809267 tip NA NA NA #> 81 s81 81 179 1.5434906440 tip NA NA NA #> 82 s82 82 183 0.8078943991 tip NA NA NA #> 83 s83 83 184 0.4661635151 tip NA NA NA #> 84 s84 84 185 0.1900157199 tip NA NA NA #> 85 s85 85 185 0.1900157199 tip NA NA NA #> 86 s86 86 188 0.2378751898 tip NA NA NA #> 87 s87 87 190 0.0040209131 tip NA NA NA #> 88 s88 88 190 0.0040209131 tip NA NA NA #> 89 s89 89 189 0.0295310172 tip NA NA NA #> 90 s90 90 195 0.3502461608 tip NA NA NA #> 91 s91 91 196 0.1859710332 tip NA NA NA #> 92 s92 92 196 0.1859710332 tip NA NA NA #> 93 s93 93 194 0.8106943515 tip NA NA NA #> 94 s94 94 193 0.8259283637 tip NA NA NA #> 95 s95 95 197 0.4469879611 tip NA NA NA #> 96 s96 96 197 0.4469879611 tip NA NA NA #> 97 s97 97 198 0.2644025504 tip NA NA NA #> 98 s98 98 198 0.2644025504 tip NA NA NA #> 99 s99 99 199 0.0717127012 tip NA NA NA #> 100 s100 100 199 0.0717127012 tip NA NA NA #> 101 101 0 NA root 1.22322635 1.61418789 1.72525631 #> 102 102 101 0.3278789676 internal 1.30071498 1.71644304 1.83454740 #> 103 103 102 0.0448143702 internal 1.31380257 1.73371363 1.85300633 #> 104 104 103 1.7536273230 internal 1.37288352 1.81167774 1.93633497 #> 105 105 104 0.4686502517 internal 0.97714845 1.28945978 1.37818444 #> 106 106 105 0.0786172132 internal 0.91260141 1.20428254 1.28714636 #> 107 107 106 0.0717967789 internal 0.91028188 1.20122166 1.28387486 #> 108 108 103 0.5388417629 internal 1.39262282 1.83772602 1.96417557 #> 109 109 108 2.3617784090 internal 0.30636597 0.40428514 0.43210304 #> 110 110 108 0.1838847379 internal 1.36644386 1.80317986 1.92725237 #> 111 111 110 0.4268121240 internal 1.51142111 1.99449403 2.13173041 #> 112 112 111 1.2849762930 internal 1.07717612 1.42145781 1.51926493 #> 113 113 110 0.4678215366 internal 1.44312706 1.90437217 2.03540748 #> 114 114 113 0.8694216075 internal 0.97715330 1.28946619 1.37819129 #> 115 115 114 0.0071530214 internal 0.97044019 1.28060746 1.36872301 #> 116 116 115 0.2782021739 internal 0.88470104 1.16746480 1.24779527 #> 117 117 116 0.1696001798 internal 0.74979954 0.98944675 1.05752823 #> 118 118 117 0.1745800373 internal 0.64458322 0.85060171 0.90912959 #> 119 119 118 0.1994944362 internal 0.34098890 0.44997408 0.48093573 #> 120 120 118 0.1329600215 internal 0.49663196 0.65536300 0.70045697 #> 121 121 117 0.1461010464 internal 0.70970095 0.93653205 1.00097259 #> 122 122 115 0.3183401648 internal 0.98266488 1.29673935 1.38596490 #> 123 123 122 0.5162956527 internal 0.29920899 0.39484068 0.42200872 #> 124 124 102 1.5076279270 internal 1.49221553 1.96915006 2.10464258 #> 125 125 124 0.5663931071 internal 1.32624680 1.75013522 1.87055785 #> 126 126 124 0.9323497240 internal 1.07523634 1.41889804 1.51652903 #> 127 127 126 0.4326234610 internal 0.51732351 0.68266788 0.72964063 #> 128 128 101 0.0206999989 internal 1.20634454 1.59191040 1.70144596 #> 129 129 128 0.2000464880 internal 1.25574263 1.65709685 1.77111774 #> 130 130 129 0.0028896898 internal 1.25884677 1.66119313 1.77549587 #> 131 131 130 1.4458553430 internal 1.57854250 2.08306843 2.22639940 #> 132 132 131 0.7455209135 internal 1.18802246 1.56773230 1.67560422 #> 133 133 132 0.1228081933 internal 1.13999603 1.50435591 1.60786705 #> 134 134 129 0.6949407786 internal 1.20257065 1.58693032 1.69612321 #> 135 135 134 0.9138552433 internal 1.38787894 1.83146592 1.95748473 #> 136 136 135 0.6098818644 internal 1.11567674 1.47226380 1.57356677 #> 137 137 136 0.0220324358 internal 1.11103546 1.46613910 1.56702064 #> 138 138 135 1.0206777830 internal 0.97459019 1.28608387 1.37457624 #> 139 139 138 0.2855883190 internal 0.63244106 0.83457873 0.89200411 #> 140 140 134 0.0802496379 internal 1.16877200 1.54232911 1.64845310 #> 141 141 140 0.2228818440 internal 1.28533627 1.69614907 1.81285704 #> 142 142 141 0.2076500851 internal 1.37909625 1.81987615 1.94509749 #> 143 143 142 1.8085337700 internal 0.43767253 0.57755925 0.61729973 #> 144 144 142 0.9458604351 internal 1.34725029 1.77785174 1.90018148 #> 145 145 144 0.8489180060 internal 0.47300751 0.62418782 0.66713669 #> 146 146 140 0.1770607381 internal 1.23211080 1.62591193 1.73778706 #> 147 147 146 0.4159884892 internal 1.24623965 1.64455658 1.75771460 #> 148 148 147 0.1695261804 internal 1.21017992 1.59697162 1.70685543 #> 149 149 148 0.3666560998 internal 1.32044920 1.74248462 1.86238084 #> 150 150 148 0.5255879506 internal 1.12365874 1.48279697 1.58482469 #> 151 151 150 0.2079515725 internal 1.00451302 1.32557048 1.41677983 #> 152 152 151 0.0978270115 internal 1.01302888 1.33680815 1.42879073 #> 153 153 151 0.4560382411 internal 0.87087189 1.14921565 1.22829044 #> 154 154 146 1.5427023170 internal 1.08223037 1.42812747 1.52639352 #> 155 155 154 0.2934517599 internal 0.80865458 1.06711274 1.14053822 #> 156 156 128 0.0400159638 internal 1.23140386 1.62497905 1.73678999 #> 157 157 156 0.4026925133 internal 1.35918408 1.79359975 1.91701308 #> 158 158 157 0.7951233038 internal 1.27358140 1.68063717 1.79627781 #> 159 159 158 0.3736798197 internal 1.22652022 1.61853452 1.72990203 #> 160 160 159 1.1492712710 internal 0.94650940 1.24902804 1.33497069 #> 161 161 160 0.1063971509 internal 0.87500944 1.15467562 1.23412609 #> 162 162 160 0.4580459438 internal 0.41761870 0.55109591 0.58901551 #> 163 163 159 0.2335971502 internal 1.16536491 1.53783306 1.64364769 #> 164 164 163 0.5346033834 internal 1.07091058 1.41318971 1.51042792 #> 165 165 164 0.1852396028 internal 0.95150270 1.25561727 1.34201330 #> 166 166 165 0.1474062575 internal 0.86886630 1.14656904 1.22546172 #> 167 167 166 0.2373231876 internal 0.80532548 1.06271962 1.13584282 #> 168 168 166 0.2494002564 internal 0.79695072 1.05166816 1.12403094 #> 169 169 163 0.4262080943 internal 1.10440718 1.45739233 1.55767202 #> 170 170 169 0.5357838400 internal 0.98598517 1.30112086 1.39064788 #> 171 171 170 0.4456870879 internal 0.30302820 0.39988057 0.42739540 #> 172 172 169 0.3680846598 internal 0.89979805 1.18738704 1.26908831 #> 173 173 172 0.0080005555 internal 0.89702741 1.18373086 1.26518056 #> 174 174 173 0.3273524485 internal 0.77398260 1.02135908 1.09163636 #> 175 175 174 0.2194478311 internal 0.47112032 0.62169745 0.66447497 #> 176 176 175 0.0938711603 internal 0.04095469 0.05404443 0.05776309 #> 177 177 172 0.6133471602 internal 0.30345934 0.40044951 0.42800348 #> 178 178 158 0.3661103260 internal 1.25575706 1.65711591 1.77113810 #> 179 179 178 0.1412829703 internal 1.28149047 1.69107409 1.80743287 #> 180 180 179 0.6766768859 internal 1.16906592 1.54271697 1.64886765 #> 181 181 180 0.2686769929 internal 1.04754240 1.38235271 1.47746911 #> 182 182 181 0.5253558386 internal 0.42744225 0.56405922 0.60287079 #> 183 183 178 0.8768792154 internal 1.16688879 1.53984400 1.64579700 #> 184 184 183 0.3417308840 internal 0.93124907 1.22889027 1.31344729 #> 185 185 184 0.2761477952 internal 0.65326012 0.86205188 0.92136761 #> 186 186 157 0.4967710625 internal 1.52763597 2.01589140 2.15460008 #> 187 187 186 0.8026320886 internal 1.36167014 1.79688039 1.92051945 #> 188 188 187 1.3087289040 internal 0.75183416 0.99213166 1.06039788 #> 189 189 188 0.2083441725 internal 0.26849975 0.35431631 0.37869597 #> 190 190 189 0.0255101041 internal 0.10068396 0.13286406 0.14200612 #> 191 191 187 0.3703056422 internal 1.13842365 1.50228097 1.60564934 #> 192 192 191 0.1968950188 internal 1.00764393 1.32970209 1.42119572 #> 193 193 192 0.1534750686 internal 0.94424288 1.24603711 1.33177395 #> 194 194 193 0.0152340122 internal 0.94588044 1.24819805 1.33408359 #> 195 195 194 0.4604481907 internal 0.80011381 1.05584222 1.12849221 #> 196 196 195 0.1642751276 internal 0.62798360 0.82869660 0.88571724 #> 197 197 192 0.5324154713 internal 0.95527123 1.26059028 1.34732849 #> 198 198 191 0.9118959007 internal 0.79057873 1.04325957 1.11504378 #> 199 199 186 2.2775234810 internal 0.43045988 0.56804132 0.60712690 #> RS LS #> 1 NA NA #> 2 NA NA #> 3 NA NA #> 4 NA NA #> 5 NA NA #> 6 NA NA #> 7 NA NA #> 8 NA NA #> 9 NA NA #> 10 NA NA #> 11 NA NA #> 12 NA NA #> 13 NA NA #> 14 NA NA #> 15 NA NA #> 16 NA NA #> 17 NA NA #> 18 NA NA #> 19 NA NA #> 20 NA NA #> 21 NA NA #> 22 NA NA #> 23 NA NA #> 24 NA NA #> 25 NA NA #> 26 NA NA #> 27 NA NA #> 28 NA NA #> 29 NA NA #> 30 NA NA #> 31 NA NA #> 32 NA NA #> 33 NA NA #> 34 NA NA #> 35 NA NA #> 36 NA NA #> 37 NA NA #> 38 NA NA #> 39 NA NA #> 40 NA NA #> 41 NA NA #> 42 NA NA #> 43 NA NA #> 44 NA NA #> 45 NA NA #> 46 NA NA #> 47 NA NA #> 48 NA NA #> 49 NA NA #> 50 NA NA #> 51 NA NA #> 52 NA NA #> 53 NA NA #> 54 NA NA #> 55 NA NA #> 56 NA NA #> 57 NA NA #> 58 NA NA #> 59 NA NA #> 60 NA NA #> 61 NA NA #> 62 NA NA #> 63 NA NA #> 64 NA NA #> 65 NA NA #> 66 NA NA #> 67 NA NA #> 68 NA NA #> 69 NA NA #> 70 NA NA #> 71 NA NA #> 72 NA NA #> 73 NA NA #> 74 NA NA #> 75 NA NA #> 76 NA NA #> 77 NA NA #> 78 NA NA #> 79 NA NA #> 80 NA NA #> 81 NA NA #> 82 NA NA #> 83 NA NA #> 84 NA NA #> 85 NA NA #> 86 NA NA #> 87 NA NA #> 88 NA NA #> 89 NA NA #> 90 NA NA #> 91 NA NA #> 92 NA NA #> 93 NA NA #> 94 NA NA #> 95 NA NA #> 96 NA NA #> 97 NA NA #> 98 NA NA #> 99 NA NA #> 100 NA NA #> 101 1.34657639 2.14730314 #> 102 1.43187897 2.28332994 #> 103 1.44628631 2.30630446 #> 104 1.51132499 2.41001765 #> 105 1.07568402 1.71532760 #> 106 1.00462806 1.60201901 #> 107 1.00207463 1.59794722 #> 108 1.53305479 2.44466885 #> 109 0.33725989 0.53780774 #> 110 1.50423594 2.39871319 #> 111 1.66383269 2.65321238 #> 112 1.18579847 1.89092040 #> 113 1.58865188 2.53332612 #> 114 1.07568936 1.71533613 #> 115 1.06829930 1.70355164 #> 116 0.97391422 1.55304153 #> 117 0.82540927 1.31622975 #> 118 0.70958294 1.13152858 #> 119 0.37537419 0.59858630 #> 120 0.54671228 0.87180869 #> 121 0.78126714 1.24583899 #> 122 1.08175673 1.72501138 #> 123 0.32938120 0.52524408 #> 124 1.64269043 2.61949810 #> 125 1.45998542 2.32814958 #> 126 1.18366308 1.88751522 #> 127 0.56949037 0.90813151 #> 128 1.32799223 2.11766810 #> 129 1.38237161 2.20438358 #> 130 1.38578878 2.20983273 #> 131 1.73772260 2.77104010 #> 132 1.30782254 2.08550473 #> 133 1.25495314 2.00119713 #> 134 1.32383778 2.11104325 #> 135 1.52783254 2.43634124 #> 136 1.22818149 1.95850601 #> 137 1.22307219 1.95035852 #> 138 1.07286779 1.71083674 #> 139 0.69621637 1.11021372 #> 140 1.28663087 2.05171168 #> 141 1.41494947 2.25633350 #> 142 1.51816420 2.42092373 #> 143 0.48180739 0.76830882 #> 144 1.48310690 2.36501999 #> 145 0.52070554 0.83033733 #> 146 1.35635675 2.16289927 #> 147 1.37191036 2.18770166 #> 148 1.33221436 2.12440088 #> 149 1.45360319 2.31797223 #> 150 1.23696839 1.97251795 #> 151 1.10580803 1.76336452 #> 152 1.11518263 1.77831364 #> 153 0.95869054 1.52876526 #> 154 1.19136239 1.89979285 #> 155 0.89019924 1.41954636 #> 156 1.35557853 2.16165828 #> 157 1.49624409 2.38596907 #> 158 1.40200925 2.23569852 #> 159 1.35020242 2.15308533 #> 160 1.04195534 1.66154254 #> 161 0.96324532 1.53602848 #> 162 0.45973133 0.73310547 #> 163 1.28288021 2.04573073 #> 164 1.17890112 1.87992161 #> 165 1.04745215 1.67030797 #> 166 0.95648271 1.52524456 #> 167 0.88653444 1.41370232 #> 168 0.87731517 1.39900092 #> 169 1.21577551 1.93872296 #> 170 1.08541183 1.73083996 #> 171 0.33358554 0.53194849 #> 172 0.99053361 1.57954346 #> 173 0.98748358 1.57467976 #> 174 0.85203094 1.35868171 #> 175 0.51862805 0.82702448 #> 176 0.04508456 0.07189359 #> 177 0.33406015 0.53270532 #> 178 1.38238750 2.20440892 #> 179 1.41071586 2.24958242 #> 180 1.28695443 2.05222763 #> 181 1.15317650 1.83890013 #> 182 0.47054549 0.75035015 #> 183 1.28455776 2.04840581 #> 184 1.02515615 1.63475390 #> 185 0.71913482 1.14676037 #> 186 1.68168266 2.68167663 #> 187 1.49898084 2.39033320 #> 188 0.82764906 1.31980140 #> 189 0.29557524 0.47133579 #> 190 0.11083692 0.17674487 #> 191 1.25322220 1.99843690 #> 192 1.10925466 1.76886067 #> 193 1.03946026 1.65756379 #> 194 1.04126295 1.66043843 #> 195 0.88079722 1.40455354 #> 196 0.69130942 1.10238891 #> 197 1.05160070 1.67692341 #> 198 0.87030062 1.38781525 #> 199 0.47386741 0.75564742 # Convert to sem and plot library(sem) my_sem = as_sem(psem) pathDiagram( model = my_sem, style = \"traditional\", edge.labels = \"values\" ) #> Loading required namespace: DiagrammeR effects( my_sem ) #> #> Total Effects (column on row) #> BM NL DD #> DD 0.6296696 0.6750692 0.0000000 #> RS -0.1387108 -0.1487120 -0.2202914 #> LS 1.3366815 0.0000000 0.0000000 #> NL 0.9327482 0.0000000 0.0000000 #> #> Direct Effects #> BM NL DD #> DD 0.0000000 0.6750692 0.0000000 #> RS 0.0000000 0.0000000 -0.2202914 #> LS 1.3366815 0.0000000 0.0000000 #> NL 0.9327482 0.0000000 0.0000000 #> #> Indirect Effects #> BM NL DD #> DD 0.6296696 0.000000 0 #> RS -0.1387108 -0.148712 0 #> LS 0.0000000 0.000000 0 #> NL 0.0000000 0.000000 0 # Plot using semPlot if( require(semPlot) ){ myplot = semPlotModel( my_sem ) semPaths( my_sem, nodeLabels = myplot@Vars$name ) } #> Loading required package: semPlot"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/phylosem_control.html","id":null,"dir":"Reference","previous_headings":"","what":"Detailed control for phylosem structure — phylosem_control","title":"Detailed control for phylosem structure — phylosem_control","text":"Define list control parameters. Note format input likely change rapidly phylosem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/phylosem_control.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Detailed control for phylosem structure — phylosem_control","text":"","code":"phylosem_control( nlminb_loops = 1, newton_loops = 1, trace = 0, eval.max = 1000, iter.max = 1000, getsd = TRUE, quiet = FALSE, run_model = TRUE, getJointPrecision = FALSE )"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/phylosem_control.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Detailed control for phylosem structure — phylosem_control","text":"nlminb_loops Integer number times call nlminb. newton_loops Integer number Newton steps running nlminb. trace Parameter values printed every `trace` iteration outer optimizer. Passed `control` nlminb. eval.max Maximum number evaluations objective function allowed. Passed `control` nlminb. iter.max Maximum number iterations allowed. Passed `control` nlminb. getsd Boolean indicating whether call sdreport quiet Boolean indicating whether run model printing messages terminal ; run_model Boolean indicating whether estimate parameters (default), instead return model inputs compiled TMB object without running; getJointPrecision whether get joint precision matrix. Passed sdreport.","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/phylosem_control.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Detailed control for phylosem structure — phylosem_control","text":"S3 object class \"phylosem_control\" specifies detailed model settings, allowing user specification also specifying default values","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/print.phylosem.html","id":null,"dir":"Reference","previous_headings":"","what":"Print parameter estimates and standard errors. — print.phylosem","title":"Print parameter estimates and standard errors. — print.phylosem","text":"Print parameter estimates","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/print.phylosem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print parameter estimates and standard errors. — print.phylosem","text":"","code":"# S3 method for phylosem print(x, ...)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/print.phylosem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print parameter estimates and standard errors. — print.phylosem","text":"x Output phylosem ... used","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/print.phylosem.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Print parameter estimates and standard errors. — print.phylosem","text":"prints (invisibly returns) output nlminb","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/reinstalling.html","id":null,"dir":"Reference","previous_headings":"","what":"Reinstalling binary dependencies — reinstalling","title":"Reinstalling binary dependencies — reinstalling","text":"phylosem package depends several upstream packages, uses way depends heavily internal (binary) structure. Sometimes, therefore, installing update one packages require re-install binary-compatible version phylosem, .e. version compiled updated version upstream package. development tools (compilers etc.) installed, able re-install binary-compatible version package running install.packages(\"phylosem\", type=\"source\"). want install development version phylosem instead, can use remotes::install_github(\"James-Thorson-NOAA/phylosem\"). (Windows, can install development tools following instructions https://cran.r-project.org/bin/windows/Rtools/; MacOS, see https://mac.r-project.org/tools/.) development tools /want install (install packages compiled code source), can revert upstream package(s) previous binary version. example, using checkpoint package: similar recipe (substituting Matrix TMB TMB phylosem) can used get warnings incompatibility TMB Matrix.","code":"## load (installing if necessary) the checkpoint package while (!require(\"checkpoint\")) install.packages(\"checkpoint\") ## retrieve build date of installed version of phylosem bd <- as.character(asDateBuilt( packageDescription(\"phylosem\",fields=\"Built\"))) oldrepo <- getOption(\"repos\") use_mran_snapshot(bd) ## was setSnapshot() pre-checkpoint v1.0.0 install.packages(\"TMB\") options(repos=oldrepo) ## restore original repo"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/reinstalling.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Reinstalling binary dependencies — reinstalling","text":"Copied glmmTMB permission","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/summary.phylosem.html","id":null,"dir":"Reference","previous_headings":"","what":"summarize phylosem — summary.phylosem","title":"summarize phylosem — summary.phylosem","text":"Summarize phylosem output phylosem, including calculating intercepts tree root","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/summary.phylosem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"summarize phylosem — summary.phylosem","text":"","code":"# S3 method for phylosem summary(object, ...)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/summary.phylosem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"summarize phylosem — summary.phylosem","text":"object Output phylosem ... used","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/summary.phylosem.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"summarize phylosem — summary.phylosem","text":"Data-frame containing estimated intercepts, path coefficients, variance-covariance parameters well standard errors","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/vcov.phylosem.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract Variance-Covariance Matrix — vcov.phylosem","title":"Extract Variance-Covariance Matrix — vcov.phylosem","text":"extract covariance fixed effects, fixed random effects.","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/vcov.phylosem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract Variance-Covariance Matrix — vcov.phylosem","text":"","code":"# S3 method for phylosem vcov(object, which = c(\"fixed\", \"random\", \"both\"), ...)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/vcov.phylosem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract Variance-Covariance Matrix — vcov.phylosem","text":"object output phylosem whether extract covariance among fixed effects, random effects, ... ignored, method compatibility","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/news/index.html","id":"phylosem-113","dir":"Changelog","previous_headings":"","what":"phylosem 1.1.3","title":"phylosem 1.1.3","text":"CRAN release: 2024-02-01 Removing fit_tmb simplify code remove unnecessary warnings Adding codecov extra tests Fixing R-CMD-check force build Matrix/TMB source","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/news/index.html","id":"phylosem-112","dir":"Changelog","previous_headings":"","what":"phylosem 1.1.2","title":"phylosem 1.1.2","text":"CRAN release: 2023-12-20 Adding new functions provide warning Matrix version doesn’t match ’s expected TMB","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/news/index.html","id":"phylosem-111","dir":"Changelog","previous_headings":"","what":"phylosem 1.1.1","title":"phylosem 1.1.1","text":"CRAN release: 2023-11-26 Re-adding phylosignal SUGGESTS Re-adding phylosignal Fisheries vignette adding arguemnt as_phylo4d allow easy extraction standard errors","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/news/index.html","id":"phylosem-110","dir":"Changelog","previous_headings":"","what":"phylosem 1.1.0","title":"phylosem 1.1.0","text":"CRAN release: 2023-10-06 Adding new S3 generic functions: logLik vcov Adding vignette “fisheries” associated paper “Trees fishes: neglected role phylogenetic comparative methods fisheries science” accepted Fish Fisheries","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/news/index.html","id":"phylosem-102","dir":"Changelog","previous_headings":"","what":"phylosem 1.0.2","title":"phylosem 1.0.2","text":"CRAN release: 2023-09-22 Fixed bug arising data missing observations earliest tips first inputted variable Updating vignette show confidence intervals alpha/kappa/lambda well lnalppha/lnkappa/logitlambda","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/news/index.html","id":"phylosem-101","dir":"Changelog","previous_headings":"","what":"phylosem 1.0.1","title":"phylosem 1.0.1","text":"CRAN release: 2023-09-19 Address request CRAN use Suggests packages conditionally examples Continuing use Suggests packages unconditionally vignettes based Wickham guidance online","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/news/index.html","id":"phylosem-100","dir":"Changelog","previous_headings":"","what":"phylosem 1.0.0","title":"phylosem 1.0.0","text":"CRAN release: 2023-08-25 Attempting fix warnings","code":""}] +[{"path":"https://james-thorson-noaa.github.io/phylosem/articles/comparison.html","id":"comparison-with-phylolm","dir":"Articles","previous_headings":"","what":"Comparison with phylolm","title":"Comparison with other packages","text":"first compare syntax run-times using simulated data phylolm. confirms runtimes phylosem within order magnitude results nearly identical BM, OU, delta, kappa models.","code":"# Settings Ntree = 100 sd_x = 0.3 sd_y = 0.3 b0_x = 1 b0_y = 0 b_xy = 1 # Simulate tree set.seed(1) tree = ape::rtree(n=Ntree) # Simulate data x = b0_x + sd_x * phylolm::rTrait(n = 1, phy=tree) ybar = b0_y + b_xy*x y_normal = ybar + sd_y * phylolm::rTrait(n = 1, phy=tree) # Construct, re-order, and reduce data Data = data.frame(x=x,y=y_normal)[] # Compare using BM model start_time = Sys.time() plm_bm = phylolm::phylolm(y ~ 1 + x, data=Data, phy=tree, model=\"BM\" ) Sys.time() - start_time #> Time difference of 0.006439447 secs knitr::kable(summary(plm_bm)$coefficients, digits=3) start_time = Sys.time() psem_bm = phylosem( sem = \"x -> y, p\", data = Data, tree = tree, control = phylosem_control(quiet = TRUE) ) Sys.time() - start_time #> Time difference of 0.196418 secs knitr::kable(summary(psem_bm)$coefficients, digits=3) # Compare using OU start_time = Sys.time() plm_ou = phylolm::phylolm(y ~ 1 + x, data=Data, phy=tree, model=\"OUrandomRoot\" ) Sys.time() - start_time #> Time difference of 0.02001715 secs start_time = Sys.time() psem_ou = phylosem( sem = \"x -> y, p\", data = Data, tree = tree, estimate_ou = TRUE, control = phylosem_control(quiet = TRUE) ) Sys.time() - start_time #> Time difference of 0.2204044 secs knitr::kable(summary(psem_ou)$coefficients, digits=3) knitr::kable(summary(plm_ou)$coefficients, digits=3) knitr::kable(c( \"phylolm_alpha\"=plm_ou$optpar, \"phylosem_alpha\"=exp(psem_ou$parhat$lnalpha) ), digits=3) # Compare using Pagel's lambda start_time = Sys.time() plm_lambda = phylolm::phylolm(y ~ 1 + x, data=Data, phy=tree, model=\"lambda\" ) Sys.time() - start_time #> Time difference of 0.0403533 secs start_time = Sys.time() psem_lambda = phylosem( sem = \"x -> y, p\", data = Data, tree = tree, estimate_lambda = TRUE, control = phylosem_control(quiet = TRUE) ) Sys.time() - start_time #> Time difference of 0.1862426 secs knitr::kable(summary(psem_lambda)$coefficients, digits=3) knitr::kable(summary(plm_lambda)$coefficients, digits=3) knitr::kable(c( \"phylolm_lambda\"=plm_lambda$optpar, \"phylosem_lambda\"=plogis(psem_lambda$parhat$logitlambda) ), digits=3) # Compare using Pagel's kappa start_time = Sys.time() plm_kappa = phylolm::phylolm(y ~ 1 + x, data=Data, phy=tree, model=\"kappa\", lower.bound = 0, upper.bound = 3 ) Sys.time() - start_time #> Time difference of 0.01028705 secs start_time = Sys.time() psem_kappa = phylosem( sem = \"x -> y, p\", data = Data, tree = tree, estimate_kappa = TRUE, control = phylosem_control(quiet = TRUE) ) Sys.time() - start_time #> Time difference of 0.1678932 secs knitr::kable(summary(psem_kappa)$coefficients, digits=3) knitr::kable(summary(plm_kappa)$coefficients, digits=3) knitr::kable(c( \"phylolm_kappa\"=plm_kappa$optpar, \"phylosem_kappa\"=exp(psem_kappa$parhat$lnkappa) ), digits=3)"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/comparison.html","id":"generalized-linear-models","dir":"Articles","previous_headings":"","what":"Generalized linear models","title":"Comparison with other packages","text":"also compare results among software fitting phylogenetic generalized linear models (PGLM).","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/comparison.html","id":"poisson-distributed-response","dir":"Articles","previous_headings":"Generalized linear models","what":"Poisson-distributed response","title":"Comparison with other packages","text":"First, specifically explore Poisson-distributed PGLM, comparing phylosem phylolm::phyloglm (uses Generalized Estimating Equations) phyr::pglmm_compare (uses maximum likelihood). also compare results brms (fits Bayesian hierarchical model), although load results compiled run brms avoid users install STAN run vignettes phylosem: instance (others explored), results phylolm::phyloglm generally different phylosem, phyr::pglmm_compare, brms close quite identical.","code":"# Settings Ntree = 100 sd_x = 0.3 sd_y = 0.3 b0_x = 1 b0_y = 0 b_xy = 1 # Simulate tree set.seed(1) tree = ape::rtree(n=Ntree) # Simulate data x = b0_x + sd_x * phylolm::rTrait(n = 1, phy=tree) ybar = b0_y + b_xy*x y_normal = ybar + sd_y * phylolm::rTrait(n = 1, phy=tree) y_pois = rpois( n=Ntree, lambda=exp(y_normal) ) # Construct, re-order, and reduce data Data = data.frame(x=x,y=y_pois) # Compare using phylolm::phyloglm pglm = phylolm::phyloglm(y ~ 1 + x, data=Data, phy=tree, method=\"poisson_GEE\" ) knitr::kable(summary(pglm)$coefficients, digits=3) # pglmm = phyr::pglmm_compare( y ~ 1 + x, family = \"poisson\", data = Data, phy = tree ) knitr::kable(summary(pglmm), digits=3) #> Generalized linear mixed model for poisson data fit by restricted maximum likelihood #> #> Call:y ~ 1 + x #> #> logLik AIC BIC #> -173.4 354.7 360.6 #> #> Phylogenetic random effects variance (s2): #> Variance Std.Dev #> s2 0.05511 0.2348 #> #> Fixed effects: #> Value Std.Error Zscore Pvalue #> (Intercept) -0.57009 0.30469 -1.8710 0.06134 . #> x 1.18137 0.19807 5.9645 2.454e-09 *** #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # pgsem = phylosem( sem = \"x -> y, p\", data = Data, family = c(\"fixed\",\"poisson\"), tree = tree, control = phylosem_control(quiet = TRUE) ) knitr::kable(summary(pgsem)$coefficients, digits=3) # Comare using Bayesian implementation in brms library(brms) Amat <- ape::vcv.phylo(tree) Data$tips <- rownames(Data) mcmc <- brm( y ~ 1 + x + (1 | gr(tips, cov = A)), data = Data, data2 = list(A = Amat), family = 'poisson', cores = 4 ) knitr::kable(fixef(mcmc), digits = 3) # Plot them together library(ggplot2) pdat <- rbind.data.frame( coef(summary(pglm))[, 1:2], data.frame(Estimate = pglmm$B, StdErr = pglmm$B.se), setNames(as.data.frame(fixef(mcmc))[1:2], c('Estimate', 'StdErr')), setNames(summary(pgsem)$coefficients[2:3, 3:4], c('Estimate', 'StdErr')) ) pdat$Param <- rep(c('Intercept', 'Slope'), 4) pdat$Method <- rep( c('phylolm::phyloglm', 'phyr::pglmm_compare', 'brms::brm', 'phylosem::phylosem'), each = 2) figure = ggplot(pdat, aes( x = Estimate, xmin = Estimate - StdErr, xmax = Estimate + StdErr, y = Param, color = Method )) + geom_pointrange(position = position_dodge(width = 0.6)) + theme_classic() + theme(panel.grid.major.x = element_line(), panel.grid.minor.x = element_line())"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/comparison.html","id":"binomial-regression","dir":"Articles","previous_headings":"Generalized linear models","what":"Binomial regression","title":"Comparison with other packages","text":"also compare results Bernoulli-distributed response using PGLM. compare phylosem phyr::pglmm_compare, explore threshold models expect give different results due differences assumptions latent variables affect measurements. instance, phylosem phyr::pglmm_compare give similar estimates standard errors slope term.","code":"# Settings Ntree = 100 sd_x = 0.3 sd_y = 0.3 b0_x = 1 b0_y = 0 b_xy = 1 # Simulate tree set.seed(1) tree = ape::rtree(n=Ntree) # Simulate data x = b0_x + sd_x * phylolm::rTrait(n = 1, phy=tree) ybar = b0_y + b_xy*x y_normal = ybar + sd_y * phylolm::rTrait(n = 1, phy=tree) y_binom = rbinom( n=Ntree, size=1, prob=plogis(y_normal) ) # Construct, re-order, and reduce data Data = data.frame(x=x,y=y_binom) # pglmm = phyr::pglmm_compare( y ~ 1 + x, family = \"binomial\", data = Data, phy = tree ) knitr::kable(summary(pglmm), digits=3) #> Generalized linear mixed model for binomial data fit by restricted maximum likelihood #> #> Call:y ~ 1 + x #> #> logLik AIC BIC #> -63.74 135.47 141.32 #> #> Phylogenetic random effects variance (s2): #> Variance Std.Dev #> s2 0.1076 0.328 #> #> Fixed effects: #> Value Std.Error Zscore Pvalue #> (Intercept) 0.23179 0.60507 0.3831 0.7017 #> x 0.44548 0.45708 0.9746 0.3297 # pgsem = phylosem( sem = \"x -> y, p\", data = Data, family = c(\"fixed\",\"binomial\"), tree = tree, control = phylosem_control(quiet = TRUE) ) knitr::kable(summary(pgsem)$coefficients, digits=3)"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/comparison.html","id":"summary-of-pglm-results","dir":"Articles","previous_headings":"Generalized linear models","what":"Summary of PGLM results","title":"Comparison with other packages","text":"Based two comparisons, conclude phylosem provides interface maximum-likelihood estimate phylogenetic generalized linear models (PGLM), extends class include mixed data (.e., combination different measurement types), missing data, non-recursive structural linkages. However, also encourage cross-testing different software fitting phylogenetic generalized linear models.","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/comparison.html","id":"compare-with-phylopath","dir":"Articles","previous_headings":"","what":"Compare with phylopath","title":"Comparison with other packages","text":"next compare single run phylopath. confirms runtimes within order magnitude results identical standardized unstandardized coefficients.","code":"library(phylopath) library(phylosem) # make copy of data that's rescaled rhino_scaled = rhino rhino_scaled[,c(\"BM\",\"NL\",\"LS\",\"DD\",\"RS\")] = scale(rhino_scaled[,c(\"BM\",\"NL\",\"LS\",\"DD\",\"RS\")]) # Fit and plot using phylopath dag <- DAG(RS ~ DD, LS ~ BM, NL ~ BM, DD ~ NL) start_time = Sys.time() result <- est_DAG( DAG = dag, data = rhino, tree = rhino_tree, model = \"BM\", measurement_error = FALSE ) Sys.time() - start_time #> Time difference of 0.01140714 secs plot(result) # Fit and plot using phylosem model = \" DD -> RS, p1 BM -> LS, p2 BM -> NL, p3 NL -> DD, p4 \" start_time = Sys.time() psem = phylosem( sem = model, data = rhino_scaled[,c(\"BM\",\"NL\",\"DD\",\"RS\",\"LS\")], tree = rhino_tree, control = phylosem_control(quiet = TRUE) ) Sys.time() - start_time #> Time difference of 0.4308579 secs plot( as_fitted_DAG(psem) )"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/comparison.html","id":"comparison-with-sem","dir":"Articles","previous_headings":"","what":"Comparison with sem","title":"Comparison with other packages","text":"next compare syntax runtime R-package sem. confirms runtimes within order magnitude specifying star-phylogeny phylosem match assumed structure sem compare estimated values standardized coefficients also compare values unstandardized coefficients:","code":"library(sem) library(TreeTools) # Simulation parameters n_obs = 50 # Intercepts a1 = 1 a2 = 2 a3 = 3 a4 = 4 # Slopes b12 = 0.3 b23 = 0 b34 = 0.3 # Standard deviations s1 = 0.1 s2 = 0.2 s3 = 0.3 s4 = 0.4 # Simulate data E1 = rnorm(n_obs, sd=s1) E2 = rnorm(n_obs, sd=s2) E3 = rnorm(n_obs, sd=s3) E4 = rnorm(n_obs, sd=s4) Y1 = a1 + E1 Y2 = a2 + b12*Y1 + E2 Y3 = a3 + b23*Y2 + E3 Y4 = a4 + b34*Y3 + E4 Data = data.frame(Y1=Y1, Y2=Y2, Y3=Y3, Y4=Y4) # Specify path diagram (in this case, using correct structure) equations = \" Y2 = b12 * Y1 Y4 = b34 * Y3 \" model <- specifyEquations(text=equations, exog.variances=TRUE, endog.variances=TRUE) # Fit using package:sem start_time = Sys.time() Sem <- sem(model, data=Data) Sys.time() - start_time #> Time difference of 0.01481318 secs # Specify star phylogeny tree_null = TreeTools::StarTree(n_obs) tree_null$edge.length = rep(1,nrow(tree_null$edge)) rownames(Data) = tree_null$tip.label # Fit using phylosem start_time = Sys.time() psem = phylosem( data = Data, sem = equations, tree = tree_null, control = phylosem_control(quiet = TRUE) ) Sys.time() - start_time #> Time difference of 0.07840085 secs"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/comparison.html","id":"comparison-with-rphylopars","dir":"Articles","previous_headings":"","what":"Comparison with Rphylopars","title":"Comparison with other packages","text":"Finally, compare syntax runtime R-package Rphylopars. confirms can impute identical estimates using packages, specifying full-rank covariance phylosem note phylosem also allows parsimonious representations trait covariance via inputted SEM structure.","code":"library(Rphylopars) # Format data, within no values for species t1 Data = rhino[,c(\"BM\",\"NL\",\"DD\",\"RS\",\"LS\")] rownames(Data) = tree$tip.label Data['t1',] = NA # fit using phylopars start_time = Sys.time() pars <- phylopars( trait_data = cbind(species=rownames(Data),Data), tree = tree, pheno_error = FALSE, phylo_correlated = TRUE, pheno_correlated = FALSE) Sys.time() - start_time #> Time difference of 0.1159289 secs # Display estimates for missing values knitr::kable(cbind( \"Estimate\"=pars$anc_recon[\"t1\",], \"Var\"=pars$anc_var[\"t1\",] ), digits=3) # fit using phylosem start_time = Sys.time() psem = phylosem( data = Data, tree = tree, sem = \"\", covs = \"BM, NL, DD, RS, LS\", control = phylosem_control(quiet = TRUE) ) Sys.time() - start_time #> Time difference of 0.6971498 secs # Display estimates for missing values knitr::kable(cbind( \"Estimate\"=as.list(psem$sdrep,\"Estimate\")$x_vj[ match(\"t1\",tree$tip.label), ], \"Var\"=as.list(psem$sdrep,\"Std. Error\")$x_vj[ match(\"t1\",tree$tip.label), ]^2 ), digits=3)"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/demonstration.html","id":"estimability-for-multiple-covariance-transformations","dir":"Articles","previous_headings":"","what":"Estimability for multiple covariance transformations","title":"Demonstration of selected features","text":"default, phylosem takes input phylogenetic tree constructs covariance Brownian motion evolutionary model. However, also allows combination following transformations: Ornstein-Uhlenbeck (OU); Pagel’s lambda; Pagel’s kappa; results eight possible covariance models formed including excluding transformation. first show transformations simultaneously estimable reference data set. see minimum eigenvalue precision matrix (corresponds maximum eigenvalue covariance matrix) greater zero, precision invertible Hessian matrix full rank. can see parameters estimable applying three transformations. also see transformation parameters perfectly correlated, although logit-lambda ln-alpha parameters correlation approximately 0.75. can also extract standard errors, calculated square-root diagonal elements covariance matrix. extract estimated values lnalpha, logitlambda, lnkappa plot plot 95% confidence interval estimates plus minus 1.96 times standard errors. values unbounded construction. However, also convert estimates, lower, upper confidence-interval bounds conventional parameters alpha, lambda, kappa, plot well. derived quantities bounded expected Ornstein-Uhlenbeck Pagel parameters: confidence intervals suggest parameter lnkappa overlaps 0.0, suggesting Pagel’s kappa overlaps 1.0 instead turned thereby fixed default value.","code":"# Compare using Pagel's kappa library(phylopath) # Run phylosem model = \" DD -> RS, p1 BM -> LS, p2 BM -> NL, p3 NL -> DD, p4 \" psem = phylosem( sem = model, data = rhino[,c(\"BM\",\"NL\",\"DD\",\"RS\",\"LS\")], estimate_ou = TRUE, estimate_lambda = TRUE, estimate_kappa = TRUE, tree = rhino_tree, control = phylosem_control( getJointPrecision = TRUE, quiet = TRUE) ) # V = psem$sdrep$cov.fixed Rsub = cov2cor(V)[c('lnalpha','logitlambda','lnkappa'),c('lnalpha','logitlambda','lnkappa')] knitr::kable(c(\"minimum_eigenvalue\"=min(eigen(psem$sdrep$jointPrecision)$values), \"maximum_eigenvalue\"=max(eigen(psem$sdrep$jointPrecision)$values)), digits=3) knitr::kable(Rsub, digits=3) library(ggplot2) # Compile estimates and SEs pdat = data.frame( \"Estimate\" = psem$sdrep$par.fixed[c('lnalpha','logitlambda','lnkappa')], \"StdErr\" = sqrt(diag(V)[c('lnalpha','logitlambda','lnkappa')]) ) pdat = cbind( pdat, \"Param\" = rownames(pdat)) # pdat$lower = pdat$Estimate - 1.96*pdat$StdErr pdat$upper = pdat$Estimate + 1.96*pdat$StdErr pdat$type = \"estimated\" # Transform from log / logit-space to natural space pdat2 = pdat pdat2$Param = c(\"alpha\", \"lambda\", \"kappa\") pdat2['lnalpha',c(\"Estimate\",\"lower\",\"upper\")] = exp(pdat2['lnalpha',c(\"Estimate\",\"lower\",\"upper\")]) pdat2['lnkappa',c(\"Estimate\",\"lower\",\"upper\")] = exp(pdat2['lnkappa',c(\"Estimate\",\"lower\",\"upper\")]) pdat2['logitlambda',c(\"Estimate\",\"lower\",\"upper\")] = plogis(as.numeric(pdat2['logitlambda',c(\"Estimate\",\"lower\",\"upper\")])) pdat2$type = \"derived\" # Plot ggplot( rbind(pdat,pdat2), aes( x=Param, y = Estimate, ymin = lower, ymax = upper)) + geom_pointrange(position = position_dodge(width = 0.6)) + theme_classic() + facet_grid( rows=vars(type), scales=\"free\" )"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/demonstration.html","id":"scaling-of-runtime-with-increased-tree-size","dir":"Articles","previous_headings":"","what":"Scaling of runtime with increased tree size","title":"Demonstration of selected features","text":"package phylolm expected “linear runtime”, .e., proportional increase runtime increasing tree size. therefore compare runtime phylosem phylolm using simulated tree across three orders magnitude (10, 100, 1000, 10000 tips). Results show packages approximately linear runtime, phylolm approximately 10-100 times faster given tree size.","code":"# Settings Ntree_config = c( 1e1, 1e2, 1e3, 1e4 ) Nreplicates = 5 sd_x = 0.3 sd_y = 0.3 b0_x = 1 b0_y = 0 b_xy = 1 # Simulate tree set.seed(1) Time_rcz = array(NA, dim=c(Nreplicates,length(Ntree_config),2), dimnames=list(NULL,\"tree_size\"=Ntree_config,\"package\"=c(\"phylolm\",\"phylosem\")) ) for( rI in seq_len(Nreplicates) ){ for( cI in seq_along(Ntree_config) ){ # Simulate data tree = ape::rtree(n=Ntree_config[cI]) x = b0_x + sd_x * phylolm::rTrait(n = 1, phy=tree) ybar = b0_y + b_xy*x y_normal = ybar + sd_y * phylolm::rTrait(n = 1, phy=tree) Data = data.frame(x=x, y=y_normal)[] # Run phylolm start_time = Sys.time() plm_bm = phylolm::phylolm(y ~ 1 + x, data=Data, phy=tree, model=\"BM\" ) Time_rcz[rI,cI,\"phylolm\"] = Sys.time() - start_time # Run phylosem start_time = Sys.time() psem_bm = phylosem( sem = \"x -> y, p\", data = Data, tree = tree, control = phylosem_control( quiet = TRUE, newton_loops = 0, getsd = FALSE) ) Time_rcz[rI,cI,\"phylosem\"] = Sys.time() - start_time }} # Format df = apply( Time_rcz, MARGIN=2:3, FUN=mean ) df = cbind( expand.grid(dimnames(df)), \"time_seconds\"=as.vector(df) ) # Plot library(ggplot2) ggplot(data=df, aes(x=tree_size, y=time_seconds, group=package, color=package)) + geom_line() + geom_point() + scale_y_log10()"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/fisheries.html","id":"preparing-the-then-et-al--mortality-database","dir":"Articles","previous_headings":"","what":"Preparing the Then et al. mortality database","title":"Phylogenetic comparative methods in fisheries science","text":"demonstrate potential role PCM fisheries science, re-analyze foundational dataset compiled et al.. specifically download file “Mlifehist_ver1.0.csv” include copy data object package phylosem simplify following demonstration. demonstration provides basic syntax output PCM, showing relationship natural mortality rate, longevity, growth parameters. , first load phylogeny fishes using package fishtree, includes several versions phylogeny fishes develoepd Rabosky et al.. associate trait data tip label phylogeny, provide convenient names modeled variables.","code":"# Load packages library(phylosem) library(fishtree) # Download tree out = fishtree_complete_phylogeny() tree = out[[1]] # Load data object data( Mlifehist_ver1_0 ) Data = Mlifehist_ver1_0 # Reformat to match tree$tip.label Data$Genus_species = factor( paste0(Data$Genus, \"_\", Data$Species) ) # Drop duplicates ... not dealing with variation among stocks within species Data = Data[match(unique(Data$Genus_species),Data$Genus_species), ] # log-transform to simplify later syuntax Data = cbind( Data, \"logM\" = log(Data[,'M']), \"logK\" = log(Data[,'K']), \"logtmax\" = log(Data[,'tmax']), \"logLinf\" = log(Data[,'Linf']) ) # Identify species in both datasets species_to_use = intersect( tree$tip.label, Data$Genus_species ) species_to_drop = setdiff( Data$Genus_species, tree$tip.label ) # Drop tips not present in trait-data # Not strictly necessary, but helpful to simplify later plots tree = ape::keep.tip( tree, tip=species_to_use ) # Drop trait-data not in phylogeny # Necessary to define correlation among data rows_to_use = which( Data$Genus_species %in% species_to_use ) Data = Data[rows_to_use,] # Only include modeled variables in trait-data passed to phylosem rownames(Data) = Data$Genus_species Data = Data[,c('logM','logK','logtmax','logLinf')]"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/fisheries.html","id":"fitting-and-selecting-among-phylogenetic-structural-equation-models","dir":"Articles","previous_headings":"","what":"Fitting and selecting among phylogenetic structural equation models","title":"Phylogenetic comparative methods in fisheries science","text":"define path diagram specifying set linkages among variables. following, use path diagram ensures mortality rate statistically independent growth, conditional upon measurement longevity. specification ensures , longevity available, sole information used predict mortality rate. However, longevity available, model reverts predicting mortality growth parameters. fit model using phylogenetic structural equation models. specifically apply grid-search across eight models formed combination modeled transformations phylogenetic tree. use marginal AIC select model, list estimated path coefficients.","code":"# Specify SEM structure sem_structure = \" logK -> logtmax, b1 logLinf -> logtmax, b2 logtmax -> logM, a \" # Grid-search model selection using AIC for transformations Grid = expand.grid( \"OU\" = c(FALSE,TRUE), \"lambda\" = c(FALSE,TRUE), \"kappa\" = c(FALSE,TRUE) ) psem_grid = NULL for( i in 1:nrow(Grid)){ psem_grid[[i]] = phylosem( data=Data, tree = tree, sem = sem_structure, estimate_ou = Grid[i,'OU'], estimate_lambda = Grid[i,'lambda'], estimate_kappa = Grid[i,'kappa'], control = phylosem_control(quiet = TRUE) ) } # Extract AIC for each model and rank-order by parsimony Grid$AIC = sapply( psem_grid, \\(m) AIC(m) ) Grid = Grid[order(Grid$AIC,decreasing=FALSE),] # Select model with lowest AIC psem_best = psem_grid[[as.numeric(rownames(Grid[1,]))]]"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/fisheries.html","id":"visualizing-output","dir":"Articles","previous_headings":"","what":"Visualizing output","title":"Phylogenetic comparative methods in fisheries science","text":"Finally, can convert output formats packages, use existing third-party PCM packages plot, query, post-process output. also show plot output using phylosignal, although currently unavailable CRAN therefore commented :","code":"# Plot path diagram my_fitted_DAG = as_fitted_DAG(psem_best) plot(my_fitted_DAG, type=\"color\") # Total, direct, and indirect effects my_sem = as_sem(psem_best) effects(my_sem) #> #> Total Effects (column on row) #> logK logtmax logLinf #> logtmax -0.4480233 0.000000 0.4073488 #> logM 0.4579994 -1.022267 -0.4164192 #> #> Direct Effects #> logK logtmax logLinf #> logtmax -0.4480233 0.000000 0.4073488 #> logM 0.0000000 -1.022267 0.0000000 #> #> Indirect Effects #> logK logtmax logLinf #> logtmax 0.0000000 0 0.0000000 #> logM 0.4579994 0 -0.4164192 # Load for plotting, # https://r-pkgs.org/vignettes.html#sec-vignettes-eval-option library(phylosignal) # Plot using phylobase my_phylo4d = as_phylo4d( psem_best ) barplot(my_phylo4d)"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/fisheries.html","id":"sensitivity-to-using-taxonomic-tree","dir":"Articles","previous_headings":"","what":"Sensitivity to using taxonomic tree","title":"Phylogenetic comparative methods in fisheries science","text":"analysis, can also conduct sensivity analyses. , show construct taxonomic tree use place phylogenetic information. , requires code reformat data statistical analysis simple specify. estimated path coefficients similar estimates using phyogeny.","code":"library(ape) Data = Mlifehist_ver1_0 # Make taxonomic factors Data$Genus_species = factor( paste0(Data$Genus, \"_\", Data$Species) ) Data$Genus = factor( Data$Genus ) Data$Family = factor( Data$Family ) Data$Order = factor( Data$Order ) # Make taxonomic tree tree = ape::as.phylo( ~Order/Family/Genus/Genus_species, data=Data, collapse=FALSE) tree$edge.length = rep(1,nrow(tree$edge)) tree = collapse.singles(tree) tmp = root(tree, node=ape::Ntip(tree)+1 ) # Drop duplicates ... not dealing with variation among stocks within species Data = Data[match(unique(Data$Genus_species),Data$Genus_species), ] # log-transform to simplify later syuntax Data = cbind( Data, \"logM\" = log(Data[,'M']), \"logK\" = log(Data[,'K']), \"logtmax\" = log(Data[,'tmax']), \"logLinf\" = log(Data[,'Linf']) ) # Only include modeled variables in trait-data passed to phylosem rownames(Data) = Data$Genus_species Data = Data[,c('logM','logK','logtmax','logLinf')] # Fit model psem_taxon = phylosem( data=Data, tree = tree, sem = sem_structure, estimate_ou = TRUE, control = phylosem_control(quiet = TRUE) ) # Plot path diagram my_fitted_DAG = as_fitted_DAG(psem_taxon) plot(my_fitted_DAG, type=\"color\")"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/phylopath.html","id":"model-comparison-some-important-differences","dir":"Articles","previous_headings":"","what":"Model comparison: some important differences","title":"Detailed comparison with `phylopath`","text":"Let’s start loading Rhinogrades example data phylogeny. supply data model comparison functions, already two important differences flag . Firstly, phylo_path consciders columns data actually used models. compare_phylosem . rhino, first column contains copy species names, need exclude column (using rhino[-1]). , using phylosem, make sure data.frame contains variables ’d like inlcude analysis. Secondly, get standardized path coefficients, phylopath standardize data variable unit variance, phylosem keeps data original scale. make better comparison packages, ’ll standardize data manually . Now can define causal models want compare. First phylopath, use formulas can use DAG() define model, define_model_set() create list models: phylosem, can define models similarly, need use strings instead. Also note need write parameter front varialble (e.g. b1, b2, etc.). compare multiple models, collect models list: can now run model comparison. phylopath use d-separation , phylosem fitting structural equation model . Note phylo_path, specify want Brownian motion model (\"BM\"), default compare_phylosem. models perform? phylopath can use summary get table CICc values: phylosem, can extract AIC values model: Even though methodology used quite different, obtain similar result: model 5 fits much better models. However, methods somewhat differ ranking models. largely due different philosophies two approaches. phylopath uses PPA method described Von Hardenberg & Gonzalez-Voyer, uses Shipley’s d-separation. essence, method finds pairs variables causal model claims independent (conditionally independent), tests whether indeed case. phylosem hand directly evaluates fit casual model data. sense, phylosem analyzes paths included model phylopath analyzes paths included. Another source difference CICc metric used phylopath employs correction small sample sizes phylosem’s AIC metric . conclusion, cases one model clearly fits best (Brownian motion model) expect methods lead conclusion, don’t expect model comparison results match closely.","code":"data(rhino, rhino_tree, package = 'phylopath') rhino_std <- rhino[-1] rhino_std[] <- lapply(rhino_std, scale) models_pp <- phylopath::define_model_set( one = c(RS ~ DD), two = c(DD ~ NL, RS ~ LS + DD), three = c(RS ~ NL), four = c(RS ~ BM + NL), five = c(RS ~ BM + NL + DD), six = c(NL ~ RS, RS ~ BM), seven = c(NL ~ RS, RS ~ LS + BM), eight = c(NL ~ RS), nine = c(NL ~ RS, RS ~ LS), .common = c(LS ~ BM, NL ~ BM, DD ~ NL) ) models_ps <- list( one = 'RS = b1 * DD', two = 'DD = b1 * NL; RS = b2 * LS + b3 * DD', three = 'RS = b1 * NL', four = 'RS = b * BM + b2 * NL', five = 'RS = b1 * BM + b2 * NL + b3 * DD', six = 'NL = b1 * RS; RS = b2 * BM', seven = 'NL = b1 * RS; RS = b2 * LS + b3 * BM', eight = 'NL = b1 * RS', nine = 'NL = b1 * RS; RS = b2 * LS' ) # we add the .common paths, by pasting them at the end of each of the model strings, e.g.: models_ps <- lapply( models_ps, \\(x) paste(x, c('LS = b1_ * BM; NL = b2_ * BM; DD = b3_ * NL'), sep = '; ') ) result_pp <- phylopath::phylo_path( models_pp, data = rhino_std, tree = rhino_tree, model = 'BM' ) library(phylosem) result_ps <- phylosem::compare_phylosem( models_ps, tree = rhino_tree, data = rhino_std ) summary(result_pp) #> model k q C p CICc delta_CICc l w #> five five 4 11 60.7 3.39e-10 85.7 0.0 1.00e+00 1.00e+00 #> eight eight 6 9 101.9 2.22e-16 121.9 36.2 1.38e-08 1.38e-08 #> three three 6 9 111.8 0.00e+00 131.8 46.0 1.00e-10 1.00e-10 #> nine nine 5 10 110.7 0.00e+00 133.2 47.5 4.85e-11 4.85e-11 #> six six 5 10 111.0 0.00e+00 133.5 47.8 4.25e-11 4.25e-11 #> one one 6 9 113.9 0.00e+00 133.9 48.2 3.49e-11 3.49e-11 #> four four 5 10 113.7 0.00e+00 136.2 50.5 1.08e-11 1.08e-11 #> two two 5 10 115.2 0.00e+00 137.6 51.9 5.31e-12 5.31e-12 #> seven seven 4 11 114.2 0.00e+00 139.2 53.5 2.45e-12 2.45e-12 sapply(result_ps, AIC) |> sort() #> five eight four six nine two seven one #> 1680.150 1730.808 1732.720 1732.720 1732.739 1733.104 1734.716 1735.057 #> three #> 1736.103"},{"path":"https://james-thorson-noaa.github.io/phylosem/articles/phylopath.html","id":"model-fitting-sometimes-different","dir":"Articles","previous_headings":"","what":"Model fitting: sometimes different","title":"Detailed comparison with `phylopath`","text":"take best model, particular model, perform model averaging, phylopath phylosem work largely way. packages implemented best(), choice() average() methods respective output types. can get best model (model 5) using best(). phylopath paths now fitted, phylosem already done model just extracted compare_phylosem object: compare two, can convert phylosem result DAG format phylopath uses, use included plot functionality: phylopath now actually fitting causal model , performing d-separation procedure. makes methods much closely aligned, can see output matches closely. However, generally hold true assuming Brownian motion. deviate assumption using (example) Pagel’s lambda model, default phylopath, longer true: reason happens phylosem implements additional parameters estimating single estimated parameter variables model. phylopath, hand, estimates separate lambda residuals regression ran. est_DAG() means one lambda variable modelled cause, phylo_path() means one lambda tested d-separation statement.","code":"best_pp <- phylopath::best(result_pp) best_ps <- phylosem::best(result_ps) plot(best_pp) plot(as_fitted_DAG(best_ps)) phylopath::est_DAG( models_pp$five, data = rhino_std, tree = rhino_tree, model = 'lambda' ) |> plot() phylosem::phylosem( models_ps$five, tree = rhino_tree, data = rhino_std, estimate_lambda = TRUE ) |> as_fitted_DAG() |> plot()"},{"path":"https://james-thorson-noaa.github.io/phylosem/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"James Thorson. Author, maintainer. Wouter van der Bijl. Contributor.","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Thorson, J. T., Maureaud, . ., Frelat, R., Mérigot, B., Bigman, J. S., Friedman, S. T., Palomares, M. L. D., Pinsky, M. L., Price, S. ., & Wainwright, P. (2023). Identifying direct indirect associations among traits merging phylogenetic comparative methods structural equation models. Methods Ecology Evolution, 14(5), 1259–1275. https://doi.org/10.1111/2041-210X.14076 Thorson, J. T., & van der Bijl, W. (2023). phylosem: fast simple R package phylogenetic inference trait imputation using phylogenetic structural equation models. Journal Evolutionary Biology. 36(10): 1357-1364. https://doi.org/10.1111/jeb.14234","code":"@Article{, title = {Identifying direct and indirect associations among traits by merging phylogenetic comparative methods and structural equation models}, journal = {Methods in Ecology and Evolution}, volume = {14}, number = {5}, pages = {1259–1275}, year = {2023}, doi = {10.1111/2041-210X.14076}, url = {https://doi.org/10.1111/2041-210X.14076}, author = {J. T. Thorson and A. A. Maureaud and R. Frelat and B. Mérigot and J. S. Bigman and S. T. Friedman and M. L. D. Palomares and M. L. Pinsky and S. A. Price and P. Wainwright}, } @Article{, title = {phylosem: A fast and simple R package for phylogenetic inference and trait imputation using phylogenetic structural equation models}, journal = {Journal of Evolutionary Biology}, volume = {36}, number = {10}, pages = {1357-1364}, year = {2023}, doi = {10.1111/jeb.14234}, url = {https://doi.org/10.1111/jeb.14234}, author = {James T. Thorson and & Wouter {van der Bijl}}, }"},{"path":"https://james-thorson-noaa.github.io/phylosem/index.html","id":"phylogenetic-structural-equation-models","dir":"","previous_headings":"","what":"Phylogenetic structural equation models","title":"Phylogenetic Structural Equation Model","text":"Package phylosem combines features structural equation models (SEM), phylogenetic comparative methods (PCM), generalized linear mixed models (GLMM). , incorporates broad feature-set: Comparing multiple evolutionary models similar phylopath Estimating trade-offs among multiple traits similar phylolm Predicting missing trait values (associated standard errors) similar Rphylopars Estimating tradeoffs including recursive (cyclic) dependencies similar package sem Applying ordination multiple traits, similar phylogenetic factor analysis package FishLife phylosem specifically intended minimal implementation, uses standard packages input/output formatting: Input: phylogenetic relatedness defined using class phylo package ape Input: structural trade-offs specified using syntax defined package sem Output: visualizing trade-offs using semPlot, diagrammeR, ggraph Output: assembling trait predictions standard errors using phylobase Output: plotting trait predictions using phylosignal Please see package vignettes details regarding syntax features.","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/Mlifehist_ver1_0.html","id":null,"dir":"Reference","previous_headings":"","what":"Fisheries natural mortality example — Mlifehist_ver1_0","title":"Fisheries natural mortality example — Mlifehist_ver1_0","text":"Data used demonstrate phylogenetic comparative methods fisheries science. Specifically copy et al. database doi:10.1093/icesjms/fsu136 using file \"Mlifehist_ver1.0.csv\" accessed https://www.vims.edu/research/departments/fisheries/programs/mort_db/","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/Mlifehist_ver1_0.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fisheries natural mortality example — Mlifehist_ver1_0","text":"","code":"data(Mlifehist_ver1_0)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_fitted_DAG.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert phylosem to phylopath output — as_fitted_DAG","title":"Convert phylosem to phylopath output — as_fitted_DAG","text":"Convert output package phylosem phylopath","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_fitted_DAG.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert phylosem to phylopath output — as_fitted_DAG","text":"","code":"as_fitted_DAG(object)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_fitted_DAG.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert phylosem to phylopath output — as_fitted_DAG","text":"object Output phylosem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_fitted_DAG.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert phylosem to phylopath output — as_fitted_DAG","text":"Convert output format supplied est_DAG","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_phylo4d.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert phylosem to phylo4d — as_phylo4d","title":"Convert phylosem to phylo4d — as_phylo4d","text":"Convert output package phylosem phylo4d object package phylobase","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_phylo4d.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert phylosem to phylo4d — as_phylo4d","text":"","code":"as_phylo4d(object, what = c(\"Estimate\", \"Std. Error\"))"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_phylo4d.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert phylosem to phylo4d — as_phylo4d","text":"object Output phylosem Select convert (Estimate / Std. Error).","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_phylo4d.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert phylosem to phylo4d — as_phylo4d","text":"phylosem output converted format supplied phylo4d","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_phylo4d.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Convert phylosem to phylo4d — as_phylo4d","text":"package intended use using plots assocaited package sem, e.g., using package plotSEM semPlot::semPlotModel","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_sem.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert phylosem to sem output — as_sem","title":"Convert phylosem to sem output — as_sem","text":"Convert output package phylosem output package sem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_sem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert phylosem to sem output — as_sem","text":"","code":"as_sem(object)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_sem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert phylosem to sem output — as_sem","text":"object Output phylosem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/as_sem.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert phylosem to sem output — as_sem","text":"Output converted format supplied sem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/average.compare_phylosem.html","id":null,"dir":"Reference","previous_headings":"","what":"Choose model — average.compare_phylosem","title":"Choose model — average.compare_phylosem","text":"Choose model","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/average.compare_phylosem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Choose model — average.compare_phylosem","text":"","code":"# S3 method for compare_phylosem average(x, cut_off = 2, avg_method = \"conditional\")"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/average.compare_phylosem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Choose model — average.compare_phylosem","text":"x output compare_phylosem cut_off threshold model delta-AIC greater value excluded average avg_method see average_DAGs","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/average.compare_phylosem.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Choose model — average.compare_phylosem","text":"Returns AIC-weighted average fitted models compare_phylosem conversion format est_DAG","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/average.html","id":null,"dir":"Reference","previous_headings":"","what":"Choose model — average","title":"Choose model — average","text":"Choose model","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/average.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Choose model — average","text":"","code":"average(x, cut_off, avg_method)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/average.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Choose model — average","text":"x output compare_phylosem cut_off threshold model delta-AIC greater value excluded average avg_method see average_DAGs","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/average.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Choose model — average","text":"Returns AIC-weighted average fitted models compare_phylosem conversion format [phylopath::est_DAG]","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/best.compare_phylosem.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract best fitted model — best.compare_phylosem","title":"Extract best fitted model — best.compare_phylosem","text":"Extract best fitted model","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/best.compare_phylosem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract best fitted model — best.compare_phylosem","text":"","code":"# S3 method for compare_phylosem best(x)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/best.compare_phylosem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract best fitted model — best.compare_phylosem","text":"x output compare_phylosem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/best.compare_phylosem.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract best fitted model — best.compare_phylosem","text":"Returns best model fitted using compare_phylosem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/best.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract best fitted model — best","title":"Extract best fitted model — best","text":"Extract best fitted model","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/best.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract best fitted model — best","text":"","code":"best(x)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/best.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract best fitted model — best","text":"x output compare_phylosem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/best.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract best fitted model — best","text":"Returns best model fitted using compare_phylosem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/checkDepPackageVersion.html","id":null,"dir":"Reference","previous_headings":"","what":"Check for version mismatch in dependent binary packages — checkDepPackageVersion","title":"Check for version mismatch in dependent binary packages — checkDepPackageVersion","text":"Copied glmmTMB permission","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/checkDepPackageVersion.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check for version mismatch in dependent binary packages — checkDepPackageVersion","text":"","code":"checkDepPackageVersion( dep_pkg = \"TMB\", this_pkg = \"phylosem\", write_file = FALSE, warn = TRUE )"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/checkDepPackageVersion.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check for version mismatch in dependent binary packages — checkDepPackageVersion","text":"dep_pkg upstream package this_pkg downstream package write_file (logical) write version file quit? warn give warning?","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/checkDepPackageVersion.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check for version mismatch in dependent binary packages — checkDepPackageVersion","text":"logical: TRUE binary versions match","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/choice.compare_phylosem.html","id":null,"dir":"Reference","previous_headings":"","what":"Choose model — choice.compare_phylosem","title":"Choose model — choice.compare_phylosem","text":"Choose model","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/choice.compare_phylosem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Choose model — choice.compare_phylosem","text":"","code":"# S3 method for compare_phylosem choice(x, choice)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/choice.compare_phylosem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Choose model — choice.compare_phylosem","text":"x output compare_phylosem choice Integer indicating model extract","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/choice.compare_phylosem.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Choose model — choice.compare_phylosem","text":"Returns chosen model fitted using compare_phylosem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/choice.html","id":null,"dir":"Reference","previous_headings":"","what":"Choose model — choice","title":"Choose model — choice","text":"Choose model","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/choice.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Choose model — choice","text":"","code":"choice(x, choice)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/choice.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Choose model — choice","text":"x output compare_phylosem choice Integer indicating model extract","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/choice.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Choose model — choice","text":"Returns chosen model fitted using compare_phylosem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/coef.phylosem.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract path coefficients — coef.phylosem","title":"Extract path coefficients — coef.phylosem","text":"Extract path coefficients.","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/coef.phylosem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract path coefficients — coef.phylosem","text":"","code":"# S3 method for phylosem coef(object, standardized = FALSE, ...)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/coef.phylosem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract path coefficients — coef.phylosem","text":"object Output phylosem standardized Whether standardize regression coefficients ... used","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/coef.phylosem.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract path coefficients — coef.phylosem","text":"Data-frame listing path coefficients, parameter index estimated values","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/compare_phylosem.html","id":null,"dir":"Reference","previous_headings":"","what":"Compare phylogenetic structural equation models — compare_phylosem","title":"Compare phylogenetic structural equation models — compare_phylosem","text":"Fits several phylogenetic structural equation model comparison","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/compare_phylosem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compare phylogenetic structural equation models — compare_phylosem","text":"","code":"compare_phylosem( sem_set, tree, data, family = rep(\"fixed\", ncol(data)), covs, estimate_ou = FALSE, estimate_lambda = FALSE, estimate_kappa = FALSE, control = phylosem_control(), ... )"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/compare_phylosem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compare phylogenetic structural equation models — compare_phylosem","text":"sem_set named list structural equation model specifications, element passed argument sem phylosem tree phylogenetic structure, using class .phylo data data-frame providing variables modeled. Missing values inputted NA. SEM includes latent variable (.e., variable available measurements) still must inputted column data entirely NA values. family Character-vector listing distribution used column data, element must fixed, normal, binomial, poisson. family=\"fixed\" default behavior assumes given variable measured exactly. options correspond different specifications measurement error. covs optional: character vector one elements, element \tgiving string variable names, separated commas. Variances covariances \tamong variables string added model. confirmatory \tfactor analysis models specified via cfa, covs defaults \tfactors model, thus specifying variances covariances among factors. \tWarning: covs=\"x1, x2\" covs=c(\"x1\", \"x2\") \tequivalent: covs=\"x1, x2\" specifies variance x1, variance \tx2, covariance, covs=c(\"x1\", \"x2\") specifies \tvariance x1 variance x2 covariance. estimate_ou Boolean indicating whether estimate autoregressive (Ornstein-Uhlenbeck) process using additional parameter lnalpha, corresponding model=\"OUrandomRoot\" parameterization phylolm listed doi:10.1093/sysbio/syu005 estimate_lambda Boolean indicating whether estimate additional branch lengths phylogenetic tips (.k.. Pagel-lambda term) using additional parameter logitlambda estimate_kappa Boolean indicating whether estimate nonlinear scaling branch lengths (.k.. Pagel-kappa term) using additional parameter lnkappa control Output phylosem_control, used define user settings, see documentation function details. ... Additional arguments passed phylosem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/compare_phylosem.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compare phylogenetic structural equation models — compare_phylosem","text":"object (list) class `compare_phylosem`, containing list output phylosem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/list_parameters.html","id":null,"dir":"Reference","previous_headings":"","what":"List fixed and random effects — list_parameters","title":"List fixed and random effects — list_parameters","text":"list_parameters lists fixed random effects","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/list_parameters.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"List fixed and random effects — list_parameters","text":"","code":"list_parameters(Obj, verbose = TRUE)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/list_parameters.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"List fixed and random effects — list_parameters","text":"Obj Compiled TMB object verbose Boolean, whether print messages terminal","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/list_parameters.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"List fixed and random effects — list_parameters","text":"Tagged-list fixed random effects, returned invisibly printed screen","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/parse_path.html","id":null,"dir":"Reference","previous_headings":"","what":"Parse path — parse_path","title":"Parse path — parse_path","text":"parse_path copied sem::parse.path","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/parse_path.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Parse path — parse_path","text":"","code":"parse_path(path)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/parse_path.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Parse path — parse_path","text":"path text parse","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/parse_path.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Parse path — parse_path","text":"Tagged-list defining variables direction specified path coefficient","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/parse_path.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Parse path — parse_path","text":"Copied permission John Fox licence GPL (>= 2)","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/phylosem.html","id":null,"dir":"Reference","previous_headings":"","what":"Fit phylogenetic structural equation model — phylosem","title":"Fit phylogenetic structural equation model — phylosem","text":"Fits phylogenetic structural equation model","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/phylosem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fit phylogenetic structural equation model — phylosem","text":"","code":"phylosem( sem, tree, data, family = rep(\"fixed\", ncol(data)), covs = colnames(data), estimate_ou = FALSE, estimate_lambda = FALSE, estimate_kappa = FALSE, data_labels = rownames(data), tmb_inputs = NULL, control = phylosem_control() )"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/phylosem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fit phylogenetic structural equation model — phylosem","text":"sem structural equation model structure, passed either specifyModel specifyEquations parsed control set path coefficients variance-covariance parameters tree phylogenetic structure, using class .phylo data data-frame providing variables modeled. Missing values inputted NA. SEM includes latent variable (.e., variable available measurements) still must inputted column data entirely NA values. family Character-vector listing distribution used column data, element must fixed, normal, binomial, poisson. family=\"fixed\" default behavior assumes given variable measured exactly. options correspond different specifications measurement error. covs optional: character vector one elements, element \tgiving string variable names, separated commas. Variances covariances \tamong variables string added model. confirmatory \tfactor analysis models specified via cfa, covs defaults \tfactors model, thus specifying variances covariances among factors. \tWarning: covs=\"x1, x2\" covs=c(\"x1\", \"x2\") \tequivalent: covs=\"x1, x2\" specifies variance x1, variance \tx2, covariance, covs=c(\"x1\", \"x2\") specifies \tvariance x1 variance x2 covariance. estimate_ou Boolean indicating whether estimate autoregressive (Ornstein-Uhlenbeck) process using additional parameter lnalpha, corresponding model=\"OUrandomRoot\" parameterization phylolm listed doi:10.1093/sysbio/syu005 estimate_lambda Boolean indicating whether estimate additional branch lengths phylogenetic tips (.k.. Pagel-lambda term) using additional parameter logitlambda estimate_kappa Boolean indicating whether estimate nonlinear scaling branch lengths (.k.. Pagel-kappa term) using additional parameter lnkappa data_labels row data, listing corresponding name tree$tip.label. Default pulls data_labels rownames(data) tmb_inputs optional tagged list overrides default constructor TMB inputs (use risk) control Output phylosem_control, used define user settings, see documentation function details.","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/phylosem.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fit phylogenetic structural equation model — phylosem","text":"object (list) class `phylosem`. Elements include: data Copy argument data SEM_model SEM model parsed sem using specifyModel specifyEquations obj TMB object MakeADFun tree Copy argument tree tmb_inputs list inputs passed MakeADFun opt output nlminb sdrep output sdreport report output obj$report() parhat output obj$env$parList() containing maximum likelihood estimates empirical Bayes predictions","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/phylosem.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Fit phylogenetic structural equation model — phylosem","text":"Note parameters logitlambda, lnkappa, lnalpha estimated estimated single value applies modeled variables. differs default behavior phylolm, parameters apply \"response\" \"predictor\" variables. also differs default behavior phylopath, different value estimated call phylolm d-separation estimate path coefficients. However, consistent default behavior Rphylopars, estimates comparable case. additional parameters estimated unbounded support, differs somewhat default bounded estimates phylolm, although parameters match overriding phylolm defaults use unbounded support. Finally, phylosem allows three parameters estimated combination, expanded functionality relative single-option functionality phylolm. Also note phylopath default uses standardized coefficients. achieve matching parameter estimates phylosem phylopath, standardize variable standard deviation 1.0 prior fitting phylosem.","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/phylosem.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Fit phylogenetic structural equation model — phylosem","text":"**Introducing package, features, comparison software (cite using phylosem):** Thorson, J. T., & van der Bijl, W. (press). phylosem: fast simple R package phylogenetic inference trait imputation using phylogenetic structural equation models. Journal Evolutionary Biology. doi:10.1111/jeb.14234 *Statistical methods phylogenetic structural equation models* Thorson, J. T., Maureaud, . ., Frelat, R., Merigot, B., Bigman, J. S., Friedman, S. T., Palomares, M. L. D., Pinsky, M. L., Price, S. ., & Wainwright, P. (2023). Identifying direct indirect associations among traits merging phylogenetic comparative methods structural equation models. Methods Ecology Evolution, 14(5), 1259-1275. doi:10.1111/2041-210X.14076 *Earlier development computational methods, originally used phlogenetic factor analysis:* Thorson, J. T. (2020). Predicting recruitment density dependence intrinsic growth rate fishes worldwide using data-integrated life-history model. Fish Fisheries, 21(2), 237-251. doi:10.1111/faf.12427 Thorson, J. T., Munch, S. B., Cope, J. M., & Gao, J. (2017). Predicting life history parameters fishes worldwide. Ecological Applications, 27(8), 2262-2276. doi:10.1002/eap.1606 *Earlier development phylogenetic path analysis:* van der Bijl, W. (2018). phylopath: Easy phylogenetic path analysis R. PeerJ, 6, e4718. doi:10.7717/peerj.4718 von Hardenberg, ., & Gonzalez-Voyer, . (2013). Disentangling evolutionary cause-effect relationships phylogenetic confirmatory path analysis. Evolution; International Journal Organic Evolution, 67(2), 378-387. doi:10.1111/j.1558-5646.2012.01790.x *Interface involving SEM `arrow notation` repurposed :* Fox, J., Nie, Z., & Byrnes, J. (2020). Sem: Structural equation models. R package version 3.1-11. https://CRAN.R-project.org/package=sem *Coercing output phylo4d depends upon:* Bolker, B., Butler, M., Cowan, P., de Vienne, D., Eddelbuettel, D., Holder, M., Jombart, T., Kembel, S., Michonneau, F., & Orme, B. (2015). phylobase: Base package phylogenetic structures comparative data. R Package Version 0.8.0. https://CRAN.R-project.org/package=phylobase *Laplace approximation parameter estimation depends upon:* Kristensen, K., Nielsen, ., Berg, C. W., Skaug, H., & Bell, B. M. (2016). TMB: Automatic differentiation Laplace approximation. Journal Statistical Software, 70(5), 1-21. doi:10.18637/jss.v070.i05","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/phylosem.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fit phylogenetic structural equation model — phylosem","text":"","code":"# Load data set data(rhino, rhino_tree, package=\"phylopath\") # Run phylosem model = \" DD -> RS, p1 BM -> LS, p2 BM -> NL, p3 NL -> DD, p4 \" psem = phylosem( sem = model, data = rhino[,c(\"BM\",\"NL\",\"DD\",\"RS\",\"LS\")], tree = rhino_tree ) #> NOTE: it is generally simpler to use specifyEquations() or cfa() #> see ?specifyEquations #> List of estimated fixed and random effects: #> Coefficient_name Number_of_coefficients Type #> 1 beta_z 9 Fixed #> 2 x_vj 495 Random #> Running nlminb_loop #1 #> Running newton_loop #1 #> Running sdreport # Convert and plot using phylopath library(phylopath) #> #> Attaching package: ‘phylopath’ #> The following objects are masked from ‘package:phylosem’: #> #> average, best, choice my_fitted_DAG = as_fitted_DAG(psem) coef_plot( my_fitted_DAG ) #> The fitted model does not contain confidence intervals, so showing standard errors instead. Fit the model with `boot` larger than 0 to get confidence intervals, or set `error_bar = \"se\"` to avoid this warning. plot( my_fitted_DAG ) # Convert to phylo4d to extract estimated traits and Standard errors # for all ancestors and tips in the tree. # In this rhino example, note that species are labeled s1-s100 # and ancestral nodes are not named. (traits_est = as_phylo4d(psem)) #> label node ancestor edge.length node.type BM NL #> 1 s1 1 107 0.5640308162 tip -0.76690456 -2.01757398 #> 2 s2 2 107 0.5640308162 tip -1.00970438 -1.74246592 #> 3 s3 3 106 0.6358275951 tip -1.22528123 -2.46855326 #> 4 s4 4 105 0.7144448083 tip 1.33053521 0.34055901 #> 5 s5 5 104 1.1830950600 tip 2.49234369 1.22400475 #> 6 s6 6 109 0.0361022107 tip 1.42514860 2.96922655 #> 7 s7 7 109 0.0361022107 tip 0.35610742 2.01122280 #> 8 s8 8 112 0.5022074646 tip -0.53161422 0.18490174 #> 9 s9 9 112 0.5022074646 tip -0.15373314 0.81809201 #> 10 s10 10 111 1.7871837580 tip 1.11171876 1.24302184 #> 11 s11 11 116 0.5913975424 tip 0.19579448 2.13282693 #> 12 s12 12 119 0.0477228892 tip 0.20125048 3.08972748 #> 13 s13 13 119 0.0477228892 tip 1.52219709 2.96228199 #> 14 s14 14 120 0.1142573039 tip -1.00338251 1.86652322 #> 15 s15 15 120 0.1142573039 tip 1.07689653 1.52906374 #> 16 s16 16 121 0.2756963162 tip 1.61531748 3.57241266 #> 17 s17 17 121 0.2756963162 tip -0.17420285 0.43146654 #> 18 s18 18 122 0.5512595516 tip 2.90711896 3.25268633 #> 19 s19 19 123 0.0349638989 tip 2.40453010 2.24981247 #> 20 s20 20 123 0.0349638989 tip 0.82895203 1.20324781 #> 21 s21 21 114 0.8767527377 tip 2.64255460 3.86427495 #> 22 s22 22 113 1.7461743450 tip -0.07719953 3.19026617 #> 23 s23 23 125 0.9075157185 tip -0.30484408 3.51060091 #> 24 s24 24 125 0.9075157185 tip 1.52258759 3.21435348 #> 25 s25 25 126 0.5415591015 tip 1.23860573 2.04363009 #> 26 s26 26 127 0.1089356405 tip 1.95343200 3.06738965 #> 27 s27 27 127 0.1089356405 tip 1.68648719 4.22039397 #> 28 s28 28 130 3.0857795440 tip 1.23934345 2.26507981 #> 29 s29 29 131 1.6399242000 tip -1.10263719 -1.63892351 #> 30 s30 30 132 0.8944032869 tip 0.08301170 0.42665712 #> 31 s31 31 133 0.7715950937 tip 1.01879042 0.03819250 #> 32 s32 32 133 0.7715950937 tip 0.02167732 -0.37157709 #> 33 s33 33 136 0.8699913472 tip 0.73065935 1.95289384 #> 34 s34 34 137 0.8479589114 tip 2.72407349 3.49784027 #> 35 s35 35 137 0.8479589114 tip 3.76646555 4.49878875 #> 36 s36 36 138 0.4591954289 tip -2.33729326 1.74995773 #> 37 s37 37 139 0.1736071099 tip 0.30205947 2.68777644 #> 38 s38 38 139 0.1736071099 tip -1.33960415 1.76434408 #> 39 s39 39 141 2.0905969730 tip 4.27686830 3.21806190 #> 40 s40 40 143 0.0744131178 tip 1.25068016 -0.71254314 #> 41 s41 41 143 0.0744131178 tip 1.41155371 -0.43526905 #> 42 s42 42 144 0.9370864528 tip 0.08393879 0.23591102 #> 43 s43 43 145 0.0881684468 tip 2.84964114 0.68816551 #> 44 s44 44 145 0.0881684468 tip 2.99095373 1.80145127 #> 45 s45 45 147 1.7204295900 tip 5.13749665 4.26473497 #> 46 s46 46 149 1.1842473100 tip 2.58859925 1.56946821 #> 47 s47 47 149 1.1842473100 tip 1.43384898 1.65242204 #> 48 s48 48 150 1.0253154590 tip 2.80876268 3.24344386 #> 49 s49 49 152 0.7195368746 tip 1.22593514 5.02896634 #> 50 s50 50 152 0.7195368746 tip 2.61927222 0.67351377 #> 51 s51 51 153 0.3613256451 tip 2.30223945 1.34901806 #> 52 s52 52 153 0.3613256451 tip 2.56528288 1.45099218 #> 53 s53 53 155 0.3002640020 tip 0.40340933 -1.65526609 #> 54 s54 54 155 0.3002640020 tip 0.88479865 -1.98334601 #> 55 s55 55 154 0.5937157619 tip 0.46893874 -0.62261098 #> 56 s56 56 156 3.2486997580 tip 2.95039314 4.03454344 #> 57 s57 57 161 0.4215356986 tip 1.53656023 0.46891422 #> 58 s58 58 161 0.4215356986 tip 2.50142020 0.45568152 #> 59 s59 59 162 0.0698869058 tip 2.33417280 -0.61028405 #> 60 s60 60 162 0.0698869058 tip 2.39854268 0.90424064 #> 61 s61 61 164 0.9090035873 tip 1.15944783 0.14368777 #> 62 s62 62 165 0.7237639845 tip 0.59250982 -1.00793024 #> 63 s63 63 167 0.3390345394 tip -0.70393275 -1.59874559 #> 64 s64 64 167 0.3390345394 tip 1.58394613 0.45296021 #> 65 s65 65 168 0.3269574705 tip 1.59263345 0.56850859 #> 66 s66 66 168 0.3269574705 tip 2.15658024 -0.88396728 #> 67 s67 67 170 0.4816150364 tip 5.26743199 2.18963416 #> 68 s68 68 171 0.0359279485 tip 1.34622701 -1.84421537 #> 69 s69 69 171 0.0359279485 tip 2.18241698 -0.76580964 #> 70 s70 70 173 0.6413136611 tip 2.93983039 -0.11351013 #> 71 s71 71 175 0.0945133814 tip 3.01129396 1.25866166 #> 72 s72 72 176 0.0006422211 tip 2.59398228 1.21303645 #> 73 s73 73 176 0.0006422211 tip 2.71938915 1.62942984 #> 74 s74 74 174 0.3139612126 tip 2.60745101 0.91920273 #> 75 s75 75 177 0.0359670563 tip 4.86547665 0.44478185 #> 76 s76 76 177 0.0359670563 tip 5.43684487 0.22107243 #> 77 s77 77 180 0.8668137583 tip 1.58687164 1.50654438 #> 78 s78 78 181 0.5981367654 tip 0.09365673 0.40527336 #> 79 s79 79 182 0.0727809267 tip 0.27286020 0.21689207 #> 80 s80 80 182 0.0727809267 tip 2.25220200 -1.07873909 #> 81 s81 81 179 1.5434906440 tip 1.05736541 -0.05289912 #> 82 s82 82 183 0.8078943991 tip 4.69785604 0.33163484 #> 83 s83 83 184 0.4661635151 tip 3.52231773 1.69620670 #> 84 s84 84 185 0.1900157199 tip 1.60779377 2.53614523 #> 85 s85 85 185 0.1900157199 tip 1.90789841 2.74261353 #> 86 s86 86 188 0.2378751898 tip 3.94393984 -1.28344814 #> 87 s87 87 190 0.0040209131 tip 2.67507049 -0.72928762 #> 88 s88 88 190 0.0040209131 tip 4.02248087 1.27038228 #> 89 s89 89 189 0.0295310172 tip 4.11611390 0.89924275 #> 90 s90 90 195 0.3502461608 tip 2.45594624 0.51529773 #> 91 s91 91 196 0.1859710332 tip 4.14053815 2.17333172 #> 92 s92 92 196 0.1859710332 tip 3.16070940 -0.62189645 #> 93 s93 93 194 0.8106943515 tip 2.97788577 -0.22596947 #> 94 s94 94 193 0.8259283637 tip 3.93086602 1.00077297 #> 95 s95 95 197 0.4469879611 tip 1.54045681 0.11089573 #> 96 s96 96 197 0.4469879611 tip 1.04974779 2.05813396 #> 97 s97 97 198 0.2644025504 tip 4.08564283 1.22297875 #> 98 s98 98 198 0.2644025504 tip 3.47019109 1.80421473 #> 99 s99 99 199 0.0717127012 tip -1.51698326 -2.66773226 #> 100 s100 100 199 0.0717127012 tip -1.55493000 -1.25446488 #> 101 101 0 NA root 1.37537396 1.29911665 #> 102 102 101 0.3278789676 internal 1.16700652 1.46268576 #> 103 103 102 0.0448143702 internal 1.14127151 1.44843940 #> 104 104 103 1.7536273230 internal 0.80116123 -0.04630783 #> 105 105 104 0.4686502517 internal 0.04035308 -0.94897241 #> 106 106 105 0.0786172132 internal -0.22924544 -1.24229608 #> 107 107 106 0.0717967789 internal -0.36298395 -1.37170519 #> 108 108 103 0.5388417629 internal 0.93634388 1.73643821 #> 109 109 108 2.3617784090 internal 0.89097477 2.48450717 #> 110 110 108 0.1838847379 internal 0.86994281 1.77647687 #> 111 111 110 0.4268121240 internal 0.68585957 1.45889941 #> 112 112 111 1.2849762930 internal -0.17453886 0.65800392 #> 113 113 110 0.4678215366 internal 0.90278222 2.22643059 #> 114 114 113 0.8694216075 internal 1.45174623 2.58275128 #> 115 115 114 0.0071530214 internal 1.44654748 2.57522749 #> 116 116 115 0.2782021739 internal 0.86447464 2.32881108 #> 117 117 116 0.1696001798 internal 0.70138920 2.23479250 #> 118 118 117 0.1745800373 internal 0.52173009 2.28117789 #> 119 119 118 0.1994944362 internal 0.82540175 2.94643376 #> 120 120 118 0.1329600215 internal 0.18250929 1.87312200 #> 121 121 117 0.1461010464 internal 0.71125182 2.11498215 #> 122 122 115 0.3183401648 internal 1.88123312 2.52235493 #> 123 123 122 0.5162956527 internal 1.62540354 1.75259450 #> 124 124 102 1.5076279270 internal 1.07467482 2.69406705 #> 125 125 124 0.5663931071 internal 0.81605854 3.06517183 #> 126 126 124 0.9323497240 internal 1.44328773 2.84469772 #> 127 127 126 0.4326234610 internal 1.77783916 3.55452384 #> 128 128 101 0.0206999989 internal 1.38852884 1.28879004 #> 129 129 128 0.2000464880 internal 1.33869173 1.25256763 #> 130 130 129 0.0028896898 internal 1.33645716 1.25093770 #> 131 131 130 1.4458553430 internal 0.26389060 -0.03977885 #> 132 132 131 0.7455209135 internal 0.33208018 0.02167613 #> 133 133 132 0.1228081933 internal 0.37751187 -0.02380741 #> 134 134 129 0.6949407786 internal 1.70295554 1.51871663 #> 135 135 134 0.9138552433 internal 1.13478525 2.30724483 #> 136 136 135 0.6098818644 internal 1.98297090 2.97989486 #> 137 137 136 0.0220324358 internal 2.04532689 3.03020353 #> 138 138 135 1.0206777830 internal -0.91929472 2.06222134 #> 139 139 138 0.2855883190 internal -0.61213304 2.18786984 #> 140 140 134 0.0802496379 internal 1.79491314 1.48020658 #> 141 141 140 0.2228818440 internal 1.93611785 1.40251215 #> 142 142 141 0.2076500851 internal 1.83517586 1.14979654 #> 143 143 142 1.8085337700 internal 1.34127779 -0.53915958 #> 144 144 142 0.9458604351 internal 1.63368609 0.88198103 #> 145 145 144 0.8489180060 internal 2.85678218 1.22689695 #> 146 146 140 0.1770607381 internal 1.88563084 1.45696065 #> 147 147 146 0.4159884892 internal 2.40357460 2.04245093 #> 148 148 147 0.1695261804 internal 2.34525741 2.06207604 #> 149 149 148 0.3666560998 internal 2.21751655 1.88955477 #> 150 150 148 0.5255879506 internal 2.34756636 2.37022333 #> 151 151 150 0.2079515725 internal 2.25494138 2.31503928 #> 152 152 151 0.0978270115 internal 2.18389259 2.42967093 #> 153 153 151 0.4560382411 internal 2.38302136 1.65964448 #> 154 154 146 1.5427023170 internal 0.75523426 -0.91688085 #> 155 155 154 0.2934517599 internal 0.68171630 -1.51387805 #> 156 156 128 0.0400159638 internal 1.42392811 1.27607295 #> 157 157 156 0.4026925133 internal 1.59094851 0.80617095 #> 158 158 157 0.7951233038 internal 1.94014906 0.57576258 #> 159 159 158 0.3736798197 internal 2.09528413 0.38387613 #> 160 160 159 1.1492712710 internal 2.14639670 0.34532781 #> 161 161 160 0.1063971509 internal 2.10365653 0.38456695 #> 162 162 160 0.4580459438 internal 2.35076674 0.16103746 #> 163 163 159 0.2335971502 internal 2.18187420 0.27175804 #> 164 164 163 0.5346033834 internal 1.43309091 -0.13103237 #> 165 165 164 0.1852396028 internal 1.22940201 -0.32658223 #> 166 166 165 0.1474062575 internal 1.19702794 -0.34342541 #> 167 167 166 0.2373231876 internal 0.75543298 -0.47728109 #> 168 168 166 0.2494002564 internal 1.60632063 -0.23125539 #> 169 169 163 0.4262080943 internal 2.93682275 0.38831503 #> 170 170 169 0.5357838400 internal 3.31558918 0.40274303 #> 171 171 170 0.4456870879 internal 1.82442522 -1.23884620 #> 172 172 169 0.3680846598 internal 3.32860306 0.47906468 #> 173 173 172 0.0080005555 internal 3.31402225 0.48288912 #> 174 174 173 0.3273524485 internal 2.90843309 0.94379679 #> 175 175 174 0.2194478311 internal 2.84691345 1.26996664 #> 176 176 175 0.0938711603 internal 2.65733422 1.42071746 #> 177 177 172 0.6133471602 internal 5.09924499 0.33708989 #> 178 178 158 0.3661103260 internal 1.94894404 0.65767175 #> 179 179 178 0.1412829703 internal 1.78053559 0.59541556 #> 180 180 179 0.6766768859 internal 1.29098355 0.58146426 #> 181 181 180 0.2686769929 internal 1.00489189 0.28918765 #> 182 182 181 0.5253558386 internal 1.24584098 -0.38427402 #> 183 183 178 0.8768792154 internal 3.01524389 1.24025010 #> 184 184 183 0.3417308840 internal 2.71906704 1.85162298 #> 185 185 184 0.2761477952 internal 2.00389796 2.43773069 #> 186 186 157 0.4967710625 internal 1.57881801 0.37044145 #> 187 187 186 0.8026320886 internal 2.63989652 0.47536690 #> 188 188 187 1.3087289040 internal 3.73176237 -0.25942644 #> 189 189 188 0.2083441725 internal 3.71974615 0.52049204 #> 190 190 189 0.0255101041 internal 3.37587615 0.28880652 #> 191 191 187 0.3703056422 internal 2.82049596 0.73168597 #> 192 192 191 0.1968950188 internal 2.73597270 0.72052113 #> 193 193 192 0.1534750686 internal 2.96263400 0.63791542 #> 194 194 193 0.0152340122 internal 2.96727375 0.62302314 #> 195 195 194 0.4604481907 internal 3.10148300 0.65510394 #> 196 196 195 0.1642751276 internal 3.45213971 0.73212244 #> 197 197 192 0.5324154713 internal 1.72111346 0.97689560 #> 198 198 191 0.9118959007 internal 3.65669043 1.41459293 #> 199 199 186 2.2775234810 internal -1.48767902 -1.92496075 #> DD RS LS #> 1 -0.792261887 -3.392696532 -0.094767133 #> 2 1.764320772 -1.046718911 -2.146334945 #> 3 -1.806155037 -2.859660611 -0.632068429 #> 4 0.948874128 -0.278689412 -0.134264890 #> 5 1.624151256 0.220814157 0.608236202 #> 6 2.252422051 2.426804694 3.085533985 #> 7 4.108146451 1.633655726 1.223147978 #> 8 -1.160995541 0.999431600 0.517537813 #> 9 1.341758025 1.304985166 1.521502859 #> 10 0.570073147 0.720705268 1.017846421 #> 11 2.828030732 2.001705516 -0.919563025 #> 12 2.980595831 1.521314671 0.131015359 #> 13 1.359162717 2.162885763 1.163026706 #> 14 1.848692884 1.583433981 0.927126010 #> 15 2.141254323 0.189198068 1.812639133 #> 16 1.560178083 2.781747914 3.347392203 #> 17 -0.073939690 0.027354662 0.900742360 #> 18 3.402771712 -0.457261541 -0.106852864 #> 19 2.876235296 0.463291813 1.744751921 #> 20 2.660581053 0.222790773 -0.532153665 #> 21 2.299374032 3.217700305 -1.138669460 #> 22 1.993843377 2.765155326 -0.621091021 #> 23 2.443433385 2.335835676 0.469978073 #> 24 3.979027350 3.226436578 2.780465714 #> 25 2.034137013 0.942969691 3.576663764 #> 26 3.027626293 1.238032443 3.065084710 #> 27 3.714825776 1.176979136 1.534261968 #> 28 0.675597786 2.317952086 -0.218626950 #> 29 -2.974709277 -1.760554760 -1.239583231 #> 30 0.867846728 2.592129904 0.021198341 #> 31 -1.320245499 0.237320570 -0.105135494 #> 32 -1.143376610 0.425657695 0.271740269 #> 33 3.123728954 1.116995185 3.162476646 #> 34 1.753272053 2.688262363 4.250866454 #> 35 1.210588042 1.223837757 2.943572655 #> 36 0.909660193 2.451038343 1.895478114 #> 37 1.859861867 0.828466484 2.481719676 #> 38 2.717730773 0.796806294 1.126178674 #> 39 4.477326061 2.610442179 1.465738306 #> 40 2.277574874 0.484494584 1.791592125 #> 41 1.593822132 1.454823177 0.729183055 #> 42 2.322463839 0.204364321 -0.885061737 #> 43 2.292615149 -1.418461690 3.138543805 #> 44 2.146223656 -0.184209303 3.099199564 #> 45 2.055324236 2.083887955 2.952789127 #> 46 2.486684424 1.457198741 4.701207454 #> 47 1.420995810 1.601339097 1.396442779 #> 48 3.405244971 1.876423665 4.818320993 #> 49 2.446367879 4.942733281 1.918220026 #> 50 0.373382213 -0.811619200 2.145960417 #> 51 0.858730865 2.844229971 2.215893641 #> 52 2.048278126 1.876438183 2.253066255 #> 53 -0.979401859 0.066992787 1.239294862 #> 54 -1.520667823 -0.517780882 0.002562199 #> 55 0.649664697 0.296776545 0.993825267 #> 56 4.379073801 2.422662868 0.795863984 #> 57 -0.328722937 1.480830939 -1.445882168 #> 58 0.646239216 0.424770897 -1.916304907 #> 59 0.835999391 0.217055270 -0.355409430 #> 60 0.142267982 2.659357457 -0.333557662 #> 61 1.587819101 2.699486648 -0.405668792 #> 62 1.082524348 -0.011507182 0.161447095 #> 63 -1.299067758 1.555475543 -0.651822690 #> 64 0.351846112 0.605027979 2.046577980 #> 65 -0.279595862 1.236295365 -0.684431280 #> 66 0.115635072 -0.342677375 -0.311295514 #> 67 2.599415169 -0.513369614 2.115479969 #> 68 -0.943343694 -0.906440767 0.753327404 #> 69 -0.891525122 -0.467958901 1.752160922 #> 70 -0.375173649 1.154414206 0.965969722 #> 71 -0.592328994 -0.336852088 1.329634282 #> 72 0.719152392 1.226426188 0.316414278 #> 73 1.599438191 0.789638349 0.899306546 #> 74 -0.332396124 -0.433700522 0.629458828 #> 75 0.175928921 0.707616811 2.808930860 #> 76 -0.311789389 -1.996944450 3.564422436 #> 77 2.868493105 0.326425814 -0.441878566 #> 78 -0.250515866 1.272618452 0.526962588 #> 79 0.398301132 0.929595781 2.317926260 #> 80 0.382728205 -0.729808449 2.075454233 #> 81 1.380853148 -0.655486117 1.238821897 #> 82 1.096240272 0.151342211 1.187553629 #> 83 0.794919057 3.466323051 1.677363592 #> 84 0.659773370 3.554223820 -1.116737022 #> 85 1.416964480 3.808228110 -0.272035393 #> 86 0.430344619 -0.918540236 3.601938769 #> 87 -1.503773245 -0.173989015 2.884114421 #> 88 -0.529029913 0.420256120 5.698224578 #> 89 1.230771112 -0.287094234 2.761662804 #> 90 0.560078571 2.048855290 1.138288790 #> 91 1.959411459 0.763497433 1.756392549 #> 92 0.698357920 0.787654206 1.640998942 #> 93 0.678480280 -0.093837593 1.648291943 #> 94 0.840604819 0.001959162 3.568538018 #> 95 0.992731804 2.524498697 2.340271301 #> 96 1.033125330 3.258153919 2.484460337 #> 97 0.270032796 3.015785994 2.745792037 #> 98 0.144785071 4.052392486 1.909532374 #> 99 -1.029371553 -1.760670551 -1.074155886 #> 100 -0.954367914 1.702235497 -0.555582075 #> 101 1.308843827 1.116983364 0.941671321 #> 102 1.500843440 1.095518802 0.946854714 #> 103 1.494577889 1.072951763 0.919909252 #> 104 0.798558133 -0.636985822 0.003413918 #> 105 0.285513704 -1.433753796 -0.481099535 #> 106 0.126453352 -1.694516361 -0.600543380 #> 107 0.199419762 -1.801089988 -0.706065112 #> 108 1.633109628 1.327025910 0.877534736 #> 109 3.168548867 2.024896376 2.144656353 #> 110 1.560837730 1.359395853 0.764417737 #> 111 1.135439910 1.220869473 0.851058307 #> 112 0.261217479 1.163432444 0.991981768 #> 113 1.843241992 1.593584710 0.381671289 #> 114 2.293090839 1.445486375 0.169633396 #> 115 2.296740634 1.429809245 0.178562730 #> 116 2.068841007 1.518722645 0.489558785 #> 117 1.712187338 1.434417686 1.083257103 #> 118 1.940872105 1.366000045 1.054468126 #> 119 2.145414094 1.791237720 0.690549218 #> 120 1.978714109 1.030478751 1.275088906 #> 121 1.213570447 1.419050458 1.618787592 #> 122 2.719952322 0.630368111 0.220090980 #> 123 2.766821179 0.352451641 0.593650281 #> 124 2.594464616 1.756013836 1.877177529 #> 125 2.936896160 2.325167049 1.737290454 #> 126 2.707100980 1.227585072 2.682779876 #> 127 3.296961835 1.209751107 2.342513313 #> 128 1.296722306 1.118338487 0.941344078 #> 129 1.164383097 1.118495599 0.943855518 #> 130 1.160313003 1.118077898 0.940846150 #> 131 -0.649041547 0.346875063 -0.021614045 #> 132 -0.524727502 0.907274878 0.035813489 #> 133 -0.695460246 0.768245367 0.047280182 #> 134 1.683466167 1.219494219 1.676302177 #> 135 1.810253231 1.473661832 2.372100281 #> 136 1.964019245 1.607147790 3.098631717 #> 137 1.940204635 1.624383130 3.123261340 #> 138 1.694523083 1.534142041 1.933333163 #> 139 2.150272810 0.980817437 1.834108238 #> 140 1.732274565 1.208837658 1.699781795 #> 141 2.018227402 1.159933763 1.598592939 #> 142 2.040386417 0.970299146 1.517515220 #> 143 1.937808809 0.969671787 1.265570786 #> 144 2.194970191 0.106828516 1.279967184 #> 145 2.218212435 -0.756502792 3.028091758 #> 146 1.612798864 1.224175296 1.831972593 #> 147 1.806870188 1.544144043 2.386029080 #> 148 1.861477377 1.621354858 2.555974674 #> 149 1.896798692 1.586139397 2.744450307 #> 150 1.980146158 1.911214308 2.812690102 #> 151 1.738063572 2.032954829 2.507484513 #> 152 1.667901811 2.039924690 2.405852377 #> 153 1.534247640 2.267440783 2.311944520 #> 154 -0.147891799 0.171198695 0.928999717 #> 155 -0.877011852 -0.091166271 0.725195972 #> 156 1.299761980 1.120926701 0.940209099 #> 157 0.948655082 0.985615977 0.946679770 #> 158 0.826966290 0.854360177 0.652302687 #> 159 0.621612795 0.779146856 0.439322451 #> 160 0.336050797 1.090538403 -0.928180900 #> 161 0.276575654 1.044332560 -1.180755300 #> 162 0.478283058 1.413563401 -0.385856446 #> 163 0.551283293 0.668836582 0.584137161 #> 164 0.594216305 1.017376552 0.175590443 #> 165 0.406613061 0.795359672 0.152480195 #> 166 0.119665632 0.783019034 0.132263730 #> 167 -0.226411699 0.956404490 0.461912941 #> 168 -0.002138993 0.579930789 -0.248365631 #> 169 0.388736091 0.189700133 1.174068323 #> 170 0.679411860 -0.359701226 1.522352945 #> 171 -0.855565241 -0.674511032 1.263190047 #> 172 0.048661117 0.153345062 1.444276295 #> 173 0.042746877 0.162667651 1.428068822 #> 174 0.014082113 0.037885115 1.000794444 #> 175 0.237042152 0.283856183 0.973912293 #> 176 1.156151241 1.005563482 0.609108318 #> 177 -0.064609116 -0.621932444 3.137044171 #> 178 0.972129054 0.867613889 0.725424288 #> 179 1.025171086 0.716639048 0.757475405 #> 180 1.123283232 0.595091884 0.699959101 #> 181 0.621294968 0.630106695 1.031045258 #> 182 0.405464837 0.134241374 2.121178648 #> 183 0.990603910 1.836390418 0.701632784 #> 184 0.953120717 2.926692616 0.486821499 #> 185 1.016547218 3.488081666 -0.392022456 #> 186 0.591549056 0.900698445 1.138580809 #> 187 0.563944049 1.086133686 2.126388552 #> 188 0.268872389 -0.355935806 3.459696990 #> 189 0.080471955 -0.092747344 3.547370950 #> 190 -0.936271794 0.107362828 4.236832864 #> 191 0.634698796 1.579721293 2.204867160 #> 192 0.752897750 1.473613342 2.223438386 #> 193 0.792236063 1.103061208 2.199555594 #> 194 0.795248656 1.086589529 2.171934487 #> 195 0.952624971 1.259177316 1.634498265 #> 196 1.192887579 0.950371055 1.675491901 #> 197 0.936047239 2.472161931 2.356507086 #> 198 0.261511431 3.286631493 2.312114168 #> 199 -0.967327452 -0.014804246 -0.784591384 (traits_SE = as_phylo4d(psem, what=\"Std. Error\")) #> label node ancestor edge.length node.type BM NL DD #> 1 s1 1 107 0.5640308162 tip NA NA NA #> 2 s2 2 107 0.5640308162 tip NA NA NA #> 3 s3 3 106 0.6358275951 tip NA NA NA #> 4 s4 4 105 0.7144448083 tip NA NA NA #> 5 s5 5 104 1.1830950600 tip NA NA NA #> 6 s6 6 109 0.0361022107 tip NA NA NA #> 7 s7 7 109 0.0361022107 tip NA NA NA #> 8 s8 8 112 0.5022074646 tip NA NA NA #> 9 s9 9 112 0.5022074646 tip NA NA NA #> 10 s10 10 111 1.7871837580 tip NA NA NA #> 11 s11 11 116 0.5913975424 tip NA NA NA #> 12 s12 12 119 0.0477228892 tip NA NA NA #> 13 s13 13 119 0.0477228892 tip NA NA NA #> 14 s14 14 120 0.1142573039 tip NA NA NA #> 15 s15 15 120 0.1142573039 tip NA NA NA #> 16 s16 16 121 0.2756963162 tip NA NA NA #> 17 s17 17 121 0.2756963162 tip NA NA NA #> 18 s18 18 122 0.5512595516 tip NA NA NA #> 19 s19 19 123 0.0349638989 tip NA NA NA #> 20 s20 20 123 0.0349638989 tip NA NA NA #> 21 s21 21 114 0.8767527377 tip NA NA NA #> 22 s22 22 113 1.7461743450 tip NA NA NA #> 23 s23 23 125 0.9075157185 tip NA NA NA #> 24 s24 24 125 0.9075157185 tip NA NA NA #> 25 s25 25 126 0.5415591015 tip NA NA NA #> 26 s26 26 127 0.1089356405 tip NA NA NA #> 27 s27 27 127 0.1089356405 tip NA NA NA #> 28 s28 28 130 3.0857795440 tip NA NA NA #> 29 s29 29 131 1.6399242000 tip NA NA NA #> 30 s30 30 132 0.8944032869 tip NA NA NA #> 31 s31 31 133 0.7715950937 tip NA NA NA #> 32 s32 32 133 0.7715950937 tip NA NA NA #> 33 s33 33 136 0.8699913472 tip NA NA NA #> 34 s34 34 137 0.8479589114 tip NA NA NA #> 35 s35 35 137 0.8479589114 tip NA NA NA #> 36 s36 36 138 0.4591954289 tip NA NA NA #> 37 s37 37 139 0.1736071099 tip NA NA NA #> 38 s38 38 139 0.1736071099 tip NA NA NA #> 39 s39 39 141 2.0905969730 tip NA NA NA #> 40 s40 40 143 0.0744131178 tip NA NA NA #> 41 s41 41 143 0.0744131178 tip NA NA NA #> 42 s42 42 144 0.9370864528 tip NA NA NA #> 43 s43 43 145 0.0881684468 tip NA NA NA #> 44 s44 44 145 0.0881684468 tip NA NA NA #> 45 s45 45 147 1.7204295900 tip NA NA NA #> 46 s46 46 149 1.1842473100 tip NA NA NA #> 47 s47 47 149 1.1842473100 tip NA NA NA #> 48 s48 48 150 1.0253154590 tip NA NA NA #> 49 s49 49 152 0.7195368746 tip NA NA NA #> 50 s50 50 152 0.7195368746 tip NA NA NA #> 51 s51 51 153 0.3613256451 tip NA NA NA #> 52 s52 52 153 0.3613256451 tip NA NA NA #> 53 s53 53 155 0.3002640020 tip NA NA NA #> 54 s54 54 155 0.3002640020 tip NA NA NA #> 55 s55 55 154 0.5937157619 tip NA NA NA #> 56 s56 56 156 3.2486997580 tip NA NA NA #> 57 s57 57 161 0.4215356986 tip NA NA NA #> 58 s58 58 161 0.4215356986 tip NA NA NA #> 59 s59 59 162 0.0698869058 tip NA NA NA #> 60 s60 60 162 0.0698869058 tip NA NA NA #> 61 s61 61 164 0.9090035873 tip NA NA NA #> 62 s62 62 165 0.7237639845 tip NA NA NA #> 63 s63 63 167 0.3390345394 tip NA NA NA #> 64 s64 64 167 0.3390345394 tip NA NA NA #> 65 s65 65 168 0.3269574705 tip NA NA NA #> 66 s66 66 168 0.3269574705 tip NA NA NA #> 67 s67 67 170 0.4816150364 tip NA NA NA #> 68 s68 68 171 0.0359279485 tip NA NA NA #> 69 s69 69 171 0.0359279485 tip NA NA NA #> 70 s70 70 173 0.6413136611 tip NA NA NA #> 71 s71 71 175 0.0945133814 tip NA NA NA #> 72 s72 72 176 0.0006422211 tip NA NA NA #> 73 s73 73 176 0.0006422211 tip NA NA NA #> 74 s74 74 174 0.3139612126 tip NA NA NA #> 75 s75 75 177 0.0359670563 tip NA NA NA #> 76 s76 76 177 0.0359670563 tip NA NA NA #> 77 s77 77 180 0.8668137583 tip NA NA NA #> 78 s78 78 181 0.5981367654 tip NA NA NA #> 79 s79 79 182 0.0727809267 tip NA NA NA #> 80 s80 80 182 0.0727809267 tip NA NA NA #> 81 s81 81 179 1.5434906440 tip NA NA NA #> 82 s82 82 183 0.8078943991 tip NA NA NA #> 83 s83 83 184 0.4661635151 tip NA NA NA #> 84 s84 84 185 0.1900157199 tip NA NA NA #> 85 s85 85 185 0.1900157199 tip NA NA NA #> 86 s86 86 188 0.2378751898 tip NA NA NA #> 87 s87 87 190 0.0040209131 tip NA NA NA #> 88 s88 88 190 0.0040209131 tip NA NA NA #> 89 s89 89 189 0.0295310172 tip NA NA NA #> 90 s90 90 195 0.3502461608 tip NA NA NA #> 91 s91 91 196 0.1859710332 tip NA NA NA #> 92 s92 92 196 0.1859710332 tip NA NA NA #> 93 s93 93 194 0.8106943515 tip NA NA NA #> 94 s94 94 193 0.8259283637 tip NA NA NA #> 95 s95 95 197 0.4469879611 tip NA NA NA #> 96 s96 96 197 0.4469879611 tip NA NA NA #> 97 s97 97 198 0.2644025504 tip NA NA NA #> 98 s98 98 198 0.2644025504 tip NA NA NA #> 99 s99 99 199 0.0717127012 tip NA NA NA #> 100 s100 100 199 0.0717127012 tip NA NA NA #> 101 101 0 NA root 1.22322635 1.61418789 1.72525631 #> 102 102 101 0.3278789676 internal 1.30071498 1.71644304 1.83454740 #> 103 103 102 0.0448143702 internal 1.31380257 1.73371363 1.85300633 #> 104 104 103 1.7536273230 internal 1.37288352 1.81167774 1.93633497 #> 105 105 104 0.4686502517 internal 0.97714845 1.28945978 1.37818444 #> 106 106 105 0.0786172132 internal 0.91260141 1.20428254 1.28714636 #> 107 107 106 0.0717967789 internal 0.91028188 1.20122166 1.28387486 #> 108 108 103 0.5388417629 internal 1.39262282 1.83772602 1.96417557 #> 109 109 108 2.3617784090 internal 0.30636597 0.40428514 0.43210304 #> 110 110 108 0.1838847379 internal 1.36644386 1.80317986 1.92725237 #> 111 111 110 0.4268121240 internal 1.51142111 1.99449403 2.13173041 #> 112 112 111 1.2849762930 internal 1.07717612 1.42145781 1.51926493 #> 113 113 110 0.4678215366 internal 1.44312706 1.90437217 2.03540748 #> 114 114 113 0.8694216075 internal 0.97715330 1.28946619 1.37819129 #> 115 115 114 0.0071530214 internal 0.97044019 1.28060746 1.36872301 #> 116 116 115 0.2782021739 internal 0.88470104 1.16746480 1.24779527 #> 117 117 116 0.1696001798 internal 0.74979954 0.98944675 1.05752823 #> 118 118 117 0.1745800373 internal 0.64458322 0.85060171 0.90912959 #> 119 119 118 0.1994944362 internal 0.34098890 0.44997408 0.48093573 #> 120 120 118 0.1329600215 internal 0.49663196 0.65536300 0.70045697 #> 121 121 117 0.1461010464 internal 0.70970095 0.93653205 1.00097259 #> 122 122 115 0.3183401648 internal 0.98266488 1.29673935 1.38596490 #> 123 123 122 0.5162956527 internal 0.29920899 0.39484068 0.42200872 #> 124 124 102 1.5076279270 internal 1.49221553 1.96915006 2.10464258 #> 125 125 124 0.5663931071 internal 1.32624680 1.75013522 1.87055785 #> 126 126 124 0.9323497240 internal 1.07523634 1.41889804 1.51652903 #> 127 127 126 0.4326234610 internal 0.51732351 0.68266788 0.72964063 #> 128 128 101 0.0206999989 internal 1.20634454 1.59191040 1.70144596 #> 129 129 128 0.2000464880 internal 1.25574263 1.65709685 1.77111774 #> 130 130 129 0.0028896898 internal 1.25884677 1.66119313 1.77549587 #> 131 131 130 1.4458553430 internal 1.57854250 2.08306843 2.22639940 #> 132 132 131 0.7455209135 internal 1.18802246 1.56773230 1.67560422 #> 133 133 132 0.1228081933 internal 1.13999603 1.50435591 1.60786705 #> 134 134 129 0.6949407786 internal 1.20257065 1.58693032 1.69612321 #> 135 135 134 0.9138552433 internal 1.38787894 1.83146592 1.95748473 #> 136 136 135 0.6098818644 internal 1.11567674 1.47226380 1.57356677 #> 137 137 136 0.0220324358 internal 1.11103546 1.46613910 1.56702064 #> 138 138 135 1.0206777830 internal 0.97459019 1.28608387 1.37457624 #> 139 139 138 0.2855883190 internal 0.63244106 0.83457873 0.89200411 #> 140 140 134 0.0802496379 internal 1.16877200 1.54232911 1.64845310 #> 141 141 140 0.2228818440 internal 1.28533627 1.69614907 1.81285704 #> 142 142 141 0.2076500851 internal 1.37909625 1.81987615 1.94509749 #> 143 143 142 1.8085337700 internal 0.43767253 0.57755925 0.61729973 #> 144 144 142 0.9458604351 internal 1.34725029 1.77785174 1.90018148 #> 145 145 144 0.8489180060 internal 0.47300751 0.62418782 0.66713669 #> 146 146 140 0.1770607381 internal 1.23211080 1.62591193 1.73778706 #> 147 147 146 0.4159884892 internal 1.24623965 1.64455658 1.75771460 #> 148 148 147 0.1695261804 internal 1.21017992 1.59697162 1.70685543 #> 149 149 148 0.3666560998 internal 1.32044920 1.74248462 1.86238084 #> 150 150 148 0.5255879506 internal 1.12365874 1.48279697 1.58482469 #> 151 151 150 0.2079515725 internal 1.00451302 1.32557048 1.41677983 #> 152 152 151 0.0978270115 internal 1.01302888 1.33680815 1.42879073 #> 153 153 151 0.4560382411 internal 0.87087189 1.14921565 1.22829044 #> 154 154 146 1.5427023170 internal 1.08223037 1.42812747 1.52639352 #> 155 155 154 0.2934517599 internal 0.80865458 1.06711274 1.14053822 #> 156 156 128 0.0400159638 internal 1.23140386 1.62497905 1.73678999 #> 157 157 156 0.4026925133 internal 1.35918408 1.79359975 1.91701308 #> 158 158 157 0.7951233038 internal 1.27358140 1.68063717 1.79627781 #> 159 159 158 0.3736798197 internal 1.22652022 1.61853452 1.72990203 #> 160 160 159 1.1492712710 internal 0.94650940 1.24902804 1.33497069 #> 161 161 160 0.1063971509 internal 0.87500944 1.15467562 1.23412609 #> 162 162 160 0.4580459438 internal 0.41761870 0.55109591 0.58901551 #> 163 163 159 0.2335971502 internal 1.16536491 1.53783306 1.64364769 #> 164 164 163 0.5346033834 internal 1.07091058 1.41318971 1.51042792 #> 165 165 164 0.1852396028 internal 0.95150270 1.25561727 1.34201330 #> 166 166 165 0.1474062575 internal 0.86886630 1.14656904 1.22546172 #> 167 167 166 0.2373231876 internal 0.80532548 1.06271962 1.13584282 #> 168 168 166 0.2494002564 internal 0.79695072 1.05166816 1.12403094 #> 169 169 163 0.4262080943 internal 1.10440718 1.45739233 1.55767202 #> 170 170 169 0.5357838400 internal 0.98598517 1.30112086 1.39064788 #> 171 171 170 0.4456870879 internal 0.30302820 0.39988057 0.42739540 #> 172 172 169 0.3680846598 internal 0.89979805 1.18738704 1.26908831 #> 173 173 172 0.0080005555 internal 0.89702741 1.18373086 1.26518056 #> 174 174 173 0.3273524485 internal 0.77398260 1.02135908 1.09163636 #> 175 175 174 0.2194478311 internal 0.47112032 0.62169745 0.66447497 #> 176 176 175 0.0938711603 internal 0.04095469 0.05404443 0.05776309 #> 177 177 172 0.6133471602 internal 0.30345934 0.40044951 0.42800348 #> 178 178 158 0.3661103260 internal 1.25575706 1.65711591 1.77113810 #> 179 179 178 0.1412829703 internal 1.28149047 1.69107409 1.80743287 #> 180 180 179 0.6766768859 internal 1.16906592 1.54271697 1.64886765 #> 181 181 180 0.2686769929 internal 1.04754240 1.38235271 1.47746911 #> 182 182 181 0.5253558386 internal 0.42744225 0.56405922 0.60287079 #> 183 183 178 0.8768792154 internal 1.16688879 1.53984400 1.64579700 #> 184 184 183 0.3417308840 internal 0.93124907 1.22889027 1.31344729 #> 185 185 184 0.2761477952 internal 0.65326012 0.86205188 0.92136761 #> 186 186 157 0.4967710625 internal 1.52763597 2.01589140 2.15460008 #> 187 187 186 0.8026320886 internal 1.36167014 1.79688039 1.92051945 #> 188 188 187 1.3087289040 internal 0.75183416 0.99213166 1.06039788 #> 189 189 188 0.2083441725 internal 0.26849975 0.35431631 0.37869597 #> 190 190 189 0.0255101041 internal 0.10068396 0.13286406 0.14200612 #> 191 191 187 0.3703056422 internal 1.13842365 1.50228097 1.60564934 #> 192 192 191 0.1968950188 internal 1.00764393 1.32970209 1.42119572 #> 193 193 192 0.1534750686 internal 0.94424288 1.24603711 1.33177395 #> 194 194 193 0.0152340122 internal 0.94588044 1.24819805 1.33408359 #> 195 195 194 0.4604481907 internal 0.80011381 1.05584222 1.12849221 #> 196 196 195 0.1642751276 internal 0.62798360 0.82869660 0.88571724 #> 197 197 192 0.5324154713 internal 0.95527123 1.26059028 1.34732849 #> 198 198 191 0.9118959007 internal 0.79057873 1.04325957 1.11504378 #> 199 199 186 2.2775234810 internal 0.43045988 0.56804132 0.60712690 #> RS LS #> 1 NA NA #> 2 NA NA #> 3 NA NA #> 4 NA NA #> 5 NA NA #> 6 NA NA #> 7 NA NA #> 8 NA NA #> 9 NA NA #> 10 NA NA #> 11 NA NA #> 12 NA NA #> 13 NA NA #> 14 NA NA #> 15 NA NA #> 16 NA NA #> 17 NA NA #> 18 NA NA #> 19 NA NA #> 20 NA NA #> 21 NA NA #> 22 NA NA #> 23 NA NA #> 24 NA NA #> 25 NA NA #> 26 NA NA #> 27 NA NA #> 28 NA NA #> 29 NA NA #> 30 NA NA #> 31 NA NA #> 32 NA NA #> 33 NA NA #> 34 NA NA #> 35 NA NA #> 36 NA NA #> 37 NA NA #> 38 NA NA #> 39 NA NA #> 40 NA NA #> 41 NA NA #> 42 NA NA #> 43 NA NA #> 44 NA NA #> 45 NA NA #> 46 NA NA #> 47 NA NA #> 48 NA NA #> 49 NA NA #> 50 NA NA #> 51 NA NA #> 52 NA NA #> 53 NA NA #> 54 NA NA #> 55 NA NA #> 56 NA NA #> 57 NA NA #> 58 NA NA #> 59 NA NA #> 60 NA NA #> 61 NA NA #> 62 NA NA #> 63 NA NA #> 64 NA NA #> 65 NA NA #> 66 NA NA #> 67 NA NA #> 68 NA NA #> 69 NA NA #> 70 NA NA #> 71 NA NA #> 72 NA NA #> 73 NA NA #> 74 NA NA #> 75 NA NA #> 76 NA NA #> 77 NA NA #> 78 NA NA #> 79 NA NA #> 80 NA NA #> 81 NA NA #> 82 NA NA #> 83 NA NA #> 84 NA NA #> 85 NA NA #> 86 NA NA #> 87 NA NA #> 88 NA NA #> 89 NA NA #> 90 NA NA #> 91 NA NA #> 92 NA NA #> 93 NA NA #> 94 NA NA #> 95 NA NA #> 96 NA NA #> 97 NA NA #> 98 NA NA #> 99 NA NA #> 100 NA NA #> 101 1.34657639 2.14730314 #> 102 1.43187897 2.28332994 #> 103 1.44628631 2.30630446 #> 104 1.51132499 2.41001765 #> 105 1.07568402 1.71532760 #> 106 1.00462806 1.60201901 #> 107 1.00207463 1.59794722 #> 108 1.53305479 2.44466885 #> 109 0.33725989 0.53780774 #> 110 1.50423594 2.39871319 #> 111 1.66383269 2.65321238 #> 112 1.18579847 1.89092040 #> 113 1.58865188 2.53332612 #> 114 1.07568936 1.71533613 #> 115 1.06829930 1.70355164 #> 116 0.97391422 1.55304153 #> 117 0.82540927 1.31622975 #> 118 0.70958294 1.13152858 #> 119 0.37537419 0.59858630 #> 120 0.54671228 0.87180869 #> 121 0.78126714 1.24583899 #> 122 1.08175673 1.72501138 #> 123 0.32938120 0.52524408 #> 124 1.64269043 2.61949810 #> 125 1.45998542 2.32814958 #> 126 1.18366308 1.88751522 #> 127 0.56949037 0.90813151 #> 128 1.32799223 2.11766810 #> 129 1.38237161 2.20438358 #> 130 1.38578878 2.20983273 #> 131 1.73772260 2.77104010 #> 132 1.30782254 2.08550473 #> 133 1.25495314 2.00119713 #> 134 1.32383778 2.11104325 #> 135 1.52783254 2.43634124 #> 136 1.22818149 1.95850601 #> 137 1.22307219 1.95035852 #> 138 1.07286779 1.71083674 #> 139 0.69621637 1.11021372 #> 140 1.28663087 2.05171168 #> 141 1.41494947 2.25633350 #> 142 1.51816420 2.42092373 #> 143 0.48180739 0.76830882 #> 144 1.48310690 2.36501999 #> 145 0.52070554 0.83033733 #> 146 1.35635675 2.16289927 #> 147 1.37191036 2.18770166 #> 148 1.33221436 2.12440088 #> 149 1.45360319 2.31797223 #> 150 1.23696839 1.97251795 #> 151 1.10580803 1.76336452 #> 152 1.11518263 1.77831364 #> 153 0.95869054 1.52876526 #> 154 1.19136239 1.89979285 #> 155 0.89019924 1.41954636 #> 156 1.35557853 2.16165828 #> 157 1.49624409 2.38596907 #> 158 1.40200925 2.23569852 #> 159 1.35020242 2.15308533 #> 160 1.04195534 1.66154254 #> 161 0.96324532 1.53602848 #> 162 0.45973133 0.73310547 #> 163 1.28288021 2.04573073 #> 164 1.17890112 1.87992161 #> 165 1.04745215 1.67030797 #> 166 0.95648271 1.52524456 #> 167 0.88653444 1.41370232 #> 168 0.87731517 1.39900092 #> 169 1.21577551 1.93872296 #> 170 1.08541183 1.73083996 #> 171 0.33358554 0.53194849 #> 172 0.99053361 1.57954346 #> 173 0.98748358 1.57467976 #> 174 0.85203094 1.35868171 #> 175 0.51862805 0.82702448 #> 176 0.04508456 0.07189359 #> 177 0.33406015 0.53270532 #> 178 1.38238750 2.20440892 #> 179 1.41071586 2.24958242 #> 180 1.28695443 2.05222763 #> 181 1.15317650 1.83890013 #> 182 0.47054549 0.75035015 #> 183 1.28455776 2.04840581 #> 184 1.02515615 1.63475390 #> 185 0.71913482 1.14676037 #> 186 1.68168266 2.68167663 #> 187 1.49898084 2.39033320 #> 188 0.82764906 1.31980140 #> 189 0.29557524 0.47133579 #> 190 0.11083692 0.17674487 #> 191 1.25322220 1.99843690 #> 192 1.10925466 1.76886067 #> 193 1.03946026 1.65756379 #> 194 1.04126295 1.66043843 #> 195 0.88079722 1.40455354 #> 196 0.69130942 1.10238891 #> 197 1.05160070 1.67692341 #> 198 0.87030062 1.38781525 #> 199 0.47386741 0.75564742 # Convert to sem and plot library(sem) my_sem = as_sem(psem) pathDiagram( model = my_sem, style = \"traditional\", edge.labels = \"values\" ) #> Loading required namespace: DiagrammeR effects( my_sem ) #> #> Total Effects (column on row) #> BM NL DD #> DD 0.6296696 0.6750692 0.0000000 #> RS -0.1387108 -0.1487120 -0.2202914 #> LS 1.3366815 0.0000000 0.0000000 #> NL 0.9327482 0.0000000 0.0000000 #> #> Direct Effects #> BM NL DD #> DD 0.0000000 0.6750692 0.0000000 #> RS 0.0000000 0.0000000 -0.2202914 #> LS 1.3366815 0.0000000 0.0000000 #> NL 0.9327482 0.0000000 0.0000000 #> #> Indirect Effects #> BM NL DD #> DD 0.6296696 0.000000 0 #> RS -0.1387108 -0.148712 0 #> LS 0.0000000 0.000000 0 #> NL 0.0000000 0.000000 0 # Plot using semPlot if( require(semPlot) ){ myplot = semPlotModel( my_sem ) semPaths( my_sem, nodeLabels = myplot@Vars$name ) } #> Loading required package: semPlot"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/phylosem_control.html","id":null,"dir":"Reference","previous_headings":"","what":"Detailed control for phylosem structure — phylosem_control","title":"Detailed control for phylosem structure — phylosem_control","text":"Define list control parameters. Note format input likely change rapidly phylosem","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/phylosem_control.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Detailed control for phylosem structure — phylosem_control","text":"","code":"phylosem_control( nlminb_loops = 1, newton_loops = 1, trace = 0, eval.max = 1000, iter.max = 1000, getsd = TRUE, quiet = FALSE, run_model = TRUE, getJointPrecision = FALSE )"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/phylosem_control.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Detailed control for phylosem structure — phylosem_control","text":"nlminb_loops Integer number times call nlminb. newton_loops Integer number Newton steps running nlminb. trace Parameter values printed every `trace` iteration outer optimizer. Passed `control` nlminb. eval.max Maximum number evaluations objective function allowed. Passed `control` nlminb. iter.max Maximum number iterations allowed. Passed `control` nlminb. getsd Boolean indicating whether call sdreport quiet Boolean indicating whether run model printing messages terminal ; run_model Boolean indicating whether estimate parameters (default), instead return model inputs compiled TMB object without running; getJointPrecision whether get joint precision matrix. Passed sdreport.","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/phylosem_control.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Detailed control for phylosem structure — phylosem_control","text":"S3 object class \"phylosem_control\" specifies detailed model settings, allowing user specification also specifying default values","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/print.phylosem.html","id":null,"dir":"Reference","previous_headings":"","what":"Print parameter estimates and standard errors. — print.phylosem","title":"Print parameter estimates and standard errors. — print.phylosem","text":"Print parameter estimates","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/print.phylosem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print parameter estimates and standard errors. — print.phylosem","text":"","code":"# S3 method for phylosem print(x, ...)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/print.phylosem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print parameter estimates and standard errors. — print.phylosem","text":"x Output phylosem ... used","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/print.phylosem.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Print parameter estimates and standard errors. — print.phylosem","text":"prints (invisibly returns) output nlminb","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/reinstalling.html","id":null,"dir":"Reference","previous_headings":"","what":"Reinstalling binary dependencies — reinstalling","title":"Reinstalling binary dependencies — reinstalling","text":"phylosem package depends several upstream packages, uses way depends heavily internal (binary) structure. Sometimes, therefore, installing update one packages require re-install binary-compatible version phylosem, .e. version compiled updated version upstream package. development tools (compilers etc.) installed, able re-install binary-compatible version package running install.packages(\"phylosem\", type=\"source\"). want install development version phylosem instead, can use remotes::install_github(\"James-Thorson-NOAA/phylosem\"). (Windows, can install development tools following instructions https://cran.r-project.org/bin/windows/Rtools/; MacOS, see https://mac.r-project.org/tools/.) development tools /want install (install packages compiled code source), can revert upstream package(s) previous binary version. example, using checkpoint package: similar recipe (substituting Matrix TMB TMB phylosem) can used get warnings incompatibility TMB Matrix.","code":"## load (installing if necessary) the checkpoint package while (!require(\"checkpoint\")) install.packages(\"checkpoint\") ## retrieve build date of installed version of phylosem bd <- as.character(asDateBuilt( packageDescription(\"phylosem\",fields=\"Built\"))) oldrepo <- getOption(\"repos\") use_mran_snapshot(bd) ## was setSnapshot() pre-checkpoint v1.0.0 install.packages(\"TMB\") options(repos=oldrepo) ## restore original repo"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/reinstalling.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Reinstalling binary dependencies — reinstalling","text":"Copied glmmTMB permission","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/summary.phylosem.html","id":null,"dir":"Reference","previous_headings":"","what":"summarize phylosem — summary.phylosem","title":"summarize phylosem — summary.phylosem","text":"Summarize phylosem output phylosem, including calculating intercepts tree root","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/summary.phylosem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"summarize phylosem — summary.phylosem","text":"","code":"# S3 method for phylosem summary(object, ...)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/summary.phylosem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"summarize phylosem — summary.phylosem","text":"object Output phylosem ... used","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/summary.phylosem.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"summarize phylosem — summary.phylosem","text":"Data-frame containing estimated intercepts, path coefficients, variance-covariance parameters well standard errors","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/vcov.phylosem.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract Variance-Covariance Matrix — vcov.phylosem","title":"Extract Variance-Covariance Matrix — vcov.phylosem","text":"extract covariance fixed effects, fixed random effects.","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/vcov.phylosem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract Variance-Covariance Matrix — vcov.phylosem","text":"","code":"# S3 method for phylosem vcov(object, which = c(\"fixed\", \"random\", \"both\"), ...)"},{"path":"https://james-thorson-noaa.github.io/phylosem/reference/vcov.phylosem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract Variance-Covariance Matrix — vcov.phylosem","text":"object output phylosem whether extract covariance among fixed effects, random effects, ... ignored, method compatibility","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/news/index.html","id":"phylosem-113","dir":"Changelog","previous_headings":"","what":"phylosem 1.1.3","title":"phylosem 1.1.3","text":"CRAN release: 2024-02-01 Removing fit_tmb simplify code remove unnecessary warnings Adding codecov extra tests Fixing R-CMD-check force build Matrix/TMB source","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/news/index.html","id":"phylosem-112","dir":"Changelog","previous_headings":"","what":"phylosem 1.1.2","title":"phylosem 1.1.2","text":"CRAN release: 2023-12-20 Adding new functions provide warning Matrix version doesn’t match ’s expected TMB","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/news/index.html","id":"phylosem-111","dir":"Changelog","previous_headings":"","what":"phylosem 1.1.1","title":"phylosem 1.1.1","text":"CRAN release: 2023-11-26 Re-adding phylosignal SUGGESTS Re-adding phylosignal Fisheries vignette adding arguemnt as_phylo4d allow easy extraction standard errors","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/news/index.html","id":"phylosem-110","dir":"Changelog","previous_headings":"","what":"phylosem 1.1.0","title":"phylosem 1.1.0","text":"CRAN release: 2023-10-06 Adding new S3 generic functions: logLik vcov Adding vignette “fisheries” associated paper “Trees fishes: neglected role phylogenetic comparative methods fisheries science” accepted Fish Fisheries","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/news/index.html","id":"phylosem-102","dir":"Changelog","previous_headings":"","what":"phylosem 1.0.2","title":"phylosem 1.0.2","text":"CRAN release: 2023-09-22 Fixed bug arising data missing observations earliest tips first inputted variable Updating vignette show confidence intervals alpha/kappa/lambda well lnalppha/lnkappa/logitlambda","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/news/index.html","id":"phylosem-101","dir":"Changelog","previous_headings":"","what":"phylosem 1.0.1","title":"phylosem 1.0.1","text":"CRAN release: 2023-09-19 Address request CRAN use Suggests packages conditionally examples Continuing use Suggests packages unconditionally vignettes based Wickham guidance online","code":""},{"path":"https://james-thorson-noaa.github.io/phylosem/news/index.html","id":"phylosem-100","dir":"Changelog","previous_headings":"","what":"phylosem 1.0.0","title":"phylosem 1.0.0","text":"CRAN release: 2023-08-25 Attempting fix warnings","code":""}]