R Anleitungen

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:

R Code
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.

R erlaubt es auch anzugeben, wie fehlende Daten behandelt werden sollten. Hier gibt es mehrere Möglichkeiten, aber wir empfehlen 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:

R Code
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.

R Code
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.

R Code
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.

R Code
library(corrplot)

corrplot(cor(Daten), method="color", type="lower")
corrplot(cor(Daten), method="circle", type="lower")

Korrelogramm #1
Korrelogramm #1

Korrelogramm #2