---
title: "Node support efficacy in Congreve & Lamsdell matrices"
author: "Martin R. Smith <martin.smith@durham.ac.uk>"
date: "`r Sys.Date()`"
output: 
  bookdown::pdf_document2:
    toc: yes
    includes:
      in_header: ../inst/preamble.tex
  html_document:
    default: yes
bibliography: ../inst/REFERENCES.bib
csl: https://raw.githubusercontent.com/citation-style-language/styles/master/dependent/biology-letters.csl
link-citations: yes
github-repo: ms609/CongreveLamsdell2016
vignette: >
  %\VignetteIndexEntry{Results: Node supports}
  %\VignetteEncoding{UTF-8}
  %\VignetteEngine{knitr::rmarkdown}
---

This page depicts the analytical results of all 100 matrices generated by
Congreve & Lamsdell [-@Congreve2016] using a ternary plotting approach
[@Smith2019], with quartets and partitions used as distance metrics.

The most highly resolved tree is progressively reduced by collapsing nodes 
with a support value below an increasing threshold.

```{r initialize, echo=FALSE, message=FALSE}
library("Ternary")
library("CongreveLamsdell2016")

data('clBremPartitions', 'clBremQuartets', 'clMkvPartitions', 'clMkvQuartets',
     'clBootFreqPartitions', 'clBootFreqQuartets', 
     'clBootGcPartitions', 'clBootGcQuartets',
     'clJackFreqPartitions', 'clJackFreqQuartets',
     'clJackGcPartitions', 'clJackGcQuartets', 
     'clCI')
```

