Mahalonobis-Abstand in R, Fehler: System ist rechenmäßig singulär

7

Ich möchte multivariate Entfernung von einer Menge von Punkten zum Schwerpunkt dieser Punkte berechnen. Mahalanobis-Abstand scheint dafür geeignet zu sein. Ich erhalte jedoch einen Fehler (siehe unten).

Kann mir jemand sagen, warum ich diesen Fehler bekomme und ob es eine Möglichkeit gibt, daran herumzuarbeiten?

Wenn Sie die Koordinatendaten und die verknüpfte Umgebungsdaten , können Sie den folgenden Code ausführen.

%Vor%     
Pascal 02.03.2014, 22:21
quelle

2 Antworten

17

Der Mahalanobis-Abstand erfordert, dass Sie das Inverse der Kovarianzmatrix berechnen. Die Funktion mahalanobis verwendet intern solve , was eine numerische Methode zur Berechnung der Umkehrung ist. Wenn jedoch einige der Zahlen, die bei der inversen Berechnung verwendet werden, sehr klein sind, wird angenommen, dass sie Null sind, was zu der Annahme führt, dass es sich um eine singuläre Matrix handelt. Deshalb gibt es an, dass sie rechnerisch Singular sind, weil die Matrix bei einer anderen Toleranz möglicherweise nicht singulär ist.

Die Lösung besteht darin, die Toleranz für die Annahme zu setzen, dass sie Null ist. Glücklicherweise können Sie mit mahalanobis diesen Parameter ( tol ) an solve :

übergeben %Vor%     
nograpes 02.03.2014, 23:45
quelle
6

Mahalanobis verwendet die Kovarianzmatrix cov (genauer gesagt die Umkehrung davon), um das Koordinatensystem zu transformieren, und berechnet dann die euklidische Distanz in den neuen Koordinaten. Eine Standardreferenz ist Duda & amp; Hart "Musterklassifizierung und Szenenerkennung"

Sieht so aus, als ob Ihre Cov-Matrix einzigartig ist. Vielleicht gibt es in "dat" linear abhängige Spalten, die unnötig sind? Das Einstellen der Toleranz auf Null hilft nicht, wenn Die Kovarianzmatrix ist wirklich einzigartig. Das erste, was zu tun ist, ist stattdessen, nach Spalten zu suchen, bei denen es sich um eine Neuskalierung einer anderen Spalte handeln könnte, oder es könnte nur eine Summe von 2 oder mehr anderen Spalten sein und sie entfernen. Solche Spalten sind für die Mahalanobis-Distanz überflüssig.

Übrigens, da die Mahalanobis-Distanz effektiv eine Neuskalierung und Rotation ist, erscheint das Aufrufen der Skalierungsfunktion überflüssig - warum willst du das auch?

    
John Mark 02.03.2014 23:37
quelle

Tags und Links