NEWS


spectralDEMATEL 0.6.0

The surrogate rejection loop is bounded.

Changed

A cap generous enough not to truncate reproduces the previous output exactly, so ensembles drawn with an explicit seed against earlier versions are unchanged.

spectralDEMATEL 0.5.0

The robustness section: whether a structural type is worth anything.

New

Both take an exposed seed, so a figure that goes into a paper can be reproduced.

type_share is weak evidence for a common type

Nearly 70% of the reference corpus is diffuse-amplified, so a shuffled matrix usually lands there too. A high type_share for a common type says the null also produces that type, not that the observation is unremarkable. The per-metric positions are the informative part. This is documented on the function, because it is exactly the kind of number that reads as reassurance when it carries none.

A correction to how stability was tested

The first version of the test suite asserted that a larger tolerance never leaves a type more secure than a smaller one. That was both vacuous and wrong. Vacuous because it compared systems far from any boundary, where every tolerance returns 1.000. Wrong because monotonicity does not hold in general: a system sitting exactly on a cut stays near 0.5 at any tolerance, since more noise pushes it across in both directions equally. It is replaced by a fixture sitting one part in ten thousand from the hierarchy cut, which must report the coin flip it is, and a moderate-distance case where monotonicity genuinely does hold.

spectralDEMATEL 0.4.0

The structure map: naming a system's type, and saying how firmly.

New

Corpus constants

Aggregates only, in CORPUS (internal): the fitted trade-off with its residual SD, counts and median multipliers by type, and 5/25/50/75/95 percentiles of each axis. The per-system rows are deliberately not shipped -- they are traceable to individual published studies and belong to work that is not yet out. Everything the map and the residual reading need is here without them.

The two cuts are not the same kind of constant

Coupling at 0.50 is the indirect-dominance threshold: at that value the dominant eigenvalue of the total-relation matrix is exactly 1, so indirect effects exactly equal direct ones. It follows from the algebra.

Hierarchy at 0.10 is a recommendation. structural_type() reports which cuts it used and whether each was the default, so an interface can say so.

Only hierarchy_sd classifies. The 0.10 cut is calibrated against that reading and every corpus-level result is expressed in it; hierarchy_gini and hierarchy_pr measure the same idea on different scales, and the participation ratio runs the opposite way. Show all three, classify on one.

spectralDEMATEL 0.3.1

spectralDEMATEL 0.3.0

spectralDEMATEL 0.2.0

The assumption checks become data the engine returns, and nothing in the package raises a condition any more for something a user can cause by pasting an odd matrix.

New

Changed

Thresholds

Two checks are continuous rather than binary. Neither is fitted, both are recommendations, and both were chosen against measurements:

Note for anyone moving from DEMATEL.Sensitivity

That application computes several of these quantities independently and does not agree with this package. Its mode dominance takes the subdominant eigenvalue by real part rather than by modulus, which understates the ratio — by a factor of three on one of the two worked matrices. Its condition_number is lambda_max / lambda_min, a different quantity from ev_condition and one that can be negative. Prefer this package's values.

spectralDEMATEL 0.1.0

First release. The five working functions extracted from the research code behind the source paper, ported unchanged, with a test suite.

Included

Behaviour deliberately not changed

The bodies were a verbatim port, including two things that contradicted the engine's own boundary rules. Both were pinned by tests marked INHERITED: and both are fixed in 0.2.0.