fdr = 0.2 (was 0.1). The stricter
0.1 default was conservative on real trees and interacted awkwardly with
minCladeSize; at 0.2 the number of designated clusters decreases monotonically as
minCladeSize grows, and more genuine structure is recovered while the whole-tree
error rate remains controlled.fdr = 0.2).trestruct() now calibrates the split threshold to a target false discovery rate
by default (fdr = 0.1). At each scan the algorithm splits at the most extreme
eligible candidate clade only if it clears a multiple-testing correction over the
eligible candidates in that scan. The fdr is a property of the whole tree:
under the global null of a single unstructured coalescent, the probability of
designating any structure equals fdr; when real structure is present, fdr
bounds the expected fraction of spurious splits among all splits. The analytic
calibration requires no simulation and is deterministic. Supplying an explicit
level (without fdr) selects the previous subjective-threshold behaviour, and
level = NULL selects the CH index. Arguments were reordered
(fdr, level, minCladeSize, ...) and minCladeSize now defaults to 10.
The multiple-testing correction is selectable with split: 'bonferroni' (the
default) or 'bh', a Benjamini-Hochberg step-up that is less conservative and
retains more power on large trees with abundant moderate structure, while still
controlling the false discovery rate.
The returned TreeStructure object now carries a global-null test in
$global.test (the root-scan max|z|, the number of candidates, and a Bonferroni
p-value for the presence of any structure at all), reported by print().
In fdr mode a heterochronous-sampling diagnostic is computed ($hetero) and
printed. On serially sampled trees the coalescent statistic carries a small
positive bias that can modestly inflate the realized FDR; this is reported as a
caveat and discussed in the vignette. fdr composes with the existing
nodeSupportValues/nodeSupportThreshold node-support filtering.
The coalescent rank-sum null is characterized by exact analytic moments by
default (method = 'analytic') — a fast, deterministic alternative to Monte-Carlo
simulation (method = 'sim', the previous behaviour). trestruct() and
treestructure.test() both gain the method argument.
Fixed an error in the exact (Ei = 3) rank-sum transition used for monophyletic/monophyletic contrasts.
Added a testthat test suite covering the FDR calibration, the global-null test,
the heterochronous diagnostic, and composition with node support.
Vignettes updated to lead with the FDR calibration and document the precise meaning of the FDR, to show the isochronous FWER validation, and to present node support and the CH index as complementary ways of refining clusters.