Підключення бібліотек

library(haven)
library(dplyr)
library(semTools)
library(sjmisc)
library(corrplot)
library(psych)
library(knitr)
library(DiagrammeR)
library(htmltools)
library(Hmisc)
library(kableExtra)
library(ggplot2)
library(sjPlot)
library(labelled)
library(summarytools)
library(WCluster)

Подкаст про орієнтації на популізм

htmltools::tags$audio(
  
  src = "https://raw.githubusercontent.com/socio-pixel/my-audio/main/Populist-attitudes.mp3",
  controls = "controls",
  style = "width: 100%;" 
)

Вступ

Проблема популізму залишається однією з найактуальніших у сучасному політологічному та соціологічному дискурсі як на глобальному, так і на національному рівнях. Україна, як суспільство, що проходить складні трансформаційні процеси, не є винятком у цьому контексті. Популізму розглядає суспільство як антагоністично розділене на “народ” та “еліти”. Розуміння структури та поширеності популістських орієнтацій серед населення є важливим для аналізу політичних процесів, електоральної поведінки та суспільних настроїв.

В Інституті соціології НАН України проводилася науково-дослідна тема “Популістські орієнтації громадян у перехідному суспільстві: особливості прояву та чинники формування”, складником якої виступило дослідження А.П.Горбачика “Структура населення України за орієнтаціями на популізм”, Він пропонує емпіричний підхід до вимірювання цього складного феномену. Дані для аналізу були взяті з моніторингового опитування Інституту соціології НАН України за 2024 рік (N = 4101), що проведене Соціологічною групою “Рейтинг” за фінансуванням USAID. Автор аналізував дані в IBM SPSS Statistics.

Метою даної статті є реплікація ключових етапів аналізу даних та результатів дослідження Андрія Горбачика з використанням мови програмування R та її статистичних пакетів.
Реплікаційні дослідження відіграють важливу роль у науці, дозволяючи перевірити отримаі результати, а також сприяючи прозорості та відтворюваності наукового процесу.
Використання R як інструменту аналізу дозволяє детально документувати всі кроки обробки даних та забезпечує можливість легкого відтворення дослідження іншими науковцями.

1. Методика

Методика початкового дослідження Дослідження Андрія Горбачика
В основі дослідження Андрія Горбачика лежить методика вимірювання популізму, розроблена Олександром Рєзніком в межах наукової теми Інституту соціології НАН України “Популістичні орієнтації у перехідному суспільстві”. Горбачик використав п’ять пунктів оригінальної методики з семи.

  1. Народ набагато мудріший за політиків, тому політики повинні слідувати тільки волі народу

  2. Часто думка простих людей важливіша, ніж думка професійних політиків та експертів

  3. Політичні розбіжності між елітою та народом більші, ніж розбіжності у самому народі

  4. Нашою країною повинні керувати люди з народу, а не представники правлячої еліти

  5. Я хотів би, щоб мене у політиці представляв пересічний громадянин, а не професійний політик

Кожен пункт оцінювався респондентом за 5-бальною шкалою Лікерта від 1 (зовсім не згоден) до 5 (цілком згоден).

Атвор дослідження виокремлює два виміри популізму:

Народоцентризм - орієнтація на переконання, що народ є мудрішим за політиків, а думка простих людей важливіша за думку професіоналів. Вимірювався за допомогою 2 пунктів.

Антиелітизм - орієнтація на недовіру до еліт та сприйняття політичних розбіжностей між народом та елітою. Вимірювався за допомогою 3 пунктів.

Адитивні індекси народоцентризму та антиелітизму варіюються від 1 до 5. Вищий бал означає більшу орієнтацію на народоцентризм чи антиелітизм.

Адитивний індекс народоцентризму: середнє 3,52 (стандартне відхилення = 1,04); альфа Кронба 0,65.

Адитивний індекс антиелітизму: середнє 3,48 (стандартне відхилення = 0,41); альфа Кронбаха 0,57.

На основі цих індексів був проведений кластерний аналіз, який виявив чотирикластерне рішення.

Характеристика кластерів за результатами дослідження
Кластер Назва Народоцентризм Антиелітизм Відсоток
Кластер 1 Орієнтація на елітизм 2.00 2.30 16.7
Кластер 2 Орієнтація на популізм 4.47 4.26 37.1
Кластер 3 Без орієнтації 2.96 3.48 30.4
Кластер 4 Орієнтація на народоцентризм 4.00 2.90 15.8

Методика реплікації засобами R

Для реплікації дослідження використовувалися статистичні пакети мови програмування R. Етапи реплікації:

Дескриптивний та кореляційний аналіз вихідних змінних.

Формування індексів Створення адитивних індексів народоцентризму (на основі 2 змінних) та антиелітизму (на основі 3 змінних), що відповідають 5-бальній шкалі Лікерта.

