Использование PCA в tidyverse framework с сгруппированными данными

#r #dplyr #tidyverse #pca

#r #dplyr #tidyverse #pca

Вопрос:

 # Libraries
library(tidyverse)
library(broom)
  

Я знаю, что tidyverse это может быть использовано для повышения производительности PCA, вот два примера:

Пример 1:

 iris_pca_v1 <- iris %>% 
  nest() %>% 
  mutate(
    pca = map(data, ~prcomp(.x %>% select(-Species), center = T, scale = T)),
    pca_aug = map2(pca, data, ~augment(.x, data = .y))
  )

  

Пример 2:

 iris_pca_v2 <- iris %>% 
  select(-Species) %>%
  prcomp(center = T, scale = T)
  

Но я хотел бы знать, есть ли способ использовать ту же tidyverse структуру для применения PCA в сгруппированных данных. Предположим, что мне нужно иметь разные компьютеры для каждого вида.

Примечание: В моем реальном случае я работаю с 20 переменными для 50 состояний в течение 10 лет, я хотел бы применить PCA для создания индекса для каждого состояния, сжимая 20 переменных в течение 10 лет.

Ответ №1:

Возможно, это то, что вы ищете. Для достижения желаемого результата вы можете вложить или сгруппировать Species .

 library(tidyverse)
library(broom)

iris_pca_v1 <- iris %>% 
  nest() %>% 
  mutate(
    pca = map(data, ~prcomp(.x %>% select(-Species), center = T, scale = T)),
    pca_aug = map2(pca, data, ~augment(.x, data = .y))
  ) %>% 
  unnest(pca_aug) %>% 
  select(-data, -pca)
#> Warning: `...` must not be empty for ungrouped data frames.
#> Did you want `data = everything()`?

iris_pca_v2 <- iris %>% 
  nest(data = -Species) %>% 
  mutate(
    pca = map(data, ~ prcomp(.x, center = T, scale = T)),
    pca_aug = map2(pca, data, ~augment(.x, data = .y))
  ) %>% 
  unnest(pca_aug) %>% 
  select(-data, -pca)

ggplot()  
  geom_point(data = iris_pca_v1, aes(.fittedPC1, .fittedPC2, color = "iris_pca_v1"))  
  geom_point(data = iris_pca_v2, aes(.fittedPC1, .fittedPC2, color = "iris_pca_grouped"))  
  scale_color_manual(values = c(iris_pca_v1 = "black", iris_pca_grouped = "red" ))  
  facet_wrap(~Species)
  

Комментарии:

1. спасительное решение

2. в чем разница между сгруппированным и первым PCA?