Korrelation in R: Pearson & Spearman Korrelationsmatrix

Bivariate Korrelation in R

Eine bivariate Beziehung beschreibt eine Beziehung – oder Korrelation – zwischen zwei Variablen in R. In diesem Tutorial diskutieren wir das Konzept der Korrelation und zeigen, wie es verwendet werden kann, um die Beziehung zwischen zwei beliebigen Variablen in R zu messen.

Korrelation in der R-Programmierung

Es gibt zwei Hauptmethoden, um die Korrelation zwischen zwei Variablen in der R-Programmierung zu berechnen:

  • Pearson: Parametrische Korrelation
  • Speermann: Nichtparametrische Korrelation

Pearson-Korrelationsmatrix in R

Die Pearson-Korrelationsmethode wird normalerweise als primäre Überprüfung der Beziehung zwischen zwei Variablen verwendet.

Der Korrelationskoeffizient, , ist ein Maß für die Stärke der linear Beziehung zwischen zwei Variablen und . Es wird wie folgt berechnet:

Pearson-Korrelationsmatrix in R

mit

  • Pearson-Korrelationsmatrix in R, also Standardabweichung von
  • Pearson-Korrelationsmatrix in R, also Standardabweichung von

Die Korrelation liegt zwischen -1 und 1.

  • Ein Wert nahe oder gleich 0 impliziert eine geringe oder keine lineare Beziehung zwischen und .
  • Im Gegensatz dazu ist die lineare Beziehung umso stärker, je näher der Wert bei 1 oder -1 liegt.

Wir können den t-Test wie folgt berechnen und die Verteilungstabelle mit einem Freiheitsgrad überprüfen, der gleich ist:

Pearson-Korrelationsmatrix in R

Spearman-Rangkorrelation in R

Eine Rangkorrelation sortiert die Beobachtungen nach Rang und berechnet den Grad der Ähnlichkeit zwischen dem Rang. Eine Rangkorrelation hat den Vorteil, dass sie robust gegenüber Ausreißern ist und nicht an die Verteilung der Daten gebunden ist. Beachten Sie, dass eine Rangkorrelation für die Ordinalvariable geeignet ist.

Die Rangkorrelation nach Spearman liegt immer zwischen -1 und 1, wobei ein Wert nahe am Extremwert eine starke Beziehung anzeigt. Sie wird wie folgt berechnet:

Spearman-Rangkorrelation in R

mit Angabe der Kovarianzen zwischen Rang und . Der Nenner berechnet die Standardabweichungen.

In R können wir die Funktion cor() verwenden. Es benötigt drei Argumente und die Methode.

cor(x, y, method)

Argumente:

  • x: Erster Vektor
  • y: Zweiter Vektor
  • Methode: Die zur Berechnung der Korrelation verwendete Formel. Drei Zeichenfolgenwerte:
    • „Pearson“
    • „Kendall“
    • „Speerkämpfer“

Ein optionales Argument kann hinzugefügt werden, wenn die Vektoren fehlende Werte enthalten: use = „complete.obs“

Wir werden den BudgetUK-Datensatz verwenden. Dieser Datensatz berichtet über die Budgetzuweisung britischer Haushalte zwischen 1980 und 1982. Es gibt 1519 Beobachtungen mit zehn Merkmalen, darunter:

  • wfood: Lebensmittel teilen, Ausgaben teilen
  • wKraftstoff: Treibstoffausgaben teilen
  • wcloth: Budgetanteil für Bekleidungsausgaben
  • walc: Alkoholausgaben teilen
  • wtrans: Transportausgaben teilen
  • wother: Anteil der Ausgaben für andere Güter
  • totexp: Gesamtausgaben der Haushalte in Pfund
  • Einkommen: gesamtes Nettohaushaltseinkommen
  • Alter: Alter des Haushalts
  • und Kindern: Anzahl der Kinder

Beispiel

library(dplyr)
PATH <-"https://raw.githubusercontent.com/guru99-edu/R-Programming/master/british_household.csv"
data <-read.csv(PATH)
  filter(income < 500)
  mutate(log_income = log(income),
         log_totexp = log(totexp),
         children_fac = factor(children, order = TRUE, labels = c("No", "Yes")))
  select(-c(X,X.1, children, totexp, income))
glimpse(data)