Оцінка надійностію - розрахунок коефіцієнта альфа Кронбаха для змінних обох індексів.

Кластерний аналіз (k-середніх).

Розрахунок середніх значень індексів народоцентризму та антиелітизму для кожного кластера та їх відсоткового розподілу.

Результати реплікації

Результати аналізу даних в R показали еквівалетність середніх значень адитивних інндексів та значень альфа Кронбаха.

Результати кластерного аналізу різняться.
Хоча змістовно було виділено ті самі кластери (респонденти, орієнтовані на елітизм, популізм, народоцентризм, та без чіткої орієнтації), їхній кількісний склад та середні значення індексів відрізняються від показників оригінального дослідження.

У таблиці нижче подано характеристику виявлених кластерів за результатами реплікації дослідження в R.

Характеристика кластерів за результатами реплікації
Кластер Назва Народоцентризм Антиелітизм Відсоток
Репл. Кластер 1 Орієнтація на популізм 4.52 4.20 37.2
Репл. Кластер 2 Орієнтація на елітизм 1.92 2.45 17.3
Репл. Кластер 3 Орієнтація на народоцентризм 3.57 2.85 25.4
Репл. Кластер 4 Орієнтація на антиелітизм 3.00 3.83 20.2

Характеристики кластерів (репліковане дослідження)

Кластер 1. “Популісти” (N = 1526, 37.20%)
Народоцентризм: 4.52 (дуже високий) Антиелітизм: 4.20 (дуже високий) Опис: Це найбільша група респондентів, яка демонструє найвищі показники за обома вимірами популізму. Їхній рівень народоцентризму (M=4.52) та антиелітизму (M=4.20) значно перевищує як середні значення по вибірці, так і нейтральний рівень, наближаючись до максимальних значень шкали. Представники цього кластера глибоко переконані у мудрості простого народу, вважають, що його думка важливіша за думку експертів та політиків, і що саме вихідці з народу мають керувати країною. Одночасно вони висловлюють сильну недовіру до еліт та бачать значні розбіжності між інтересами народу та еліти. Це ядро популістськи орієнтованих громадян.

Кластер 2. “Непопулісти (елітисти)” (N = 709, 17.28%)
Народоцентризм: 1.92 (дуже низький) Антиелітизм: 2.45 (низький) Цей кластер, один із найменших за чисельністю, характеризується найнижчими показниками за обома вимірами популізму. Їхній рівень народоцентризму (M=1.92) є дуже низьким, значно нижчим за нейтральне значення (3.0) та середнє по вибірці (прибл. 3.52), що вказує на виразну незгоду з ідеями про особливу мудрість народу порівняно з експертами. Рівень антиелітизму (M=2.45) також є низьким, розташовуючись нижче нейтрального рівня (3.0) та середнього по вибірці (прибл. 3.48). Це свідчить про те, що представники цього кластера не схильні до вираженої недовіри до еліт чи до сприйняття глибокого антагонізму між “народом” та “елітою”. Ймовірно, вони більшою мірою орієнтовані на довіру до інституцій та професійне управління, ніж на популістські гасла.

Кластер 3. “Народоцентристи з низьким антиелітизмом” (N = 1040, 25.35%)
Народоцентризм: 3.57 (дещо вище середнього, помітно вище нейтрального)
Антиелітизм: 2.85 (нижче середнього, нижче нейтрального)
Представники цього кластера демонструють рівень народоцентризму (M=3.57), який є дещо вищим за середній показник по вибірці (прибл. 3.52) та помітно вищим за нейтральне значення (3.0). Це вказує на їхню схильність підтримувати ідеї про важливість думки народу та необхідність для політиків дослухатися до неї. Водночас їхній антиелітизм (M=2.85) є низьким, опускаючись нижче як середнього по вибірці (прибл. 3.48), так і нейтрального рівня (3.0). Це свідчить про відсутність у них вираженої недовіри до еліт чи гострого сприйняття конфлікту між народом та елітами, на відміну від виражених популістів. Таким чином, їхня позиція характеризується помірною підтримкою ідей “влади народу” без суттєвого протиставлення “народ проти еліт”, що відрізняє їх від класичних популістів.

Кластер 4. “Антиелітисти з нейтральним народоцентризмом” (N = 827, 20.16%)
Народоцентризм: 3.00 (нейтральний, нижче середнього)
Антиелітизм: 3.83 (помітно вище середнього, помітно вище нейтрального)
Цей кластер характеризується нейтральним ставленням до ідей народоцентризму (M=3.00), що відповідає точці байдужості на шкалі та є нижчим за середній показник по вибірці (прибл. 3.52). Натомість, їхній антиелітизм (M=3.83) є помітно високим, перевищуючи як середнє значення по вибірці (прибл. 3.48), так і нейтральний рівень (3.0). Це вказує на те, що основний фокус їхніх поглядів зосереджений на критичному ставленні до еліт та відчутті розбіжностей з ними, тоді як ідеї про особливу мудрість народу не знаходять у них значної підтримки, залишаючись на нейтральному рівні. Їхня мотивація, ймовірно, більше пов’язана з недовірою до існуючих еліт, аніж з глибоким переконанням у вищості народного знання.

