std.prob — Statistik und Verteilungen

Beschreibende Statistik in f64, die statistischen Spezialfunktionen (erf, lgamma, unvollständige Gamma und Beta), neun Verteilungen und die Tests nach Student und Pearson.

Mathematik-Units · std.sum · std.stats · std.mathx

import std.prob;

Schicht 2, hängt an std.mathx. 75 Funktionen — die größte Schnittstelle der Sammlung. Alle Beispiele mit lyxc 1.0.21A übersetzt und ausgeführt.


Verhältnis zu ''std.stats''

 
std.stats rechnet ganzzahlig. ArrayVariance dort gibt int64 zurück — für eine Varianz ist das nur in Ausnahmefällen brauchbar, denn sie ist fast nie eine ganze Zahl. std.prob ist die Fassung in f64 und damit die richtige Wahl, sobald gerechnet und nicht nur gezählt wird.

Der Bestand bleibt unangetastet; die beiden stehen nebeneinander.

Beschreibende Statistik

unit main;
import std.io;
import std.string;
import std.alloc;
import std.prob;

fn ZF(t: pchar, v: f64): void { Print(t); PrintF64(v); }

fn main(): int64 {
    var n: int64 := 5;
    var a: int64 := alloc(n * 8);
    var i: int64 := 0;
    while (i < n) { pokef64(a + i * 8, 2.0 + (i as f64)); i := i + 1; }

    ZF("Mean            : ", ProbMean(a, n));
    ZF("VarianceS       : ", ProbVarianceS(a, n));
    ZF("StdDevS         : ", ProbStdDevS(a, n));
    ZF("Median          : ", ProbMedian(a, n));
    ZF("Erf(1)          : ", ProbErf(1.0));
    ZF("LogGamma(5)     : ", ProbLogGamma(5.0));
    ZF("NormalCdf(0)    : ", ProbNormalCdf(0.0, 0.0, 1.0));
    ZF("NormalCdf(1.96) : ", ProbNormalCdf(1.96, 0.0, 1.0));
    return 0;
}

Mean            : 4.000000
VarianceS       : 2.500000
StdDevS         : 1.581138
Median          : 4.000000
Erf(1)          : 0.842700
LogGamma(5)     : 3.178053
NormalCdf(0)    : 0.500000
NormalCdf(1.96) : 0.975002

Sämtliche Werte stimmen mit der Referenzrechnung überein. NormalCdf(1,96) = 0,975 ist die Zahl hinter dem 95-%-Konfidenzintervall.

<WRAP alert> VarianceP und VarianceS sind nicht dasselbe. Der Unterschied ist der Nenner — n gegen n−1:

  • ProbVarianceP gilt, wenn die Daten die ganze Grundgesamtheit sind.
  • ProbVarianceS gilt, wenn sie eine Stichprobe daraus sind.

Für die Werte 2…6 sind das 2,0 gegen 2,5. Wer eine Stichprobe hat und VarianceP nimmt, unterschätzt die Streuung systematisch — bei kleinem n erheblich. Dasselbe gilt für StdDevP und StdDevS. </WRAP>

Gruppe Funktionen
Lage ProbMean · ProbMedian · ProbQuantile · ProbMin · ProbMax · ProbRange
Streuung ProbVarianceP/S · ProbStdDevP/S · ProbIQR
Form ProbSkewness · ProbKurtosisExcess
Zusammenhang ProbCovariance · ProbCorrelation · ProbLinRegress
Hilfsmittel ProbSum · ProbSortF64
 
ProbSortF64 sortiert an Ort und Stelle. ProbMedian, ProbQuantile und ProbIQR brauchen sortierte Daten — wer die ursprüngliche Reihenfolge noch braucht, kopiert vorher.

Spezialfunktionen

Funktion Bedeutung
ProbErf / ProbErfc Fehlerfunktion und ihr Komplement
ProbLogGamma / ProbGamma Gammafunktion, logarithmisch und direkt
ProbBeta Betafunktion
ProbGammaP / ProbGammaQ unvollständige Gammafunktion
ProbBetaI unvollständige Betafunktion
ProbLogBinom Logarithmus des Binomialkoeffizienten
 
ProbLogGamma statt ProbGamma, und ProbLogBinom statt des Koeffizienten selbst. Gamma(200) ist größer als jede f64-Zahl, LogGamma(200) dagegen unproblematisch. Wer Wahrscheinlichkeiten über viele Faktoren multipliziert, rechnet ohnehin logarithmisch — sonst unterläuft das Produkt lange vor dem Ende.

Verteilungen

Neun Verteilungen, jede mit Dichte (Pdf), Verteilungsfunktion (Cdf) und Quantilfunktion (Quantile): Normal, Log-Normal, Gleich, Exponential, Binomial, Poisson, Student-t, Chi², F.

Dazu die Tests: t-Test und Chi²-Test.

 
Die Quantilfunktionen sind Umkehrungen und iterieren. Sie sind entsprechend teurer als Cdf und tragen dessen Genauigkeit. In einer Schleife über viele Werte lohnt es, das Ergebnis zu behalten, statt es neu zu rechnen.

Genauigkeit

<WRAP alert> Die Verteilungen rechnen intern über ExpF64 und LogF64 aus std.math und erben deren relativen Fehler von rund 1e−7 — die halbe f64-Genauigkeit. Die genaueren Fassungen MxExp/MxLog aus std.mathx sind noch nicht eingesetzt; eine Umstellung ist vorgeschlagen, aber nicht entschieden.

Für Signifikanzniveaus und Konfidenzintervalle ist das folgenlos. Wer Wahrscheinlichkeiten in den äußersten Ausläufern braucht — jenseits von 1e−10 —, sollte das Ergebnis gegenprüfen. </WRAP>

Die Summationen laufen bereits über std.sum und sind damit gegen Auslöschung abgesichert.


Letzte Aktualisierung: 2026-08-16 · alle Beispiele mit lyxc 1.0.21A übersetzt und ausgeführt; Lage- und Streuungsmaße, erf, lgamma und die Normalverteilung gegen eine unabhängige Referenzrechnung geprüft.