Tengo 10 años de datos de devoluciones diarias para 28 monedas diferentes. Deseo extraer el primer componente principal, pero en lugar de operar PCA en los 10 años completos, quiero implementar una ventana de 2 años, porque los comportamientos de las monedas evolucionan y, por lo tanto, deseo reflejar esto. Sin embargo, tengo un problema importante, que es que tanto las funciones princomp () como prcomp () a menudo saltan de cargas positivas a negativas en los análisis de PCA adyacentes (es decir, con 1 día de diferencia). Eche un vistazo a la tabla de carga para la moneda EUR:
Claramente, no puedo usar esto porque las cargas adyacentes saltarán de positivo a negativo, por lo que mi serie que las usa será errónea. Ahora eche un vistazo al valor absoluto de la carga de divisas EUR:
Por supuesto, el problema es que todavía no puedo usar esto porque puedes ver en la tabla superior que la carga va de negativa a positiva y viceversa, una característica que necesito preservar.
¿Hay alguna forma de evitar este problema? ¿Puedo forzar que la orientación del vector propio sea siempre la misma en PCA adyacentes?
Por cierto, este problema también ocurre con la función FactoMineR PCA (). El código para el rollapply está aquí:
rollapply(retmat, windowl, function(x) summary(princomp(x))$loadings[, 1], by.column = FALSE, align = "right") -> princomproll
EUR -0.2 ZAR +0.8 USD +0.41
y EUR +0.21 ZAR -0.79 USD -0.4
son muy muy parecidos. Simplemente invierte el signo en cualquiera de los dos resultados.