Висновки за кластерами
Розподіл на кластери показує, що популістські орієнтації в українському суспільстві є неоднорідними. Існує значна група “Популістів” (Кластер 1), але також і помітна частка населення, яка або повністю не поділяє популістські ідеї (Кластер 2: “Непопулісти (елітисти)”), або приймає лише окремі їхні аспекти – переважно народоцентризм (Кластер 3: “Народоцентристи з низьким антиелітизмом”) чи переважно антиелітизм (Кластер 4: “Антиелітисти з нейтральним народоцентризмом”). Це вказує на складність феномену популізму та різні мотивації, що можуть лежати в основі таких поглядів.

Порівняльний аналіз реплікованих результатів з оригінальним дослідженням

Висновок щодо збігів та відмінностей у кластерній структурі:

Що збігається (схожі кластери відтворилися)

Кластер “Орієнтація на популізм”
Оригінал (Кластер 2): народоцентризм (M=4.47), антиелітизм (M=4.26), частка: 37.1%.
Реплікація (Репл. Кластер 1): народоцентризм (M=4.52), антиелітизм (M=4.20), частка: 37.2%.
Збіг: Цей кластер, що характеризується дуже високими показниками як народоцентризму, так і антиелітизму, стабільно відтворюється в обох дослідженнях з майже ідентичними середніми значеннями індексів та часткою у вибірці. Це найбільш виражений та стабільний популістський сегмент.

Кластер “Орієнтація на елітизм” (або Непопулісти)
Оригінал (Кластер 1): народоцентризм (M=2.00), антиелітизм (M=2.30), частка: 16.7%.
Реплікація (Репл. Кластер 2): народоцентризм (M=1.92), антиелітизм (M=2.45), частка: 17.3%.
Збіг: Кластер з найнижчими показниками народоцентризму та антиелітизму також відтворюється, маючи схожі середні значення індексів та частку у вибірці. Це сегмент, найменш схильний до популістських поглядів.

Що є відмінним (або збігається лише частково)

Кластер “Орієнтація на народоцентризм” (високий/помірний народоцентризм, низький антиелітизм).
Оригінал (Кластер 4): народоцентризм (M=4.00), антиелітизм (M=2.90), частка: 15.8%.
Реплікація (Репл. Кластер 3): народоцентризм (M=3.57), антиелітизм (M=2.85), частка: 25.4%.
Частковий збіг/Відмінність: Обидва дослідження виявили кластер, де індекс народоцентризму домінує над індексом антиелітизму (який є низьким, близьким до нейтрального або нижче). Однак, у реплікації середнє значення індексу народоцентризму є дещо нижчим (M=3.57, що можна охарактеризувати як “помірно високий” або “вище середнього”) порівняно з оригіналом (M=4.00, “високий”). Крім того, цей кластер у реплікації є значно більшим за часткою (25.4% проти 15.8%). Таким чином, хоча тип кластера концептуально відтворюється, спостерігаються зміни у вираженості однієї з рис та його відносному розмірі.

Трансформація “середнього” або “невизначеного” кластера
Оригінал (Кластер 3, “Без визначеної орієнтації”): народоцентризм (M=2.96), антиелітизм (M=3.48), частка: 30.4%.
Реплікація (Репл. Кластер 4, “Антиелітисти з нейтральним народоцентризмом”): народоцентризм (M=3.00), антиелітизм (M=3.83), частка: 20.2% Відмінність: Це найбільш суттєва розбіжність. В оригінальному дослідженні існував великий кластер (30.4%) з показником народоцентризму близьким до нейтрального (M=2.96) та показником антиелітизму вищим за нейтральний і близьким до середнього по вибірці (M=3.48). У реплікації такий кластер з точно такими ж характеристиками не відтворився. Замість нього з’явився менший за розміром (20.2%) кластер із чітко нейтральним народоцентризмом (M=3.00) та більш вираженим антиелітизмом (M=3.83, що є помітно вищим за середнє по вибірці).

Загальний висновок порівняння Реплікація аналізу на тих самих даних підтвердила існування двох стабільних полярних кластерів, виявлених в оригінальному дослідженні: групи з чітко вираженими популістськими орієнтаціями та групи з вираженими елітистськими (непопулістськими) орієнтаціями. Також в обох випадках ідентифіковано групу, де підтримка ідей народоцентризму поєднується з низьким рівнем антиелітизму, хоча характеристики та розмір цієї групи в реплікації дещо змінилися.

