Yo también estoy interesado en resolver este problema, aunque, decidí no crear un hilo separado para ello todavía. Esto es una especie de continuación de la pregunta anterior a continuación.
https://stats.stackexchange.com/questions/34396/im-getting-jumpy-loadings-in-rollapply-pca-in-r-can-i-fix-it
En el análisis factorial, concretamente en el PCA, el signo de las cargas no significa nada, pero si alguien, como yo, quiere proyectar series temporales a la componente principal seleccionada, entonces veremos la imagen como en el enlace anterior: cargas saltantes.
Todas las respuestas que he visto especulan con multiplicar el vector por menos 1 si crees que ese vector concreto con cargas salta demasiado. Incluso hay respuestas que sugieren cómo identificar exactamente ese "demasiado" comparando dos vectores, el actual y el anterior. Pero sigue sin ser suficiente porque incluso según las respuestas podré identificar los cambios de signo sólo en la mitad de la secuencia, cuando haya calculado 2 vectores y pueda compararlos. No es suficiente porque todavía tengo que estar seguro de que el primer signo se definió correctamente y este es el problema - asumes que el primer vector propio es correcto, calculas el siguiente y te das cuenta de que hay que cambiar el signo, lo mismo para el resto de la secuencia y cuando graficas esto en el gráfico te das cuenta de que las cargas ya no son saltarinas sino que el conjunto el gráfico está invertido porque cuando calculaste el primer vector propio era erróneo y nadie ha sugerido todavía cómo comprobar exactamente el PRIMER vector propio sin compararlo con los demás.
Por el momento, tengo tres sugerencias de cómo se pueden eliminar estos saltos en las cargas.
- resumir todos los valores del vector propio para predecir en qué espacio propio se encuentra
eigenvector [-0.5, 0.2, 0.4]
-0.5 + 0.2 + 0.4 = 0.1 > 0 = sign is correct and should not change
eigenvector [-0.5, 0.2, 0.1]
-0.5 + 0.2 + 0.1 = -0.2 < 0 = change sign
- calcular el producto punto entre el vector actual y el anterior
vectorActual [-0.5, 0.2]
vectorPrev [0.3, -0.1]
-0.5 * 0.3 + 0.2 * -0.1 = -0.17 < 0 = change sign
- calcular la diferencia entre los vectores actuales y los anteriores
vectorActual [-0.5, 0.2]
vectorPrev [0.3, -0.1]
Diff = MathAbs(-0.5 - 0.3) + MathAbs(0.2 - -0.1) = 1.1
Sum = MathAbs(-0.5 + 0.3) + MathAbs(0.2 + -0.1) = 0.3
Diff > Sum = change sign
Adjunto imagen con un gráfico para mostrar lo que quiero decir. Como se puede ver, el resumen simple muestra buenos resultados sin inversión, pero en algunos casos los saltos son posibles. ¡Al mismo tiempo, Dot Product y la comparación entre Diff - Sum muestran el gráfico sin saltos en absoluto, pero se invierte, lo cual es incorrecto!
Imagen de alta resolución - http://snag.gy/zCqHx.jpg
Así que, en la medida en que esto pueda ser una respuesta a la pregunta de este tema, sigo interesado en ¿cómo comprobar que la orientación del primer vector de una secuencia es correcta?
0 votos
¿Para todos los componentes? Cuando dices cargas, ¿te refieres a los vectores propios? ¿Podría publicar algún código?
0 votos
Hay una pregunta relacionada que podría ayudar: enlace
0 votos
@michaelv2 No estoy seguro de qué tiene que ver ese enlace con la pregunta aquí.
0 votos
Mi intención era enlazar con la pregunta original, donde algunos comentarios abordan el hecho de que las descomposiciones espectrales pueden producir vectores propios con signos arbitrarios (y algunas de las formas de tratar con eso).