```{r initialize-variables, echo=FALSE}
PCH_MK <- 1   # circle
PCH_EQ <- 61  #'='
PCH_XX <- 18 # 183 #'.' is invalid in some locales
PCH_IW <- 2   #triup
PCH_IC <- 17  #triupfilled
TREE <- 2

COL <- c(
  'mk' = paste0(cbPalette8[4],  '99'),
  'eq' = paste0(cbPalette8[8],  '99'),
  'k1' = paste0(cbPalette8[6],  '42'),
  'k2' = paste0(cbPalette8[6],  '42'),
  'k3' = paste0(cbPalette8[6],  '42'),
  'k5' = paste0(cbPalette8[6],  '42'),
  'kX' = paste0(cbPalette8[6],  '99'),
  'kC' = paste0(cbPalette8[2],  '99'))

PCH <- c(
  brem = 2,
  bootG = 0,
  bootF = 5,
  jackG = 3,
  jackF = 4,
  mk = 1
  
)

MARGINS <- c(2.8, 0.3, 0.3, 0.3)
ROWS <- c(2, 3)

TernaryQuarts <- function(TREE=TREE, an='eq', zoom=1, padding=0.1) {
  
  clInitializeTernaryQuarts(zoom=zoom, padding=padding)
  
  clPlotQuartets(pch=PCH['brem'] , cex=2, clBremQuartets[an], TREE)
  clPlotQuartets(pch=PCH['bootF'], cex=2, clBootFreqQuartets[an], TREE)
  clPlotQuartets(pch=PCH['bootG'], cex=2, clBootGcQuartets[an], TREE)
  clPlotQuartets(pch=PCH['jackF'], cex=2, clJackFreqQuartets[an], TREE)
  clPlotQuartets(pch=PCH['jackG'], cex=2, clJackGcQuartets[an], TREE)
  
  clPlotQuartets(pch=PCH['mk'], clMkvQuartets, TREE, cex=2, col=COL['mk'])
  
  # Return:
  invisible()
}

TernaryAllQuarts <- function(an='eq', zoom=1, padding=0.1) {
  
  clInitializeTernaryQuarts(zoom=zoom, padding=padding)
  
  clPlotTheseAverageQuartets(pch=PCH['brem'] , cex=2, col=COL[an],
                             clBremQuartets[[an]])
  clPlotTheseAverageQuartets(pch=PCH['bootF'], cex=2, col=COL[an],
                             clBootFreqQuartets[[an]])
  clPlotTheseAverageQuartets(pch=PCH['bootG'], cex=2, col=COL[an],
                             clBootGcQuartets[[an]])
  clPlotTheseAverageQuartets(pch=PCH['jackF'], cex=2, col=COL[an],
                             clJackFreqQuartets[[an]])
  clPlotTheseAverageQuartets(pch=PCH['jackG'], cex=2, col=COL[an],
                             clJackGcQuartets[[an]])
  
  clPlotTheseAverageQuartets(pch=PCH['mk'], clMkvQuartets, cex=2, col=COL['mk'])
  
  # Return:
  invisible()
}


TernaryParts<-function(TREE=TREE, an='eq') {
  
  clInitializeTernarySplits()
  title(main="\nPartitions", cex.main=0.8)
  
  HorizontalGrid(19)
  
  clPlotSplits(pch=PCH['brem'] , cex=2, col=COL[an], clBremPartitions[[an]], TREE)
  clPlotSplits(pch=PCH['bootF'], cex=2, col=COL[an], clBootGcPartitions[[an]], TREE)
  clPlotSplits(pch=PCH['bootG'], cex=2, col=COL[an], clBootFreqPartitions[[an]], TREE)
  clPlotSplits(pch=PCH['jackF'], cex=2, col=COL[an], clJackGcPartitions[[an]], TREE)
  clPlotSplits(pch=PCH['jackG'], cex=2, col=COL[an], clJackFreqPartitions[[an]], TREE)
  
  clPlotSplits(pch=PCH['mk'], cex=2, clMkvPartitions, TREE, col=COL['mk'])
  
  # Return:
  invisible()
}

TernaryAllParts<-function(an='eq') {
  
  clInitializeTernarySplits()
  title(main="\nPartitions", cex.main=0.8)
  
  HorizontalGrid(19)
  
  clPlotTheseAverageSplits(pch=PCH['brem'] , col=COL[an], cex=2,
                           clBremPartitions[[an]])
  clPlotTheseAverageSplits(pch=PCH['bootF'], col=COL[an], cex=2,
                           clBootGcPartitions[[an]])
  clPlotTheseAverageSplits(pch=PCH['bootG'], col=COL[an], cex=2,
                           clBootFreqPartitions[[an]])
  clPlotTheseAverageSplits(pch=PCH['jackF'], col=COL[an], cex=2,
                           clJackGcPartitions[[an]])
  clPlotTheseAverageSplits(pch=PCH['jackG'], col=COL[an], cex=2,
                           clJackFreqPartitions[[an]])
  
  clPlotTheseAverageSplits(pch=PCH['mk'], cex=2, clMkvPartitions, col=COL['mk'])
  
  # Return:
  invisible()
}

AddLegend <- function(pos='bottomright', an='eq') {
  legend(pos, cex=0.8, bty='n',
         lty=1,
         pch=PCH[c('mk', 'brem', 'bootF', 'bootG', 'jackF', 'jackG')], pt.cex=1.2,
         col=c(COL['mk'], rep(COL[an], 5)),
         legend=c('Markov', 'Bremer', 'BootFreq', 'Boot GC', 'Jack Freq', 'Jack GC')
   )
}

CompareNodeSupports <- function (i) { 
  x <- Sys.setlocale("LC_ALL", "C") # allows PCH=183
  
  TernaryQuarts(TREE=i, an='eq')
  title(main=paste0("\nQuartets"), cex.main=0.8)
  arrows(sqrt(3/4) * 0.5, 0.5, sqrt(3/4) * 0.8, 0.5, length=0.1)
  text  (sqrt(3/4) * 0.65, 0.5, pos=3, 'Decreasing resolution', cex=0.8)
  
  arrows(sqrt(3/4) * 0.98, 0.40, sqrt(3/4) * 0.98, 0.20, length=0.1)
  text  (sqrt(3/4) * 1.01, 0.30, pos=3, 'Increasing divergence', cex=0.8, srt=270)
  
  TernaryQuarts(TREE=i, an='eq', zoom=3, padding=0.01)
  title(main=paste0("\nDataset ", i, ": CI=",round(clCI[i], 2), ". Equal weights"), cex.main=1.2)
  
  TernaryParts(TREE=i, an='eq')
  
  arrows(sqrt(3/4) * 0.98, 0.40, sqrt(3/4) * 0.98, 0.20, length=0.1)
  text  (sqrt(3/4) * 1.01, 0.30, pos=3, 'Increasing RF distance', cex=0.8, srt=270)
  
  AddLegend(an='eq')
  
  TernaryQuarts(TREE=i, an='k3')
  title(main=paste0("\nQuartets"), cex.main=0.8)
  arrows(sqrt(3/4) * 0.5, 0.5, sqrt(3/4) * 0.8, 0.5, length=0.1)
  text  (sqrt(3/4) * 0.65, 0.5, pos=3, 'Decreasing resolution', cex=0.8)
  
  arrows(sqrt(3/4) * 0.98, 0.40, sqrt(3/4) * 0.98, 0.20, length=0.1)
  text  (sqrt(3/4) * 1.01, 0.30, pos=3, 'Increasing divergence', cex=0.8, srt=270)
  
  TernaryQuarts(TREE=i, an='k3', zoom=3, padding=0.01)
  title(main="\nImplied weights (k = 3)", cex.main=1.2)
  TernaryParts(TREE=i, an='k3')
  
  arrows(sqrt(3/4) * 0.98, 0.40, sqrt(3/4) * 0.98, 0.20, length=0.1)
  text  (sqrt(3/4) * 1.01, 0.30, pos=3, 'Increasing RF distance', cex=0.8, srt=270)
  
  AddLegend(an='k3')
}
```