Головна відмінність між оригінальним дослідженням та результатами реплікації полягає у трансформації “середнього” сегмента. Великий кластер з відносно невизначеними або помірними орієнтаціями (“Без визначеної орієнтації”) з оригінального дослідження не відтворився у тому ж вигляді. Натомість у реплікації сформувався менший за розміром, але більш чітко окреслений кластер з вираженим антиелітизмом на тлі нейтрального народоцентризму. Це може свідчити про чутливість кластерного рішення до специфіки розподілу даних у цій зоні, де індивідуальні відмінності або нюанси симуляції могли призвести до формування дещо іншої кластерної структури порівняно з оригінальним дослідженням. Можливо, оригінальний кластер “Без визначеної орієнтації” містив у собі підгрупу з вираженим антиелітизмом, яка в процесі кластеризації даних в R виокремилася чіткіше.

Завантаження даних

file_path <- "D:/Lichnoe/2025/Populism/Monitoring2024.sav"
df <- read_sav(file_path)

2. Огляд індикаторів популізму

frq(df$pm1, weights = df$wt_UA4101)
## Народ набагато мудріший за політиків, тому політики повинні слідувати тільки волі народу (xw) <numeric> 
## # total N=4101 valid N=4101 mean=3.60 sd=1.21
## 
## Value |                       Label |    N | Raw % | Valid % | Cum. %
## ---------------------------------------------------------------------
##     1 |            Зовсім не згодні |  210 |  5.12 |    5.12 |   5.12
##     2 |           Скоріше не згодні |  714 | 17.41 |   17.41 |  22.53
##     3 | Важко сказати, згодні чи ні |  749 | 18.26 |   18.26 |  40.79
##     4 |              Скоріше згодні | 1268 | 30.92 |   30.92 |  71.71
##     5 |               Цілком згодні | 1160 | 28.29 |   28.29 | 100.00
##  <NA> |                        <NA> |    0 |  0.00 |    <NA> |   <NA>
frq(df$pm3, weights = df$wt_UA4101)
## Часто думка простих людей важливіша, ніж думка професійних політиків та експертів (xw) <numeric> 
## # total N=4101 valid N=4101 mean=3.45 sd=1.20
## 
## Value |                       Label |    N | Raw % | Valid % | Cum. %
## ---------------------------------------------------------------------
##     1 |            Зовсім не згодні |  271 |  6.61 |    6.61 |   6.61
##     2 |           Скоріше не згодні |  780 | 19.02 |   19.02 |  25.63
##     3 | Важко сказати, згодні чи ні |  748 | 18.24 |   18.24 |  43.87
##     4 |              Скоріше згодні | 1431 | 34.89 |   34.89 |  78.76
##     5 |               Цілком згодні |  871 | 21.24 |   21.24 | 100.00
##  <NA> |                        <NA> |    0 |  0.00 |    <NA> |   <NA>
frq(df$pm2, weights = df$wt_UA4101)
## Політичні розбіжності між елітою та народом більші, ніж розбіжності у самому народі (xw) <numeric> 
## # total N=4100 valid N=4100 mean=3.97 sd=1.06
## 
## Value |                       Label |    N | Raw % | Valid % | Cum. %
## ---------------------------------------------------------------------
##     1 |            Зовсім не згодні |  145 |  3.54 |    3.54 |   3.54
##     2 |           Скоріше не згодні |  294 |  7.17 |    7.17 |  10.71
##     3 | Важко сказати, згодні чи ні |  623 | 15.20 |   15.20 |  25.90
##     4 |              Скоріше згодні | 1496 | 36.49 |   36.49 |  62.39
##     5 |               Цілком згодні | 1542 | 37.61 |   37.61 | 100.00
##  <NA> |                        <NA> |    0 |  0.00 |    <NA> |   <NA>
frq(df$pm4, weights = df$wt_UA4101)
## Нашою країною повинні керувати люди з народу, а не представники правлячої еліти (xw) <numeric> 
## # total N=4101 valid N=4101 mean=3.68 sd=1.19
## 
## Value |                       Label |    N | Raw % | Valid % | Cum. %
## ---------------------------------------------------------------------
##     1 |            Зовсім не згодні |  217 |  5.29 |    5.29 |   5.29
##     2 |           Скоріше не згодні |  565 | 13.78 |   13.78 |  19.07
##     3 | Важко сказати, згодні чи ні |  799 | 19.48 |   19.48 |  38.55
##     4 |              Скоріше згодні | 1264 | 30.82 |   30.82 |  69.37
##     5 |               Цілком згодні | 1256 | 30.63 |   30.63 | 100.00
##  <NA> |                        <NA> |    0 |  0.00 |    <NA> |   <NA>
frq(df$pm5, weights = df$wt_UA4101)
## Я хотів би, щоб мене у політиці представляв пересічний громадянин, а не професійний політик (xw) <numeric> 
## # total N=4101 valid N=4101 mean=2.80 sd=1.28
## 
## Value |                       Label |    N | Raw % | Valid % | Cum. %
## ---------------------------------------------------------------------
##     1 |            Зовсім не згодні |  778 | 18.97 |   18.97 |  18.97
##     2 |           Скоріше не згодні | 1058 | 25.80 |   25.80 |  44.77
##     3 | Важко сказати, згодні чи ні |  965 | 23.53 |   23.53 |  68.30
##     4 |              Скоріше згодні |  822 | 20.04 |   20.04 |  88.34
##     5 |               Цілком згодні |  478 | 11.66 |   11.66 | 100.00
##  <NA> |                        <NA> |    0 |  0.00 |    <NA> |   <NA>

