t-Tests, ANOVA, Chi-Quadrat, Fisher-Exakttest, Mann-Whitney, Wilcoxon, Normalitätstests und Varianzhomogenitätstests in kstats-hypothesis.
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.
Kopieren
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.
Kopieren
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.
Kopieren
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.
Kopieren
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.
Kopieren
// 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:
Kopieren
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.