Code Erklärung

  • Wir importieren zunächst die Daten und schauen sie uns mit der glimpse()-Funktion aus der dplyr-Bibliothek an.
  • Drei Punkte liegen über 500, daher haben wir beschlossen, sie auszuschließen.
  • Es ist eine gängige Praxis, eine monetäre Variable in Logarithmus umzuwandeln. Es trägt dazu bei, die Auswirkungen von Ausreißern zu reduzieren und die Schiefe im Datensatz zu verringern.

Ausgang:

## Observations: 1,516## Variables: 10
## $ wfood        <dbl> 0.4272, 0.3739, 0.1941, 0.4438, 0.3331, 0.3752, 0...
## $ wfuel        <dbl> 0.1342, 0.1686, 0.4056, 0.1258, 0.0824, 0.0481, 0...
## $ wcloth       <dbl> 0.0000, 0.0091, 0.0012, 0.0539, 0.0399, 0.1170, 0...
## $ walc         <dbl> 0.0106, 0.0825, 0.0513, 0.0397, 0.1571, 0.0210, 0...
## $ wtrans       <dbl> 0.1458, 0.1215, 0.2063, 0.0652, 0.2403, 0.0955, 0...
## $ wother       <dbl> 0.2822, 0.2444, 0.1415, 0.2716, 0.1473, 0.3431, 0...
## $ age          <int> 25, 39, 47, 33, 31, 24, 46, 25, 30, 41, 48, 24, 2...
## $ log_income   <dbl> 4.867534, 5.010635, 5.438079, 4.605170, 4.605170,...
## $ log_totexp   <dbl> 3.912023, 4.499810, 5.192957, 4.382027, 4.499810,...
## $ children_fac <ord> Yes, Yes, Yes, Yes, No, No, No, No, No, No, Yes, ...

Wir können den Korrelationskoeffizienten zwischen Einkommens- und Wfood-Variablen mit den Methoden „Pearson“ und „Spearman“ berechnen.

cor(data$log_income, data$wfood, method = "pearson")

Ausgang:

## [1] -0.2466986
cor(data$log_income, data$wfood, method = "spearman")

Ausgang:

## [1] -0.2501252

Korrelationsmatrix in R

Die bivariate Korrelation ist ein guter Anfang, aber mit der multivariaten Analyse können wir uns ein umfassenderes Bild verschaffen. Eine Korrelation mit vielen Variablen ist in a dargestellt Korrelationsmatrix. Eine Korrelationsmatrix ist eine Matrix, die die Paarkorrelation aller Variablen darstellt.

Die Funktion cor() gibt eine Korrelationsmatrix zurück. Der einzige Unterschied zur bivariaten Korrelation besteht darin, dass wir die Variablen nicht angeben müssen. Standardmäßig berechnet R die Korrelation zwischen allen Variablen.

Beachten Sie, dass für die Faktorvariable keine Korrelation berechnet werden kann. Wir müssen sicherstellen, dass wir das kategoriale Merkmal löschen, bevor wir den Datenrahmen in cor() übergeben.

Eine Korrelationsmatrix ist symmetrisch, was bedeutet, dass die Werte über der Diagonale dieselben Werte haben wie die Werte darunter. Es ist visueller, die Hälfte der Matrix anzuzeigen.

Wir schließen „children_fac“ aus, da es sich um eine Variable auf Faktorebene handelt. cor führt keine Korrelation für eine kategoriale Variable durch.

# the last column of data is a factor level. We don't include it in the code
mat_1 <-as.dist(round(cor(data[,1:9]),2))
mat_1

Code Erklärung

  • cor(Daten): Korrelationsmatrix anzeigen
  • rund(Daten, 2): Runden Sie die Korrelationsmatrix mit zwei Dezimalstellen
  • as.dist(): Zeigt nur die zweite Hälfte

Ausgang:

##            wfood wfuel wcloth  walc wtrans wother   age log_income
## wfuel       0.11                                                  
## wcloth     -0.33 -0.25                                            
## walc       -0.12 -0.13  -0.09                                     
## wtrans     -0.34 -0.16  -0.19 -0.22                               
## wother     -0.35 -0.14  -0.22 -0.12  -0.29                        
## age         0.02 -0.05   0.04 -0.14   0.03   0.02                 
## log_income -0.25 -0.12   0.10  0.04   0.06   0.13  0.23           
## log_totexp -0.50 -0.36   0.34  0.12   0.15   0.15  0.21       0.49

Signifikanzniveau

