PC1和PC2值:原始值

时间:2019-01-19 15:13:11

标签: pca

我刚刚在虹膜数据集上进行了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分数吗?

谢谢。

1 个答案:

答案 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。