2012-05-23 15 views
10

Ich war überrascht, herauszufinden, dass clara von library(cluster) ermöglicht NAs. Die Funktionsdokumentation sagt jedoch nichts darüber aus, wie sie mit diesen Werten umgeht.Clustering mit NA-Werten in R

Also meine Fragen sind:

  1. Wie clara NAs behandelt?
  2. Kann dies irgendwie für kmeans (Nas nicht erlaubt) verwendet werden?

[Update] So habe ich gefunden Codezeilen in clara Funktion:

inax <- is.na(x) 
valmisdat <- 1.1 * max(abs(range(x, na.rm = TRUE))) 
x[inax] <- valmisdat 

den Wertersatz von valmisdat Sie fehlt. Ich bin mir nicht sicher, ob ich den Grund verstehe, eine solche Formel zu verwenden. Irgendwelche Ideen? Wäre es "natürlicher", die NA für jede Spalte separat zu behandeln, vielleicht mit Mittelwert/Median?

Antwort

7

Obwohl nicht explizit angegeben, glaube ich, dass NA in der Weise behandelt werden, die in der ?daisy Hilfeseite beschrieben wird. Der Detailschnitt hat:

in dem Daisy-Algorithmus, fehlende Werte in einer Reihe von x sind in den Unähnlichkeiten enthält diese Zeile beinhalten.

intern den gleichen Code Gegeben wird von clara() verwendet werden wird, das ist, wie ich, dass NA s in den Daten verstehen gehandhabt werden können - sie sind in der Berechnung nur nehmen nicht teil. Dies ist in solchen Fällen eine vernünftige Standardmethode und wird beispielsweise bei der Definition des generalisierten Ähnlichkeitskoeffizienten von Gower verwendet.

aktualisieren Die C Quellen für clara.c zeigen deutlich, dass dies (die oben) ist, wie NA s durch clara() (Linien 350-356 in ./src/clara.c) behandelt werden:

if (has_NA && jtmd[j] < 0) { /* x[,j] has some Missing (NA) */ 
     /* in the following line (Fortran!), x[-2] ==> seg.fault 
      {BDR to R-core, Sat, 3 Aug 2002} */ 
     if (x[lj] == valmd[j] || x[kj] == valmd[j]) { 
     continue /* next j */; 
     } 
    } 
+0

Gleiche Codezeilen, um fehlende Werte in 'daisy' wie in' clara' Funktion zu behandeln (siehe mein Frage-Update). –

+0

@ danas.zuokas Ich bin mir nicht sicher, wie hilfreich es ist, willkürliche Codezeilen aus den Quellen zu ziehen, von denen Sie denken, dass sie mit der Frage zusammenhängen. Sie müssen sowohl den R-Code als auch den C-Code studieren. "valmisdat" ist der Wert, der verwendet wird, um fehlende Daten ("NA") im C-Code anzuzeigen, anstatt direkt "NA" zu verwenden. Wenn Sie sich den C-Code anschauen, werden Sie sehen, dass er Vergleiche ignoriert, bei denen eine Variable einen fehlenden Wert für das eine oder das andere oder für beide Stichproben hat, für die die Unähnlichkeit berechnet wird. Siehe die aktualisierte Antwort für den Zeiger auf den Code. –

+0

Danke dir, Gavin! –

3

Nicht sicher, ob kmeans umgehen kann fehlende Daten durch Ignorieren der fehlenden Werte in einer Zeile

Es gibt zwei Schritte in kmeans;

  1. Berechnen der Entfernung zwischen einer Beobachtung und ursprünglichen Clustermittel.
  2. Aktualisieren des neuen Clustermittelwerts basierend auf den neu berechneten Abständen.

Wenn wir fehlende Daten in unseren Beobachtungen: Schritt 1 kann durch Einstellen der Distanzmetrik in geeigneter Weise, wie in dem clara/pam/daisy Paket behandelt werden. Aber Schritt 2 kann nur durchgeführt werden, wenn wir für jede Spalte einer Beobachtung einen Wert haben. Daher könnte die Imputation die nächstbeste Option für kmeans sein, um fehlende Daten zu verarbeiten.

0

Mit Blick auf den Clara c-Code, habe ich festgestellt, dass im Clara-Algorithmus, wenn fehlende Werte in den Beobachtungen, die Summe der Quadrate proportional zur Anzahl der fehlenden Werte "reduziert" ist, was ich denke, ist falsch! Zeile 646 von clara.c ist wie "dsum * = (nobs/pp)" was zeigt, dass es die Anzahl der nicht fehlenden Werte in jedem Beobachtungspaar (nobs) zählt, teilt es durch die Anzahl der Variablen (pp) und multipliziert dies mit die Summe der Quadrate. Ich denke, es muss auf andere Weise gemacht werden, d.h. "dsum * = (pp/nobs)".

+1

Sie können einen [Link bearbeiten] (https://stackoverflow.com/posts/35925440/edit) verwenden, um Ihre vorherige Antwort zu bearbeiten. – zero323