3. Кореляційна матриця індикаторів

cor_matrix <- cor.wt(data = df[c("pm1", "pm2", "pm3", "pm4", "pm5")],
                     w = df$wt_UA4101, cor = TRUE)

kable(round(cor_matrix$r, 2), caption = "Кореляційна матриця індикаторів популізму") %>%
  kable_styling(bootstrap_options = c("striped", "hover"))
Кореляційна матриця індикаторів популізму
pm1 pm2 pm3 pm4 pm5
pm1 1.00 0.29 0.49 0.53 0.41
pm2 0.29 1.00 0.25 0.27 0.17
pm3 0.49 0.25 1.00 0.43 0.41
pm4 0.53 0.27 0.43 1.00 0.45
pm5 0.41 0.17 0.41 0.45 1.00
corrplot(cor_matrix$r, method = "color", type = "full", order = "original",
         tl.col = "darkgray", tl.cex = 0.8, number.cex = 0.7, addCoef.col = "darkgray")

4. Оцінка внутрішньої узгодженості

# Народоцентризм
alpha_narod <- psych::alpha(cor.wt(df[c("pm1", "pm3")], w = df$wt_UA4101)$r)

# Антиелітизм
alpha_anti <- psych::alpha(cor.wt(df[c("pm2", "pm4", "pm5")], w = df$wt_UA4101)$r)

data.frame(
  Шкала = c("Народоцентризм", "Антиелітизм"),
  Альфа = c(round(alpha_narod$total$raw_alpha, 2), round(alpha_anti$total$raw_alpha, 2))
) %>%
  kable(caption = "Зважена альфа Кронбаха для шкал") %>%
  kable_styling()
Зважена альфа Кронбаха для шкал
Шкала Альфа
Народоцентризм 0.65
Антиелітизм 0.56

5. Побудова індексів

df <- df %>%
  mutate(
    index_narod = rowMeans(select(., pm1, pm3), na.rm = FALSE),
    index_anti  = rowMeans(select(., pm2, pm4, pm5), na.rm = FALSE)
  )

mean_narod <- weighted.mean(df$index_narod, df$wt_UA4101, na.rm = TRUE)
mean_anti  <- weighted.mean(df$index_anti,  df$wt_UA4101, na.rm = TRUE)

data.frame(
  Індекс = c("Народоцентризм", "Антиеталізм"),
  Cереднє = c(round(mean_narod, 2), round(mean_anti, 2))
) %>%
  kable(caption = "Cередні значення індексів") %>%
  kable_styling()
Cередні значення індексів
Індекс Cереднє
Народоцентризм 3.52
Антиеталізм 3.48
cat("Стандартне відхилення індексу народоцентризма")
## Стандартне відхилення індексу народоцентризма
wtd.var(x=df$index_narod, weights=df$wt_UA4101) %>% sqrt() %>% round(2)
## [1] 1.04
cat("Стандартне відхилення індексу антиелітизму")
## Стандартне відхилення індексу антиелітизму
wtd.var(x=df$index_anti, weights=df$wt_UA4101) %>% sqrt() %>% round(2)
## [1] 0.87
weighted_correlation_result<-cor.wt(df[c("index_narod", "index_anti")], w = df$wt_UA4101)

# Виведення результатів
cat("Кореляція між індексами\n")
## Кореляція між індексами
print(weighted_correlation_result)
## Weighted Correlations 
## Call:cor.wt(data = df[c("index_narod", "index_anti")], w = df$wt_UA4101)
##             indx_nr indx_nt
## index_narod 1.00           
## index_anti  0.62    1.00

6. Кластерний аналіз

clust_vars <- df[, c("index_narod", "index_anti")]
obs_weights <- df$wt_UA4101

clust_result <- Wkmeans(
  dataset = clust_vars,
  k = 4,
  obs.weights = obs_weights,
  num.init = 1,
  max.iterations = 50,
  seed = 123
)
## [1] 1880.542
df$cluster <- clust_result$`Cluster Assignments`

cluster_centers <- as.data.frame(clust_result$`Cluster Centers`)
names(cluster_centers) <- c("Народоцентризм", "Антиелітизм")
rownames(cluster_centers) <- paste("Кластер", 1:4)

