Vous devez utiliser la matrice $loadings
, pas $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
La matrice $rotmat
est la matrice orthogonale qui produit les nouveaux chargements à partir de ceux non tournés.
EDIT au 12 février 2015:
Comme indiqué à juste titre ci-dessous par @amoeba (voir également son article précédent ainsi qu'un autre article de @ttnphns ), cette réponse n'est pas correcte. Considérons un matrice de données X . La décomposition en valeurs singulières est
X = U S V T où V a pour colonnes (normalisé) les vecteurs propres de X ' X . Maintenant, une rotation est un changement de coordonnées et revient à écrire l'égalité ci-dessus comme:
X = ( U S T ) ( T T V T )n×mX
X=USVT
VX′X ≈ avec
T étant une matrice orthogonale choisie pour obtenir un
V ∗ proche de clairsemé (contraste maximum entre les entrées, en gros). Maintenant,
si c'était tout, ce qui n'est pas le cas, on pourrait post-multiplier l'égalité ci-dessus par
V ∗ pour obtenir les scores
U ∗ comme
X ( V ∗ ) T , Mais bien sûr, nous ne faisons jamais tourner tous les PC. Nous considérons plutôt un sous-ensemble de
k < m qui fournit toujours uneapproximationdécente de rang
k de
X ,
X ( UX=(UST)(TTVT)=U∗V∗
TV∗V∗U∗X(V∗)Tk<mkX
donc la solution tournée est maintenant
X ≈ ( U k S k T k ) ( T T k V T k ) = U ∗ k V ∗ k
où maintenant
V ∗ k est un
k × n matrice. On ne peut plus simplement multiplier
X par la transposition de
V ∗ kX≈(UkSk)(VTk)
X≈(UkSkTk)(TTkVTk)=U∗kV∗k
V∗kk×nXV∗k, mais nous devons plutôt recourir à l'une des solutions décrites par @amoeba.
En d'autres termes, la solution que j'ai proposée n'est correcte que dans le cas particulier où elle serait inutile et absurde.
Un grand merci à @amoeba pour m'avoir clarifié cette question; Je vis avec cette idée fausse depuis des années.
SVLVSvTiX (i=1,…,m)∥vi∥=1. De toute façon est acceptable, je pense, et tout le reste (comme dans l'analyse biplot).
NOUVELLE MODIFICATION 12 février 2015
V∗kV∗k(V∗k)TX(V∗k)T≈U∗k