Korrelation in R: Pearson & Spearman mit Matrix Beispiel

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

Es gibt zwei Hauptmethoden, um die Korrelation zwischen zwei Variablen zu berechnen.

  • Pearson: Parametrische Korrelation
  • Spearman: Nichtparametrische Korrelation

In diesem Tutorial lernen Sie

  • Pearson Korrelation
  • Spearman-Rangkorrelation
  • Korrelationsmatrix
  • Korrelationsmatrix visualisieren

Pearson Korrelation

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

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

mit

  • dh Standardabweichung von
  • dh Standardabweichung von

Die Korrelation liegt zwischen -1 und 1.

  • Ein Wert von 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 1 oder -1 kommt.

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

Spearman-Rangkorrelation

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

Die Rangkorrelation nach Spearman liegt immer zwischen -1 und 1, wobei ein Wert nahe der Extremität auf eine starke Beziehung hinweist. Es wird wie folgt berechnet:

mit angegeben die Kovarianzen zwischen Rang und. Der Nenner berechnet die Standardabweichungen.

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

cor(x, y, method)

Argumente :

  • x: Erster Vektor
  • y: Zweiter Vektor
  • Methode: Die Formel zur Berechnung der Korrelation. Drei Zeichenfolgenwerte:
    • "Pearson"
    • "kendall"
    • "Speerführer"

Ein optionales Argument kann hinzugefügt werden, wenn die Vektoren einen fehlenden Wert enthalten: use = "complete.obs"

Wir werden den BudgetUK-Datensatz verwenden. Dieser Datensatz enthält Angaben zur Budgetallokation britischer Haushalte zwischen 1980 und 1982. Es gibt 1519 Beobachtungen mit zehn Merkmalen, darunter:

  • wfood: Essen teilen, Geld teilen
  • wfuel: Kraftstoffausgaben teilen
  • wcloth: Budgetanteil für Kleidungsausgaben
  • Walc: Alkohol ausgeben
  • wtrans: Transportausgaben teilen
  • wother: Anteil anderer Warenausgaben
  • totexp: Gesamte Haushaltsausgaben in Pfund
  • Einkommen gesamtes Haushaltsnettoeinkommen
  • Alter: Alter des Haushalts
  • Kinder: 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 zuerst die Daten und schauen uns die Funktion glimpse () aus der dplyr-Bibliothek an.
  • Drei Punkte liegen über 500.000, daher haben wir beschlossen, sie auszuschließen.
  • Es ist üblich, eine monetäre Variable in log umzuwandeln. Dies hilft, die Auswirkungen von Ausreißern zu verringern und die Schiefe im Datensatz zu verringern.

Ausgabe:

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

Wir können den Korrelationskoeffizienten zwischen Einkommens- und Lebensmittelvariablen mit den Methoden "Pearson" und "Spearman" berechnen.

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

Ausgabe:

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

Ausgabe:

## [1] -0.2501252 

Korrelationsmatrix

Die bivariate Korrelation ist ein guter Anfang, aber mit multivariater Analyse können wir ein breiteres Bild erhalten. Eine Korrelation mit vielen Variablen ist in einer Korrelationsmatrix dargestellt . 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 nicht angeben müssen, welche Variablen verwendet werden sollen. 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 kategoriale Features löschen, bevor wir den Datenrahmen in cor () übergeben.

Eine Korrelationsmatrix ist symmetrisch, was bedeutet, dass die Werte über der Diagonale dieselben Werte wie die darunter liegenden haben. 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 codemat_1 <-as.dist(round(cor(data[,1:9]),2))mat_1

Code Erklärung

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

Ausgabe:

## 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 einigen 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 von conda herunterladen und den Code kopieren, 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 konvertieren, 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

Wir interessieren uns für das dritte Element, den 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 in dem Element namens P gespeichert
  • round (mat_2 [["P"]], 3): Runden Sie die Elemente mit drei Ziffern

Ausgabe:

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

Korrelationsmatrix visualisieren

Eine Wärmekarte 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")

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

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

Die Funktion ggcorr

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 keine Unterbrechung und der Farbverlauf ist kontinuierlich
  • Ziffern : Runden Sie den Korrelationskoeffizienten. Standardmäßig auf 2 eingestellt
  • niedrig : Kontrollieren Sie den unteren Farbgrad
  • Mitte : Kontrollieren Sie die mittlere Farbstufe
  • hoch : Kontrollieren Sie den hohen Farbgrad
  • geom : Steuern Sie die Form des geometrischen Arguments. Standardmäßig "Kachel"
  • label : Boolescher Wert. Zeigen Sie das Etikett an oder nicht. Standardmäßig auf "FALSE" gesetzt

Grundlegende Wärmekarte

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

library(GGally)ggcorr(data)

Code Erklärung

  • ggcorr (Daten): Es wird nur ein Argument benötigt, nämlich der Name des Datenrahmens. Variablen auf Faktorebene sind nicht im Diagramm enthalten.

Ausgabe:

Fügen Sie der Heatmap die Kontrolle hinzu

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: Brich die Legende mit 6 Rängen.
  • niedrig = "Stahlblau": Verwenden Sie hellere Farben für eine negative Korrelation
  • mid = "white": Verwenden Sie weiße Farben für die Korrelation der mittleren Bereiche
  • high = "darkred": Verwenden Sie dunkle Farben für eine positive Korrelation
  • geom = "Kreis": Verwenden Sie Kreis als Form der Fenster in der Heatmap. Die Größe des Kreises ist proportional zum absoluten Wert der Korrelation.

Ausgabe:

Fügen Sie der Heatmap ein Etikett hinzu

Mit GGally können wir ein Etikett in die Fenster einfügen.

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

Code Erklärung

  • label = TRUE: Addiert die Werte der Korrelationskoeffizienten innerhalb der Wärmekarte.
  • color = "grey50": Wählen Sie die Farbe, dh grau
  • label_size = 3: Setzen Sie die Größe des Etiketts auf 3

Ausgabe:

ggpairs

Schließlich stellen wir eine weitere Funktion aus der GGaly-Bibliothek vor. Ggpair. Es wird ein Diagramm in einem Matrixformat erstellt. Wir können drei Arten von Berechnungen in einem Diagramm anzeigen. Die Matrix ist eine Dimension, die der Anzahl der Beobachtungen entspricht. Der obere / untere Teil zeigt Fenster und in der Diagonale an. Wir können steuern, welche Informationen in jedem Teil der Matrix angezeigt werden sollen. 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
  • oben : Kontrollieren Sie die Kästchen über der Diagonale des Diagramms. Sie müssen die Art der Berechnungen oder des Diagramms angeben, die zurückgegeben werden sollen. Wenn stetig = "cor", bitten wir R, die Korrelation zu berechnen. Beachten Sie, dass das Argument eine Liste sein muss. Andere Argumente können verwendet werden. Weitere Informationen finden Sie in der [Vignette] ("http://ggobi.github.io/ggally/#custom_functions").
  • Unten : Kontrollieren Sie die Kästchen unterhalb der Diagonale.
  • Zuordnung : Zeigt die Ästhetik des Diagramms an. Zum Beispiel können wir das Diagramm für verschiedene Gruppen berechnen.

Bivariate Analyse mit ggpair mit Gruppierung

Das nächste Diagramm zeigt drei Informationen:

  • Die Korrelationsmatrix zwischen log_totexp, log_income, age und wtrans-Variable, gruppiert nach der Frage, ob der Haushalt ein Kind hat oder nicht.
  • Zeichnen Sie die Verteilung jeder Variablen nach Gruppen
  • 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

  • Spalten = c ("log_totexp", "log_income", "age", "wtrans"): Wählen Sie die Variablen aus, die im Diagramm angezeigt werden sollen
  • title = "Bivariate Analyse der Einnahmenausgaben des britischen Haushalts": Fügen Sie einen Titel hinzu
  • Upper = List (): Steuert den oberen Teil des Diagramms. Dh oberhalb der Diagonale
  • stetig = Wrap ("cor", Größe = 3)): Berechnen Sie den Korrelationskoeffizienten. Wir schließen das Argument kontinuierlich in die Funktion wrap () ein, um die Ästhetik des Diagramms zu steuern (dh Größe = 3). -Lower = list (): Steuern Sie den unteren Teil des Diagramms. Dh unterhalb der Diagonale.
  • Kontinuierlich = Umbruch ("glatt", Alpha = 0,3, Größe = 0,1): Fügen Sie ein Streudiagramm mit einem linearen Trend hinzu. Wir wickeln das Argument kontinuierlich in die Funktion wrap () ein, um die Ästhetik des Diagramms zu steuern (dh Größe = 0,1, Alpha = 0,3).
  • Zuordnung = aes (Farbe = Kinder_fac): Wir möchten, dass jeder Teil des Diagramms mit der Variablen children_fac gestapelt wird. Dies ist eine kategoriale Variable, die den Wert 1 annimmt, wenn der Haushalt keine Kinder hat, und 2, wenn dies nicht der Fall ist

Ausgabe:

Bivariate Analyse mit ggpair mit partieller Gruppierung

Die Grafik unten ist etwas anders. Wir ändern die Position des Mappings 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 der gleiche Code wie im vorherigen Beispiel, außer:
  • Zuordnung = aes (Farbe = Kinder_Fac): Verschieben Sie die Liste in obere = Liste (). Wir möchten nur, dass die Berechnung nach Gruppen im oberen Teil des Diagramms gestapelt wird.

Ausgabe:

Zusammenfassung

Wir können die Funktion in der folgenden Tabelle zusammenfassen:

Bibliothek

Zielsetzung

Methode

Code

Base

bivariate Korrelation

Pearson

cor(dfx2, method = "pearson")

Base

bivariate Korrelation

Spearman

cor(dfx2, method = "spearman")

Base

Multivariate Korrelation

Pearson

cor(df, method = "pearson")

Base

Multivariate Korrelation

Spearman

cor(df, method = "spearman")

Hmisc

P-Wert

rcorr(as.matrix(data[,1:9]))[["P"]]

Ggally

Wärmekarte

ggcorr(df)

Multivariate Diagramme

cf code below

Interessante Beiträge...