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.

Das 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

und

  • 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 Erlรคuterung

  • 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 Erlรคuterung

  • 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 Erlรคuterung

  • 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 Erlรคuterung

  • 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 Erlรคuterung

  • 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 Erlรคuterung

  • 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.
  • Karteping: Gibt die ร„sthetik des Diagramms an. Beispielsweise kรถnnen wir das Diagramm fรผr verschiedene Gruppen berechnen.

Bivariate Analyse mit ggpair mit Gruppeping

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 Erlรคuterung

  • 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).
  • Karteping = 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 Grouping

Bivariate Analyse mit ggpair mit partieller Gruppeping

Die untenstehende Grafik ist etwas anders. Wir รคndern die Position der Karte.ping 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 Erlรคuterung

  • Genau derselbe Code wie im vorherigen Beispiel, auรŸer:
  • Karteping = aes(color = children_fac): Verschiebt die Liste in upper = list(). Wir wollen die Berechnung nur im oberen Teil des Graphen nach Gruppe gestapelt haben.

Ausgang:

Bivariate Analyse mit ggpair mit partieller Gruppenanalyseping

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

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: