В четвёртой домашке будем искать главные компоненты в наборе данных об ирисах!
Подключите пакеты 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
.
Сначала поймём, с чем мы будем иметь дело :)
iris
.
Petal.Length
и ширины лепестка Petal.Width
. Раскрасьте точки и измените их форму в соответствии с видом ириса Species
. Добавьте вертикальную линию на уровне средней длины лепестка и горизонтальную на уровне средней ширины лепестка. Не забудьте добавить название и подписи к осям!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 = 'Диаграмма рассеяния')
Каковы средняя длина и ширина лепестка?
За что отвечает аргумент linetype
?
Упражнение 2.
Постройте гистограммы длины чашелистника для каждого вида ириса отдельно.
А затем нарисуйте скрипичные графики для ширины чашелистника.
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 = 'Скрипичный график')
Сильно ли отличается распределение длины чашелистников по видам?
У какого вида ириса в среднем самая большая ширина чашелистника?
Упражнение 3.
Примените метод главных компонент к набору данных об ирисах, а затем визуализируйте результат в осях первых двух главных компонент. Помните, что эти данные не отмасштабированы, а значит, функции 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_ind()
не указывать аргументы label
и habillage
?
Упражнение 4.
Нарисуйте проекции исходных переменных в осях первых двух главных компонент. Функции fviz_pca_biplot
передайте аргумент, который делает подписи аккуратными.
fviz_pca_biplot(iris_pca, geom.ind = 'point', habillage = iris$Species, repel = TRUE)
Какая исходная переменная входит во вторую главную компоненту с большим весом?
За что отвечает аргумент geom.ind = 'point'
? Какие ещё возможны опции?
Упражнение 5.
Визуализируйте процент разброса, который объясняет каждая главная компонента и добавьте эти значения на график.
fviz_eig(iris_pca, addlabels = TRUE)
Достаточно ли взять первую главную компоненту, чтобы объяснить 70% разброса даныых?
Упражнение 6.
Визуализируйте вклад каждой переменной во вторую главную компоненту.
fviz_contrib(iris_pca, choice = 'var', axes = 2)
Вклад каких переменных во вторую главную компоненту можно считать значительным?
Упражнение 7.
Домашка выполнена! Ура :) Теперь её можно показывать всем! Загрузите файл с домашним заданием hw_040.Rmd
в свой гитхаб-репозиторий.