Wie finde ich schnell heraus, ob zwei (große) Faktoren Umbenennungen sind?

9

Ich habe zwei Vektoren von Faktoren und vermute, dass sie die gleiche Information bis zur Umbenennung tragen. Wie kann ich herausfinden, ob das korrekt ist?

Mein Problem ist, dass beide Vektoren ziemlich lang sind (200.000 Einträge), mit einer großen Anzahl von Ebenen (4.000). Einige Ebenen sind sehr häufig, aber es gibt einen "langen Schwanz" von Ebenen, die nur einmal vorkommen.

Hier ist ein reproduzierbares Beispiel (sorry, ich konnte keine Möglichkeit finden es zu kompaktifizieren und trotzdem die Eigenschaften meiner Daten zu zeigen):

%Vor%

Nach dieser Übung sind factor.1 und factor.2 einfach Umbenennungen voneinander. Wie können wir herausfinden, ob dies für neue Vektoren gilt?

Dinge, die nicht funktionieren :

  1. Die interne Integer-Codierung muss nicht identisch sein. Überprüfen Sie einfach, ob cor(as.numeric(factor.1),as.numeric(factor.2))==1 nicht funktioniert.

  2. Ich habe versucht zu prüfen, ob zu jeder Faktorstufe von factor.1 genau eine Faktorstufe von factor.2 gehört und umgekehrt. Leider dauert dies viel zu lange, in der Größenordnung von Stunden:

    %Vor%
  3. Wenn wir factor.1 in einem multinomialen Modell mit factor.2 als Prädiktor perfekt anpassen können und umgekehrt, tragen beide die gleiche Information. Leider liefert nnet::multinom(factor.1~factor.2) den gefürchteten Fehler "Kann einen Vektor der Größe XX nicht zuordnen". randomForest::randomForest() , die uns zumindest eine probabilistische Antwort geben würde, kann nicht mit Faktoren mit mehr als 53 Ebenen umgehen.

  4. Wir könnten table(factor.1,factor.2) ausführen und prüfen, ob jede Zeile genau einen Eintrag ungleich Null hat. Was wiederum nicht genug Speicher hat.

Stephan Kolassa 08.09.2015, 16:10
quelle

1 Antwort

1

Die erste Funktion zählt die Anzahl der eindeutigen Elemente ihres Arguments und die zweite gibt TRUE zurück, wenn für jede Ebene von y eine Ebene von x existiert. Wenn dies für Faktor 1 und Faktor 2 gilt und wenn sie die gleiche Anzahl von Ebenen verwenden, ist eine eine Umbenennung der anderen. Mit den gegebenen Daten kehrt es sofort zurück, so dass es ziemlich schnell scheint. Die letzte Zeile ist eine schnellere Version einer Ihrer Ideen. Verwenden Sie eines der beiden.

%Vor%     
G. Grothendieck 08.09.2015, 17:15
quelle

Tags und Links