Респонденты оценивали пять позиций по отношению к религии:
Оценки производились по 28 шкалам-дескрипторам (d1–d28). Данные представляют собой средние оценки респондентов.
Для анализа используется пакет FactoMineR и визуализация через factoextra.
# Установка и загрузка необходимых пакетов
if (!require("FactoMineR")) install.packages("FactoMineR", repos = "https://cran.r-project.org")
if (!require("factoextra")) install.packages("factoextra", repos = "https://cran.r-project.org")
if (!require("readxl")) install.packages("readxl", repos = "https://cran.r-project.org")
if (!require("knitr")) install.packages("knitr", repos = "https://cran.r-project.org")
if (!require("kableExtra")) install.packages("kableExtra", repos = "https://cran.r-project.org")
if (!require("corrplot")) install.packages("corrplot", repos = "https://cran.r-project.org")
library(FactoMineR)
library(factoextra)
library(readxl)
library(knitr)
library(kableExtra)
library(corrplot)
# Чтение данных из Excel-файла
# Если файл .sav — используйте: library(haven); data <- read_sav("religions.sav")
data <- read_excel("religions.xlsx")
# Убираем пустые строки (если есть)
data <- data[!is.na(data$Group.1) & data$Group.1 != "", ]
# Присваиваем имена строк (роли)
rownames(data) <- data$Group.1
# Оставляем только числовые столбцы (дескрипторы d1-d28)
data_num <- data[, -1]
# Преобразуем в числовой формат
data_num <- as.data.frame(lapply(data_num, as.numeric))
rownames(data_num) <- data$Group.1
# Просмотр данных
kable(round(data_num, 3), caption = "Таблица 1 — Исходные данные (средние оценки по дескрипторам)") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE, font_size = 11) %>%
scroll_box(width = "100%")
| d1 | d2 | d3 | d4 | d5 | d6 | d7 | d8 | d9 | d10 | d11 | d12 | d13 | d14 | d15 | d16 | d17 | d18 | d19 | d20 | d21 | d22 | d23 | d24 | d25 | d26 | d27 | d28 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Я верующий | 4.143 | 4.167 | 4.149 | 4.132 | 4.033 | 3.989 | 3.678 | 3.665 | 3.885 | 3.841 | 3.883 | 4.120 | 3.923 | 3.663 | 3.680 | 3.967 | 3.962 | 3.945 | 3.868 | 3.709 | 4.055 | 3.681 | 3.956 | 4.005 | 4.006 | 3.725 | 3.950 | 3.984 |
| Я верю в Бога по-своему | 3.950 | 3.961 | 3.838 | 3.771 | 3.772 | 3.657 | 3.654 | 3.620 | 3.609 | 3.408 | 3.570 | 3.817 | 3.742 | 3.573 | 3.654 | 3.811 | 3.821 | 3.810 | 3.590 | 3.579 | 3.760 | 3.383 | 3.821 | 3.793 | 3.737 | 3.606 | 3.883 | 3.837 |
| Не могу сказать, верю я или нет | 3.770 | 3.777 | 3.618 | 3.567 | 3.612 | 3.525 | 3.565 | 3.475 | 3.511 | 3.152 | 3.483 | 3.584 | 3.581 | 3.472 | 3.539 | 3.525 | 3.612 | 3.607 | 3.320 | 3.497 | 3.585 | 3.101 | 3.719 | 3.652 | 3.528 | 3.508 | 3.787 | 3.638 |
| Религия меня не интересует | 3.771 | 3.817 | 3.616 | 3.581 | 3.584 | 3.500 | 3.539 | 3.567 | 3.551 | 3.006 | 3.358 | 3.383 | 3.559 | 3.354 | 3.508 | 3.494 | 3.601 | 3.665 | 3.141 | 3.489 | 3.514 | 2.832 | 3.689 | 3.441 | 3.425 | 3.489 | 3.607 | 3.522 |
| Атеист | 3.654 | 3.661 | 3.464 | 3.369 | 3.422 | 3.341 | 3.458 | 3.461 | 3.520 | 2.883 | 3.376 | 3.239 | 3.444 | 3.315 | 3.525 | 3.411 | 3.559 | 3.592 | 3.117 | 3.390 | 3.330 | 2.742 | 3.514 | 3.392 | 3.307 | 3.428 | 3.567 | 3.517 |
Комментарий: Загружены данные по 5 позициям (строки) и 28 дескрипторам (столбцы). Значения представляют собой средние оценки респондентов по каждой паре «позиция × дескриптор».
# Корреляция между дескрипторами (транспонируем, т.к. дескрипторы в столбцах)
cor_matrix <- cor(data_num)
corrplot(cor_matrix, method = "color", type = "upper",
tl.col = "black", tl.cex = 0.7,
title = "Корреляционная матрица дескрипторов",
mar = c(0, 0, 2, 0))
Комментарий: Корреляционная матрица показывает взаимосвязи между 28 дескрипторами. Высокая корреляция указывает на то, что дескрипторы измеряют сходные аспекты восприятия, что является предпосылкой для снижения размерности.
# Выполнение PCA с помощью FactoMineR
# scale.unit = TRUE — стандартизация переменных
# ncp = 5 — сохраняем до 5 компонент (максимум для 5 наблюдений)
# graph = FALSE — графики построим отдельно
res.pca <- PCA(data_num, scale.unit = TRUE, ncp = 4, graph = FALSE)
Комментарий: PCA выполнен с помощью функции
PCA() из пакета FactoMineR. Данные
стандартизированы (scale.unit = TRUE), чтобы дескрипторы с
разным масштабом вносили сопоставимый вклад. Максимальное число
компонент = min(n-1, p) = min(4, 28) = 4.
# Собственные значения
eig <- get_eigenvalue(res.pca)
kable(round(eig, 4),
caption = "Таблица 2 — Собственные значения и объяснённая дисперсия") %>%
kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
| eigenvalue | variance.percent | cumulative.variance.percent | |
|---|---|---|---|
| Dim.1 | 26.6564 | 95.2015 | 95.2015 |
| Dim.2 | 0.6584 | 2.3514 | 97.5529 |
| Dim.3 | 0.3854 | 1.3763 | 98.9292 |
| Dim.4 | 0.2998 | 1.0708 | 100.0000 |
# Scree plot — диаграмма каменистой осыпи
fviz_eig(res.pca, addlabels = TRUE, ylim = c(0, 100),
main = "Собственные значения компонент",
xlab = "Главная компонента", ylab = "Процент объяснённой дисперсии") +
theme_minimal()
Рис. 1 — Диаграмма каменистой осыпи (Scree plot)
Комментарий: Первая главная компонента объясняет подавляющую долю дисперсии данных. Диаграмма каменистой осыпи (scree plot) позволяет определить оптимальное число компонент: выбираются компоненты до «перегиба» кривой. В нашем случае первые 2 компоненты уже объясняют основную часть вариации.
var_coord <- res.pca$var$coord
kable(round(var_coord, 4),
caption = "Таблица 3 — Координаты дескрипторов (корреляции с компонентами)") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE, font_size = 11) %>%
scroll_box(width = "100%", height = "400px")
| Dim.1 | Dim.2 | Dim.3 | Dim.4 | |
|---|---|---|---|---|
| d1 | 0.9960 | 0.0867 | 0.0220 | 0.0005 |
| d2 | 0.9857 | 0.1560 | 0.0562 | -0.0303 |
| d3 | 0.9933 | 0.1088 | -0.0300 | -0.0264 |
| d4 | 0.9862 | 0.1363 | -0.0125 | -0.0926 |
| d5 | 0.9938 | 0.0616 | 0.0080 | -0.0923 |
| d6 | 0.9841 | 0.1064 | -0.0638 | -0.1271 |
| d7 | 0.9533 | -0.1333 | 0.2690 | -0.0330 |
| d8 | 0.8857 | 0.3344 | 0.2969 | 0.1246 |
| d9 | 0.9108 | 0.3057 | -0.2775 | -0.0016 |
| d10 | 0.9955 | -0.0131 | -0.0892 | -0.0280 |
| d11 | 0.9592 | -0.0145 | -0.2810 | -0.0265 |
| d12 | 0.9915 | -0.1210 | -0.0035 | -0.0479 |
| d13 | 0.9985 | 0.0398 | 0.0276 | -0.0245 |
| d14 | 0.9723 | -0.2329 | 0.0190 | -0.0097 |
| d15 | 0.9401 | -0.1264 | -0.0136 | 0.3163 |
| d16 | 0.9902 | -0.0059 | 0.0460 | 0.1320 |
| d17 | 0.9874 | 0.0424 | -0.0164 | 0.1515 |
| d18 | 0.9673 | 0.1989 | 0.0253 | 0.1555 |
| d19 | 0.9882 | -0.1065 | -0.0839 | 0.0713 |
| d20 | 0.9894 | 0.0693 | 0.0483 | -0.1181 |
| d21 | 0.9944 | 0.0083 | 0.0115 | -0.1044 |
| d22 | 0.9851 | -0.1701 | -0.0232 | 0.0051 |
| d23 | 0.9695 | -0.0163 | 0.1675 | -0.1780 |
| d24 | 0.9768 | -0.2033 | -0.0554 | -0.0372 |
| d25 | 0.9987 | -0.0397 | -0.0216 | -0.0219 |
| d26 | 0.9992 | 0.0350 | -0.0078 | -0.0167 |
| d27 | 0.9344 | -0.3505 | 0.0540 | -0.0339 |
| d28 | 0.9825 | -0.1319 | -0.0560 | 0.1195 |
Комментарий: Координаты (loadings) показывают корреляцию каждого дескриптора с каждой главной компонентой. Высокие абсолютные значения указывают на сильную связь дескриптора с данной компонентой.
var_contrib <- res.pca$var$contrib
kable(round(var_contrib, 3),
caption = "Таблица 4 — Вклады дескрипторов в компоненты (%)") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE, font_size = 11) %>%
scroll_box(width = "100%", height = "400px")
| Dim.1 | Dim.2 | Dim.3 | Dim.4 | |
|---|---|---|---|---|
| d1 | 3.721 | 1.141 | 0.126 | 0.000 |
| d2 | 3.645 | 3.698 | 0.819 | 0.305 |
| d3 | 3.701 | 1.798 | 0.233 | 0.233 |
| d4 | 3.649 | 2.823 | 0.041 | 2.862 |
| d5 | 3.705 | 0.576 | 0.017 | 2.840 |
| d6 | 3.633 | 1.720 | 1.058 | 5.390 |
| d7 | 3.409 | 2.701 | 18.778 | 0.364 |
| d8 | 2.943 | 16.981 | 22.880 | 5.179 |
| d9 | 3.112 | 14.198 | 19.978 | 0.001 |
| d10 | 3.718 | 0.026 | 2.066 | 0.262 |
| d11 | 3.452 | 0.032 | 20.491 | 0.233 |
| d12 | 3.688 | 2.222 | 0.003 | 0.766 |
| d13 | 3.740 | 0.241 | 0.198 | 0.200 |
| d14 | 3.546 | 8.236 | 0.094 | 0.032 |
| d15 | 3.315 | 2.425 | 0.048 | 33.378 |
| d16 | 3.678 | 0.005 | 0.549 | 5.808 |
| d17 | 3.658 | 0.273 | 0.070 | 7.657 |
| d18 | 3.510 | 6.006 | 0.166 | 8.068 |
| d19 | 3.663 | 1.722 | 1.827 | 1.695 |
| d20 | 3.672 | 0.729 | 0.604 | 4.652 |
| d21 | 3.710 | 0.011 | 0.035 | 3.637 |
| d22 | 3.641 | 4.397 | 0.139 | 0.009 |
| d23 | 3.526 | 0.041 | 7.277 | 10.572 |
| d24 | 3.580 | 6.275 | 0.797 | 0.461 |
| d25 | 3.742 | 0.240 | 0.121 | 0.160 |
| d26 | 3.746 | 0.186 | 0.016 | 0.093 |
| d27 | 3.275 | 18.657 | 0.756 | 0.384 |
| d28 | 3.621 | 2.640 | 0.813 | 4.760 |
# Топ вкладов в первую компоненту
fviz_contrib(res.pca, choice = "var", axes = 1, top = 28,
title = "Вклады дескрипторов в компоненту 1") +
theme_minimal()
Рис. 2 — Вклады дескрипторов в PC1
# Топ вкладов во вторую компоненту
fviz_contrib(res.pca, choice = "var", axes = 2, top = 28,
title = "Вклады дескрипторов в компоненту 2") +
theme_minimal()
Рис. 3 — Вклады дескрипторов в PC2
Комментарий: Вклад (contribution) показывает, какую долю дисперсии данной компоненты объясняет каждый дескриптор. Красная пунктирная линия — порог равномерного вклада (1/28 ≈ 3,57%). Дескрипторы выше этой линии вносят вклад выше среднего.
var_cos2 <- res.pca$var$cos2
kable(round(var_cos2, 4),
caption = "Таблица 5 — Качество представления дескрипторов (cos²)") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE, font_size = 11) %>%
scroll_box(width = "100%", height = "400px")
| Dim.1 | Dim.2 | Dim.3 | Dim.4 | |
|---|---|---|---|---|
| d1 | 0.9920 | 0.0075 | 0.0005 | 0.0000 |
| d2 | 0.9716 | 0.0243 | 0.0032 | 0.0009 |
| d3 | 0.9866 | 0.0118 | 0.0009 | 0.0007 |
| d4 | 0.9727 | 0.0186 | 0.0002 | 0.0086 |
| d5 | 0.9876 | 0.0038 | 0.0001 | 0.0085 |
| d6 | 0.9684 | 0.0113 | 0.0041 | 0.0162 |
| d7 | 0.9088 | 0.0178 | 0.0724 | 0.0011 |
| d8 | 0.7845 | 0.1118 | 0.0882 | 0.0155 |
| d9 | 0.8295 | 0.0935 | 0.0770 | 0.0000 |
| d10 | 0.9911 | 0.0002 | 0.0080 | 0.0008 |
| d11 | 0.9201 | 0.0002 | 0.0790 | 0.0007 |
| d12 | 0.9831 | 0.0146 | 0.0000 | 0.0023 |
| d13 | 0.9971 | 0.0016 | 0.0008 | 0.0006 |
| d14 | 0.9453 | 0.0542 | 0.0004 | 0.0001 |
| d15 | 0.8838 | 0.0160 | 0.0002 | 0.1001 |
| d16 | 0.9804 | 0.0000 | 0.0021 | 0.0174 |
| d17 | 0.9750 | 0.0018 | 0.0003 | 0.0230 |
| d18 | 0.9356 | 0.0395 | 0.0006 | 0.0242 |
| d19 | 0.9765 | 0.0113 | 0.0070 | 0.0051 |
| d20 | 0.9789 | 0.0048 | 0.0023 | 0.0139 |
| d21 | 0.9889 | 0.0001 | 0.0001 | 0.0109 |
| d22 | 0.9705 | 0.0289 | 0.0005 | 0.0000 |
| d23 | 0.9400 | 0.0003 | 0.0280 | 0.0317 |
| d24 | 0.9542 | 0.0413 | 0.0031 | 0.0014 |
| d25 | 0.9975 | 0.0016 | 0.0005 | 0.0005 |
| d26 | 0.9984 | 0.0012 | 0.0001 | 0.0003 |
| d27 | 0.8731 | 0.1228 | 0.0029 | 0.0011 |
| d28 | 0.9652 | 0.0174 | 0.0031 | 0.0143 |
Комментарий: Cos² показывает, насколько хорошо каждый дескриптор представлен в пространстве выбранных компонент. Значения близкие к 1 означают отличное представление.
ind_coord <- res.pca$ind$coord
kable(round(ind_coord, 4),
caption = "Таблица 6 — Координаты ролей в пространстве компонент") %>%
kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
| Dim.1 | Dim.2 | Dim.3 | Dim.4 | |
|---|---|---|---|---|
| Я верующий | 8.4670 | 0.4982 | -0.5737 | -0.1543 |
| Я верю в Бога по-своему | 2.9922 | -0.6046 | 0.7637 | 0.6916 |
| Не могу сказать, верю я или нет | -1.9818 | -1.1764 | -0.1006 | -0.7190 |
| Религия меня не интересует | -3.3602 | 1.1269 | 0.6625 | -0.3905 |
| Атеист | -6.1172 | 0.1559 | -0.7519 | 0.5722 |
ind_contrib <- res.pca$ind$contrib
kable(round(ind_contrib, 3),
caption = "Таблица 7 — Вклады ролей в компоненты (%)") %>%
kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
| Dim.1 | Dim.2 | Dim.3 | Dim.4 | |
|---|---|---|---|---|
| Я верующий | 53.788 | 7.540 | 17.084 | 1.588 |
| Я верю в Бога по-своему | 6.718 | 11.106 | 30.270 | 31.906 |
| Не могу сказать, верю я или нет | 2.947 | 42.039 | 0.525 | 34.489 |
| Религия меня не интересует | 8.472 | 38.576 | 22.779 | 10.173 |
| Атеист | 28.075 | 0.739 | 29.342 | 21.844 |
fviz_contrib(res.pca, choice = "ind", axes = 1,
title = "Вклады ролей (позиций) в компоненту 1") +
theme_minimal()
Рис. 4 — Вклады ролей в PC1
fviz_contrib(res.pca, choice = "ind", axes = 2,
title = "Вклады ролей (позиций) в компоненту 2") +
theme_minimal()
Рис. 5 — Вклады ролей в PC2
Комментарий: Вклады ролей показывают, какие позиции по отношению к религии больше всего «определяют» каждую компоненту. Высокий вклад означает, что данная позиция сильно дифференцирована от остальных по данной компоненте.
fviz_pca_ind(res.pca,
col.ind = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE,
title = "Карта ролей (позиций) в пространстве PC1–PC2",
xlab = paste0("PC1 (", round(eig[1, 2], 1), "%)"),
ylab = paste0("PC2 (", round(eig[2, 2], 1), "%)")) +
theme_minimal()
Рис. 6 — Карта ролей в пространстве PC1–PC2
Комментарий: Карта ролей показывает расположение пяти религиозных позиций в пространстве первых двух главных компонент. Близкие позиции имеют сходный профиль оценок по дескрипторам. Цвет отражает качество представления (cos²): чем теплее цвет, тем лучше позиция представлена в данном пространстве.
fviz_pca_var(res.pca,
col.var = "contrib",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE,
title = "Карта дескрипторов в пространстве PC1–PC2",
xlab = paste0("PC1 (", round(eig[1, 2], 1), "%)"),
ylab = paste0("PC2 (", round(eig[2, 2], 1), "%)")) +
theme_minimal()
Рис. 7 — Карта дескрипторов в пространстве PC1–PC2
Комментарий: Карта переменных показывает, как 28 дескрипторов соотносятся с главными компонентами. Длина стрелки отражает качество представления. Направление — корреляцию с компонентами. Дескрипторы, направленные в одну сторону, положительно коррелируют; в противоположную — отрицательно.
fviz_pca_biplot(res.pca,
repel = TRUE,
col.var = "#5C6B3C", # дескрипторы — зелёные
col.ind = "#CC3333", # роли — красные
title = "Биплот: роли × дескрипторы (PC1–PC2)",
xlab = paste0("PC1 (", round(eig[1, 2], 1), "%)"),
ylab = paste0("PC2 (", round(eig[2, 2], 1), "%)")) +
theme_minimal()
Рис. 8 — Биплот: роли и дескрипторы в пространстве PC1–PC2
Комментарий: Биплот совмещает карту ролей (красные точки) и карту дескрипторов (зелёные стрелки). Это позволяет интерпретировать, какие дескрипторы ассоциируются с какими позициями. Позиция, расположенная в направлении стрелки дескриптора, получает по нему более высокие оценки.
# Сводка PCA
summary(res.pca)
##
## Call:
## PCA(X = data_num, scale.unit = TRUE, ncp = 4, graph = FALSE)
##
##
## Eigenvalues
## Dim.1 Dim.2 Dim.3 Dim.4
## Variance 26.656 0.658 0.385 0.300
## % of var. 95.201 2.351 1.376 1.071
## Cumulative % of var. 95.201 97.553 98.929 100.000
##
## Individuals
## Dist Dim.1 ctr cos2 Dim.2 ctr
## Я верующий | 8.502 | 8.467 53.788 0.992 | 0.498 7.540
## Я верю в Бога по-своему | 3.222 | 2.992 6.718 0.863 | -0.605 11.106
## Не могу сказать, верю я или нет | 2.416 | -1.982 2.947 0.673 | -1.176 42.039
## Религия меня не интересует | 3.627 | -3.360 8.472 0.858 | 1.127 38.576
## Атеист | 6.192 | -6.117 28.075 0.976 | 0.156 0.739
## cos2 Dim.3 ctr cos2
## Я верующий 0.003 | -0.574 17.084 0.005 |
## Я верю в Бога по-своему 0.035 | 0.764 30.270 0.056 |
## Не могу сказать, верю я или нет 0.237 | -0.101 0.525 0.002 |
## Религия меня не интересует 0.097 | 0.663 22.779 0.033 |
## Атеист 0.001 | -0.752 29.342 0.015 |
##
## Variables (the 10 first)
## Dim.1 ctr cos2 Dim.2 ctr cos2
## d1 | 0.996 3.721 0.992 | 0.087 1.141 0.008 |
## d2 | 0.986 3.645 0.972 | 0.156 3.698 0.024 |
## d3 | 0.993 3.701 0.987 | 0.109 1.798 0.012 |
## d4 | 0.986 3.649 0.973 | 0.136 2.823 0.019 |
## d5 | 0.994 3.705 0.988 | 0.062 0.576 0.004 |
## d6 | 0.984 3.633 0.968 | 0.106 1.720 0.011 |
## d7 | 0.953 3.409 0.909 | -0.133 2.701 0.018 |
## d8 | 0.886 2.943 0.784 | 0.334 16.981 0.112 |
## d9 | 0.911 3.112 0.830 | 0.306 14.198 0.093 |
## d10 | 0.996 3.718 0.991 | -0.013 0.026 0.000 |
## Dim.3 ctr cos2
## d1 0.022 0.126 0.000 |
## d2 0.056 0.819 0.003 |
## d3 -0.030 0.233 0.001 |
## d4 -0.013 0.041 0.000 |
## d5 0.008 0.017 0.000 |
## d6 -0.064 1.058 0.004 |
## d7 0.269 18.778 0.072 |
## d8 0.297 22.880 0.088 |
## d9 -0.277 19.978 0.077 |
## d10 -0.089 2.066 0.008 |
Основные выводы:
Первая компонента (PC1) объясняет основную долю вариации и отражает градиент религиозности: от «Я верующий» до «Атеист». Дескрипторы с наибольшими вкладами в PC1 — это шкалы, которые наиболее сильно дифференцируют верующих от неверующих.
Вторая компонента (PC2) может отражать более тонкие различия, например, между позициями «Я верю в Бога по-своему» и «Не могу сказать, верю я или нет».
Позиции выстраиваются в упорядоченный градиент: от «Я верующий» (крайние положительные координаты по PC1) через промежуточные позиции к «Атеист» (крайние отрицательные).
Дескрипторы, которые вносят наибольший вклад в PC1, являются наиболее семантически значимыми для различения позиций по отношению к религии.
Биплот позволяет определить, какие конкретные дескрипторы ассоциируются с каждой позицией, что даёт содержательную интерпретацию семантического пространства.
Анализ выполнен с использованием пакетов FactoMineR и factoextra в R.