Korrelation zwischen Gruppen in R data.table

8

Gibt es eine Möglichkeit, die Korrelationen zwischen Werten elegant zu berechnen, wenn diese Werte von einer Gruppe in einer einzigen Spalte einer data.table gespeichert werden (abgesehen von der Umwandlung der data.table in eine Matrix)?

%Vor%

Etwas, das funktioniert, aber die Gruppennamen als Eingabe benötigt:

%Vor%

Ich suche eher nach etwas wie:

%Vor%

Aber das gibt mir nicht die Korrelation (en), nach denen ich suche.

Hier ist das gleiche Problem für eine Matrix mit den richtigen Ergebnissen.

%Vor%

Alle Kommentare oder Hilfe sehr geschätzt.

    
Bram Visser 15.03.2014, 08:38
quelle

3 Antworten

6

Es gibt keine einfache Möglichkeit, dies mit data.table zu tun. Der erste Weg, den Sie angegeben haben:

%Vor%

Ist wahrscheinlich der einfachste.

Eine Alternative ist reshape your data.table von "long" format bis "wide" format:

%Vor%

Update: Wenn Sie data.table version & gt; = 1.9.0 verwenden, können Sie stattdessen dcast.data.table verwenden, was viel schneller ist. Überprüfen Sie diesen Beitrag , um weitere Informationen zu erhalten.

%Vor%     
Scott Ritchie 15.03.2014, 09:00
quelle
4

Ich kenne keinen Weg, um es in Matrixform sofort zu bekommen, aber ich finde diese Lösung nützlich:

%Vor%

seit Sie mit einem geschmolzenen Datensatz begonnen haben und Sie mit einer geschmolzenen Darstellung der Korrelation enden.

Mit diesem Formular können Sie auch bestimmte Paare berechnen, insbesondere ist es Zeitverschwendung, beide Diagonalen zu berechnen. Zum Beispiel:

%Vor%

Alternativ funktioniert diese Form genauso gut für die Kreuzkorrelation zwischen zwei Mengen (d. h. den Block außerhalb der Diagonalen)

%Vor%

Offensichtlich, wenn Sie diese schließlich in Matrixform haben wollen, dann können Sie dcast oder dcast.data.table verwenden. Beachten Sie jedoch, dass Sie in den obigen Beispielen zwei Spalten mit demselben Namen haben, um das zu beheben, ist es eine Umbenennung wert sie in der j-Funktion. Für das ursprüngliche Problem:

%Vor%     
Corone 12.06.2014 14:25
quelle
4

Ich habe seither eine sogar einfache Alternative dafür gefunden. Du warst mit deinem dt[, cor(value, value), by="group"] Ansatz ziemlich nah dran. Was Sie wirklich brauchen, ist zuerst eine kartesische Verbindung zu den Daten zu machen und dann nach zu gruppieren. Ie.

%Vor%

Das hat den Vorteil, dass es die Reihen zusammenfügt (anstatt anzunehmen, dass sie die gleiche Länge haben). Sie können dies dann in eine Matrixform umwandeln oder es so lassen, wie es ist, als Heatmap in ggplot usw. zu plotten.

Vollständiges Beispiel

%Vor%     
Corone 14.10.2014 09:48
quelle

Tags und Links