【问题标题】:PC1 and PC2 values: original valuesPC1 和 PC2 值:原始值
【发布时间】:2019-01-19 15:13:10
【问题描述】:

我刚刚在 r 中对 iris 数据集进行了 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

有人能解释一下我们如何获得第 1 行的 -2.25 的 PC1 分数吗?

谢谢。

【问题讨论】:

    标签: pca


    【解决方案1】:

    根据文档 (?prcomp),PC 分数是数据 — 居中并缩放,如果需要 — 乘以旋转矩阵。因此,让我们对第 1 行和 PC 1 进行计算以进行检查。在此示例中,我使用了一个名为pca 的 PCA 对象。

    首先,我们使用pca$center 将第一行数据iris[1, 1:4] 居中,然后使用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 年 1 月 23 日创建

    正如预期的那样,我们得到 -2.257141。

    【讨论】:

      猜你喜欢
      • 2021-08-25
      • 2016-12-19
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      • 1970-01-01
      • 1970-01-01
      • 2014-12-24
      相关资源
      最近更新 更多