kable(round(cluster_centers, 2), caption = "Центри кластерів") %>%
  kable_styling()
Центри кластерів
Народоцентризм Антиелітизм
Кластер 1 4.52 4.20
Кластер 2 1.92 2.45
Кластер 3 3.57 2.85
Кластер 4 3.00 3.83

7. Візуалізація кластерів

plot(clust_vars, col = df$cluster, cex = log(obs_weights), pch = 16,
     xlab = "Народоцентризм", ylab = "Антиеталізм", main = "Кластеризація")
points(clust_result$`Cluster Centers`, pch = 8, cex = 4, col = 1:4)

8. Розподіл респондентів за кластерами

cat("Незважені дані")
## Незважені дані
frq(df$cluster)
## x <integer> 
## # total N=4101 valid N=4101 mean=2.29 sd=1.16
## 
## Value |    N | Raw % | Valid % | Cum. %
## ---------------------------------------
##     1 | 1488 | 36.28 |   36.28 |  36.28
##     2 |  759 | 18.51 |   18.51 |  54.79
##     3 | 1028 | 25.07 |   25.07 |  79.86
##     4 |  826 | 20.14 |   20.14 | 100.00
##  <NA> |    0 |  0.00 |    <NA> |   <NA>
cat("Зважені дані")
## Зважені дані
frq(df$cluster, weights = df$wt_UA4101)
## xw <integer> 
## # total N=4102 valid N=4102 mean=2.28 sd=1.16
## 
## Value |    N | Raw % | Valid % | Cum. %
## ---------------------------------------
##     1 | 1526 | 37.20 |   37.20 |  37.20
##     2 |  709 | 17.28 |   17.28 |  54.49
##     3 | 1040 | 25.35 |   25.35 |  79.84
##     4 |  827 | 20.16 |   20.16 | 100.00
##  <NA> |    0 |  0.00 |    <NA> |   <NA>

9. Порівняння результатів кластеризації

Назви кластерів (оригінальне дослідження)

  • Кластер 1: Орієнтація на елітизм

  • Кластер 2: Орієнтація на популізм

  • Кластер 3: Без орієнтації

  • Кластер 4: Орієнтація на народоцентризм

Назви кластерів (репліковане дослідження)

  • Кластер 1: Орієнтація на популізм

  • Кластер 2: Орієнтація на непопулізм (елітизм)

  • Кластер 3: Орієнтація на народоцентризм низьким антиелітизмом

  • Кластер 4: Орієнтація на антиелітизм з нейтральним народоцентризмом

З метою перевірки стійкості отриманої кластерної структури було проведено зіставлення результатів первинного (SPSS) та реплікованого (R) аналізу. Для цього було побудовано зважену таблицю сполучення.

tab_xtab(
  var.row = df$QCL_1,
  var.col = df$cluster,
  weight.by = df$wt_UA4101,
  statistics = "auto",
    # --- Налаштування вмісту таблиці ---
  show.row.prc = T,     # ПОКАЗАТИ ВІДСОТКИ ПО РЯДКАХ (дуже важливо!)
  show.exp = FALSE,        # Сховати очікувані частоти
    # --- Налаштування вигляду ---
  title = "Таблиця сполучення результатів кластеризації оригінального та реплікованого дослідження",
  var.labels = c("Кластери, отримані в SPSS", "Кластери, отримані в R"),
  encoding = "UTF-8"       # Важливо для коректного відображення кирилиці
)
Таблиця сполучення результатів кластеризації оригінального та реплікованого дослідження
Кластери, отримані в
SPSS
Кластери, отримані в
R
Total
1 2 3 4
1 0
0 %
601
87.6 %
85
12.4 %
0
0 %
686
100 %
2 1457
95.8 %
0
0 %
0
0 %
64
4.2 %
1521
100 %
3 0
0 %
108
8.7 %
376
30.2 %
763
61.2 %
1247
100 %
4 68
10.5 %
0
0 %
580
89.5 %
0
0 %
648
100 %
Total 1525
37.2 %
709
17.3 %
1041
25.4 %
827
20.2 %
4102
100 %
χ2=7634.678 · df=9 · Cramer’s V=0.788 · p=0.000

Спостерігається майже ідеальна відповідність для трьох кластерів: «Орієнтація на популізм» (95.8% збігу), «Орієнтація на елітизм» (87.6% збігу) та «Орієнтація на народоцентризм» (89.5% збігу).
Ключова аналітична перевага реплікованого дослідження полягає у диференціації первинного кластера «Без орієнтації». Ця гетерогенна група була успішно розділена на два змістовні сегменти: «Орієнтація на антиелітизм з нейтральним народоцентризмом» (61.2%) та «Орієнтація на народоцентризм з низьким антиелітизмом» (30.2%).
Таким чином, кластерне рішення, отримане в R, є більш обґрунтованим, оскільки воно не лише відтворює стабільні сегменти, але й надає змістовну інтерпретацію раніше невизначеній групі респондентів.

