我刚刚在虹膜数据集上进行了PC分析。过去已经对此进行了多次讨论,但是我对输出内容并不感到困惑。 我使用了prcomp,这是输出的输出:
PC1 PC2 PC3 PC4
Sepal.Length 0.5210659 -0.37741762 0.7195664 0.2612863
Sepal.Width -0.2693474 -0.92329566 -0.2443818 -0.1235096
Petal.Length 0.5804131 -0.02449161 -0.1421264 -0.8014492
Petal.Width 0.5648565 -0.06694199 -0.6342727 0.5235971
以下是得分的前6行:
PC1 PC2 PC3 PC4
[1,] -2.257141 -0.4784238 0.12727962 0.024087508
[2,] -2.074013 0.6718827 0.23382552 0.102662845
[3,] -2.356335 0.3407664 -0.04405390 0.028282305
[4,] -2.291707 0.5953999 -0.09098530 -0.065735340
[5,] -2.381863 -0.6446757 -0.01568565 -0.035802870
[6,] -2.068701 -1.4842053 -0.02687825 0.006586116
以下是原始值的前6行:
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 5.1 3.5 1.4 0.2
2 4.9 3.0 1.4 0.2
3 4.7 3.2 1.3 0.2
4 4.6 3.1 1.5 0.2
5 5.0 3.6 1.4 0.2
6 5.4 3.9 1.7 0.4
有人可以解释一下我们如何获得第一行的-2.25的PC1分数吗?
谢谢。
答案 0 :(得分:0)
根据文档(?prcomp
),PC分数是数据-居中并按比例缩放(如果需要)-乘以旋转矩阵。因此,让我们对第1行和PC 1进行计算。在此示例中,我将PCA对象想象地称为pca
。
首先,我们使用iris[1, 1:4]
将数据的第一行pca$center
居中,然后使用pca$scale
进行缩放。最后,我们乘以PC 1 pca$rotation[, 1]
的负载,然后求和。
# Perform PCA
pca <- prcomp(iris[, 1:4], center = TRUE, scale = TRUE)
# Calculate PC1 score for first row of 'iris'
sum(pca$rotation[,1] * (iris[1, 1:4] - pca$center) / pca$scale)
#> [1] -2.257141
由reprex package(v0.2.1.9000)于2019-01-23创建
按预期,我们得到-2.257141。