Tôi muốn hiểu làm thế nào tôi có thể nhận được tỷ lệ phần trăm phương sai của một tập dữ liệu, không phải trong không gian tọa độ do PCA cung cấp, mà dựa vào một tập các vectơ (xoay) hơi khác.
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"))
Vì vậy, về cơ bản tôi biết rằng phương sai của bộ dữ liệu dọc theo mỗi trục màu đỏ, được đưa ra bởi PCA, được biểu thị bằng giá trị riêng. Nhưng làm thế nào tôi có thể có được các phương sai tương đương, tổng cộng cùng một lượng, nhưng chiếu hai trục khác nhau có màu xanh lục, đó là một phép quay bằng pi / 10 của các trục thành phần chính. IE đã đưa ra hai vectơ đơn vị trực giao từ gốc, làm thế nào tôi có thể lấy phương sai của một tập dữ liệu dọc theo mỗi trục tùy ý (nhưng trực giao), sao cho tất cả các phương sai được tính cho (ví dụ "giá trị riêng" tương đương với PCA).