R: Korrelationen
Korrelationen spielen bei einer deskriptiven Betrachtung von Daten eine wichtige Rolle. Eine Korrelation misst die Beziehung zwischen zwei Variablen, d.h. wie sie miteinander in Zusammenhang stehen. In diesem Sinne erlaubt es eine Korrelation festzustellen, welche Variablen sich in die gleiche Richtung entwickeln, welche sich in die entgegengesetzte Richtung entwickeln und welche unabhängig voneinander sind.
Korrelationen können in R am einfachsten mit der Funktion cor()
berechnet werden. Dabei können zwei Vektoren oder eine Matrix bzw. Datenrahmen verwendet werden:
cor(x, y, use="complete.obs") # Korrelation zwischen zwei Variablen
cor(Daten, use="complete.obs") # Korrelationsmatrix
cor(Daten, use="complete.obs", method="spearman") # Spearman Rangkorrelation
Wenn wir einen Datenrahmen oder eine Matrix als Eingabe geben, erhalten wir auch eine Matrix als Ausgabe. Über den Parameter method können wir noch zusätzlich angeben ob wir eine Spearman- (method="spearman"
) oder Kendall-Korrelation (method="kendall"
) berechnen möchten.
use="complete.obs"
zu setzen, und nur Fälle in die Berechnung einzuschließen, bei denen keine fehlenden Werte in einer der Variablen vorkommt. Besonders "pairwise.complete.obs"
kann die Ergebnisse stark verfälschen!Signifikanz von Korrelationen
In der Regel möchten wir nicht nur den reinen Korrelationskoeffizienten, sondern auch den zugehörigen p-Wert wissen. Zwar gibt es in R die Funktion cor.test()
, allerdings erlaubt sie es uns nur für jeweils eine einzige Korrelation den p-Wert zu berechnen.
Die Funktion correlation()
aus dem gleichnamigen Paket correlation
kann beides:
library(correlation)
correlation(x, y)
correlation(Daten)
summary(correlation(Daten)) # Korrelationstabelle mit Signifikanzen
# Parameter | Petal.Width | Petal.Length | Sepal.Width
# -------------------------------------------------------
# Sepal.Length | 0.82*** | 0.87*** | -0.12
# Sepal.Width | -0.37*** | -0.43*** |
# Petal.Length | 0.96*** | |
correlation()
wird automatisch den p-Wert für multiples Testen mit der Bonferroni-Holm-Methode anpassen. Sollte dies nicht gewünscht sein, kann mit dem Parameter p_adjust
dieses Verhalten gesteuert werden, z.B. wenn keine Adjustierung gewünscht wird p_adjust="none"
.Andere Korrelationskoeffizienten
Die Funktion correlation()
kann aber noch mehr: Neben Bayesscher Korrelation und einigen robusteren Verfahren wie dem Blomqvist’scher Koeffizient, oder der Shepherd-Pi-Korrelation, kann correlation()
auch automatisch die Art die Korrelation aus den Daten heraus bestimmen und entsprechend beispielsweise die Punkt-Biseriale-Korrelation oder Tetrachorische-Korrelation berechnen. Falls ein bestimmtes Verfahren gewünscht ist, kann es auch direkt über den Parameter method
angegeben werden.
library(psych)
library(correlation)
correlation(Daten, include_factors = TRUE, method = "auto")
# Parameter1 | Parameter2 | r | 95% CI | t(148) | p | Method | n_Obs
# -----------------------------------------------------------------------------------------------------------
# Sepal.Length | Sepal.Width | -0.12 | [-0.27, 0.04] | -1.44 | 0.452 | Pearson | 150
# Sepal.Length | Petal.Length | 0.87 | [ 0.83, 0.91] | 21.65 | < .001 | Pearson | 150
# Sepal.Length | Petal.Width | 0.82 | [ 0.76, 0.86] | 17.30 | < .001 | Pearson | 150
# Sepal.Length | Species.setosa | -0.72 | [-0.79, -0.63] | -12.53 | < .001 | Point-biserial | 150
# Sepal.Length | Species.versicolor | 0.08 | [-0.08, 0.24] | 0.97 | 0.452 | Point-biserial | 150
# Sepal.Length | Species.virginica | 0.64 | [ 0.53, 0.72] | 10.08 | < .001 | Point-biserial | 150
# Sepal.Width | Petal.Length | -0.43 | [-0.55, -0.29] | -5.77 | < .001 | Pearson | 150
# Sepal.Width | Petal.Width | -0.37 | [-0.50, -0.22] | -4.79 | < .001 | Pearson | 150
# Sepal.Width | Species.setosa | 0.60 | [ 0.49, 0.70] | 9.20 | < .001 | Point-biserial | 150
# Sepal.Width | Species.versicolor | -0.47 | [-0.58, -0.33] | -6.44 | < .001 | Point-biserial | 150
# Sepal.Width | Species.virginica | -0.14 | [-0.29, 0.03] | -1.67 | 0.392 | Point-biserial | 150
# Petal.Length | Petal.Width | 0.96 | [ 0.95, 0.97] | 43.39 | < .001 | Pearson | 150
# ...
Repeated Measures Korrelation
Bei wiederholten Messungen (d.h. wenn beispielsweise dieselbe Person mehrmals gemessen wurde) kann ein Verfahren speziell für abhängige Daten mehr Power haben, als gewöhnliche Korrelationskoeffizienten. Die Funktion rmcorr()
aus dem gleichnamigen Paket führt eine Korrelation mit Messwiederholung durch.
library(rmcorr)
rmcorr(
participant=Teilnehmer,
measure1=Variable1,
measure2=Variable2,
dataset=Daten
)
# Repeated measures correlation
# r
# -0.5067697
#
# degrees of freedom
# 38
#
# p-value
# 0.0008471081
#
# 95% confidence interval
# -0.7112297 -0.223255
Korrelationen Visualisieren
Korrelationsmatrizen können mit Korrelogrammen visualisiert werden. Das Paket corrplot
enthält zahlreiche Möglichkeiten, Korrelogramme zu erstellen, wie die beiden unten.
library(corrplot)
corrplot(cor(Daten), method="color", type="lower")
corrplot(cor(Daten), method="circle", type="lower")