Utilicé la prcomp()
función para realizar un PCA (análisis de componentes principales) en R. Sin embargo, hay un error en esa función de modo que el na.action
parámetro no funciona. Pedí ayuda sobre stackoverflow ; dos usuarios ofrecieron dos formas diferentes de tratar con los NA
valores. Sin embargo, el problema con ambas soluciones es que cuando hay un NA
valor, esa fila se descarta y no se considera en el análisis de PCA. Mi conjunto de datos real es una matriz de 100 x 100 y no quiero perder una fila completa solo porque contiene un solo NA
valor.
El siguiente ejemplo muestra que la prcomp()
función no devuelve ningún componente principal para la fila 5 ya que contiene un NA
valor.
d <- data.frame(V1 = sample(1:100, 10), V2 = sample(1:100, 10),
V3 = 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
Me preguntaba si puedo establecer los NA
valores en un valor numérico específico cuando center
y scale
se configuran para TRUE
que la prcomp()
función funcione y no elimine las filas que contienen NA
's', pero tampoco influye en el resultado del análisis de PCA.
Pensé en reemplazar los NA
valores con el valor medio en una sola columna, o con un valor muy cercano a 0. Sin embargo, no estoy seguro de cómo eso influye en el análisis de PCA.
¿Alguien puede pensar en una buena manera de resolver ese problema?
fuente
NA
valores : ¿cuál es la causa de la "falta"?Respuestas:
De hecho, hay una forma bien documentada de tratar con matrices gappy: puede descomponer una matriz de covarianza construida a partir de sus datos , que se escala por el número de valores compartidos :X n C = 1do X norte
y luego expande los coeficientes principales a través de un ajuste de mínimos cuadrados (como menciona @ user969113). Aquí hay un ejemplo .
Sin embargo, hay varios problemas con este método en relación con el hecho de que la matriz de covarianza ya no es semipositiva definida y los valores propios / singulares tienden a estar inflados. Se puede encontrar una buena revisión de estos problemas en Beckers y Rixen (2003) , donde también proponen un método para interpolar de manera óptima las brechas faltantes: DINEOF (Funciones ortogonales empíricas de interpolación de datos). Recientemente he escrito una función que realiza DINEOF , y realmente parece ser una mejor manera de hacerlo. Puede realizar DINEOF en su conjunto de datos directamente, y luego usar el conjunto de datos interpolado como entrada .X
prcomp
Actualizar
Otra opción para realizar PCA en un conjunto de datos gappy es "Funciones ortogonales empíricas sustraídas recursivamente" (Taylor et al. 2013). También corrige algunos de los problemas en el enfoque de mínimos cuadrados, y es computacionalmente mucho más rápido que DINEOF. Esta publicación compara los tres enfoques en términos de la precisión de la reconstrucción de datos utilizando las PC.
Referencias
Beckers, Jean-Marie y M. Rixen. "Cálculos EOF y llenado de datos de conjuntos de datos oceanográficos incompletos". Revista de Tecnología Atmosférica y Oceánica 20.12 (2003): 1839-1856.
Taylor, M., Losch, M., Wenzel, M. y Schröter, J. (2013). Sobre la sensibilidad de la reconstrucción de campo y la predicción utilizando funciones ortogonales empíricas derivadas de datos breves. Journal of Climate, 26 (22), 9194-9205.
fuente
Mi sugerencia depende de cuántos datos faltan y por qué faltan. Pero esto no tiene nada que ver con PCA, realmente. Si faltan muy pocos datos, no importará mucho lo que haga. Reemplazar con la mediana no es ideal, pero si no falta mucho, no será muy diferente de una mejor solución. Puede intentar hacer PCA con el reemplazo medio y la eliminación por listas y ver si hay diferencias importantes en los resultados.
Luego, si faltan más datos, debe considerar si faltan completamente al azar, si faltan al azar o si no faltan al azar. Sugeriría una imputación múltiple en los primeros dos casos y algunas veces en el tercer caso, a menos que los datos estén muy distorsionados por su estado NMAR, creo que la imputación múltiple será mejor que la eliminación por listas (Joe Schafer de Penn State ha hecho un mucho trabajo sobre datos faltantes: recuerdo algunos de sus trabajos que muestran que la imputación múltiple funcionó bastante bien incluso en algunos casos NMAR). Sin embargo, si los datos son MCAR o MAR, se pueden probar las propiedades de la imputación múltiple.
Si decide ir con MI, una nota es tener cuidado porque los signos de los componentes en PCA son arbitrarios, y un pequeño cambio en los datos puede voltear un signo. Luego, cuando hagas el PCA, obtendrás tonterías. Hace mucho tiempo ideé una solución en SAS: no es difícil, pero es algo de lo que debemos tener cuidado.
fuente
No hay una solución correcta para el problema. Cada coordenada en el vector tiene que especificarse para obtener el conjunto correcto de componentes principales. Si falta una coordenada y se reemplaza por algún valor imputado, obtendrá un resultado, pero dependerá del valor imputado. entonces, si hay dos opciones razonables para el valor imputado, las diferentes opciones darán diferentes respuestas.
fuente
Un artículo reciente que revisa los enfoques para tratar los valores perdidos en los análisis de PCA es "Análisis de componentes principales con valores perdidos: una encuesta comparativa de métodos" por Dray y Josse (2015) . Dos de los métodos más conocidos de métodos de PCA que permiten valores perdidos son el algoritmo NIPALS, implementado en la
nipals
función delade4
paquete, y el PCA iterativo (Ipca o EM-PCA), implementado en laimputePCA
función delmissMDA
paquete. El documento concluyó que el método Ipca funcionó mejor en la más amplia gama de condiciones.Para su sintaxis de ejemplo es:
Para NIPALS:
Para Ipca:
fuente