我想做的是将第二个数据集放入第一个数据集的相关PCA空间中。
# Load data
data(dataset1)
# Run PCA
dataset1.pca <- prcomp(dataset1, scale = TRUE, center = TRUE)
# See loadings of each variable on PC axes
unclass(dataset1.pca)
# Load new data
data(dataset2)
#Put scores of dataset 2 into PCA space of dataset 1?
我知道(如果我错了,请纠正我),当您使用协方差矩阵运行PCA时,PC分数是原始分数乘以PCA的特征向量。因此,如果我运行具有协方差的PCA,则可以简单地将第二个数据集的原始得分乘以第一个数据集的PCA特征向量。例如:
dataset1[1,] * dataset1.pca$rotation[, 1]
但是,我认为这不能说明prcomp函数将数据居中和缩放的事实。
我看到了另一个堆栈溢出页面,其中有人使用此方程式来计算,同时考虑了居中和缩放。
dataset1.pca.multipliers <- dataset1.pca$rotation[, 1] * (dataset1[1,] - summary(dataset1.pca)$center)/summary(dataset1.pca)$scale
但是,当我测试以原始数据集1的分数乘以dataset1.pca.multipliers是否等于dataset1.pca的分数时,结果并非如此。
# test if dataset1 scores * dataset1.pca.multipliers = dataset1.pca scores
calc.test <- dataset1[1,] * dataset1.pca.multipliers
sum(calc.test) #prints 26.30540513
rowMeans(test1) # prints 3.757915
# Real PC score is 3.068691765.
是否有人知道如何精确计算相关矩阵PCA的分数,以及如何将第二个数据集中的变量放入第一个数据集中的排序空间?