Nehmen wir an, wir haben zwei numerische Vektoren x
und y
. Der Pearson-Korrelationskoeffizient zwischen x
und y
ist gegeben durch
cor (x, y)
Wie kann ich automatisch nur eine Teilmenge von x
und y
in der Berechnung berücksichtigen (zB 90%), um den Korrelationskoeffizienten zu maximieren?
Wenn Sie wirklich dies tun möchten (entfernen Sie die größten (absoluten) Residuen), dann können wir das lineare Modell zur Schätzung der kleinsten Quadrate und der zugehörigen Residuen verwenden und dann die mittlere n% auswählen der Daten. Hier ist ein Beispiel:
Zuerst einige Dummy-Daten generieren:
%Vor%Als nächstes passen wir das lineare Modell an und extrahieren die Residuen:
%Vor% Die Funktion quantile()
kann uns die erforderlichen Quantile der Residuen geben. Sie haben vorgeschlagen, 90% der Daten beizubehalten, also wollen wir die oberen und unteren 0,05 Quantile:
Wählen Sie diese Beobachtungen mit Residuen in den mittleren 90% der Daten aus:
%Vor%Wir können dies dann visualisieren, wobei die roten Punkte diejenigen sind, die wir beibehalten werden:
%Vor%
Die Korrelationen für die vollständigen Daten und die ausgewählte Teilmenge sind:
%Vor%Seien Sie sich bewusst, dass wir hier sehr gute Daten rauswerfen, weil wir nur die 5% mit den größten positiven Residuen und die 5% mit dem größten Negativ auswählen. Eine Alternative ist die Auswahl der 90% mit kleinsten absoluten Residuen:
%Vor%Bei dieser etwas anderen Teilmenge ist die Korrelation etwas geringer:
%Vor% Ein weiterer Punkt ist, dass wir selbst dann gute Daten rauswerfen. Sie sollten sich Cooks Entfernung als Maß für die Stärke der Ausreißer ansehen und nur die Werte oberhalb einer bestimmten Cook-Distanz verwerfen. Wikipedia hat Informationen über Cooks Entfernung und vorgeschlagene Schwellenwerte. Die Funktion cooks.distance()
kann verwendet werden, um die Werte von mod
:
und wenn Sie die auf Wikipedia vorgeschlagenen Schwellenwerte berechnen und nur diejenigen entfernen, die den Schwellenwert überschreiten. Für diese Daten:
%Vor%keiner der Cook-Abstände überschreitet die vorgeschlagenen Schwellenwerte (nicht überraschend angesichts der Art, wie ich die Daten generiert habe.)
Nachdem Sie das alles gesagt haben, warum wollen Sie das tun? Wenn Sie nur versuchen, Daten loszuwerden, um eine Korrelation zu verbessern oder eine signifikante Beziehung zu generieren, klingt das ein bisschen fischig und etwas wie Daten, die mich ausbaggern.
Die Verwendung von method = "spearman"
in cor
ist robust gegenüber Kontaminationen und einfach zu implementieren, da nur cor(x, y)
durch cor(x, y, method = "spearman")
ersetzt werden muss.
Wenn wir die Prasad-Analyse wiederholen, aber stattdessen Spearman-Korrelationen verwenden, stellen wir fest, dass die Spearman-Korrelation in der Tat robust gegenüber der Kontamination ist und die zugrundeliegende Null-Korrelation wiederherstellt:
%Vor%Das mag dem OP schon klar gewesen sein, aber nur um sicher zu gehen ... Sie müssen vorsichtig sein, denn der Versuch, die Korrelation zu maximieren, kann dazu tendieren, Ausreißer einzubeziehen. (@Gavin hat diesen Punkt in seiner Antwort / Kommentare berührt.) Ich würde zuerst sein, um Ausreißer zu entfernen, dann um eine Korrelation zu berechnen. Allgemeiner wollen wir eine Korrelation zu Ausreißern berechnen (und es gibt viele solcher Methoden in R).
Um dies drastisch zu veranschaulichen, erstellen wir zwei Vektoren, die unkorreliert sind:
Nun fügen wir einen Ausreißerpunkt hinzu y
:
Jetzt ist die Korrelation der beliebigen Teilmenge, die den Ausreißerpunkt enthält, nahezu 100%, und die Korrelation einer ausreichend großen Teilmenge, die den Ausreißer ausschließt, wird nahe bei Null liegen. Insbesondere
%Vor% Wenn Sie eine "wahre" Korrelation schätzen möchten, die nicht auf Ausreißer reagiert, können Sie das (500,500)
-Paket ausprobieren:
Sie können mit Parametern von robust
herumspielen, um zu entscheiden, wie Sie die Daten trimmen.
UPDATE: Es gibt auch covRob
(robuste lineare Regression) im Paket rlm
.
Hier ist eine weitere Möglichkeit, die Ausreißer zu erfassen. Mit einem ähnlichen Schema wie Prasad:
%Vor%In den anderen Antworten steckte 500 am Ende von x und y als Ausreißer. Das kann oder kann nicht zu einem Speicherproblem mit Ihrem Computer führen, also habe ich es auf 4 reduziert, um das zu vermeiden.
%Vor%Hier sind die Bilder von den x1, y1, xy1 Daten:
Tags und Links r statistics correlation