Stats andersonresult - CyrilB1531/lodestar GitHub Wiki
Development build. This page describes
main, not a released package. The latest published Lodestar.Stats is 0.5.0 — read its documentation.
Home › Stats › Hypothesis tests
AndersonResult
An Anderson-Darling result: the statistic, and the table it is read against.
public sealed record AndersonResult(double Statistic, double PValue, double[] CriticalValues, double[] SignificanceLevels)
Properties — Statistic is the A² statistic; larger means further from normal. PValue is
the p-value interpolated from the table, clamped to its ends. CriticalValues are the statistic's
critical values for this sample size, one per level. SignificanceLevels are those levels, in
percent, as scipy reports them: 15, 10, 5, 2.5, 1.
Example — the statistic beside the level it fails first, if any.
using Lodestar.Stats;
double[] heights = [172.0, 168.0, 175.0, 180.0, 169.0, 171.0, 177.0, 165.0, 173.0, 179.0];
AndersonResult result = AndersonDarling.Test(heights);
double fivePercent = result.SignificanceLevels[2]; // => 5
double criticalThere = result.CriticalValues[2]; // => 0.685
double observed = Math.Round(result.Statistic, 4); // => 0.1373
Remarks — two shapes in one record, because scipy is in the middle of replacing one with the
other. Through 1.18, scipy.stats.anderson returns critical values at fixed significance levels
and no p-value at all. Since 1.17 that shape emits a FutureWarning, and from 1.19 it is removed:
critical_values, significance_level and fit_result go, and a pvalue interpolated from the
same table takes their place.
Both are carried here. The p-value is what a reader of the other twelve families expects to find,
and the critical values are what actually carries information, since the interpolation clamps and
cannot leave [0.01, 0.15]. The frozen corpus is built the same way for the same reason: the
statistic and the p-value are replayed from the shape that survives, and the critical values are
stated from Stephens' constants — then checked against the shape being removed, while it is still
there to check against. The Python equivalence table has the whole of
it.
Being a record, two results with the same numbers are equal, and both tables are compared value
by value rather than by reference — the generated equality would call two results holding the same
table unequal.
CriticalValues and SignificanceLevels are taken and exposed as they are, not
copied: writing to one changes this record and what it equals, and every holder of the same array, a
with copy included (#1305).
Applies to — net10.0, netstandard2.0.
See also — AndersonDarling.Test,
ShapiroWilk.Test,
ChiSquaredContingencyResult for the other result carrying a table, the
Python equivalence table.
Members
| Member | What it does |
|---|---|
AndersonResult.Equals |
Compares the two scalars and both tables, value by value. |
AndersonResult.GetHashCode |
Hashes the scalars and the table length, which is O(1). |