Anda harus menggunakan matriks $loadings
, bukan$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
Matriks $rotmat
adalah ortogonal yang menghasilkan pemuatan baru dari yang tidak diputar.
EDIT pada 12 Februari 2015:
Sebagai benar menunjukkan bawah oleh @amoeba (lihat juga / nya posting sebelumnya serta pos lain dari @ttnphns ) jawaban ini tidak benar. Pertimbangkan matriks data X . Dekomposisi nilai singular adalah
X = U S V T dimana V memiliki sebagai kolom nya yang (dinormalisasi) vektor eigen dari X ' X . Sekarang, rotasi adalah perubahan koordinat dan jumlah untuk menulis persamaan di atas sebagai:
X = ( U S T ) ( T T V T =n×mX
X=USVT
VX′X dengan
T menjadi matriks ortogonal yang dipilih untuk mencapai
V ∗ mendekati sparse (kontras maksimum antara entri, secara longgar). Sekarang,
jika hanya itu, yang bukan, kita bisa mengalikan kesetaraan di atas dengan
V ∗ untuk mendapatkan skor
U ∗ sebagai
X ( V ∗ ) T , Tapi tentu saja kita tidak pernah merotasi semua PC. Sebaliknya, kami menganggap himpunan bagian dari
k < m yang masih memberikanperkiraanperingkat
k yang layakdari
X ,
XX=(UST)(TTVT)=U∗V∗
TV∗V∗U∗X(V∗)Tk<mkX
sehingga solusi yang diputar sekarang
X ≈ ( U k S k T k ) ( T T k V T k ) = U ∗ k V ∗ k di
mana sekarang
V ∗ k adalah
k × n matriks. Kita tidak bisa lagi hanya kalikan
X dengan transpos dari
V * kX≈(UkSk)(VTk)
X≈(UkSkTk)(TTkVTk)=U∗kV∗k
V∗kk×nXV∗k, tetapi kita perlu menggunakan salah satu solusi yang dijelaskan oleh @amoeba.
Dengan kata lain, solusi yang saya usulkan hanya benar dalam kasus tertentu di mana itu akan sia-sia dan tidak masuk akal.
Terima kasih yang tulus pergi ke @amoeba untuk menjelaskan masalah ini kepada saya; Saya telah hidup dengan kesalahpahaman ini selama bertahun-tahun.
SVLVSvTiX (i=1,…,m)∥vi∥=1. Either way diterima saya pikir, dan segala sesuatu di antaranya (seperti dalam analisis biplot).
EDIT LEBIH LANJUT 12 Februari 2015
V∗kV∗k(V∗k)TX(V∗k)T≈U∗k