我想了解如何获取数据集的方差百分比,而不是在PCA提供的坐标空间中,而是在稍微不同的一组(旋转)向量上。
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"))
因此,基本上我知道由PCA给出的数据集沿每个红色轴的方差由特征值表示。但是我怎么能得到等价的方差,总计相同的数量,但是将两个不同的轴投影为绿色,它们是主成分轴的pi / 10旋转。IE给定了从原点开始的两个正交单位矢量,我如何才能沿每个任意(但正交)轴获取数据集的方差,从而考虑所有方差(即“特征值”的总和与PCA)。
非常相关:stats.stackexchange.com/questions/8630。
—
变形虫