Musisz użyć matrycy $loadings
, a nie $rotmat
:
x <- matrix(rnorm(600),60,10)
prc <- prcomp(x, center=TRUE, scale=TRUE)
varimax7 <- varimax(prc$rotation[,1:7])
newData <- scale(x) %*% varimax7$loadings
Macierz $rotmat
jest macierzą ortogonalną, która wytwarza nowe ładunki z nieobrotowych.
EDYTUJ od 12 lutego 2015 r .:
Jak słusznie wskazał poniżej @amoeba (patrz również jego / jej poprzedni post oraz inny post z @ttnphns ), ta odpowiedź jest nieprawidłowa. Rozważmy macierzy danych . Rozkład wartości w liczbie pojedynczej to
gdzie ma za kolumny (znormalizowane) wektory własne . Teraz obrót jest zmianą współrzędnych i sprowadza się do zapisania powyższej równości jako:
przy czym jest macierzą ortogonalną wybraną do uzyskania bliski rzadkości (maksymalny kontrast między wpisami, luźno mówiąc). Teraz, jeśli to wszystkon×mX
X=USVT
VX′XX=(UST)(TTVT)=U∗V∗
TV∗, co nie jest, można pomnożyć powyższą równość przez aby uzyskać wyniki jako , ale oczywiście nigdy nie obracamy całego komputera. Przeciwnie, uważa się, że podzbiór , który zapewnia jeszcze godnego rank- aproksymacji ,
tak więc rozwiązanie jest obrócony
gdzie teraz jest macierzą . Nie możemy już po prostu pomnożyć przez transpozycję , ale raczej musimy skorzystać z jednego z rozwiązań opisanych przez @amoeba.
V∗U∗X(V∗)Tk<mkXX≈(UkSkTk)(T T k V T k )=U ∗ k V ∗ k V ∗ k k×nXV ∗ kX≈(UkSk)(VTk)
X≈(UkSkTk)(TTkVTk)=U∗kV∗k
V∗kk×nXV∗k
Innymi słowy, zaproponowane przeze mnie rozwiązanie jest poprawne tylko w tym konkretnym przypadku, w którym byłoby bezużyteczne i bezsensowne.
Serdeczne podziękowania dla @amoeba za wyjaśnienie mi tej sprawy; Od lat żyję z tym nieporozumieniem.
Jeden punkt, w którym uwaga powyżej odbiega od użytkownika @ ameba postu jest to, że ona / on wydaje skojarzyć z w . Myślę, że w PCA bardziej powszechne jest posiadanie kolumn normy 1 i pochłanianie w wartościach głównego składnika. W rzeczywistości zwykle są one przedstawiane jako kombinacje liniowe oryginalnych (wyśrodkowanych, być może skalowanych) zmiennych podlegających . Tak czy inaczej jest do zaakceptowania, jak sądzę, i wszystko pomiędzy (jak w analizie biplot).SVLVSvTiX (i=1,…,m)∥vi∥=1
DALSZA EDYCJA 12 lutego 2015 r
Jak zauważył @amoeba, mimo że jest prostokątny, zaproponowane mnie rozwiązanie może być nadal akceptowalne: dałoby macierz jednostkową i . Wszystko wydaje się więc zależeć od definicji wyników, które preferuje się. V ∗ k ( V ∗ k ) T X ( V ∗ k ) T ≈ U ∗ kV∗kV∗k(V∗k)TX(V∗k)T≈U∗k