Das Signifikanzniveau ist in manchen Situationen nützlich, wenn wir die Pearson- oder Spearman-Methode verwenden. Die Funktion rcorr() aus der Bibliothek Hmisc berechnet für uns den p-Wert. Wir können die Bibliothek herunterladen von conda und kopieren Sie den Code, um ihn in das Terminal einzufügen:

conda install -c r r-hmisc

Für rcorr() muss ein Datenrahmen als Matrix gespeichert werden. Wir können unsere Daten vorher in eine Matrix umwandeln, um die Korrelationsmatrix mit dem p-Wert zu berechnen.

library("Hmisc")
data_rcorr <-as.matrix(data[, 1: 9])

mat_2 <-rcorr(data_rcorr)
# mat_2 <-rcorr(as.matrix(data)) returns the same output

Das Listenobjekt mat_2 enthält drei Elemente:

  • r: Ausgabe der Korrelationsmatrix
  • n: Anzahl der Beobachtungen
  • P: p-Wert

Uns interessiert das dritte Element, der p-Wert. Es ist üblich, die Korrelationsmatrix mit dem p-Wert anstelle des Korrelationskoeffizienten anzuzeigen.

p_value <-round(mat_2[["P"]], 3)
p_value

Code Erklärung

  • mat_2[[„P“]]: Die p-Werte werden im Element namens P gespeichert
  • Round(mat_2[[„P“]], 3): Runden Sie die Elemente mit drei Ziffern

Ausgang:

           wfood wfuel wcloth  walc wtrans wother   age log_income log_totexp
wfood         NA 0.000  0.000 0.000  0.000  0.000 0.365      0.000          0
wfuel      0.000    NA  0.000 0.000  0.000  0.000 0.076      0.000          0
wcloth     0.000 0.000     NA 0.001  0.000  0.000 0.160      0.000          0
walc       0.000 0.000  0.001    NA  0.000  0.000 0.000      0.105          0
wtrans     0.000 0.000  0.000 0.000     NA  0.000 0.259      0.020          0
wother     0.000 0.000  0.000 0.000  0.000     NA 0.355      0.000          0
age        0.365 0.076  0.160 0.000  0.259  0.355    NA      0.000          0
log_income 0.000 0.000  0.000 0.105  0.020  0.000 0.000         NA          0
log_totexp 0.000 0.000  0.000 0.000  0.000  0.000 0.000      0.000         NA

Visualisierung der Korrelationsmatrix in R

Eine Heatmap ist eine weitere Möglichkeit, eine Korrelationsmatrix anzuzeigen. Die GGally-Bibliothek ist eine Erweiterung von ggplot2. Derzeit ist es nicht in der Conda-Bibliothek verfügbar. Wir können direkt in der Konsole installieren.

install.packages("GGally")

Visualisierung der Korrelationsmatrix

Die Bibliothek enthält verschiedene Funktionen zum Anzeigen der zusammenfassenden Statistiken, z. B. der Korrelation und Verteilung aller Variablen in einem Matrix.

Die Funktion ggcorr() hat viele Argumente. Wir werden nur die Argumente vorstellen, die wir im Tutorial verwenden werden:

Die ggcorr-Funktion

ggcorr(df, method = c("pairwise", "pearson"),
  nbreaks = NULL, digits = 2, low = "#3B9AB2",
  mid = "#EEEEEE", high = "#F21A00",
  geom = "tile", label = FALSE,
  label_alpha = FALSE)

Argumente:

  • df: Verwendeter Datensatz
  • Methode: Formel zur Berechnung der Korrelation. Standardmäßig werden paarweise und Pearson berechnet
  • nbreaks: Gibt einen kategorialen Bereich für die Färbung der Koeffizienten zurück. Standardmäßig gibt es keine Unterbrechung und der Farbverlauf ist kontinuierlich
  • Ziffern: Runden Sie den Korrelationskoeffizienten. Standardmäßig auf 2 eingestellt
  • niedrig: Kontrollieren Sie den unteren Grad der Färbung
  • Mittel-: Steuern Sie die mittlere Stufe der Färbung
  • Highs: Kontrollieren Sie den hohen Grad der Färbung
  • geom: Steuern Sie die Form des geometrischen Arguments. Standardmäßig „Kachel“
  • Etikette: Boolescher Wert. Etikett anzeigen oder nicht. Standardmäßig auf „FALSE“ eingestellt

Grundlegende Wärmekarte

