我试图对经典的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
您的 -1
规范包含哪些变量,漏掉了第一列(你可能把行名看错了,行名一般被整顿机械忽略,是第一列)。 那么
pca$rotation %>%
as.data.frame() %>%
rownames_to_column("term") %>%
as_tibble() %>% ## cosmetic
pivot_longer(starts_with("PC"),
names_to = "components",
values_to = "value")
?