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 явлений по вкладу на первую ось")
Топ-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).