direction = "greater" /
"less") now refits each fold with the declared direction. The binary
2x2-table shortcut re-selected the better direction per fold, so when the
data ran against the declared direction LOO scored the reversed rule
(ess_loo = -ess, a spurious loo_not_stable, and a LOO p for the
opposite rule). 0.1.4 fixed the same issue for ordered attributes at the
call site; both count-table shortcuts now refuse directional rules
themselves, including the early eval_order = "loo_then_mc" stability gate.oda_loo_for_rule() now stops if the rule's direction contradicts the
declared direction, and stops if directional binary LOO predictions differ
from the declared-direction rule (an internal invariant).priors_on = FALSE, which used the
same 2x2 shortcut. Non-directional fits, weighted fits with priors on (which
already refit every fold), and CTA are unchanged.direction = "greater" / "less")
now score each permutation exactly as a full refit does. The fast scorer
received the public direction label, so "greater" permutations were scored
with the best "1->0" cut; it also scored inadmissible cuts, which changed p
when the observed ESS was <= 0. Non-directional MC p-values are unchanged
(for "off" the admissible maximum equals max |ESS| over all cuts)..cta_loo_scan()) instead of generic ODA; matches
CTA.exe (cta_demo MODEL8 node 6 STABLE; myeloma node 2 V4 UNSTABLE)..cta_ordered_scan() and
.cta_fast_scan_perm() choose the cut that maximises count-priors weighted
accuracy (sum of correct case weights divided by the raw class count) among
admissible cuts, instead of the outermost cut with sensitivity > 0.5. This
reproduces all 118 attribute WESS reports in the CTA.exe myeloma MINDENOM=1
output (#19).mindenom is now a gate on the selected cut, as in CTA.exe: a split whose
smaller side has fewer than mindenom observations is rejected rather than
replaced by a different cut. This stops ESS rising as mindenom increases.priors_on = FALSE, so it stays within [-100, 100] and does
not depend on the scale of the weights (#20).mindenom gate is not applied to permutations.\dontrun{} examples with \donttest{} or runnable examples, as requested by CRAN.oda_fit(mcarlo = N) so numeric mcarlo values enable Monte Carlo and set the iteration cap.print() and summary() for ODA fits so rule-bearing models show the learned rule, training evidence, and LOO evidence.loo = "on" is requested.myeloma and cta_demo as package datasets for public examples.oda_sample_size() runnable example meaningful while reducing CRAN example runtime.Added fixture tests for directional categorical LOO: binary fixed direction_map
(LOO ESS, Fisher p one-tailed, p < 0.001) and multiclass direction = "ascending"
(LOO ESS, confusion, no LOO Fisher p, print states "not reported").
Corrected directional-oda article: multiclass categorical LOO is supported with
loo = "on"; clarified that MC p and LOO p are separate calculations.
Fixed binary and categorical rule display - was showing <categorical/binary rule> placeholder. Now shows actual level-to-class mappings, e.g. {low} --> 0 | {high} --> 1.
Added cta_confusion_matrix(tree) convenience wrapper that returns the 2x2 integer training confusion matrix directly from a cta_tree (previously required two-step cta_confusion_table() + as_confusion_matrix() call).
Added attr_names length guard in oda_cta_fit() - error when supplied names do not match number of attributes.
Improved as_cta_candidates() error message when X argument is omitted.
Added regression tests for multiclass / multicategorical LOO reporting.
Added tests for summary/print LOO evidence.
Added scope guardrail tests for LORT lean-fit invariants and SORT/GORT export absence.
Added CONTRIBUTING.md checklist for recursive CTA scope and release checks.