Mam 10 lat dziennych danych zwrotów dla 28 różnych walut. Chcę wyodrębnić pierwszy główny składnik, ale zamiast obsługiwać PCA przez całe 10 lat, chcę zastosować dwuletnie okno, ponieważ zachowania walut ewoluują, więc chcę to odzwierciedlić. Mam jednak poważny problem, to znaczy, że zarówno funkcje princomp (), jak i prcomp () często przeskakują od ładunków dodatnich do ujemnych w sąsiednich analizach PCA (tj. W odstępie 1 dnia). Zobacz tabelę ładowania dla waluty EUR:
Oczywiście nie mogę tego użyć, ponieważ sąsiednie ładunki będą przeskakiwać z dodatnich na ujemne, więc moja seria, która ich używa, będzie błędna. Teraz spójrz na wartość bezwzględną ładowania waluty EUR:
Problem polega oczywiście na tym, że nadal nie mogę tego użyć, ponieważ z górnego wykresu widać, że ładowanie zmienia się czasami z ujemnego na dodatnie i z powrotem, co jest cechą, którą muszę zachować.
Czy jest jakiś sposób na obejście tego problemu? Czy mogę wymusić, aby orientacja wektora własnego była zawsze taka sama w sąsiadujących PCA?
Nawiasem mówiąc, ten problem występuje również w funkcji FactoMineR PCA (). Kod rollapply znajduje się tutaj:
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
i EUR +0.21 ZAR -0.79 USD -0.4
są bardzo bardzo podobne. Po prostu odwróć znak w jednym z dwóch wyników.