Korrelationen graphisch darstellen

Du hast jetzt im Output von R Tabellen erstellt. Oftmals werden Korrelationen aber in Grafiken dargestellt, da diese für das Auge leichter zu verarbeiten sind als eine Tabelle.

An dieser Stelle wirst du zwei Möglichkeiten kennenlernen, solche zu erstellen: Einmal mit der library psych und einmal mit der library corrplot.

Library psych

Die library psych bietet mit der Funktion pairs.panels() eine gute Funktion, um Korrelationen sowie den Zusammenhang zwischen Variablen grafisch darzustellen. In der Funktion gibst du wie zuvor den Datensatz an bzw. welche Variablen du nutzen möchtest. Danach gibst du die Methode der Korrelation an (pearson oder spearman). Da hier pseudometrische Daten vorliegen, ist es sinnvoll das Argument jiggle = TRUE einzusetzen, da so die Datenpunkte nicht überlappen. Mit dem zusätzlichen Argument stars = TRUE werden die konventionellen Signifikanz-Sternchen angezeigt.

Dazu gehört die Funktion pairs.panels() aus der library psych.

pairs.panels(
  pss[c(
    "stfdem",
    "trstprl",
    "trstlgl",
    "stfeco"
  )
  ],
  method = "pearson",   
  jiggle = TRUE,   # für pseudometrische Daten
  stars = TRUE  # Konvention für Signifikanzen
)               

Das ganze sieht dann grafisch so aus: Im oberen Drittel befinden sich die Korrelationskoeffzienten, in der diagonalen die univariate Verteilung der jeweiligen Variable und im unteren Drittel die bivariate Verteilung des Variablenpaars. Pairs Panel

Leider ist die Funktion nicht so leicht anzupassen und zu erweitern wie ggplots, die wir später im Lernblock 5 kennenlernen werden. Dort lernst du auch eine ggplot-Variante kennen, um Pairs-Panels zu erstellen.

Library corrplot

Eine weitere Darstellungsmöglichkeit mehrerer Korrelationen ist eine sogenannte Heat Map. Um diesen Plot zu erstellen, benötigst du die library corrplot und daraus Funktion corrplot().

Eine Heat Map zeigt die Stärke des Zusammenhangs über die Farbwahl an

Heat Map
Heat Map

Als erstes lade das package corrplot:

install.packages("corrplot")
library("corrplot")

Dann erstellst du eine Korrelationsmatrix, dazu nutzt du die Funktion corr.test():

cor2 <- corr.test(
  pss[c(
    "trstprl",
    "trstplt",
    "trstprt",
    "trstlgl"
  )
  ],
  method = "pearson",
  use = "complete.obs"
) 

Als Ergebnis erhalten wir wieder ein list-Objekt, das drei Matrizen beinhaltet: Den Korrelationswert, die Stichprobengröße und den p-Wert. Wir benötigen für die Heatmap aber nur den Korrelationswert und den p-Wert.

cor2
## Call:corr.test(x = pss[c("trstprl", "trstplt", "trstprt", "trstlgl")], 
##     use = "complete.obs", method = "pearson")
## Correlation matrix 
##         trstprl trstplt trstprt trstlgl
## trstprl    1.00    0.23    0.38    0.23
## trstplt    0.23    1.00    0.40    0.05
## trstprt    0.38    0.40    1.00    0.25
## trstlgl    0.23    0.05    0.25    1.00
## Sample Size 
##         trstprl trstplt trstprt trstlgl
## trstprl    4965    4954    4948    4953
## trstplt    4954    4989    4972    4977
## trstprt    4948    4972    4983    4971
## trstlgl    4953    4977    4971    4988
## Probability values (Entries above the diagonal are adjusted for multiple tests.) 
##         trstprl trstplt trstprt trstlgl
## trstprl       0       0       0       0
## trstplt       0       0       0       0
## trstprt       0       0       0       0
## trstlgl       0       0       0       0
## 
##  To see confidence intervals of the correlations, print with the short=FALSE option
ls(cor2)
##  [1] "adjust" "Call"   "ci"     "ci.adj" "ci2"    "n"      "p"      "p.adj" 
##  [9] "r"      "se"     "sef"    "stars"  "sym"    "t"

Nun kannst du den Plot erstellen:

corrplot(
  cor2$r, 
  p.mat = cor2$p,    # Matrix mit p-Werten
  insig = "blank",   # nicht signifikante = leer
  type = "upper",    # auch lower möglich
  method = "circle" # verschiedene Optionen möglich
)    
Heat Map
Heat Map

Die library corrplot ermöglicht dir eine Reihe an weiteren Einstellungen, diese kannst du dir hier ansehen. Wir werden uns im fünften Lernblock intensiver mit Grafiken beschäftigen.