====== 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.
→ [[lyx_-_programmiersprache:units:mathematik|Mathematik-Units]] · [[lyx_-_programmiersprache:units:sum|std.sum]] · [[lyx_-_programmiersprache:units:stats|std.stats]] · [[lyx_-_programmiersprache:units:mathx|std.mathx]]
import std.prob;
Schicht 2, hängt an [[lyx_-_programmiersprache:units:mathx|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.
**''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''.
^ 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 =====
**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 [[lyx_-_programmiersprache:units:mathx|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.
Die Summationen laufen bereits über [[lyx_-_programmiersprache:units:sum|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.