Pearson-, Spearman-, Kendall-Tau-, partielle Korrelation, punktbiseriale Korrelation, Matrizen, Kovarianz und einfache lineare Regression in kstats-correlation.
kstats-correlation deckt zwei verwandte Aufgaben ab: die Stärke des Zusammenhangs zwischen Variablen messen und eine lineare Beziehung modellieren. Das Modul ist in zwei Abschnitte unterteilt, die diese Unterscheidung widerspiegeln.
Misst die Stärke und Richtung des linearen Zusammenhangs zwischen zwei numerischen Variablen. Der Koeffizient reicht von -1 (perfekt negativ) bis +1 (perfekt positiv).
Kopieren
val x = doubleArrayOf(1.0, 2.0, 3.0, 4.0, 5.0)val y = doubleArrayOf(2.1, 3.9, 6.2, 7.8, 10.1)val r = pearsonCorrelation(x, y)r.coefficient // 0.9987r.pValue // 0.0001r.n // 5
Verwenden Sie Pearson, wenn beide Variablen stetig sind und die Beziehung annähernd linear ist. Empfindlich gegenüber Ausreißern.
Wendet die Pearson-Korrelation auf die Ränge der Daten an. Misst monotone Zusammenhänge — ob die Variablen dazu tendieren, gemeinsam zu steigen, unabhängig von der Linearität.
Kopieren
val x = doubleArrayOf(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0)val y = doubleArrayOf(2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0)val r = spearmanCorrelation(x, y)r.coefficient // 1.0 — perfect monotonic relationshipr.pValue // 0.0
Verwenden Sie Spearman, wenn die Beziehung monoton, aber nicht zwingend linear ist, oder wenn die Daten Ausreißer enthalten.
Zählt konkordante und diskordante Paare zur Messung der ordinalen Assoziation. Robuster als Spearman bei kleinen Stichproben und vielen Bindungen.
Kopieren
val x = doubleArrayOf(1.0, 2.0, 3.0, 4.0, 5.0)val y = doubleArrayOf(1.0, 3.0, 2.0, 5.0, 4.0)val tau = kendallTau(x, y)tau.coefficient // 0.6tau.pValue // p-value for tau
Die Kendall-Tau-Implementierung läuft in O(nlogn) Zeit mithilfe eines Merge-Sort-basierten Algorithmus und ist damit auch für große Datensätze effizient.
Misst den Zusammenhang zwischen einer binären Variable (kodiert als 0/1 Ganzzahlen) und einer stetigen Variable. Entspricht der Pearson-Korrelation, wenn eine Variable dichotom ist.
Kopieren
val binary = intArrayOf(0, 0, 0, 1, 1, 1, 1)val continuous = doubleArrayOf(1.0, 2.0, 1.5, 4.0, 5.0, 4.5, 3.5)val r = pointBiserialCorrelation(binary, continuous)r.coefficient // positive — group 1 has higher valuesr.pValue // p-value
Geeignet, wenn eine Variable von Natur aus binär ist: Behandlung/Kontrolle, bestanden/nicht bestanden, männlich/weiblich.
Misst den Zusammenhang zwischen zwei Variablen nach Kontrolle einer dritten Variable. Entfernt den Effekt der Störvariablen.
Kopieren
val x = doubleArrayOf(1.0, 2.0, 3.0, 4.0, 5.0)val y = doubleArrayOf(2.0, 4.0, 5.0, 4.0, 5.0)val z = doubleArrayOf(1.0, 1.0, 2.0, 3.0, 3.0)val r = partialCorrelation(x, y, z)r.coefficient // correlation between x and y, controlling for zr.pValue // p-value
Verwenden Sie sie, wenn eine dritte Variable den scheinbaren Zusammenhang zwischen den ersten beiden erklären könnte.
Für die Analyse mehrerer Variablen können paarweise Matrizen erstellt werden. Jede Zelle (i,j) enthält die Korrelation (oder Kovarianz) zwischen den Variablen i und j.
Kopieren
val x = doubleArrayOf(1.0, 2.0, 3.0, 4.0, 5.0)val y = doubleArrayOf(2.1, 3.9, 6.2, 7.8, 10.1)val z = doubleArrayOf(5.0, 4.0, 3.0, 2.0, 1.0)val corr = correlationMatrix(x, y, z)corr[0][1] // Pearson r between x and y ≈ 0.9987corr[0][2] // Pearson r between x and z = -1.0val cov = covarianceMatrix(x, y, z)cov[0][0] // variance of x = 2.5cov[0][1] // covariance of x and y
Linearer Zusammenhang zwischen zwei numerischen Variablen
pearsonCorrelation()
Monotoner Zusammenhang, robust gegenüber Ausreißern
spearmanCorrelation()
Ordinaler Zusammenhang mit expliziter Bindungsbehandlung
kendallTau()
Binäre vs. stetige Variable
pointBiserialCorrelation()
Zusammenhang nach Entfernung des Effekts einer dritten Variable
partialCorrelation()
Paarweise Zusammenfassungen für viele Variablen
correlationMatrix(), covarianceMatrix()
Mathematische Details
Pearson:r=∑i(xi−xˉ)2∑i(yi−yˉ)2∑i(xi−xˉ)(yi−yˉ)Spearman: Pearson-Korrelation angewandt auf Ränge.Kendall tau-b:τb=(C+D+TX)(C+D+TY)C−Dwobei C = konkordante Paare, D = diskordante Paare, TX = nur auf X gebundene Paare, TY = nur auf Y gebundene Paare.Partielle Korrelation:rxy⋅z=(1−rxz2)(1−ryz2)rxy−rxz⋅ryz
Passt die Gerade y^=β0+β1x mittels gewöhnlicher kleinster Quadrate an die Daten an. Das Ergebnis umfasst Steigung, Achsenabschnitt, Bestimmtheitsmaß (R2), Standardfehler, Residuen und eine Vorhersagefunktion.
Kopieren
val x = doubleArrayOf(1.0, 2.0, 3.0, 4.0, 5.0)val y = doubleArrayOf(2.1, 3.9, 6.2, 7.8, 10.1)val model = simpleLinearRegression(x, y)model.slope // 1.99model.intercept // 0.06model.rSquared // 0.9973model.standardErrorSlope // standard error of the slope estimatemodel.standardErrorIntercept // standard error of the intercept estimatemodel.n // 5model.residuals // [0.05, -0.07, 0.15, -0.17, 0.05]// Predictionmodel.predict(6.0) // 11.99model.predict(doubleArrayOf(6.0, 7.0, 8.0)) // batch prediction