Ist es sinnvoll, die Pearson- oder Spearman-Korrelation zwischen zwei Booleschen Vektoren zu berechnen?


42

Es gibt zwei Boolesche Vektoren, die nur 0 und 1 enthalten. Wenn ich die Pearson- oder Spearman-Korrelation berechne, sind sie sinnvoll oder vernünftig?


2
Wenn beide Variablen dichotom sind, ist Pearson = Spearman = Kendalls Tau. Ja, es kann Sinn haben. Bei wirklich binären (booleschen) Daten ist es auch sinnvoll, "Pearson" für Daten ohne Zentrierung zu berechnen, das wäre Kosinus.
TTNPHNS

1
... und = Phi (standardisiertes Chi-Quadrat), das uns von der Skala zur Kontingenztabelle bringt.
TTNPHNS

Antworten:


34

Die Pearson und Spearman Korrelation definiert sind, solange Sie einige haben 0 s und einige 1 s für beide von zwei binären Variablen, sagen y und x . Es ist einfach, eine gute qualitative Vorstellung davon zu bekommen, was sie bedeuten, wenn man sich ein Streudiagramm der beiden Variablen überlegt. Natürlich gibt es nur vier Möglichkeiten (0,0),(0,1),(1,0),(1,1)(Daher ist es eine gute Idee, zu zittern, um identische Punkte für die Visualisierung auseinander zu rütteln.) Beispielsweise ist in jeder Situation, in der die beiden Vektoren identisch sind, vorbehaltlich einiger Nullen und einiger Einsen, per Definition y=x und die Korrelation ist notwendigerweise 1 . Ebenso ist es möglich, dass y=1x und dann die Korrelation 1 .

0101

01


1
Bedeutet das in dieser Situation, dass der Pearson- oder Spearman-Korrelationskoeffizient keine gute Ähnlichkeitsmetrik für diese beiden binären Vektoren ist?
Zhilong Jia

Ja in dem Sinne, dass es keine Ähnlichkeit misst und für alle Nullen oder alle Einsen für jeden Vektor undefiniert ist.
Nick Cox

Der Fall mit zwei identischen oder entgegengesetzten Vektoren ist mir nicht klar. Wenn x = c (1,1,1,1,1) und y = (0,0,0,0,0), dann ist y = 1-x und es klingt so, als ob Sie sagen, dass dies per Definition der Fall sein muss dies impliziert eine Korrelation von -1. Gleichermaßen bedeutet y = x-1 eine Korrelation von +1. Es gibt nur 1 Punkt (5 Wiederholungen) auf einem Streudiagramm, sodass jede gerade Linie durch das Diagramm gezogen werden kann. Es fühlt sich an, als ob die Korrelation in diesem Fall undefiniert ist. Entschuldigung, wenn ich falsch verstanden habe, was du meintest. @ NickCox
PM.

2
Nein; Ich sage das nicht, da ich in meinem ersten Satz darauf hinweise, dass Sie eine Mischung aus 0 und 1 haben müssen, damit die Korrelation definiert wird. Andernfalls ist die Korrelation undefiniert, wenn die SD einer der Variablen 0 ist. Aber ich habe meine Antwort überarbeitet, um das zweimal zu erwähnen.
Nick Cox

15

Es gibt spezielle Ähnlichkeitsmetriken für binäre Vektoren, wie zum Beispiel:

  • Jaccard-Needham
  • Würfel
  • Weihnachten
  • Russell-Rao
  • Sokal-Michener
  • Rogers-Tanimoto
  • Kulzinsky

usw.

Einzelheiten finden Sie hier .


5
Sicher gibt es viel zuverlässigere und umfassendere Referenzen. Beachten Sie Kulczyński und Tanimoto, auch wenn es darum geht, die Namen der Autoren richtig zu verstehen. Siehe z. B. Hubálek, Z. 1982. Assoziations- und Ähnlichkeitskoeffizienten, basierend auf binären (An- / Abwesenheits-) Daten: Eine Bewertung. Biological Reviews 57: 669–689.
Nick Cox

5
Sie haben 'Tanimoto' offensichtlich falsch geschrieben, aber 'Kulzinsky' wurde absichtlich vereinfacht. Ihre Referenz ist ohne Zweifel glaubwürdiger, aber nicht für jedermann zugänglich.
Digio

0

Ich würde nicht empfehlen, den Pearson-Korrelationskoeffizienten für binäre Daten zu verwenden, siehe das folgende Gegenbeispiel:

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

in den meisten Fällen geben beide eine 1

table(a,b)

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

aber die Korrelation zeigt dies nicht

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

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

Ein binäres Ähnlichkeitsmaß wie der Jaccard-Index zeigt jedoch eine viel höhere Assoziation:

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

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

Warum ist das? Sehen Sie hier die einfache bivariate Regression

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")))

Grafik unten (kleines Rauschen hinzugefügt, um die Anzahl der Punkte deutlicher zu machen) Bivariate Regressionsgerade

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.