10. Додатковий аналіз: доцільність використання єдиного індексу популізму

Хоча реплікація та порівняння кластерних рішень є центральним завданням даної роботи, виявлені в ході аналізу низькі показники надійності (альфа Кронбаха) для окремих шкал спонукають до більш глибокого методологічного аналізу. Як було зазначено, шкала народоцентризму має спірний показник надійності (α = 0,65), а шкала антиелітизму — низький (α = 0,57). Використання індексів з такою низькою внутрішньою узгодженістю для подальшого аналізу (зокрема, кластерного) є проблематичним, оскільки вони можуть містити значну похибку вимірювання.
Це спонукає до перевірки альтернативної гіпотези: чи не є «народоцентризм» та «антиелітизм» у даному вимірі двома проявами одного латентного конструкту — «популізму»? Якщо ці два виміри настільки тісно пов’язані у свідомості респондентів, що є невід’ємними частинами єдиного цілого, то об’єднання всіх пунктів в одну шкалу має показати вищу надійність.

Для перевірки цієї гіпотези було розраховано альфу Кронбаха для об’єднаної шкали з п’яти пунктів. Результат виявився значно вищим: Альфа Кронбаха для єдиної 5-пунктової шкали популізму: α = 0,75.

cat("Значення коефіцієнта альфа Кронбаха для змінних індексу популізму")
## Значення коефіцієнта альфа Кронбаха для змінних індексу популізму
psych::alpha(cor_matrix$r)$total$raw_alpha%>% round(2)
## [1] 0.75
df <- df %>%
  mutate(
    index_p = rowMeans(select(., pm1, pm3, pm2, pm4, pm5), na.rm = FALSE)
  )

mean_index_p <- weighted.mean(df$index_p, df$wt_UA4101, na.rm = TRUE)


cat("Середнє значення шкали з 5 пунктів")
## Середнє значення шкали з 5 пунктів
round(mean_index_p,2) 
## [1] 3.5
cat("стандартне відхилення адитивного індексу")
## стандартне відхилення адитивного індексу
wtd.var(x=df$index_p, weights=df$wt_UA4101) %>% sqrt() %>% round(2)
## [1] 0.84

Інтерпретація та наслідки
Статистичне обґрунтування. Показник α = 0,75 є прийнятним і свідчить про задовільну внутрішню узгодженість. Це означає, що всі п’ять запитань разом працюють значно краще для вимірювання єдиної концепції, ніж окремі підгрупи запитань для вимірювання її компонентів. Спільна дисперсія, що пояснюється конструктом «популізм», є більшою за ту, що пояснюється окремо «народоцентризмом» та «антиелітизмом».
Теоретичне обґрунтування. Цей емпіричний результат чудово узгоджується з класичним визначенням популізму як єдиної «тонкої» ідеології, що складається з двох нерозривних елементів: апеляції до «чистого народу» (народоцентризм) та протиставлення його «корумпованій еліті» (антиелітизм). Дані показують, що для респондентів ці дві ідеї настільки переплетені, що розділяти їх штучно — означає втрачати надійність вимірювання.

ggplot(df, aes(x = index_p, weight = wt_UA4101)) +
  geom_histogram(
    binwidth = 0.25,      # Ширина стовпчика (можна налаштувати)
    fill = "#4682B4",     # Колір заповнення
    color = "white",      # Колір контуру
    alpha = 0.8
  ) +
  labs(
    title = "Зважений розподіл індексу популізму",
    subtitle = "Вісь Y відображає зважену кількість респондентів",
    x = "Значення індексу популізму (1-5)",
    y = "Зважена кількість"
  ) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold"),
    plot.subtitle = element_text(hjust = 0.5, size = 11)
  )

Візуальний аналіз розподілу єдиного індексу популізму та валідація кластерної структури
Після обґрунтування доцільності використання єдиного 5-пунктового індексу популізму (α = 0,75), було проведено аналіз його розподілу у вибірці з метою візуальної оцінки структури населення за рівнем популістських орієнтацій. Гістограма розподілу (див. рисунок) демонструє ключову особливість — її виражений мультимодальний характер. Відхилення від нормального (гаусового) розподілу та наявність кількох чітко виражених піків (мод) свідчать про те, що українське суспільство не є гомогенним у своєму ставленні до популізму, а складається з кількох відмінних за своїми поглядами груп.

