2012-08-22 14 views
12

Estoy usando la función prcomp para calcular los dos primeros componentes principales. Sin embargo, mis datos tienen algunos valores NA y, por lo tanto, la función arroja un error. El na.action definido parece no funcionar a pesar de que se menciona en el archivo de ayuda ?prcompLa función R prcomp falla con los valores de NA, aunque se permiten NA

Aquí está mi ejemplo:

d <- data.frame(V1 = sample(1:100, 10), V2 = sample(1:100, 10)) 

prcomp(d, center = TRUE, scale = TRUE, na.action = na.omit) 

d$V1[5] <- NA 
d$V2[7] <- NA 

prcomp(d, center = TRUE, scale = TRUE, na.action = na.omit) 

estoy usando la más nueva versión R 2.15.1 para Mac OS X.

¿Alguien puede ver el motivo mientras prcomp falla?

Aquí está mi nuevo ejemplo:

d <- data.frame(V1 = sample(1:100, 10), V2 = sample(1:100, 10)) 

result <- prcomp(d, center = TRUE, scale = TRUE, na.action = na.omit) 

result$x 

d$V1[5] <- NA 

result <- prcomp(~V1+V2, data=d, center = TRUE, scale = TRUE, na.action = na.omit) 

result$x 

es posible conservar la fila 5 en PC1 y PC2? En mi conjunto de datos reales tengo, por supuesto, más de dos columnas de variables y solo algunas de ellas faltan y no quiero perder la información restante escondida en los otros valores.

Respuesta

12

Sí, parece una "característica" (error) que na.action se ignora por completo a menos que use la interfaz formula. Esto ha sido brought up before on the R Development list.

Creo que esto debería documentarse o marcarse como un error.

Para que quede claro, esto funcionaría, ya que accede a la interfaz fórmula:

prcomp(~V1+V2, data=d, center = TRUE, scale = TRUE, na.action = na.omit) 
+0

Bien fantástico. Gracias por el enfoque de la fórmula! – user969113

+2

Acepto que debe documentarse (soy el autor de la consulta en la lista de desarrollo R); la mejor manera de impulsar esto, si alguien quisiera, sería proponer un cambio en la documentación y enviarla a la lista de desarrollo r (y/o al rastreador de errores R). –

8

Otra solución si no está dispuesto a usar la interfaz fórmula es

prcomp(na.omit(d), center = TRUE, scale = TRUE) 

que consisten en la aplicación de na.omit directamente al marco de datos.

+0

Gracias por su solución también. Me acabo de dar cuenta de que el uso de na.omit da como resultado menos componentes principales. Acabo de editar mi ejemplo anterior. – user969113

Cuestiones relacionadas