Imputación de valores faltantes para PCA

23

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.actionparámetro no funciona. Pedí ayuda sobre stackoverflow ; dos usuarios ofrecieron dos formas diferentes de tratar con los NAvalores. Sin embargo, el problema con ambas soluciones es que cuando hay un NAvalor, 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 NAvalor.

El siguiente ejemplo muestra que la prcomp()función no devuelve ningún componente principal para la fila 5 ya que contiene un NAvalor.

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 NAvalores en un valor numérico específico cuando centery scalese configuran para TRUEque 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 NAvalores 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?

usuario969113
fuente
8
Su problema no es un problema de PCA, sino un problema más amplio de falta de valores . Si no está familiarizado con él, por favor, lea un poco sobre ella. Tiene muchas oportunidades: (1) eliminar casos en listas o (2) en pares, o (3) reemplazar las faltas por media o mediana. O (4) reemplace por un valor aleatorio elegido de valores válidos (enfoque de cubierta activa). O imputar faltas por (5) enfoque de regresión mutua (con o sin adición de ruido) o por un mejor, (6) enfoque EM.
ttnphns
Como muestran los comentarios y las respuestas, la clave para obtener una buena respuesta es explicar qué significan los NAvalores : ¿cuál es la causa de la "falta"?
whuber
2
Creo que el paquete "pcaMethods" puede resolver su problema ( aquí )
ToNoY

Respuestas:

22

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 = 1doXnorte

do=1norteXTX,                dojl=X.jY.l¯

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 .Xprcomp

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.

Marc en la caja
fuente
(+1) Esto me parece una valiosa contribución, porque es una idea novedosa. Hace mucho tiempo hice una pregunta similar que es sorprendentemente similar: ¿cómo se estima una matriz de covarianza cuando se censuran los datos (en lugar de faltar)? Si tiene alguna idea sobre esa situación, ¡me gustaría recibir una respuesta!
whuber
Gracias @whuber: creo que este método también tiene mucho mérito. Incluso si no está interesado en los valores interpolados, el método es mucho mejor al describir EOF / PC para el conjunto de datos, por ejemplo, el error entre los datos reconstruidos y el original se minimiza a través del algoritmo.
Marc en la caja el
@whuber - Con respecto a los datos censurados - Esto está fuera de mi área de especialización y, curiosamente, hice una pregunta en esta dirección hace unas semanas (¡lo que comentaste!) . Mi presentimiento es que uno debería llenar los ceros con valores aleatorios por debajo del límite de detección, que se aproximan a la distribución de los valores observados. Revisaré algunas de las publicaciones citadas de su publicación; este es un tema muy interesante.
Marc en la caja el
@whuber: es posible que le interese el siguiente documento que describe un procedimiento de ajuste de matriz de covarianza iterativo similar a datos dispersos: Bien, Jacob y Robert J. Tibshirani. "Estimación escasa de una matriz de covarianza". Biometrika 98.4 (2011): 807-820.
Marc en la caja el
Gracias @Marc. Lamentablemente, la censura y la escasez son dos cosas diferentes con diferentes preocupaciones.
whuber
6

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.

Peter Flom - Restablece a Monica
fuente
1

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.

Michael R. Chernick
fuente
3
Acabo de buscar en Google PCA y los datos faltantes y descubrí que: 4.2 ¿Cómo hace SIMCA para hacer frente a los datos faltantes? En pocas palabras, el algoritmo NIPALS interpola el punto faltante utilizando un ajuste de mínimos cuadrados, pero no da influencia a los datos faltantes en el modelo. Las iteraciones sucesivas refinan el valor faltante simplemente multiplicando la puntuación y la carga para ese punto. Existen muchos métodos diferentes para los datos faltantes, como la estimación, pero generalmente convergen en la misma solución. Los datos faltantes son aceptables si se distribuyen aleatoriamente. Los bloques sistemáticos de datos faltantes son problemáticos.
user969113
1
No sé a qué te refieres sin influencia en el modelo. Cualquier elección de valor faltante para la coordenada afectará a los componentes principales.
Michael R. Chernick
1

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 nipalsfunción del ade4paquete, y el PCA iterativo (Ipca o EM-PCA), implementado en la imputePCAfunción del missMDApaquete. 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:

library(ade4)
nipals(d[,c(1,2)])

Para Ipca:

library(missMDA)
imputePCA(d[,c(1,2)],method="EM",ncp=1)
Tom Wenseleers
fuente