J'ai 10 ans de données de retours quotidiens pour 28 devises différentes. Je souhaite extraire le premier composant principal, mais plutôt que d'exploiter PCA sur l'ensemble des 10 ans, je souhaite recaler une fenêtre de 2 ans, car les comportements des devises évoluent et je souhaite donc en tenir compte. Cependant, j'ai un problème majeur, c'est que les fonctions princomp () et prcomp () passeront souvent de charges positives à négatives dans les analyses PCA adjacentes (c'est-à-dire à 1 jour d'intervalle). Jetez un œil au tableau de chargement de la devise EUR:
De toute évidence, je ne peux pas l'utiliser car les chargements adjacents passeront du positif au négatif, donc ma série qui les utilise sera erronée. Jetez maintenant un œil à la valeur absolue du chargement de la devise EUR:
Le problème est bien sûr que je ne peux toujours pas l'utiliser car vous pouvez voir sur le graphique du haut que le chargement passe du négatif au positif et vice versa, une caractéristique que je dois préserver.
Existe-t-il un moyen de contourner ce problème? Puis-je forcer l'orientation du vecteur propre à être toujours la même dans les PCA adjacentes?
Par ailleurs, ce problème se produit également avec la fonction FactoMineR PCA (). Le code pour le rollapply est ici:
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
et EUR +0.21 ZAR -0.79 USD -0.4
sont très très similaires. Vous inversez simplement le signe dans l'un des deux résultats.