18 stetige und 10 diskrete Wahrscheinlichkeitsverteilungen mit einheitlicher API für Dichte, CDF, Quantile und Stichprobenziehung in kstats-distributions.
kstats-distributions bietet eine einheitliche API für stetige und diskrete Wahrscheinlichkeitsmodelle. Jede Verteilung unterstützt denselben Arbeitsablauf: Konstruktion mit Parametern, Abfrage statistischer Eigenschaften, Auswertung von Wahrscheinlichkeiten, Berechnung von Quantilen und Ziehung von Zufallsstichproben.
Jede Verteilung implementiert gemeinsame statistische Eigenschaften: mean, variance, standardDeviation, skewness, kurtosis und entropy.Die Auswertungsmethoden unterscheiden sich zwischen stetigen und diskreten Verteilungen:
Operation
Stetig
Diskret
Punktwert
pdf(x) — Dichte
pmf(k) — exakte Wahrscheinlichkeit
Log-Punktwert
logPdf(x)
logPmf(k)
Kumulativ
cdf(x) — P(X≤x)
cdf(k) — P(X≤k)
Oberer Rand
sf(x) — P(X>x)
sf(k) — P(X>k)
Quantil
quantile(p) → Double
quantileInt(p) → Int
Stichprobe
sample(random) → Double
sample(random) → Int
Batch-Stichprobe
sample(n, random) → DoubleArray
sample(n, random) → IntArray
Konstruktoren validieren Parameter sofort. Ungültige Werte (negative Standardabweichung, Wahrscheinlichkeit außerhalb von [0, 1], nicht-positive Freiheitsgrade) lösen bereits bei der Konstruktion eine InvalidParameterException aus, nicht erst bei der Auswertung.
Die Gaußverteilung. Modelliert Daten, die symmetrisch um einen Mittelwert gruppiert sind, mit einer charakteristischen Glockenkurve.Parameter:mu — Mittelwert, sigma — Standardabweichung (muss positiv sein)
Kopieren
val d = NormalDistribution(mu = 100.0, sigma = 15.0)d.mean // 100.0d.cdf(115.0) // 0.8413d.quantile(0.975) // 129.3994
Verwenden, wenn Daten annähernd symmetrisch und unbeschränkt sind.
StudentTDistribution(degreesOfFreedom)
Schwerere Ränder als die Normalverteilung. Nähert sich der Normalverteilung bei steigenden Freiheitsgraden an.Parameter:df — Freiheitsgrade (muss positiv sein)
Kopieren
val d = StudentTDistribution(degreesOfFreedom = 10.0)d.mean // 0.0d.cdf(2.228) // ≈ 0.975d.quantile(0.975) // 2.2281
Verwenden für Konfidenzintervalle und t-Tests bei kleinem Stichprobenumfang.
LogisticDistribution(mu, scale)
Ähnliche Form wie die Normalverteilung, jedoch mit schwereren Rändern. Die CDF hat eine geschlossene logistische Funktion.Parameter:location — Zentrum, scale — Skalenparameter (muss positiv sein)
Kopieren
val d = LogisticDistribution(mu = 0.0, scale = 1.0)d.mean // 0.0d.cdf(0.0) // 0.5d.pdf(0.0) // 0.25
Verwenden, wenn eine geschlossene CDF benötigt wird oder die Daten etwas schwerere Ränder als die Normalverteilung aufweisen.
CauchyDistribution(location, scale)
Extrem schwere Ränder. Mittelwert und Varianz sind undefiniert.Parameter:location — Zentrum (Median), scale — Halbwertsbreite bei halber Maximalhöhe (muss positiv sein)
Kopieren
val d = CauchyDistribution(location = 0.0, scale = 1.0)d.pdf(0.0) // 0.3183d.cdf(0.0) // 0.5d.quantile(0.75) // 1.0
Verwenden bei Daten mit extremen Ausreißern, bei denen der Mittelwert keine aussagekräftige Zusammenfassung ist.
LaplaceDistribution(mu, scale)
Doppel-Exponentialverteilung. Schärfere Spitze und schwerere Ränder als die Normalverteilung.Parameter:location — Zentrum (Mittelwert und Median), scale — Skalenparameter (muss positiv sein)
Kopieren
val d = LaplaceDistribution(mu = 0.0, scale = 1.0)d.mean // 0.0d.variance // 2.0d.pdf(0.0) // 0.5
Verwenden bei Daten mit einer scharfen Spitze im Zentrum und exponentiellen Rändern.
ExponentialDistribution(rate)
Modelliert die Zeit zwischen Ereignissen in einem Poisson-Prozess. Gedächtnislosigkeit.Parameter:rate — Ereignisrate, der Kehrwert des Mittelwerts (muss positiv sein)
Kopieren
val d = ExponentialDistribution(rate = 2.0)d.mean // 0.5d.cdf(1.0) // 0.8647d.quantile(0.5) // 0.3466
Verwenden für Wartezeiten, Dauern und Zwischenankunftszeiten.
GammaDistribution(shape, rate)
Verallgemeinert die Exponentialverteilung. Modelliert die Summe unabhängiger exponentialverteilter Zufallsvariablen.Parameter:shape — Formparameter k (muss positiv sein), scale — Skalenparameter θ (muss positiv sein)
Kopieren
val d = GammaDistribution(shape = 2.0, rate = 0.5)d.mean // 4.0d.variance // 8.0d.cdf(4.0) // 0.5940
Verwenden für positive stetige Daten mit Rechtsschiefe, etwa aggregierte Wartezeiten oder Niederschlagsmengen.
WeibullDistribution(shape, scale)
Flexible Verteilung für Zuverlässigkeits- und Überlebensanalysen.Parameter:shape — Form k (muss positiv sein), scale — Skala λ (muss positiv sein)
Kopieren
val d = WeibullDistribution(shape = 1.5, scale = 1.0)d.mean // 0.9027d.cdf(1.0) // 0.6321
Verwenden für Ausfallzeitdaten, Windgeschwindigkeitsmodellierung und Überlebensanalysen.
LogNormalDistribution(mu, sigma)
Der Logarithmus der Variablen ist normalverteilt. Stets positiv, rechtsschief.Parameter:mu — Mittelwert des Logarithmus, sigma — Standardabweichung des Logarithmus (muss positiv sein)
Kopieren
val d = LogNormalDistribution(mu = 0.0, sigma = 1.0)d.mean // 1.6487d.quantile(0.5) // 1.0d.cdf(1.0) // 0.5
Verwenden für multiplikative Prozesse: Aktienkurse, biologische Messungen, Dateigrößen.
NakagamiDistribution(mu, omega)
Modelliert die Amplitude von Mehrwege-Fading in der drahtlosen Kommunikation.Parameter:shape — Form m≥0,5, spread — Streuung Ω (muss positiv sein)
Kopieren
val d = NakagamiDistribution(mu = 1.0, omega = 1.0)d.mean // 0.8862d.variance // 0.2146
Verwenden für die Modellierung von Signalhüllkurven in Schwundkanälen.
LevyDistribution(mu, c)
Verteilung mit schweren Rändern und unendlichem Mittelwert. Ein Spezialfall der stabilen Verteilung.Parameter:location — Verschiebungsparameter, scale — Skalenparameter (muss positiv sein)
Kopieren
val d = LevyDistribution(mu = 0.0, c = 1.0)d.cdf(1.0) // 0.3173d.sf(1.0) // 0.6827
Verwenden für Extremwertmodellierung mit sehr schweren rechten Rändern.
BetaDistribution(alpha, beta)
Definiert auf [0, 1]. Flexible Form, gesteuert durch zwei Parameter.Parameter:alpha — Form α (muss positiv sein), beta — Form β (muss positiv sein)
Kopieren
val d = BetaDistribution(alpha = 2.0, beta = 5.0)d.mean // 0.2857d.cdf(0.3) // 0.5798d.pdf(0.2) // 2.4576
Verwenden für Anteile, Wahrscheinlichkeiten und beschränkte Daten auf [0, 1].
UniformDistribution(min, max)
Gleiche Wahrscheinlichkeit über das Intervall [a, b].Parameter:a — untere Grenze, b — obere Grenze (es muss a < b gelten)
Kopieren
val d = UniformDistribution(min = 0.0, max = 10.0)d.mean // 5.0d.variance // 8.3333d.cdf(3.0) // 0.3
Verwenden, wenn alle Werte in einem Bereich gleich wahrscheinlich sind.
TriangularDistribution(a, b, c)
Beschränkte Verteilung mit Spitze am Modus. Definiert durch Minimum, Maximum und Modus.Parameter:a — Minimum, b — Maximum, c — Modus (es muss a ≤ c ≤ b gelten)
Kopieren
val d = TriangularDistribution(a = 0.0, b = 10.0, c = 3.0)d.mean // 4.3333d.cdf(3.0) // 0.3
Verwenden für grobe Schätzungen, wenn nur Minimum, Maximum und wahrscheinlichster Wert bekannt sind.
ParetoDistribution(shape, scale)
Potenzgesetzverteilung. Modelliert Phänomene, bei denen ein kleiner Anteil der Werte einen großen Teil des Gesamtbetrags ausmacht.Parameter:xm — Minimalwert (Skala, muss positiv sein), alpha — Form (Randindex, muss positiv sein)
Kopieren
val d = ParetoDistribution(shape = 2.0, scale = 1.0)d.mean // 2.0d.cdf(2.0) // 0.75
Verwenden für Vermögensverteilungen, Stadtgrößen und Dateigrößen.
GumbelDistribution(mu, beta)
Extremwertverteilung (Typ I). Modelliert das Maximum einer Stichprobe aus vielen Verteilungen.Parameter:location — Modus, scale — Streuung (muss positiv sein)
Kopieren
val d = GumbelDistribution(mu = 0.0, beta = 1.0)d.mean // 0.5772d.cdf(0.0) // 0.3679
Verwenden für Extremwertanalysen: Höchsttemperaturen, Hochwasserstände, strukturelle Belastungen.
ChiSquaredDistribution(degreesOfFreedom)
Die Verteilung der Summe der Quadrate standardnormalverteilter Zufallsvariablen. Zentral für Chi-Quadrat-Tests und Konfidenzintervalle für die Varianz.Parameter:df — Freiheitsgrade (muss positiv sein)
Kopieren
val d = ChiSquaredDistribution(degreesOfFreedom = 5.0)d.mean // 5.0d.variance // 10.0d.cdf(11.07) // ≈ 0.95
Intern für Chi-Quadrat-Tests oder direkte Varianzinferenz verwenden.
FDistribution(dfNumerator, dfDenominator)
Verhältnis zweier Chi-Quadrat-Variablen dividiert durch ihre Freiheitsgrade. Zentral für F-Tests und ANOVA.Parameter:df1 — Zähler-Freiheitsgrade (muss positiv sein), df2 — Nenner-Freiheitsgrade (muss positiv sein)
Kopieren
val d = FDistribution(dfNumerator = 5.0, dfDenominator = 10.0)d.mean // 1.25d.cdf(3.33) // ≈ 0.95
Modelliert die Anzahl von Ereignissen in einem festen Intervall, wenn Ereignisse unabhängig mit konstanter Rate auftreten.Parameter:lambda — erwartete Anzahl der Ereignisse (muss positiv sein)
Kopieren
val d = PoissonDistribution(rate = 3.0)d.mean // 3.0d.pmf(5) // 0.1008d.cdf(5) // 0.9161d.quantileInt(0.95) // 6
Verwenden für Zähldaten: Defekte pro Charge, Ankünfte pro Stunde, Ereignisse pro Tag.
BinomialDistribution(trials, probability)
Modelliert die Anzahl der Erfolge in einer festen Anzahl unabhängiger Bernoulli-Versuche.Parameter:trials — Anzahl der Versuche (muss nicht-negativ sein), probability — Erfolgswahrscheinlichkeit pro Versuch (muss in [0, 1] liegen)
Kopieren
val d = BinomialDistribution(trials = 10, probability = 0.3)d.mean // 3.0d.pmf(3) // 0.2668d.cdf(3) // 0.6496d.quantileInt(0.5) // 3
Verwenden für Ja/Nein-Experimente, die eine bekannte Anzahl von Malen wiederholt werden.
Modelliert die Anzahl der Misserfolge vor Erreichen einer bestimmten Anzahl von Erfolgen.Parameter:r — Anzahl der Erfolge (muss positiv sein), p — Erfolgswahrscheinlichkeit (muss in (0, 1] liegen)
Kopieren
val d = NegativeBinomialDistribution(successes = 5, probability = 0.5)d.mean // 5.0d.variance // 10.0d.pmf(3) // probability of exactly 3 failures before 5 successes
Verwenden für überdisperse Zähldaten oder zur Modellierung der Versuchsanzahl bis zum Erreichen eines Ziels.
GeometricDistribution(probability)
Modelliert die Anzahl der Versuche bis zum ersten Erfolg. Ein Spezialfall der negativen Binomialverteilung.Parameter:probability — Erfolgswahrscheinlichkeit pro Versuch (muss in (0, 1] liegen)
Kopieren
val d = GeometricDistribution(probability = 0.3)d.mean // 3.3333d.pmf(1) // 0.3d.cdf(3) // 0.657
Verwenden für Fragen der Art „wie viele Versuche bis zum Erfolg”.
Modelliert die Anzahl der Erfolge bei Ziehungen ohne Zurücklegen aus einer endlichen Grundgesamtheit.Parameter:populationSize — Gesamtpopulation, successStates — Anzahl der Erfolgselemente, trials — Anzahl der Ziehungen
Kopieren
val d = HypergeometricDistribution(population = 50, successes = 10, draws = 5)d.mean // 1.0d.pmf(2) // probability of exactly 2 successes in 5 draws
Verwenden, wenn Ziehen ohne Zurücklegen relevant ist: Qualitätskontrolle, Kartenspiele, Lotterieprobleme.
BetaBinomialDistribution(trials, alpha, beta)
Zusammengesetzte Verteilung, bei der die Erfolgswahrscheinlichkeit einer Beta-Verteilung folgt. Höhere Varianz als eine Standard-Binomialverteilung.Parameter:trials — Anzahl der Versuche, alpha — Beta-Formparameter, beta — Beta-Formparameter
Kopieren
val d = BetaBinomialDistribution(trials = 10, alpha = 2.0, beta = 3.0)d.mean // 4.0d.pmf(4) // probability of exactly 4 successes
Verwenden für überdisperse Binomialdaten, bei denen die Erfolgswahrscheinlichkeit variiert.
BernoulliDistribution(probability)
Ein einzelner Versuch mit zwei Ergebnissen: Erfolg (1) oder Misserfolg (0). Die einfachste diskrete Verteilung.Parameter:probability — Erfolgswahrscheinlichkeit (muss in [0, 1] liegen)
Kopieren
val d = BernoulliDistribution(probability = 0.7)d.mean // 0.7d.pmf(1) // 0.7d.pmf(0) // 0.3
Verwenden für Münzwurf-ähnliche binäre Ergebnisse.
UniformDiscreteDistribution(min, max)
Gleiche Wahrscheinlichkeit für jede ganze Zahl in [a, b].Parameter:a — untere Grenze, b — obere Grenze (es muss a ≤ b gelten)
Kopieren
val d = UniformDiscreteDistribution(min = 1, max = 6)d.mean // 3.5d.pmf(3) // 0.1667d.cdf(3) // 0.5
Verwenden für faire Würfel und gleichverteilte ganzzahlige Zufallsauswahl.
ZipfDistribution(numberOfElements, exponent)
Potenzgesetzverteilung über die Ränge 1 bis n. Die Häufigkeit ist umgekehrt proportional zum Rang.Parameter:n — Anzahl der Elemente (muss positiv sein), s — Exponent (muss positiv sein)
Kopieren
val d = ZipfDistribution(numberOfElements = 100, exponent = 1.0)d.pmf(1) // probability of rank 1 (the most common)d.pmf(100) // probability of rank 100 (the least common)
Verwenden für Worthäufigkeiten, Stadtgrößen und Website-Traffic-Verteilungen.
LogarithmicDistribution(probability)
Auch als logarithmische Reihenverteilung bekannt. Modelliert die Anzahl der Arten mit einer bestimmten Abundanz.Parameter:p — Parameter in (0, 1)
Kopieren
val d = LogarithmicDistribution(probability = 0.5)d.mean // 1.4427d.pmf(1) // 0.7213d.pmf(2) // 0.1803
Verwenden für Artenabundanzdaten und ähnliche langschwänzige Zählverteilungen.
Im Zweifelsfall beginnen Sie mit NormalDistribution für stetige Daten und PoissonDistribution für Zähldaten. Diese sind die gängigsten Standardverteilungen und dienen als vernünftige Ausgangspunkte.