Use this file to discover all available pages before exploring further.
kstats-hypothesis stellt statistische Tests bereit, gegliedert nach der Fragestellung, die sie beantworten. Die meisten Funktionen liefern ein TestResult zurück; oneWayAnova() gibt ein AnovaResult mit der vollständigen ANOVA-Tabelle zurück.
Jeder Test erzeugt ein Ergebnis mit einheitlicher Struktur. Die statistic ist der berechnete Testwert, der pValue gibt die Wahrscheinlichkeit an, unter der Nullhypothese ein mindestens so extremes Ergebnis zu beobachten, und isSignificant() vergleicht den p-Wert mit einem Schwellenwert.
isSignificant() verwendet standardmäßig α=0.05. Ein anderer Schwellenwert kann explizit übergeben werden: result.isSignificant(alpha = 0.01).
Setzen Sie alternative explizit für einseitige Tests. Der Standardwert ist Alternative.TWO_SIDED. Mit Alternative.GREATER wird geprüft, ob der Stichprobenmittelwert den Referenzwert übersteigt; Alternative.LESS prüft, ob er darunter liegt.
Unterscheidet sich mein Stichprobenmittelwert von einem Referenzwert?
Der Einstichproben-t-Test vergleicht den Mittelwert einer einzelnen Stichprobe mit einem bekannten oder hypothetischen Wert.
val sample = doubleArrayOf(5.1, 4.9, 5.3, 5.0, 4.8)// Two-sided: is the mean different from 5.0?val two = tTest(sample, mu = 5.0)two.statistic // t valuetwo.pValue // two-sided p-value// One-sided: is the mean greater than 5.0?val one = tTest(sample, mu = 5.0, alternative = Alternative.GREATER)one.pValue // one-sided p-value
Verwenden Sie Alternative.GREATER oder Alternative.LESS für gerichtete Hypothesen, anstatt einen zweiseitigen p-Wert zu halbieren. Das Konfidenzintervall passt sich entsprechend an.
equalVariances ist standardmäßig false, d. h. es wird Welchs t-Test verwendet. Setzen Sie equalVariances = true nur, nachdem Sie gleiche Varianzen mit leveneTest() oder bartlettTest() bestätigt haben.
Vergleicht zwei zusammenhängende Messungen (vorher/nachher, links/rechts) an denselben Versuchspersonen.
val before = doubleArrayOf(200.0, 190.0, 210.0, 180.0, 195.0)val after = doubleArrayOf(190.0, 180.0, 195.0, 170.0, 185.0)val result = pairedTTest(before, after)result.statistic // positive t (before > after)result.pValue // p-value for the differenceresult.isSignificant() // true if the change is significant
Die ANOVA setzt Normalverteilung innerhalb jeder Gruppe und gleiche Varianzen über alle Gruppen voraus. Prüfen Sie die Normalverteilung mit shapiroWilkTest() und die Varianzhomogenität mit leveneTest() oder bartlettTest(), bevor Sie eine ANOVA durchführen.
Vier Normalitätstests stehen zur Verfügung. Jeder gibt ein TestResult zurück — ein signifikantes Ergebnis (niedriger p-Wert) deutet auf Abweichungen von der Normalverteilung hin.
val sample = doubleArrayOf( -1.2, -0.5, 0.0, 0.5, 1.2, 0.3, -0.1, 0.8, -0.4, 0.6, -0.8, 0.2, 0.9, -0.3, 0.4, -0.6, 1.0, -0.9, 0.1, 0.7)shapiroWilkTest(sample).pValue // high p → consistent with normalityandersonDarlingTest(sample).pValue // high p → consistent with normalitydagostinoPearsonTest(sample).pValue // combines skewness and kurtosis testsjarqueBeraTest(sample).pValue // asymptotic test based on skewness and kurtosis
Der Shapiro-Wilk-Test ist die gebräuchlichste Wahl und in der Regel der stärkste Test für kleine bis mittlere Stichproben (n < 5000). Der Anderson-Darling-Test ist empfindlicher gegenüber Abweichungen in den Verteilungsrändern. D’Agostino-Pearson und Jarque-Bera sind schneller bei großen Stichproben.
Prüft, ob der beobachtete Anteil an Erfolgen einer hypothetischen Wahrscheinlichkeit entspricht.
val result = binomialTest(successes = 60, trials = 100, probability = 0.5)result.pValue // p-value for H₀: p = 0.5result.isSignificant() // true if 60/100 is significantly different from 0.5
Exakter Test für 2x2-Kontingenztafeln. Dem Chi-Quadrat-Test bei kleinen Stichproben vorzuziehen.
// 2×2 table: [[10, 30], [20, 40]]val result = fisherExactTest(arrayOf(intArrayOf(10, 30), intArrayOf(20, 40)))result.pValue // exact p-valueresult.isSignificant() // true or false
Der Fisher-Exakttest ist für kleine Kontingenztafeln konzipiert. Für größere Tabellen verwenden Sie chiSquaredTest() mit einem Chi-Quadrat-Unabhängigkeitstest.
Varianzhomogenität ist eine Voraussetzung der ANOVA und einiger t-Test-Varianten. Drei Tests stehen zur Verfügung:
val g1 = doubleArrayOf(1.0, 2.0, 3.0, 4.0, 5.0)val g2 = doubleArrayOf(2.0, 4.0, 6.0, 8.0, 10.0)val g3 = doubleArrayOf(1.0, 3.0, 5.0, 7.0, 9.0)leveneTest(g1, g2, g3).pValue // robust to non-normalitybartlettTest(g1, g2, g3).pValue // most powerful when normality holdsflignerKilleenTest(g1, g2, g3).pValue // rank-based, robust to outliers
Der Levene-Test ist die sicherste Standardwahl — er ist robust gegenüber Abweichungen von der Normalverteilung. Verwenden Sie den Bartlett-Test nur, wenn die Daten innerhalb jeder Gruppe annähernd normalverteilt sind (Bartlett ist in diesem Fall leistungsfähiger). Der Fligner-Killeen-Test ist am robustesten gegenüber Ausreißern.
Der Grubbs-Test (Extreme Studentized Deviate Test) prüft formell, ob die am weitesten vom Mittelwert entfernte Beobachtung ein Ausreißer ist, vorausgesetzt, die übrigen Daten sind näherungsweise normalverteilt. Die Teststatistik lautetG=smaxi∣xi−xˉ∣,umgerechnet in eine Student-t-Statistik mit N−2 Freiheitsgraden und Bonferroni-korrigiert dafür, dass jede Beobachtung getestet wurde.
// Response times (ms) with a suspected outlierval latencies = doubleArrayOf(12.0, 14.0, 11.0, 13.0, 15.0, 98.0, 12.0)val result = grubbsTest(latencies)result.statistic // G statisticresult.pValue // Bonferroni-corrected p-valueresult.additionalInfo["outlierIndex"] // index of the suspected outlierresult.additionalInfo["outlierValue"] // the suspected outlier's valueresult.isSignificant() // true if outlier is significant at α = 0.05
Verwenden Sie Alternative.GREATER oder Alternative.LESS, um nur einen Tail zu testen, wenn Sie ausschließlich an einem auffällig großen bzw. kleinen Wert interessiert sind:
// Only test for a suspiciously large value (upper tail)val data = doubleArrayOf(2.1, 2.5, 2.3, 2.8, 10.0, 2.4, 2.2)val upper = grubbsTest(data, alternative = Alternative.GREATER)upper.additionalInfo["outlierValue"] // 10.0 — the maximum// Only test for a suspiciously small value (lower tail)val dataLow = doubleArrayOf(2.1, 2.5, 2.3, 2.8, -5.0, 2.4, 2.2)val lower = grubbsTest(dataLow, alternative = Alternative.LESS)lower.additionalInfo["outlierValue"] // -5.0 — the minimum
Für mehrere Ausreißer wendet grubbsTestIterative() den Test wiederholt an und entfernt jeweils einen signifikanten Ausreißer, bis keiner mehr übrig ist oder die Stichprobe unter drei Beobachtungen fällt.
// Remove multiple outliers by repeatedly applying the testval data = doubleArrayOf(10.0, 11.0, 12.0, 13.0, 14.0, 80.0, 90.0)val cleaned = grubbsTestIterative(data, alpha = 0.05)cleaned.outlierIndices // indices (in the original array) that were removedcleaned.cleanedData // observations after removing all detected outlierscleaned.iterations // TestResult from each round (last one is non-significant)
Der Grubbs-Test setzt voraus, dass die Daten bis auf den Ausreißer näherungsweise normalverteilt sind. Validieren Sie mit shapiroWilkTest() an den Daten nach Entfernen des Verdächtigen, bevor Sie ein signifikantes Ergebnis berichten.
Das iterative Verfahren kann Ausreißer maskieren, wenn mehrere Extreme zusammenliegen — jeder Einzeltest wird durch seine Nachbarn verdünnt. Bevorzugen Sie bei großen Clustern einen speziellen Mehrfach-Ausreißer-Test (z. B. verallgemeinertes ESD) oder einen robusten Schätzer.