È significativo calcolare la correlazione di Pearson o Spearman tra due vettori booleani?


42

Esistono due vettori booleani, che contengono solo 0 e 1. Se calcolo la correlazione di Pearson o Spearman, sono significativi o ragionevoli?


2
Se entrambe le variabili sono dicotomiche, Pearson = Spearman = la tau di Kendall. Sì, potrebbe avere senso. Con dati veramente binari (booleani) è anche logico calcolare "Pearson" su dati senza centratura, che sarebbe coseno.
ttnphns,

1
... e = Phi (Chi-quadrato standardizzato) che ci porta dalla scala alla tabella di contingenza.
ttnphns,

Risposte:


34

La correlazione Pearson e Spearman sono definiti finchè avete alcune 0 s e alcuni 1 s per entrambi due variabili binarie, dire y ed x . È facile avere una buona idea qualitativa di cosa significano pensando a un diagramma a dispersione delle due variabili. Chiaramente, ci sono solo quattro possibilità (0,0),(0,1),(1,0),(1,1)(in modo che il jitter di scuotere punti identici a parte per la visualizzazione sia una buona idea). Ad esempio, in qualsiasi situazione in cui i due vettori sono identici, soggetti ad avere alcuni 0 e alcuni 1 in ciascuno, quindi per definizione y=x e la correlazione è necessariamente 1 . Allo stesso modo, è possibile che y=1x e quindi la correlazione sia 1 .

0101

01


1
Ciò significa che in questa situazione, il coefficiente di correlazione di Pearson o Spearman non è una buona metrica di somiglianza per questi due vettori binari?
Zhilong Jia,

Sì, nel senso che non misura la somiglianza ed è indefinito per tutti gli 0 o tutti gli 1 per entrambi i vettori.
Nick Cox,

Il caso di 2 vettori identici o "opposti" non mi è chiaro. Se x = c (1,1,1,1,1) e y = (0,0,0,0,0) allora y = 1-x e sembra che tu stia dicendo che questo deve essere il caso per definizione , implicando una correlazione di -1. Ugualmente y = x-1 che implica una correlazione di +1. C'è solo 1 punto (5 replicati) su un diagramma a dispersione in modo che qualsiasi linea retta possa essere tracciata attraverso di essa. Sembra che la correlazione non sia definita in questo caso. Scusa se ho capito male cosa intendevi. @NickCox
PM.

2
No; Non sto dicendo che, come faccio notare nella mia prima frase, è necessario disporre di un mix di 0 e 1 per definire la correlazione. Altrimenti se la SD di entrambe le variabili è 0, la correlazione non è definita. Ma ho modificato la mia risposta per menzionarla due volte.
Nick Cox,

15

Esistono metriche di somiglianza specializzate per i vettori binari, come:

  • Jaccard-Needham
  • Dado
  • periodo natalizio
  • Russell-Rao
  • Sokal-Michener
  • Rogers-Tanimoto
  • Kulzinsky

eccetera.

Per i dettagli, vedere qui .


5
Sicuramente ci sono molti riferimenti più affidabili e completi. Anche a livello di ottenere i nomi degli autori giusti, nota Kulczyński e Tanimoto. Vedi ad esempio Hubálek, Z. 1982. Coefficienti di associazione e somiglianza, basati su dati binari (presenza-assenza): una valutazione. Recensioni biologiche 57: 669–689.
Nick Cox,

5
Hanno ovviamente sbagliato a scrivere "Tanimoto" ma "Kulzinsky" è stato volutamente semplificato. Il tuo riferimento è più credibile senza dubbio ma non è accessibile a tutti.
Digio,

0

Non consiglierei di usare il coefficiente di correlazione di Pearson per i dati binari, vedere il seguente contro esempio:

set.seed(10) 
a = rbinom(n=100, size=1, prob=0.9) 
b = rbinom(n=100, size=1, prob=0.9)

nella maggior parte dei casi entrambi danno un 1

table(a,b)

> table(a,b)
   b
a    0  1
  0  0  3
  1  9 88

ma la correlazione non mostra questo

cor(a, b, method="pearson")

> cor(a, b, method="pearson")
[1] -0.05530639

Una misura di somiglianza binaria come l' indice di Jaccard mostra tuttavia un'associazione molto più elevata:

install.packages("clusteval")
library('clusteval')
cluster_similarity(a,b, similarity="jaccard", method="independence")

> cluster_similarity(a,b, similarity="jaccard", method="independence")
[1] 0.7854966

Perchè è questo? Vedi qui la semplice regressione bivariata

plot(jitter(a, factor = .25), jitter(b, factor = .25), xlab="a", ylab="b", pch=15, col="blue", ylim=c(-0.05,1.05), xlim=c(-0.05,1.05))
abline(lm(a~b), lwd=2, col="blue")
text(.5,.9,expression(paste(rho, " = -0.055")))

trama sotto (piccolo rumore aggiunto per rendere più chiaro il numero di punti) Linea di regressione bivariata

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.