- •Вводные замечания
- •1. Начало работы
- •2. Описательные статистики
- •2.1. Проверка наличия «выбросов»
- •2.2. Проверка нормальности распределения
- •2.2.1. Критерии нормальности
- •2.2.2. Визуальная проверка нормальности распределения
- •3.2. Сравнение двух зависимых групп
- •3. Сравнение двух выборок
- •3.1. Сравнение двух независимых групп
- •4. Корреляционный анализ
- •5. Многомерные методы
- •5.1. Анализ главных компонент и эксплораторный факторный анализ
- •5.2. Кластерный анализ
- •5.2.1. Иерархический кластерный анализ
- •5.2.2. Кластерный анализ методом К-средних
- •Список рекомендуемой литературы и интернет-источников
5.2.Кластерный анализ
5.2.1.Иерархический кластерный анализ
Иерархический кластерный анализ позволяет классифицировать данные, разделить данные на группы. Он может быть проведен как для наблюдений, так и для переменных. Рассмотрим оба варианта. Перед проведением кластерного анализа важно стандартизировать данные, чтобы уравнять их веса, так как иначе шкалы, по которым значения выше (например, от 50 до 100), получат неоправданное преимущество перед шкалами, значения которых варьируются в пределах, например, 0–20. Функция scale() нормирует данные, приводя к среднему, равному нулю, и стандартному отклонению, равному единице.
Вариант с переменными требует предварительного транспонирования матрицы, кроме того, оставим только оригинальные шкалы методик, т.е. удалим шкалы «Импульсивность» и «Общительность», так как они высчитываются по тем же пунктам, что и шкалы «Экстраверсия» и «Нейротизм» методики EPI, также удалим шкалу лжи.
#Создадим матрицу эвклидовых дистанций, предварительно стандартизировав и транспонировав датафрейм
d <- dist(t(scale(epi.bfi[, c(1, 5:13)])), method = "euclidean")
#Реализуем иерархический кластерный анализ, используя метод Варда
hc <- hclust(d = d, method = "ward.D2")
#Построим дендрограмму (cex отвечает за размер шрифта шкал, hang = -1 - позволяет выровнять метки)
plot(hc, cex = 1.5, hang = -1, main = "Иерархическая кластеризация (переменные)")
#Наблюдаются 3 наиболее выраженных кластера, выделим их на дендрограмме rect.hclust(hc, 3)
43
Кластеры достаточно хорошо поддаются интерпретации: 1-й кластер включает шкалы «Экстраверсии» методик EPI и «Большая пятерка», характеризуя тем самым экстравертированность человека; 2-й кластер включает в себя шкалы тревожности, депрессивности и нейротизма, вероятно, отличительной особенностью этого кластера является эмоциональная неустойчивость; в 3-й кластер вошли три черты «Большой пятерки»: «Доброжелательность», «Добросовестность» и «Открытость опыту».
Ниже рассмотрим вариант с определением групп наблюдений, возьмем только шкалы ситуативной и личностной тревожности Ч. Спилбергера, так как чем больше неспецифичных переменных, тем сложнее различить кластеры.
# Создаем матрицу дистанций
dd <- dist(scale(epi.bfi[, 12:13]), method = "euclidean")
# Проводим иерархический кластерный анализ, используя метод Варда hcm <- hclust(d = dd, method = "ward.D2")
44
#Строим дендрограмму, удалив имена наблюдений, так как из-за большого количества они сливаются и становятся неразличимы
plot(hcm, hang = -1, labels = FALSE, main = "Иерархическая кластеризация
(наблюдения)")
#Выделяем на дендрограмме три наиболее выраженных кластера
rect.hclust(hcm, 3)
#Присвоим соответствующие номера кластеров каждому наблюдению cluster <- cutree(hcm, k = 3)
#Рассмотрим, сколько в каждом кластере наблюдений
table(cluster)
## cluster |
|
||
## |
1 |
2 |
3 |
## |
59 |
115 |
57 |
45
# Далее можно сравнить средние, чтобы понять специфику кластеров library(psych)
describeBy(epi.bfi[, 12:13], group = cluster)
##
##Descriptive statistics by group
##group: 1
## |
vars |
n mean |
sd median trimmed |
mad min max range |
skew |
||||||
## traitanx |
1 |
59 |
28.1 |
2.94 |
29 |
28.2 |
2.97 |
22 |
34 |
12 |
-0.33 |
## stateanx |
2 |
59 |
30.8 |
7.31 |
28 |
29.9 |
5.93 |
21 |
54 |
33 |
1.10 |
##kurtosis se
## traitanx |
-0.76 0.38 |
|
|
|
|
|
|
|
||
## stateanx |
|
0.90 |
0.95 |
|
|
|
|
|
|
|
--------------------------------------------------------## |
|
|
|
|
|
|
|
|
|
|
## group: 2 |
|
|
|
|
|
|
|
|
|
|
## |
vars |
n mean |
sd median trimmed |
mad min max range skew |
||||||
## traitanx |
1 |
115 |
40.0 |
5.63 |
39 |
39.4 |
4.45 |
31 |
61 |
30 1.05 |
## stateanx |
2 |
115 |
36.5 |
5.44 |
37 |
36.5 |
5.93 |
26 |
48 |
22 0.00 |
##kurtosis se
## traitanx |
|
1.25 |
0.53 |
|
|
|
|
|
|
|
|
|
## stateanx |
-0.98 |
0.51 |
|
|
|
|
|
|
|
|||
--------------------------------------------------------## |
|
|
|
|
|
|
|
|
|
|
|
|
## group: 3 |
|
|
|
|
|
|
|
|
|
|
|
|
## |
vars |
n mean |
sd median trimmed |
mad min max range skew kurtosis |
||||||||
## traitanx |
1 |
57 |
48.3 |
9.09 |
47 |
47.9 7.41 |
31 |
71 |
40 0.48 |
-0.05 |
||
## stateanx |
2 |
57 |
56.0 |
7.20 |
55 |
55.5 |
7.41 |
42 |
79 |
37 0.71 |
0.55 |
|
## |
se |
|
|
|
|
|
|
|
|
|
|
|
##traitanx 1.20
##stateanx 0.95
Функции пакета "factoextra" позволяют построить красивые диаграммы кластерного анализа.
library(factoextra) |
|
fviz_dend(x = hcm, |
# Указываем объект класса «дендрограмма» |
k = 3, |
# Указываем количество кластеров |
show_labels = FALSE, |
# Удаляем имена наблюдений |
palette = "aaas", |
# Задаем палитру |
main = "Иерархическая кластеризация")
46