## Summary
```{R Averages, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=c(2, ROWS[2]), mar=MARGINS)
TernaryAllQuarts(an='eq')
title(main=paste0("\nQuartets"), cex.main=0.8)
arrows(sqrt(3/4) * 0.5, 0.5, sqrt(3/4) * 0.8, 0.5, length=0.1)
text  (sqrt(3/4) * 0.65, 0.5, pos=3, 'Decreasing resolution', cex=0.8)

arrows(sqrt(3/4) * 0.98, 0.40, sqrt(3/4) * 0.98, 0.20, length=0.1)
text  (sqrt(3/4) * 1.01, 0.30, pos=3, 'Increasing divergence', cex=0.8, srt=270)

TernaryAllQuarts(an='eq', zoom=3, padding=0.01)
title(main="\nAll datasets (averaged). Equal weights.", cex.main=1.2)

TernaryAllParts(an='eq')

arrows(sqrt(3/4) * 0.98, 0.40, sqrt(3/4) * 0.98, 0.20, length=0.1)
text  (sqrt(3/4) * 1.01, 0.30, pos=3, 'Increasing RF distance', cex=0.8, srt=270)

AddLegend(an='eq')

TernaryAllQuarts(an='k3')
title(main=paste0("\nQuartets"), cex.main=0.8)
arrows(sqrt(3/4) * 0.5, 0.5, sqrt(3/4) * 0.8, 0.5, length=0.1)
text  (sqrt(3/4) * 0.65, 0.5, pos=3, 'Decreasing resolution', cex=0.8)

arrows(sqrt(3/4) * 0.98, 0.40, sqrt(3/4) * 0.98, 0.20, length=0.1)
text  (sqrt(3/4) * 1.01, 0.30, pos=3, 'Increasing divergence', cex=0.8, srt=270)

TernaryAllQuarts(an='k3', zoom=3, padding=0.01)

title(main="\nImplied weights (k = 3)", cex.main=1.2)
TernaryAllParts(an='k3')

arrows(sqrt(3/4) * 0.98, 0.40, sqrt(3/4) * 0.98, 0.20, length=0.1)
text  (sqrt(3/4) * 1.01, 0.30, pos=3, 'Increasing RF distance', cex=0.8, srt=270)

AddLegend(an='k3')
```

Though the Bootstrap GC metric systematically produces the lowest normalized tree
distances (SD/MaxI), it is not significantly better than other methods.
The following table reports P values that fail to reject the null hypothesis
that the specified node support metric is equally good at ascribing incorrect
nodes the lowest support values.

```{R compare-best, results='asis', echo=FALSE}
if (requireNamespace('Quartet', quietly = TRUE)) {
  TreeBests <- function (dataset) vapply(dataset, function (item) 
    apply(apply(item, 1, function (x)
      Quartet::QuartetDivergence(t(x))), 1, max), double(dim(dataset[[1]])[3]))
  
  treeBests <- vapply(list(clBootGcQuartets, clBootFreqQuartets,
                           clJackGcQuartets, clJackFreqQuartets, clBremQuartets),
                      TreeBests, 
                      matrix(0, nrow=dim(clBootGcQuartets[[1]])[3],
                             ncol=length(clBootGcQuartets))
                      )
  
  
  
  tests <- apply(treeBests, 2, function (slice)
    apply(slice, 2, function (column) t.test(column, slice[, 1])$p.value))
  
  rownames(tests) <- c( 'Bootstrap GC', 'Bootstrap Freq',
                        'Jackknife GC', 'Jackknife Freq', 'Bremer')
  knitr::kable(tests)
} else {
  message("Package 'Quartet' is not available; cannot display table.")
}
```

## Trees 1--10
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(1)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(2)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(3)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(4)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(5)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(6)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(7)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(8)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(9)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(10)
```

## Trees 11--20
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(11)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(12)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(13)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(14)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(15)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(16)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(17)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(18)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(19)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(20)
```


## Trees 21--30
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(21)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(22)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(23)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(24)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(25)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(26)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(27)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(28)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(29)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(30)
```

## Trees 31--40
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(31)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(32)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(33)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(34)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(35)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(36)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(37)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(38)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(39)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(40)
```

## Trees 41--50
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(41)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(42)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(43)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(44)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(45)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(46)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(47)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(48)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(49)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(50)
```

## Trees 51--60
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(51)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(52)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(53)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(54)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(55)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(56)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(57)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(58)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(59)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(60)
```

## Trees 61--70
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(61)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(62)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(63)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(64)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(65)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(66)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(67)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(68)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(69)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(70)
```

## Trees 71--80
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(71)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(72)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(73)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(74)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(75)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(76)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(77)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(78)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(79)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(80)
```

## Trees 81--90
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(81)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(82)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(83)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(84)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(85)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(86)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(87)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(88)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(89)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(90)
```

## Trees 91--100
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(91)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(92)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(93)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(94)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(95)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(96)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(97)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(98)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(99)
```
```{R, echo=FALSE, fig.width=9, fig.height=6}
par(mfrow=ROWS, mar=MARGINS); x <- CompareNodeSupports(100)
```

## References