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?
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?
Antworten:
Die Pearson und Spearman Korrelation definiert sind, solange Sie einige haben s und einige s für beide von zwei binären Variablen, sagen und . 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 (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 und die Korrelation ist notwendigerweise . Ebenso ist es möglich, dass und dann die Korrelation .
Es gibt spezielle Ähnlichkeitsmetriken für binäre Vektoren, wie zum Beispiel:
usw.
Einzelheiten finden Sie hier .
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)