Das einfachste Diagramm des Pakets ist eine Heatmap. Die Legende des Diagramms zeigt einen Farbverlauf von –1 bis 1, wobei eine heiße Farbe eine starke positive Korrelation und eine kalte Farbe eine negative Korrelation anzeigt.

library(GGally)
ggcorr(data)

Code Erklärung

  • ggcorr(Daten): Es ist nur ein Argument erforderlich, nämlich der Name des Datenrahmens. Variablen auf Faktorebene werden nicht in die Darstellung einbezogen.

Ausgang:

Grundlegende Wärmekarte

Hinzufügen von Kontrolle zur Heatmap

Wir können dem Diagramm weitere Steuerelemente hinzufügen:

ggcorr(data,
    nbreaks = 6,
    low = "steelblue",
    mid = "white",
    high = "darkred",
    geom = "circle")

Code Erklärung

  • nbreaks=6: Brechen Sie die Legende mit 6 Rängen.
  • niedrig = „stahlblau“: Verwenden Sie hellere Farben für eine negative Korrelation
  • mittel = „weiß“: Verwenden Sie weiße Farben für die Korrelation im mittleren Bereich
  • hoch = „dunkelrot“: Verwenden Sie dunkle Farben für eine positive Korrelation
  • geom = „Kreis“: Verwenden Sie Kreise als Form für die Fenster in der Heatmap. Die Größe des Kreises ist proportional zum absoluten Wert der Korrelation.

Ausgang:

Hinzufügen von Kontrolle zur Heatmap

Beschriftung zur Heatmap hinzufügen

GGally ermöglicht es uns, den Fenstern Beschriftungen hinzuzufügen:

ggcorr(data,
    nbreaks = 6,
    label = TRUE,
    label_size = 3,
    color = "grey50")

Code Erklärung

  • label = WAHR: Fügen Sie die Werte der Korrelationskoeffizienten innerhalb der Wärmekarte hinzu.
  • Farbe = „grau50“: Wählen Sie die Farbe, z. B. Grau
  • Etikettengröße = 3: Stellen Sie die Größe des Etiketts auf 3 ein

Ausgang:

Beschriftung zur Heatmap hinzufügen

Die ggpairs-Funktion

Zum Schluss stellen wir noch eine weitere Funktion aus der GGaly-Bibliothek vor: Ggpair. Sie erzeugt ein Diagramm im Matrixformat. Wir können drei Arten von Berechnungen in einem Diagramm anzeigen. Die Matrix ist eine Dimension, wobei die Anzahl der Beobachtungen gleich ist. Der obere/untere Teil zeigt Fenster und in der Diagonale. Wir können steuern, welche Informationen wir in jedem Teil der Matrix anzeigen möchten. Die Formel für ggpair lautet:

ggpair(df, columns = 1: ncol(df), title = NULL,
    upper = list(continuous = "cor"),
    lower = list(continuous = "smooth"),
    mapping = NULL)		

