2012-05-23 15 views
10

Me sorprendió descubrir que clara de permite NA. Pero la documentación de la función no dice nada sobre cómo maneja estos valores.agrupamiento con valores NA en R

Así que mis preguntas son:

  1. Cómo maneja clara AN?
  2. ¿Se puede utilizar esto de alguna manera para kmeans (Nas no permitido)?

[Actualización] líneas Así que lo hicieron se encontraron de código en función clara:

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

que no faltan reemplazo de valor por valmisdat. No estoy seguro de entender el motivo para usar dicha fórmula. ¿Algunas ideas? ¿Sería más "natural" tratar NA por cada columna por separado, quizás reemplazando con media/mediana?

Respuesta

7

Aunque no se menciona explícitamente, creo que NA se manejan de la manera descrita en la página de ayuda ?daisy. La sección de detalles tiene:

En el algoritmo margarita, los valores que faltan en una fila de x no están incluidos en las diferencias que implican esa fila.

administrar internamente el mismo código será utilizado por clara() que es como yo entiendo que NA s en los datos pueden ser manejados - que simplemente no toman parte en el cálculo. Esta es una forma razonablemente estándar de proceder en tales casos y, por ejemplo, se utiliza en la definición del coeficiente de similitud generalizado de Gower.

actualización Los C fuentes de clara.c indican claramente que esto (el anterior) es la forma NA s son manejados por clara() (líneas 350-356 en ./src/clara.c):

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

Mismas líneas de código para tratar los valores perdidos en 'daisy' que en la función' clara' (ver la actualización de mi pregunta). –

+0

@ danas.zuokas No estoy seguro de cuán útil es extraer líneas arbitrarias de código de las fuentes que usted cree que están relacionadas con la pregunta. Necesita estudiar tanto el código R como el código C. 'valmisdat' es el valor utilizado para indicar datos faltantes (' NA') en el código C en lugar de hacer que use 'NA' directamente. Si observa el código C, verá que claramente ignora las comparaciones en las que una variable tiene un valor faltante para una u otra o ambas muestras para las cuales se está computando la diferencia. Vea la respuesta actualizada para el puntero al código. –

+0

¡Gracias, Gavin! –

3

No estoy seguro si puede manejar kmeans datos faltantes al ignorar los valores perdidos en una fila.

Hay dos pasos en kmeans;

  1. calculando la distancia entre una observación y la media del clúster original.
  2. actualizando la nueva media del clúster según las distancias recién calculadas.

Cuando tenemos datos que faltan en nuestras observaciones: Paso 1 se pueden manejar mediante el ajuste de la distancia métrica apropiada como en el paquete clara/pam/daisy. Pero el Paso 2 solo puede realizarse si tenemos algún valor para cada columna de una observación. Por lo tanto, la imputación podría ser la siguiente mejor opción para kmeans para procesar los datos faltantes.

0

Al observar el código de Clara c, noté que en el algoritmo de clara, cuando hay valores faltantes en las observaciones, la suma de cuadrados es "reducida" proporcional al número de valores perdidos, ¡lo que creo que es incorrecto! línea 646 de clara.c es como "dsum * = (nobs/pp)" que muestra que cuenta el número de valores no perdidos en cada par de observaciones (nobs), lo divide por el número de variables (pp) y lo multiplica por la suma de cuadrados Creo que debe hacerse de otra manera, es decir "dsum * = (pp/nobs)".

+1

Puede usar un [editar enlace] (https://stackoverflow.com/posts/35925440/edit) para editar su respuesta anterior. – zero323

Cuestiones relacionadas