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:
und
, also Standardabweichung von
, 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:
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:
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")
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:
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:
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:
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 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:
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 |









