PCA轮换中缺少PC1列。

问题描述 投票:0回答:1

我试图对经典的Iris数据集进行PCA。这是我的代码。

library(tidyverse)

x <- iris[,1:4] %>% as.matrix()
pca <- prcomp(x, scale. = TRUE)
summary(pca)

分量旋转有每个花瓣长度,花瓣宽度等的值。所以我试了一下。

as.data.frame(pca$rotation) %>% pivot_longer(-1, names_to = "components", values_to = "value")

我知道一定有错误,因为 pca$rotation 是一个矩阵,并以某种方式 PC1 被遗漏了。预期的结果应该是。

terms          value component 
   <chr>          <dbl> <chr>   
 1 Sepal.Length  0.521  PC1     
 2 Sepal.Width  -0.269  PC1    
 3 Petal.Length  0.580  PC1    
 4 Petal.Width   0.565  PC1    
 5 Sepal.Length -0.377  PC2    
 6 Sepal.Width  -0.923  PC2     
 7 Petal.Length -0.0245 PC2      
 8 Petal.Width  -0.0669 PC2      
 9 Sepal.Length  0.720  PC3      
10 Sepal.Width  -0.244  PC3      
11 Petal.Length -0.142  PC3      
12 Petal.Width  -0.634  PC3    
13 Sepal.Length  0.261  PC4     
14 Sepal.Width  -0.124  PC4    
15 Petal.Length -0.801  PC4      
16 Petal.Width   0.524  PC4
r pca
1个回答
1
投票

您的 -1 规范包含哪些变量,漏掉了第一列(你可能把行名看错了,行名一般被整顿机械忽略,是第一列)。 那么

pca$rotation %>%
    as.data.frame() %>%
    rownames_to_column("term") %>%
    as_tibble() %>%    ## cosmetic
    pivot_longer(starts_with("PC"), 
                 names_to = "components", 
                 values_to = "value")

?

© www.soinside.com 2019 - 2024. All rights reserved.