Argumente:

  • df: Verwendeter Datensatz
  • Spalten: Wählen Sie die Spalten aus, um das Diagramm zu zeichnen
  • Titel: Fügen Sie einen Titel hinzu
  • obere: Steuern Sie die Kästchen über der Diagonale des Diagramms. Sie müssen die Art der Berechnungen oder des Diagramms angeben, das zurückgegeben werden soll. Wenn continuous = „cor“, bitten wir R, die Korrelation zu berechnen. Beachten Sie, dass das Argument eine Liste sein muss. Es können auch andere Argumente verwendet werden, weitere Informationen finden Sie in der [Vignette](„http://ggobi.github.io/ggally/#custom_functions“).
  • Senken: Kontrollieren Sie die Kästchen unterhalb der Diagonale.
  • Mapping: Gibt die Ästhetik des Diagramms an. Beispielsweise können wir das Diagramm für verschiedene Gruppen berechnen.

Bivariate Analyse mit ggpair mit Gruppierung

Das nächste Diagramm stellt drei Informationen dar:

  • Die Korrelationsmatrix zwischen log_totexp, log_income, age und wtrans-Variable, gruppiert danach, ob der Haushalt ein Kind hat oder nicht.
  • Zeichnen Sie die Verteilung jeder Variablen nach Gruppe auf
  • Zeigen Sie das Streudiagramm mit dem Trend nach Gruppe an
library(ggplot2)
ggpairs(data, columns = c("log_totexp", "log_income", "age", "wtrans"), title = "Bivariate analysis of revenue expenditure by the British household", upper = list(continuous = wrap("cor",
        size = 3)),
    lower = list(continuous = wrap("smooth",
        alpha = 0.3,
        size = 0.1)),
    mapping = aes(color = children_fac))

Code Erklärung

  • columns = c(„log_totexp“, „log_income“, „age“, „wtrans“): Wählen Sie die Variablen aus, die im Diagramm angezeigt werden sollen
  • Titel = „Bivariate Analyse der Einnahmenausgaben des britischen Haushalts“: Füge einen Titel hinzu
  • Upper = Liste(): Steuern Sie den oberen Teil des Diagramms. Dh oberhalb der Diagonale
  • kontinuierlich = wrap(“cor”, size = 3)): Berechnen Sie den Korrelationskoeffizienten. Wir schließen das Argument kontinuierlich in die Funktion wrap() ein, um die Ästhetik des Diagramms zu steuern (z. B. Größe = 3). -lower = list(): Steuert den unteren Teil des Diagramms. Dh unterhalb der Diagonale.
  • kontinuierlich = wrap(„glatt“, Alpha = 0.3, Größe = 0.1): Streudiagramm mit linearem Trend hinzufügen. Wir schließen das Argument kontinuierlich in die Funktion wrap() ein, um die Ästhetik des Diagramms zu steuern (z. B. Größe = 0.1, Alpha = 0.3).
  • Mapping = aes(color = children_fac): Wir möchten, dass jeder Teil des Diagramms nach der Variable children_fac gestapelt wird, die eine kategorische Variable ist, die den Wert 1 annimmt, wenn der Haushalt keine Kinder hat, und andernfalls den Wert 2.

Ausgang:

Bivariate Analyse mit ggpair mit Gruppierung

Bivariate Analyse mit ggpair mit teilweiser Gruppierung

Die Grafik unten ist etwas anders. Wir ändern die Position der Zuordnung innerhalb des oberen Arguments.

ggpairs(data, columns = c("log_totexp", "log_income", "age", "wtrans"),
    title = "Bivariate analysis of revenue expenditure by the British household",
    upper = list(continuous = wrap("cor",
            size = 3),
        mapping = aes(color = children_fac)),
    lower = list(
        continuous = wrap("smooth",
            alpha = 0.3,
            size = 0.1))
)

Code Erklärung

  • Genau derselbe Code wie im vorherigen Beispiel, außer:
  • Mapping = aes(color = children_fac): Verschieben Sie die Liste nach oben = list(). Wir möchten nur, dass die Berechnung im oberen Teil des Diagramms nach Gruppen gestapelt wird.

Ausgang:

Bivariate Analyse mit ggpair mit partieller Gruppierung

Zusammenfassung

  • Eine bivariate Beziehung beschreibt eine Beziehung – oder Korrelation – zwischen zwei Variablen in R.
  • Es gibt zwei Hauptmethoden zur Berechnung der Korrelation zwischen zwei Variablen R Programmierung: Pearson & Spearman.
  • Die Pearson-Korrelationsmethode wird normalerweise als primäre Überprüfung der Beziehung zwischen zwei Variablen verwendet.
  • Eine Rangkorrelation sortiert die Beobachtungen nach Rang und berechnet den Grad der Ähnlichkeit zwischen dem Rang.
  • Die Rangkorrelation nach Spearman liegt immer zwischen -1 und 1, wobei ein Wert nahe am äußersten Ende eine starke Beziehung anzeigt.
  • Eine Korrelationsmatrix ist eine Matrix, die die Paarkorrelation aller Variablen darstellt.
  • Das Signifikanzniveau ist in manchen Situationen nützlich, wenn wir die Pearson- oder Spearman-Methode verwenden.

Wir können alle Korrelationsfunktionen in R in der folgenden Tabelle zusammenfassen:

Bibliothek Ziel Methodik Code
Basis bivariate Korrelation Pearson
cor(dfx2, method = "pearson")
Basis bivariate Korrelation Speermann
cor(dfx2, method = "spearman")
Basis Multivariate Korrelation Pearson
cor(df, method = "pearson")
Basis Multivariate Korrelation Speermann
cor(df, method = "spearman")
Hmisch P-Wert
rcorr(as.matrix(data[,1:9]))[["P"]]
Gally Wärmekarte
ggcorr(df)
Multivariate Diagramme
cf code below