Después de algunas búsquedas, encuentro muy poco sobre la incorporación de los pesos de observación / errores de medición en el análisis de componentes principales. Lo que encuentro tiende a depender de enfoques iterativos para incluir ponderaciones (por ejemplo, aquí ). Mi pregunta es ¿por qué es necesario este enfoque? ¿Por qué no podemos usar los vectores propios de la matriz de covarianza ponderada?
pca
measurement-error
weighted-data
sin nombre
fuente
fuente
Respuestas:
Depende de a qué se apliquen exactamente sus pesos.
Pesas de fila
Sea la matriz de datos con variables en columnas y observaciones en filas. Si cada observación tiene un peso asociado , entonces es realmente sencillo incorporar estos pesos en PCA.X n xi wi
Primero, uno necesita calcular la media ponderada y de los datos para centrarla .μ=1∑wi∑wixi
Luego calculamos la matriz de covarianza ponderada1∑wiX⊤WX , donde W=diag(wi) es la matriz diagonal de pesos, y aplique PCA estándar para analizarlo.
Pesos celulares
El documento de Tamuz et al., 2013 , que encontró, considera un caso más complicado cuando se aplican diferentes pesos a cada elemento de la matriz de datos. Entonces, de hecho, no hay una solución analítica y uno tiene que usar un método iterativo. Tenga en cuenta que, como reconocieron los autores, reinventaron la rueda, ya que tales pesos generales ciertamente se han considerado antes, por ejemplo, en Gabriel y Zamir, 1979, Aproximación de matrices de rango inferior por mínimos cuadrados con cualquier elección de pesos . Esto también se discutió aquí .wij
Como observación adicional: si los pesos varían tanto con las variables como con las observaciones, pero son simétricos, de modo que , entonces la solución analítica es posible nuevamente, ver Koren y Carmel, 2004, Robust Reducción de dimensionalidad lineal .wij wij=wji
fuente
Muchas gracias ameba por la información sobre los pesos de las filas. Sé que esto no es stackoverflow, pero tuve algunas dificultades para encontrar una implementación de PCA ponderada en fila con explicación y, dado que este es uno de los primeros resultados al buscar en Google PCA ponderado, pensé que sería bueno adjuntar mi solución , tal vez pueda ayudar a otros en la misma situación. En este fragmento de código Python2, una PCA ponderada con un kernel RBF como el descrito anteriormente se usa para calcular las tangentes de un conjunto de datos 2D. ¡Estaré muy feliz de escuchar algunos comentarios!
Y una salida de muestra (hace lo mismo para cada punto):
Saludos,
Andres
fuente