Correlazione in R: matrice di correlazione di Pearson e Spearman
Correlazione bivariata in R
Una relazione bivariata descrive una relazione, o correlazione, tra due variabili in R. In questo tutorial discuteremo il concetto di correlazione e mostreremo come puรฒ essere utilizzato per misurare la relazione tra due variabili qualsiasi in R.
Correlazione nella programmazione R
Esistono due metodi principali per calcolare la correlazione tra due variabili nella programmazione R:
- Pearson: Correlazione parametrica
- Spearman: Correlazione non parametrica
Matrice di correlazione di Pearson in R
Il metodo di correlazione di Pearson viene solitamente utilizzato come controllo primario per la relazione tra due variabili.
La frequenza delle onde ultrasoniche รจ misurata in kilohertz (kHz). Diverse frequenze puntano la grassa in modi leggermente diversi. Le frequenze piรน basse raggiungono la grassa piรน profonda, mentre le frequenze piรน alte lavorano piรน vicino alla superficie. coefficiente di correlazione, , รจ una misura della forza del lineare relazione tra due variabili e . Viene calcolato come segue:
con
, cioรจ la deviazione standard di
, cioรจ la deviazione standard di
La correlazione varia tra -1 e 1.
- Un valore vicino o uguale a 0 implica una relazione lineare scarsa o assente tra e .
- Al contrario, piรน si avvicina a 1 o -1, piรน forte รจ la relazione lineare.
Possiamo calcolare il test t come segue e controllare la tabella di distribuzione con un grado di libertร pari a:
Correlazione del rango di Spearman in R
Una correlazione di rango ordina le osservazioni in base al rango e calcola il livello di somiglianza tra i ranghi. Una correlazione di rango ha il vantaggio di essere robusta rispetto ai valori anomali e non รจ collegata alla distribuzione dei dati. Si noti che una correlazione di rango รจ adatta per la variabile ordinale.
La correlazione del rango di Spearman, , รจ sempre compresa tra -1 e 1 con un valore vicino all'estremitร indica una relazione forte. Viene calcolato come segue:
con dichiarate le covarianze tra rango e . Il denominatore calcola le deviazioni standard.
In R, possiamo usare la funzione cor(). Sono necessari tre argomenti, e il metodo.
cor(x, y, method)
argomenti:
- x: Primo vettore
- y: Secondo vettore
- metodo: La formula utilizzata per calcolare la correlazione. Tre valori stringa:
- โperoneโ
- โKendallโ
- โlanciereโ
ร possibile aggiungere un argomento facoltativo se i vettori contengono valori mancanti: use = โcomplete.obsโ
Utilizzeremo il set di dati BudgetUK. Questo set di dati riporta la dotazione di bilancio delle famiglie britanniche tra il 1980 e il 1982. Sono presenti 1519 osservazioni con dieci caratteristiche, tra cui:
- wfood: condividere la spesa per il cibo
- wcarburante: condividere la spesa per il carburante
- wcloth: quota di budget per la spesa in abbigliamento
- Walc: condividere la spesa per l'alcol
- wtrans: condividere la spesa per i trasporti
- altro: quota di spesa per altri beni
- totex: spesa totale delle famiglie in sterline
- reddito: reddito familiare netto totale
- : etร del nucleo familiare
- bambini: Numero di bambini
Esempio
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)
Spiegazione del codice
- Per prima cosa importiamo i dati e diamo un'occhiata con la funzione scorce() dalla libreria dplyr.
- Tre punti sono superiori a 500, quindi abbiamo deciso di escluderli.
- ร una pratica comune convertire una variabile monetaria in log. Aiuta a ridurre l'impatto dei valori anomali e diminuisce l'asimmetria nel set di dati.
Produzione:
## 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, ...
Possiamo calcolare il coefficiente di correlazione tra le variabili reddito e cibo con i metodi โpearsonโ e โspearmanโ.
cor(data$log_income, data$wfood, method = "pearson")
Produzione:
## [1] -0.2466986
cor(data$log_income, data$wfood, method = "spearman")
Produzione:
## [1] -0.2501252
Matrice di correlazione in R
La correlazione bivariata รจ un buon inizio, ma possiamo ottenere un quadro piรน ampio con lโanalisi multivariata. Una correlazione con molte variabili รจ raffigurata all'interno di a matrice di correlazione. Una matrice di correlazione รจ una matrice che rappresenta la correlazione di coppia di tutte le variabili.
La funzione cor() restituisce una matrice di correlazione. L'unica differenza con la correlazione bivariata รจ che non รจ necessario specificare quali variabili. Per impostazione predefinita, R calcola la correlazione tra tutte le variabili.
Si noti che non รจ possibile calcolare una correlazione per la variabile fattore. Dobbiamo assicurarci di eliminare la funzionalitร categorica prima di passare il frame di dati all'interno di cor().
Una matrice di correlazione รจ simmetrica, il che significa che i valori sopra la diagonale hanno gli stessi valori di quello sotto. ร piรน visivo mostrare metร della matrice.
Escludiamo children_fac perchรฉ รจ una variabile a livello di fattore. cor non esegue la correlazione su una variabile categoriale.
# 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
Spiegazione del codice
- cor(dati): Visualizza la matrice di correlazione
- round(dati, 2): Arrotonda la matrice di correlazione con due decimali
- as.dist(): Mostra solo la seconda metร
Produzione:
## 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
Livello di significativitร
Il livello di significativitร รจ utile in alcune situazioni quando utilizziamo il metodo Pearson o Spearman. La funzione rcorr() della libreria Hmisc calcola per noi il valore p. Possiamo scaricare la libreria da contea e copia il codice per incollarlo nel terminale:
conda install -c r r-hmisc
rcorr() richiede che un frame di dati venga memorizzato come matrice. Possiamo convertire i nostri dati in una matrice prima di calcolare la matrice di correlazione con il valore p.
library("Hmisc")
data_rcorr <-as.matrix(data[, 1: 9])
mat_2 <-rcorr(data_rcorr)
# mat_2 <-rcorr(as.matrix(data)) returns the same output
L'oggetto lista mat_2 contiene tre elementi:
- r: Output della matrice di correlazione
- n: Numero di osservazioni
- P: valore p
A noi interessa il terzo elemento, il valore p. ร comune mostrare la matrice di correlazione con il valore p anzichรฉ con il coefficiente di correlazione.
p_value <-round(mat_2[["P"]], 3) p_value
Spiegazione del codice
- mat_2[[โPโ]]: I valori p sono memorizzati nell'elemento chiamato P
- giro(mat_2[[โPโ]], 3): Arrotonda gli elementi con tre cifre
Produzione:
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
Visualizzazione della matrice di correlazione in R
Una mappa termica รจ un altro modo per mostrare una matrice di correlazione. La libreria GGally รจ un'estensione di ggplot2. Attualmente non รจ disponibile nella libreria conda. Possiamo installarlo direttamente nella console.
install.packages("GGally")
La libreria include diverse funzioni per mostrare le statistiche riassuntive come la correlazione e la distribuzione di tutte le variabili in a matrice.
La funzione ggcorr() ha molti argomenti. Introdurremo solo gli argomenti che utilizzeremo nel tutorial:
La funzione ggcorr
ggcorr(df, method = c("pairwise", "pearson"),
nbreaks = NULL, digits = 2, low = "#3B9AB2",
mid = "#EEEEEE", high = "#F21A00",
geom = "tile", label = FALSE,
label_alpha = FALSE)
Argomenti:
- df: set di dati utilizzato
- metodo: Formula per calcolare la correlazione. Per impostazione predefinita, vengono calcolati pairwise e Pearson
- nbreaks: Restituisce un intervallo categoriale per la colorazione dei coefficienti. Per impostazione predefinita, nessuna interruzione e la sfumatura di colore รจ continua
- cifre: Arrotonda il coefficiente di correlazione. Per impostazione predefinita, impostato su 2
- Basso: controlla il livello inferiore della colorazione
- e lancio di program changes: controlla il livello medio della colorazione
- alto: Controlla il livello elevato della colorazione
- geome: controlla la forma dell'argomento geometrico. Per impostazione predefinita, "piastrella"
- etichetta: valore booleano. Visualizzare o meno l'etichetta. Per impostazione predefinita, impostato su "FALSE".
Mappa termica di base
La trama piรน semplice del pacchetto รจ una mappa termica. La legenda del grafico mostra un gradiente di colore da โ 1 a 1, con il colore caldo che indica una forte correlazione positiva e il colore freddo, una correlazione negativa.
library(GGally) ggcorr(data)
Spiegazione del codice
- ggcorr(dati): รจ necessario un solo argomento, ovvero il nome del frame di dati. Le variabili a livello di fattore non sono incluse nel grafico.
Produzione:
Aggiunta di controllo alla mappa di calore
Possiamo aggiungere piรน controlli al grafico:
ggcorr(data,
nbreaks = 6,
low = "steelblue",
mid = "white",
high = "darkred",
geom = "circle")
Spiegazione del codice
- ninterruzioni=6: spezza la leggenda con 6 gradi.
- basso = โbluacciaioโ: utilizza colori piรน chiari per la correlazione negativa
- metร = โbiancoโ: utilizzare i colori bianchi per la correlazione dei range medi
- alto = โrosso scuroโ: utilizza colori scuri per una correlazione positiva
- geom = โcerchioโ: Usa il cerchio come forma delle finestre nella mappa termica. La dimensione del cerchio รจ proporzionale al valore assoluto della correlazione.
Produzione:
Aggiunta di un'etichetta alla mappa termica
GGally ci permette di aggiungere un'etichetta all'interno delle finestre:
ggcorr(data,
nbreaks = 6,
label = TRUE,
label_size = 3,
color = "grey50")
Spiegazione del codice
- etichetta = VERO: Sommare i valori dei coefficienti di correlazione all'interno della mappa termica.
- colore = โgrigio50โ: Scegli il colore, ovvero grigio
- etichetta_dimensione = 3: imposta la dimensione dell'etichetta su 3
Produzione:
La funzione ggpairs
Infine, introduciamo un'altra funzione della libreria GGaly. Ggpair. Produce un grafico in formato matrice. Possiamo visualizzare tre tipi di calcolo all'interno di un grafico. La matrice รจ una dimensione, con uguale al numero di osservazioni. La parte superiore/inferiore visualizza finestre e nella diagonale. Possiamo controllare quali informazioni vogliamo mostrare in ogni parte della matrice. La formula per ggpair รจ:
ggpair(df, columns = 1: ncol(df), title = NULL,
upper = list(continuous = "cor"),
lower = list(continuous = "smooth"),
mapping = NULL)
Argomenti:
- df: set di dati utilizzato
- colonne: Seleziona le colonne per disegnare la trama
- titolo: include un titolo
- superiore: Controlla le caselle sopra la diagonale del grafico. ร necessario fornire il tipo di calcoli o grafico da restituire. Se continuous = "cor", chiediamo a R di calcolare la correlazione. Nota che l'argomento deve essere un elenco. Possono essere utilizzati altri argomenti, vedere la [vignetta]("http://ggobi.github.io/ggally/#custom_functions") per maggiori informazioni.
- Abbassare: Controlla le caselle sotto la diagonale.
- Mappatura: Indica l'estetica del grafico. Ad esempio, possiamo calcolare il grafico per diversi gruppi.
Analisi bivariata con ggpair con raggruppamento
Il grafico successivo traccia tre informazioni:
- La matrice di correlazione tra log_totexp, log_reddito, etร e la variabile wtrans raggruppata in base al fatto che la famiglia abbia o meno un figlio.
- Traccia la distribuzione di ciascuna variabile per gruppo
- Visualizza il grafico a dispersione con l'andamento per gruppo
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))
Spiegazione del codice
- colonne = c("log_totexp", "log_reddito", "etร ", "wtrans"): Scegli le variabili da mostrare nel grafico
- title = โAnalisi bivariata della spesa delle entrate delle famiglie britannicheโ: aggiungi un titolo
- superiore = elenco(): controlla la parte superiore del grafico. Cioรจ sopra la diagonale
- continuo = avvolgere("cor", dimensione = 3)): Calcola il coefficiente di correlazione. Avvolgiamo l'argomento continuo all'interno della funzione wrap() per controllare l'estetica del grafico (cioรจ dimensione = 3) -lower = list(): controlla la parte inferiore del grafico. Cioรจ sotto la diagonale.
- continuo = avvolgere("liscio",alfa = 0.3,dimensione=0.1): aggiunge un grafico a dispersione con un andamento lineare. Avvolgiamo l'argomento continuo all'interno della funzione wrap() per controllare l'estetica del grafico (ad esempio size=0.1, alpha=0.3)
- mappatura = aes(colore = bambini_fac): Vogliamo che ogni parte del grafico sia impilata dalla variabile children_fac, che รจ una variabile categoriale che assume il valore 1 se la famiglia non ha figli e 2 altrimenti
Produzione:
Analisi bivariata con ggpair con raggruppamento parziale
Il grafico qui sotto รจ leggermente diverso. Cambiamo la posizione della mappatura all'interno dell'argomento superiore.
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))
)
Spiegazione del codice
- Stesso codice dell'esempio precedente tranne che per:
- mapping = aes(color = children_fac): sposta la lista in upper = list(). Vogliamo solo il calcolo impilato per gruppo nella parte superiore del grafico.
Produzione:
Sintesi
- Una relazione bivariata descrive una relazione, o correlazione, tra due variabili in R.
- Esistono due metodi principali per calcolare la correlazione tra due variabili in R Programmazione: Pearson e Spearman.
- Il metodo di correlazione di Pearson viene solitamente utilizzato come controllo primario per la relazione tra due variabili.
- Una correlazione di rango ordina le osservazioni in base al rango e calcola il livello di somiglianza tra i ranghi.
- La correlazione del rango di Spearman, , รจ sempre compresa tra -1 e 1 con un valore vicino all'estremitร indica una relazione forte.
- Una matrice di correlazione รจ una matrice che rappresenta la correlazione di coppia di tutte le variabili.
- Il livello di significativitร รจ utile in alcune situazioni quando utilizziamo il metodo Pearson o Spearman.
Possiamo riassumere tutte le funzioni di Correlazione in R nella tabella seguente:
| Biblioteca | Obiettivo | Metodo | Code |
|---|---|---|---|
| Tavola XY | correlazione bivariata | Pearson |
cor(dfx2, method = "pearson") |
| Tavola XY | correlazione bivariata | Spearman |
cor(dfx2, method = "spearman") |
| Tavola XY | Correlazione multivariata | Pearson |
cor(df, method = "pearson") |
| Tavola XY | Correlazione multivariata | Spearman |
cor(df, method = "spearman") |
| Hmisc | Valore P |
rcorr(as.matrix(data[,1:9]))[["P"]] |
|
| Ggalmente | mappa di calore |
ggcorr(df) |
|
| Grafici multivariati |
cf code below |









