library(tidyr)
library(haven)
library(dplyr)
##
## Присоединяю пакет: 'dplyr'
## Следующие объекты скрыты от 'package:stats':
##
## filter, lag
## Следующие объекты скрыты от 'package:base':
##
## intersect, setdiff, setequal, union
library(FactoMineR)
## Warning: пакет 'FactoMineR' был собран под R версии 4.5.3
library(factoextra)
## Warning: пакет 'factoextra' был собран под R версии 4.5.3
## Загрузка требуемого пакета: ggplot2
## Welcome to factoextra!
## Want to learn more? See two factoextra-related books at https://www.datanovia.com/en/product/practical-guide-to-principal-component-methods-in-r/
library(knitr)
climat <- read_sav("~/files/climat.sav")
Преобразуем переменные в факторный тип для корректного выполнения MCA
v16_data <- climat %>%
select(V16_1:V16_9) %>%
mutate(across(everything(), as.factor))
Проанализируем зависимую переменную
str(v16_data)
## tibble [913 × 9] (S3: tbl_df/tbl/data.frame)
## $ V16_1: Factor w/ 2 levels "0","1": 2 2 1 NA 2 1 2 1 2 NA ...
## $ V16_2: Factor w/ 2 levels "0","1": 1 2 1 NA 2 2 2 1 2 NA ...
## $ V16_3: Factor w/ 2 levels "0","1": 1 1 1 NA 1 1 1 2 2 NA ...
## $ V16_4: Factor w/ 2 levels "0","1": 1 1 1 NA 1 1 1 1 1 NA ...
## $ V16_5: Factor w/ 2 levels "0","1": 1 1 1 NA 1 2 1 1 1 NA ...
## $ V16_6: Factor w/ 2 levels "0","1": 1 1 2 NA 1 1 1 1 1 NA ...
## $ V16_7: Factor w/ 2 levels "0","1": 2 2 1 NA 1 2 1 2 2 NA ...
## $ V16_8: Factor w/ 2 levels "0","1": 1 1 1 NA 1 2 1 1 2 NA ...
## $ V16_9: Factor w/ 2 levels "0","1": 1 1 2 NA 2 2 1 1 2 NA ...
summary(v16_data)
## V16_1 V16_2 V16_3 V16_4 V16_5 V16_6 V16_7
## 0 :561 0 :597 0 :495 0 :830 0 :714 0 :807 0 :481
## 1 :326 1 :290 1 :392 1 : 57 1 :173 1 : 80 1 :406
## NA's: 26 NA's: 26 NA's: 26 NA's: 26 NA's: 26 NA's: 26 NA's: 26
## V16_8 V16_9
## 0 :666 0 :745
## 1 :221 1 :142
## NA's: 26 NA's: 26
объект climat содержит 913 наблюдений (респондентов) и множество переменных.Все переменные преобразованы в факторные (factor) с двумя уровнями: “0” (нет) и “1” (да). Каждая переменная содержит 26 пропусков (NA), что составляет около 2.8% от общего числа наблюдений. Выполненим множественный анализ соответствий
res.mca.v16 <- MCA(v16_data, graph = FALSE)
summary(res.mca.v16)
##
## Call:
## MCA(X = v16_data, graph = FALSE)
##
##
## Eigenvalues
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5 Dim.6 Dim.7
## Variance 1.000 0.200 0.150 0.120 0.112 0.102 0.093
## % of var. 50.000 10.022 7.483 6.021 5.578 5.116 4.667
## Cumulative % of var. 50.000 60.022 67.505 73.526 79.104 84.220 88.887
## Dim.8 Dim.9 Dim.10 Dim.11 Dim.12 Dim.13 Dim.14
## Variance 0.082 0.074 0.066 0.000 0.000 0.000 0.000
## % of var. 4.118 3.697 3.298 0.000 0.000 0.000 0.000
## Cumulative % of var. 93.005 96.702 100.000 100.000 100.000 100.000 100.000
## Dim.15 Dim.16 Dim.17 Dim.18
## Variance 0.000 0.000 0.000 0.000
## % of var. 0.000 0.000 0.000 0.000
## Cumulative % of var. 100.000 100.000 100.000 100.000
##
## Individuals (the 10 first)
## Dim.1 ctr cos2 Dim.2 ctr cos2 Dim.3 ctr cos2
## 1 | -0.171 0.003 0.048 | -0.148 0.012 0.035 | -0.525 0.202 0.449 |
## 2 | -0.171 0.003 0.037 | -0.055 0.002 0.004 | -0.641 0.301 0.518 |
## 3 | -0.171 0.003 0.014 | 0.511 0.143 0.121 | 0.112 0.009 0.006 |
## 4 | 5.841 3.737 1.000 | 0.000 0.000 0.000 | 0.000 0.000 0.000 |
## 5 | -0.171 0.003 0.022 | 0.216 0.026 0.035 | -0.329 0.079 0.081 |
## 6 | -0.171 0.003 0.015 | 0.932 0.474 0.435 | 0.201 0.030 0.020 |
## 7 | -0.171 0.003 0.039 | -0.210 0.024 0.058 | -0.605 0.267 0.484 |
## 8 | -0.171 0.003 0.054 | -0.311 0.053 0.180 | 0.355 0.092 0.234 |
## 9 | -0.171 0.003 0.017 | 0.672 0.247 0.261 | 0.276 0.056 0.044 |
## 10 | 5.841 3.737 1.000 | 0.000 0.000 0.000 | 0.000 0.000 0.000 |
##
## Categories (the 10 first)
## Dim.1 ctr cos2 v.test Dim.2 ctr cos2 v.test
## V16_1.NA | 5.841 10.795 1.000 30.199 | 0.000 0.000 0.000 0.000 |
## V16_1_0 | -0.171 0.200 0.047 -6.527 | -0.203 1.406 0.066 -7.745 |
## V16_1_1 | -0.171 0.116 0.016 -3.853 | 0.350 2.419 0.068 7.867 |
## V16_2.NA | 5.841 10.795 1.000 30.199 | 0.000 0.000 0.000 0.000 |
## V16_2_0 | -0.171 0.213 0.055 -7.107 | -0.122 0.536 0.028 -5.048 |
## V16_2_1 | -0.171 0.103 0.014 -3.528 | 0.250 1.104 0.029 5.159 |
## V16_3.NA | 5.841 10.795 1.000 30.199 | 0.000 0.000 0.000 0.000 |
## V16_3_0 | -0.171 0.177 0.035 -5.626 | 0.047 0.067 0.003 1.556 |
## V16_3_1 | -0.171 0.140 0.022 -4.485 | -0.060 0.085 0.003 -1.567 |
## V16_4.NA | 5.841 10.795 1.000 30.199 | 0.000 0.000 0.000 0.000 |
## Dim.3 ctr cos2 v.test
## V16_1.NA 0.000 0.000 0.000 0.000 |
## V16_1_0 0.547 13.632 0.476 20.841 |
## V16_1_1 -0.941 23.459 0.491 -21.171 |
## V16_2.NA 0.000 0.000 0.000 0.000 |
## V16_2_0 0.132 0.850 0.033 5.492 |
## V16_2_1 -0.272 1.749 0.035 -5.612 |
## V16_3.NA 0.000 0.000 0.000 0.000 |
## V16_3_0 -0.696 19.521 0.574 -22.886 |
## V16_3_1 0.879 24.650 0.582 23.036 |
## V16_4.NA 0.000 0.000 0.000 0.000 |
##
## Categorical variables (eta2)
## Dim.1 Dim.2 Dim.3
## V16_1 | 1.000 0.069 0.500 |
## V16_2 | 1.000 0.030 0.035 |
## V16_3 | 1.000 0.003 0.595 |
## V16_4 | 1.000 0.212 0.000 |
## V16_5 | 1.000 0.339 0.004 |
## V16_6 | 1.000 0.356 0.010 |
## V16_7 | 1.000 0.094 0.004 |
## V16_8 | 1.000 0.317 0.078 |
## V16_9 | 1.000 0.385 0.120 |
Dim.1: 50.00% объясненной дисперсии — первая ось аккумулирует половину всей вариации данных; Dim.2: 10.02% — вторая ось добавляет еще 10%; Dim.3: 7.48% — третья ось вносит дополнительный вклад; Кумулятивный процент: первые две оси объясняют 60.02% дисперсии, первые три — 67.51%. Первая ось имеет собственное значение 1.000, что характерно для MCA с бинарными переменными. NA-категории имеют координату 5.841 по первой оси и идеальное качество представления, что указывает на их систематическую связь с формированием оси.
eig.v16 <- get_eigenvalue(res.mca.v16)
print(eig.v16)
## eigenvalue variance.percent cumulative.variance.percent
## Dim.1 1.000000e+00 5.000000e+01 50.00000
## Dim.2 2.004359e-01 1.002179e+01 60.02179
## Dim.3 1.496641e-01 7.483206e+00 67.50500
## Dim.4 1.204238e-01 6.021192e+00 73.52619
## Dim.5 1.115530e-01 5.577651e+00 79.10384
## Dim.6 1.023298e-01 5.116490e+00 84.22033
## Dim.7 9.333871e-02 4.666936e+00 88.88727
## Dim.8 8.235926e-02 4.117963e+00 93.00523
## Dim.9 7.394061e-02 3.697031e+00 96.70226
## Dim.10 6.595478e-02 3.297739e+00 100.00000
## Dim.11 1.321742e-29 6.608712e-28 100.00000
## Dim.12 7.593053e-30 3.796526e-28 100.00000
## Dim.13 5.439253e-30 2.719627e-28 100.00000
## Dim.14 8.271830e-31 4.135915e-29 100.00000
## Dim.15 7.627950e-31 3.813975e-29 100.00000
## Dim.16 5.183953e-31 2.591976e-29 100.00000
## Dim.17 2.048250e-31 1.024125e-29 100.00000
## Dim.18 1.395355e-31 6.976777e-30 100.00000
Dim.1: объясняет 50.00% дисперсии; Dim.2: 10.02% дисперсии; Dim.3: 7.48% дисперсии; Кумулятивный процент для Dim.1–Dim.3: 67.51% Первая ось доминирует, что типично для MCA с бинарными переменными. Рекомендуется интерпретировать первые 2–3 оси. Построим график
fviz_eig(res.mca.v16, addlabels = TRUE)
Наблюдается резкое падение процента объясненной дисперсии после первой
оси, затем снижение становится более пологим.”Изгиб” (elbow) графика
приходится на вторую ось Вклады категорий в формирование осей
contrib_dim1 <- res.mca.v16$var$contrib[, 1]
top10_contrib <- sort(contrib_dim1, decreasing = TRUE)[1:10]
Создание таблицы с названиями явлений
contrib_table <- data.frame(
Явление = names(top10_contrib),
Вклад_процент = round(top10_contrib, 2)
)
kable(contrib_table, caption = "Топ-10 явлений по вкладу на первую ось")
| Явление | Вклад_процент | |
|---|---|---|
| V16_2.NA | V16_2.NA | 10.79 |
| V16_3.NA | V16_3.NA | 10.79 |
| V16_4.NA | V16_4.NA | 10.79 |
| V16_5.NA | V16_5.NA | 10.79 |
| V16_6.NA | V16_6.NA | 10.79 |
| V16_7.NA | V16_7.NA | 10.79 |
| V16_8.NA | V16_8.NA | 10.79 |
| V16_9.NA | V16_9.NA | 10.79 |
| V16_1.NA | V16_1.NA | 10.79 |
| V16_4_0 | V16_4_0 | 0.30 |
Все NA-категории (пропущенные значения) входят в топ-10 с одинаковым вкладом 10.79% каждая. Высокий вклад пропущенных значений указывает на то, что: пропуски не являются случайными, респонденты, не ответившие на вопросы, имеют особый профиль восприятия климатических изменений, первая ось в значительной степени формируется различием между “ответившими” и “не ответившими” Среди не-NA категорий наибольший вклад имеет V16_4_0 (отсутствие камнепадов и оползней) — 0.30% График категорий переменных
fviz_mca_var(res.mca.v16,
repel = TRUE,
col.var = "contrib",
gradient.cols = c("blue", "yellow", "red"))
Все NA-категории расположены в одной точке далеко от центра (координата ~5.8 по первой оси), это подтверждает, что пропущенные значения формируют отдельный кластер. Категории “0” (отсутствие явления) и “1” (наличие явления) расположены в противоположных направлениях. Это характерно для MCA с бинарными переменными: ось отражает контраст между наличием и отсутствием явления
Первая ось объясняет 50% дисперсии и в основном отражает контраст между респондентами, ответившими на вопросы, и теми, кто пропустил ответы. NA-категории имеют наибольший вклад (10.79% каждая). Содержательная интерпретация первой оси затруднена из-за доминирования пропущенных значений. Для более чистого анализа рекомендуется либо удалить наблюдения с пропусками, либо провести анализ чувствительности. Вторая и третья оси (10% и 7.5% дисперсии) могут нести более содержательную нагрузку, разделяя различные типы природных явлений (засуха vs. осадки, жара vs. ветры). Наиболее часто отмечаемые явления: сильные ветры (V16_7), засуха (V16_1) и аномальная жара (V16_2).