Saya ingin memahami bagaimana saya bisa mendapatkan persentase varians dari kumpulan data, bukan di ruang koordinat yang disediakan oleh PCA, tetapi terhadap serangkaian vektor (rotasi) yang sedikit berbeda.
set.seed(1234)
xx <- rnorm(1000)
yy <- xx * 0.5 + rnorm(1000, sd = 0.6)
vecs <- cbind(xx, yy)
plot(vecs, xlim = c(-4, 4), ylim = c(-4, 4))
vv <- eigen(cov(vecs))$vectors
ee <- eigen(cov(vecs))$values
a1 <- vv[, 1]
a2 <- vv[, 2]
theta = pi/10
rotmat <- matrix(c(cos(theta), sin(theta), -sin(theta), cos(theta)), 2, 2)
a1r <- a1 %*% rotmat
a2r <- a2 %*% rotmat
arrows(0, 0, a1[1], a1[2], lwd = 2, col = "red")
arrows(0, 0, a2[1], a2[2], lwd = 2, col = "red")
arrows(0, 0, a1r[1], a1r[2], lwd = 2, col = "green3")
arrows(0, 0, a2r[1], a2r[2], lwd = 2, col = "green3")
legend("topleft", legend = c("eigenvectors", "rotated"), fill = c("red", "green3"))
Jadi pada dasarnya saya tahu bahwa varian dataset sepanjang masing-masing sumbu merah, yang diberikan oleh PCA, diwakili oleh nilai eigen. Tetapi bagaimana saya bisa mendapatkan varian yang setara, dengan jumlah yang sama, tetapi memproyeksikan dua sumbu yang berbeda dalam warna hijau, yang merupakan rotasi oleh pi / 10 dari sumbu komponen utama. IE memberikan dua vektor unit ortogonal dari asalnya, bagaimana saya bisa mendapatkan varians dari dataset sepanjang masing-masing sumbu acak (tapi ortogonal) ini, sehingga semua varians diperhitungkan (yaitu "nilai eigen" sama dengan yang ada pada PCA).