В четвёртой домашке будем искать главные компоненты в наборе данных об ирисах!

Подключите пакеты tidyverse, skimr, rio, factoextra, corrplot. И постарайтесь вспомнить, для чего нужен каждый из них :)

library(tidyverse) # обработка данных, графики...
## ── Attaching packages ──────────────────
## ✔ ggplot2 2.2.1.9000     ✔ purrr   0.2.5     
## ✔ tibble  1.4.2          ✔ dplyr   0.7.5     
## ✔ tidyr   0.8.1          ✔ stringr 1.3.1     
## ✔ readr   1.1.1          ✔ forcats 0.3.0
## Warning: package 'tibble' was built under R version 3.4.3
## Warning: package 'purrr' was built under R version 3.4.4
## Warning: package 'forcats' was built under R version 3.4.3
## ── Conflicts ── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(skimr) # описательные статистики
## Warning: package 'skimr' was built under R version 3.4.4
library(rio) # импорт фантастического количества форматов данных
library(factoextra) # визуализации kmeans, pca
## Welcome! Related Books: `Practical Guide To Cluster Analysis in R` at https://goo.gl/13EFCZ
library(corrplot) # визуализация корреляций
## corrplot 0.84 loaded

Для упражнений мы будем использовать встроенный набор данных об ирисах. Узнать подробности можно в справке командой ?iris.

Сначала поймём, с чем мы будем иметь дело :)

skim(iris)
## Skim summary statistics
##  n obs: 150 
##  n variables: 5
## Warning: package 'bindrcpp' was built under R version 3.4.4
## 
## Variable type: factor 
##  variable missing complete   n n_unique                       top_counts
##   Species       0      150 150        3 set: 50, ver: 50, vir: 50, NA: 0
##  ordered
##    FALSE
## 
## Variable type: numeric 
##      variable missing complete   n mean   sd  p0 p25  p50 p75 p100
##  Petal.Length       0      150 150 3.76 1.77 1   1.6 4.35 5.1  6.9
##   Petal.Width       0      150 150 1.2  0.76 0.1 0.3 1.3  1.8  2.5
##  Sepal.Length       0      150 150 5.84 0.83 4.3 5.1 5.8  6.4  7.9
##   Sepal.Width       0      150 150 3.06 0.44 2   2.8 3    3.3  4.4
##      hist
##  ▇▁▁▂▅▅▃▁
##  ▇▁▁▅▃▃▂▂
##  ▂▇▅▇▆▅▂▂
##  ▁▂▅▇▃▂▁▁
ggplot(data = iris) + 
  geom_point(aes(x = Petal.Length, y = Petal.Width, col = Species, shape = Species)) + 
  geom_vline(aes(xintercept = mean(Petal.Length)), linetype = 'dashed') +
  geom_hline(aes(yintercept = mean(Petal.Width)), linetype = 'dashed') +
  labs(x = 'Длина лепестка', y = 'Ширина лепестка', title = 'Диаграмма рассеяния')

ggplot(data = iris) + 
  geom_histogram(aes(x = Sepal.Length)) + 
  facet_grid(Species ~ .) +
  labs(x = 'Длина чашелистника', title = 'Гистограмма')
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ggplot(data = iris) + 
  geom_violin(aes(x = Species, y = Sepal.Width, fill = Species)) + 
  labs(x = 'Вид ириса', y = 'Ширина чашелистника', title = 'Скрипичный график')

Примените метод главных компонент к набору данных об ирисах, а затем визуализируйте результат в осях первых двух главных компонент. Помните, что эти данные не отмасштабированы, а значит, функции prcomp() нужно передать важный аргумент! Подсказка появляется при нажатии кнопки tab внутри скобок :)

iris_pca <- prcomp(iris[-5], scale. = TRUE)
iris_pca
## Standard deviations (1, .., p=4):
## [1] 1.7083611 0.9560494 0.3830886 0.1439265
## 
## Rotation (n x k) = (4 x 4):
##                     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
fviz_pca_ind(iris_pca, label = 'none', habillage = iris$Species)

Нарисуйте проекции исходных переменных в осях первых двух главных компонент. Функции fviz_pca_biplot передайте аргумент, который делает подписи аккуратными.

fviz_pca_biplot(iris_pca, geom.ind = 'point', habillage = iris$Species, repel = TRUE)

Визуализируйте процент разброса, который объясняет каждая главная компонента и добавьте эти значения на график.

fviz_eig(iris_pca, addlabels = TRUE)

Визуализируйте вклад каждой переменной во вторую главную компоненту.

fviz_contrib(iris_pca, choice = 'var', axes = 2)

Домашка выполнена! Ура :) Теперь её можно показывать всем! Загрузите файл с домашним заданием hw_040.Rmd в свой гитхаб-репозиторий.