Детальний аналіз гістограми дозволяє ідентифікувати щонайменше три основні скупчення:
Сегмент «Непопулістів (елітистів)» - зліва на графіку, в діапазоні низьких значень індексу (приблизно 1.0–2.5), спостерігається чітко окреслений, хоча й відносно нечисленний, сегмент. Він репрезентує респондентів, які послідовно не погоджуються з популістськими тезами. Цей сегмент ідеально відповідає кластеру «Орієнтація на непопулізм (елітизм)».
Сегмент «Популістів» - на протилежному полюсі, в діапазоні високих значень індексу (приблизно 4.0–5.0), формується другий потужний пік. Він об’єднує респондентів, які демонструють стабільну та високу підтримку популістських ідей, що повністю відповідає кластеру «Орієнтація на популізм».
Гетерогенний центральний сегмент - особливу аналітичну цінність має широка центральна частина розподілу (приблизно 2.75–4.0). гомогенної групи «поміркованих» або «невизначених».

Статистики єдиного індексу популізму за кластерами
Назва кластера N (зважене) Середнє Ст. відхилення
Орієнтація на популізм 1525.65 4.33 0.39
Орієнтація на непопулізм (елітизм) 708.85 2.24 0.46
Орієнтація на народоцентризм з низьким антиелітизмом 1039.65 3.14 0.35
Орієнтація на антиелітизм з нейтральним народоцентризмом 826.85 3.50 0.33

Валідація кластерної структури за допомогою єдиного індексу популізму
Для остаточної валідації отриманого в R кластерного рішення було проведено аналіз середніх значень єдиного 5-пунктового індексу популізму для кожного з чотирьох кластерів. Ієрархічність та диференціація кластерів. Середні значення вибудовують кластери в логічну та послідовну ієрархію за зростанням рівня популістських орієнтацій: Непопулісти (2.24) → Народоцентристи (3.14) → Антиелітисти (3.50) → Популісти (4.33).

# 1. Список змінних, які потрібно включити
variables_to_export <- c("pm1", "pm2", "pm3", "pm4", "pm5", "wt_UA4101", "index_narod", "index_anti", "index_p", "cluster", "QCL_1")

# 2. Перевірка, чи всі потрібні змінні існують у датафреймі df
# Це важливо, щоб уникнути помилки, якщо якась змінна відсутня
missing_vars <- setdiff(variables_to_export, names(df))

if (length(missing_vars) > 0) {
  stop(paste("Помилка: Наступні змінні відсутні у датафреймі 'df' і не можуть бути експортовані:", 
             paste(missing_vars, collapse = ", ")))
} else {
  cat("Всі вказані змінні присутні у датафреймі.\n")

  # 3. Вибір потрібних стовпців з датафрейму df
  # Варіант з базовим R (як у вашому прикладі):
  df_for_spss <- df[, variables_to_export, drop = FALSE] # drop = FALSE важливо, якщо вибирається лише один стовпець

  # Альтернативний варіант з dplyr (якщо ви його використовуєте):
  # df_for_spss <- df %>%
  #   select(all_of(variables_to_export))

  # Перевірка (опціонально)
  # cat("Структура датафрейму для експорту:\n")
  # print(head(df_for_spss))
  # print(str(df_for_spss))

  # 4. Вкажіть бажаний шлях та ім'я файлу
  output_file_path <- "my_data_for_spss.sav" # Змініть на потрібне ім'я та шлях

  # 5. Запис датафрейму у файл SPSS (.sav)
  tryCatch({
    write_sav(df_for_spss, path = output_file_path)
    cat(paste0("Файл успішно збережено як: ", output_file_path, "\n"))
  }, error = function(e) {
    cat(paste0("Помилка при збереженні файлу SPSS: ", e$message, "\n"))
    cat("Можливі причини: немає прав на запис у вказану директорію, або шлях вказано невірно.\n")
  })
}
## Всі вказані змінні присутні у датафреймі.
## Файл успішно збережено як: my_data_for_spss.sav

Додаток. Синтаксис SPSS

# WEIGHT BY wt_UA4101.

# Compute ind_narod=(pm1+pm3)/2.
# Compute ind_anti=(pm2+pm4+pm5)/3.

# DESCRIPTIVES
#    /VARIABLES= ind_narod ind_anti.


#  RELIABILITY
#  /VARIABLES=pm1 pm3
#  /SCALE('ALL VARIABLES') ALL
#  /MODEL=ALPHA.
    
# RELIABILITY
#  /VARIABLES=pm2 pm4 pm5
#  /SCALE('ALL VARIABLES') ALL
#  /MODEL=ALPHA.

# QUICK CLUSTER ind_narod ind_anti
#  /MISSING=LISTWISE
#  /CRITERIA=CLUSTER(4) MXITER(10) CONVERGE(0)
#  /METHOD=KMEANS(NOUPDATE)
#  /SAVE CLUSTER
#  /PRINT INITIAL.

Посилання

Горбачик А.П. Структура населення України за орієнтаціями на популізм. Популістські орієнтації в українському суспільстві / за наук. ред. О. Резніка. Київ: Інститут соціології НАН України, 2024. С. 135-143.