I have 10 years of daily returns data for 28 different currencies. I wish to extract the first principal component, but rather than operate PCA on the whole 10 years, I want to rollapply a 2 year window, because the currencies' behaviours evolve and so I wish to reflect this. However I have a major problem, that is that both the princomp()
and prcomp()
functions will often jump from positive to negative loadings in adjacent PCA analyses (ie 1 day apart). Have a look at the loading chart for the EUR currency:
Clearly I can't use this because adjacent loadings will jump from positive to negative, so my series which uses them will be erroneous. Now take a look at the absolute value of the EUR currency loading:
The problem is of course that I still cannot use this because you can see from the top chart that the loading does go from negative to positive and back at times, a characteristic which I need to preserve.
Is there any way I can get around this problem? Can I force the eigenvector orientation to always be the same in adjacent PCAs?
By the way this problem also occurs with the FactoMineR PCA() function. The code for the rollapply is here:
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
andEUR +0.21 ZAR -0.79 USD -0.4
are very very similar. You simply invert sign in any of the two results. $\endgroup$