如何使用Tidymodels获得PCA累积比例?

时间:2020-05-29 02:52:54

标签: r pca tidymodels

我可以将PCA应用于经典的Iris数据集,以获得每个维度的累积比例:

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

但是我不知道如何使用tidymodels来做到这一点。到目前为止,我的代码是:

library(tidymodels)
iris_vars <- iris %>% select(-Species)
iris_rec <- recipe(~., iris_vars) %>%
  step_pca(all_predictors())
iris_prep <- prep(iris_rec)
iris_tidy <- tidy(iris_prep,1)
iris_tidy
summary(iris_tidy)

我想通过tidymodels获得它:

Importance of components:
                          PC1     PC2    PC3     PC4
Standard deviation     2.0563 0.49262 0.2797 0.15439
Proportion of Variance 0.9246 0.05307 0.0171 0.00521
Cumulative Proportion  0.9246 0.97769 0.9948 1.00000

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

如果使用相同的模型,则可以获得相同的结果。 prcomp()默认为center = TRUE,而step_pca()默认为center = FALSE。在下文中,我同时使用居中和缩放(因为通常建议这样做)。

library("tidymodels")

x <- iris[,1:4] %>% as.matrix()
pca <- prcomp(x, scale. = TRUE)
summary(pca)
#> Importance of components:
#>                           PC1    PC2     PC3     PC4
#> Standard deviation     1.7084 0.9560 0.38309 0.14393
#> Proportion of Variance 0.7296 0.2285 0.03669 0.00518
#> Cumulative Proportion  0.7296 0.9581 0.99482 1.00000

iris_rec <- recipe(Species ~ ., iris) %>%
    step_normalize(all_predictors()) %>% 
    step_pca(all_predictors())
iris_prep <- prep(iris_rec)

summary(iris_prep$steps[[2]]$res)
#> Importance of components:
#>                           PC1    PC2     PC3     PC4
#> Standard deviation     1.7084 0.9560 0.38309 0.14393
#> Proportion of Variance 0.7296 0.2285 0.03669 0.00518
#> Cumulative Proportion  0.7296 0.9581 0.99482 1.00000

reprex package(v0.3.0)于2020-05-29创建

相关问题