Шкала Лікерта, розроблена Рензісом Лікертом у 1932 році, є одним із найпоширеніших інструментів вимірювання в соціальних науках. Первинно створена для оцінювання ставлень у сфері міжнародних відносин, расових взаємин та економічних конфліктів, вона стала стандартним інструментом у різноманітних галузях досліджень. Лікерт запропонував власний метод оцифрування альтернатив пункту («сигма-метод») (Likert, 1932). Пізніше були запропоновані інші методи нормалізації на основі рангів для стандартизованих тестових балів (Soloman & Sawilowsky, 2009). Проте в багатьох дослідженнях досі використовувався спрощений підхід, де альтернативи кодувалися послідовними цифрами натурального ряду. Питання щодо рівня вимірювання пункту шкали Лікерта та коректних способів аналізу отриманих даних залишаються предметом наукової дискусії.
Існують три базових підходи до концептуалізації вимірювання у пункту шкали Лікерта, кожен з яких передбачає специфічні методи трансформації первинних даних та подальшого аналізу. Шкала пункту може розглядатися як інтервальна (псевдометрична), порядкова та номінальна.
Прихильники цього поширеного в соціальних та поведінських науках
підходу розглядають категорії пункту шкали Лікерта як дискретні точки
неперервного континууму. Ваги задаються опріорно, зазавичай з однаковими
відстаннями між категоріями. Це дозволяє вважати шкалу псевдометричною
та застосовувати параметричні методи статистичного аналізу. Критичні
зауваження до цього підходу:
Відсутність емпіричних доказів еквідистантності між суміжними
категоріями.
Обмежений діапазон можливих значень, що ускладнює застосування методів
для неперервних даних.
Проблематичність інтерпретації середніх значень для дискретних
категоріальних даних.
Представники цього підходу слушно наголошують на порядковій природі даних, що передбачає можливість встановлення відношень “більше-менше” між категоріями, але не дозволяє визначити величину різниці між ними.
Методологічні обмеження «ординального» підходу:
Обмежений діапазон можливих значень та проблема зв’язаних рангів при
застосуванні непараметричних коефіцієнтів кореляції.
Втрата інформації при редукції даних до рангів.
Складність інтерпретації результатів непараметричних методів.
В межах цього підходу відбувається трансформація категоріальних даних шкали Лікерта у числову форму, що дозволяє розширити можливості їх статистичного аналізу при збереженні методологічної коректності. Підвищення рівня вимірювання відбувається з огляду на емпіричний розподіл даних.
Для певних дослідницьких завдань шкала пункту може вважатися номінальною. В цьому разі вихідна шкала може додатково дихотомізуватися а категорії шкали об’єднуватися.
За допомогою порядкової логістичної регресії можна перевірити рівномірність відстаней між рівнями впорядкованої категоріальної змінної, використовуючи пороги, що визначаються порядковою логістичною регресією. Це може бути корисним при аналізі шкал Лікерта або інших шкал із впорядкованими категоріями, щоб упевнитися, що інтерпретація шкали як «майже інтервальної» є більш-менш обґрунтованою.
Основні способи для оцифрування градацій пункту шкали Лікерта
Лінійна нормалізація [0,1]. Перетворює дані в діапазон від 0 до
1.
Зберігає відносні відстані між значеннями.
Корисна для порівняння з іншими нормалізованими даними.
Z-стандартизація. Перетворює дані до середнього 0 та стандартного
відхилення 1.
Дозволяє порівнювати значення з різних шкал.
Корисна для параметричних тестів.
Рангова трансформація.
Перетворює значення в їх відносні ранги.
Корисна для непараметричних методів.
Нормалізує розподіл даних
Перетворення у нормальні бали (зворотне нормальне
перетворення).
Метода Блома.
Метод Тьюкі.
Метод ван дер Вардена.
Оцифрування на основі порядкової логістичної регресії.
Враховує латентну структуру даних.
knitr::opts_chunk$set(echo = TRUE, warning = FALSE, message = FALSE)
library(MASS)
library(ggplot2)
library(reshape2)
library(gridExtra)
library(knitr)
library(kableExtra)
library(rcompanion)
library(GGally)
# Генерація даних
set.seed(123)
responses <- sample(1:5, 100, replace = TRUE)
responses[1:10]
## [1] 3 3 2 2 3 5 4 1 2 3
Пряме кодування пункту шкали Лікерта - використання чисел від 1 до k, де k — кількість категорій.
# Оригінальна шкала
cat("Оригінальна шкала")
## Оригінальна шкала
sjmisc::frq(responses)
## x <integer>
## # total N=100 valid N=100 mean=2.93 sd=1.41
##
## Value | N | Raw % | Valid % | Cum. %
## -------------------------------------
## 1 | 21 | 21 | 21 | 21
## 2 | 20 | 20 | 20 | 41
## 3 | 23 | 23 | 23 | 64
## 4 | 17 | 17 | 17 | 81
## 5 | 19 | 19 | 19 | 100
## <NA> | 0 | 0 | <NA> | <NA>
Нижче наведено код, який будує порядкову логістичну регресійну модель
(ordinal logistic regression) без жодної пояснювальної змінної (тобто
використовується тільки вільний член або константа), а потім виводить її
порогові значення (thresholds) та аналізує різниці між ними.
Пороги чисельно описують границі між сусідніми категоріями на шкалі
Лікерта.
Порядкова логістична регресія оцінює ймовірність належності спостережень
до певних категорій, що мають впорядкований характер (наприклад,
відповіді на шкалі Лікерта).
Побудова моделі В цій моделі немає незалежних змінних (лише вільний член). Така модель використовується головним чином, щоби «навчитися» на одному розподілі категорій та визначити межі (пороги) між ними.
Порогові значення (thresholds) Кожен поріг фактично відповідає точці, де модель «перемикається» з переважної ймовірності однієї категорії на наступну.
Різниці між порогами Застосування diff(thresholds) обчислює
послідовні різниці між пороговими значеннями (наприклад, різниця між 2-м
і 1-м порогом, між 3-м і 2-м тощо).
Якщо ці різниці досить близькі одна до одної, це свідчитиме про відносно
рівномірні «кроки» між категоріями шкали.
Коефіцієнт варіації (cv) Коефіцієнт варіації, обчислений як
відношення стандартного відхилення різниць порогів до їх середнього
значення (sd(differences) / mean(differences)), є зручним показником
розкиду цих різниць. Якщо коефіцієнт варіації малий, це означає, що
відстані між пороговими значеннями «щільно зібрані» навколо середнього,
тобто кроки між категоріями приблизно однакові.
Якщо ж коефіцієнт варіації великий, це говорить про суттєву різницю між
окремими «кроками», а отже, категорії можуть бути нерівномірно розміщені
на шкалі.
# Побудова порядкової логістичної регресії
responses_ordered <- factor(responses, ordered = TRUE)
model <- polr(responses_ordered ~ 1, Hess = TRUE)
# Отримуємо порогові значення:
thresholds <- model$zeta
cat("Пороги")
## Пороги
print(thresholds)
## 1|2 2|3 3|4 4|5
## -1.3249254 -0.3639654 0.5753642 1.4500102
cat("Різниця між порогами")
## Різниця між порогами
differences <- diff(thresholds)
print(differences)
## 2|3 3|4 4|5
## 0.9609600 0.9393296 0.8746461
cat("Коефіцієн варіації")
## Коефіцієн варіації
cv <- sd(differences) / mean(differences)
print(cv)
## [1] 0.04855345
Результати аналізу свідчать про майже рівномірне розташування категорій на латентній шкалі, що підтверджує обґрунтованість застосування параметричних методів аналізу.
# 1. Лінійна трансформація в діапазон [0,1]
normalize_01 <- function(x) {
(x - min(x)) / (max(x) - min(x))
}
responses_01 <- normalize_01(responses)
cat("Лінійна трансформація в діапазон [0,1]")
## Лінійна трансформація в діапазон [0,1]
sjmisc::frq(responses_01)
## x <numeric>
## # total N=100 valid N=100 mean=0.48 sd=0.35
##
## Value | N | Raw % | Valid % | Cum. %
## -------------------------------------
## 0.00 | 21 | 21 | 21 | 21
## 0.25 | 20 | 20 | 20 | 41
## 0.50 | 23 | 23 | 23 | 64
## 0.75 | 17 | 17 | 17 | 81
## 1.00 | 19 | 19 | 19 | 100
## <NA> | 0 | 0 | <NA> | <NA>
# 2. Z-стандартизація
cat("Z-стандартизація")
## Z-стандартизація
responses_z <- scale(responses)
sjmisc::frq(responses_z)
## x <numeric>
## # total N=100 valid N=100 mean=-0.00 sd=1.00
##
## Value | N | Raw % | Valid % | Cum. %
## -------------------------------------
## -1.37 | 21 | 21 | 21 | 21
## -0.66 | 20 | 20 | 20 | 41
## 0.05 | 23 | 23 | 23 | 64
## 0.76 | 17 | 17 | 17 | 81
## 1.47 | 19 | 19 | 19 | 100
## <NA> | 0 | 0 | <NA> | <NA>
# 3. Рангова трансформація
cat("Рангова трансформація")
## Рангова трансформація
responses_rank <- rank(responses) / length(responses)
sjmisc::frq(responses_rank)
## x <numeric>
## # total N=100 valid N=100 mean=0.50 sd=0.28
##
## Value | N | Raw % | Valid % | Cum. %
## -------------------------------------
## 0.11 | 21 | 21 | 21 | 21
## 0.32 | 20 | 20 | 20 | 41
## 0.53 | 23 | 23 | 23 | 64
## 0.73 | 17 | 17 | 17 | 81
## 0.91 | 19 | 19 | 19 | 100
## <NA> | 0 | 0 | <NA> | <NA>
# 4. Блом трансформація (normal scores)
responses_blom<-blom(
responses,
method = "blom"
)
cat("Блом трансформація")
## Блом трансформація
sjmisc::frq(responses_blom)
## x <numeric>
## # total N=100 valid N=100 mean=0.00 sd=0.88
##
## Value | N | Raw % | Valid % | Cum. %
## -------------------------------------
## -1.25 | 21 | 21 | 21 | 21
## -0.49 | 20 | 20 | 20 | 41
## 0.06 | 23 | 23 | 23 | 64
## 0.60 | 17 | 17 | 17 | 81
## 1.30 | 19 | 19 | 19 | 100
## <NA> | 0 | 0 | <NA> | <NA>
# 5. Тьюкі трансформація
responses_tukey <- blom(
responses,
method = "tukey"
)
cat("Тьюкі трансформація")
## Тьюкі трансформація
sjmisc::frq(responses_tukey)
## x <numeric>
## # total N=100 valid N=100 mean=0.00 sd=0.88
##
## Value | N | Raw % | Valid % | Cum. %
## -------------------------------------
## -1.25 | 21 | 21 | 21 | 21
## -0.49 | 20 | 20 | 20 | 41
## 0.06 | 23 | 23 | 23 | 64
## 0.60 | 17 | 17 | 17 | 81
## 1.30 | 19 | 19 | 19 | 100
## <NA> | 0 | 0 | <NA> | <NA>
# 6. Ван дер Варден трансформація
responses_vdw <- blom(
responses,
method = "vdw"
)
cat("Ван дер Варден трансформація")
## Ван дер Варден трансформація
sjmisc::frq(responses_vdw)
## x <numeric>
## # total N=100 valid N=100 mean=0.00 sd=0.87
##
## Value | N | Raw % | Valid % | Cum. %
## -------------------------------------
## -1.23 | 21 | 21 | 21 | 21
## -0.49 | 20 | 20 | 20 | 41
## 0.06 | 23 | 23 | 23 | 64
## 0.59 | 17 | 17 | 17 | 81
## 1.29 | 19 | 19 | 19 | 100
## <NA> | 0 | 0 | <NA> | <NA>
# Функція для конвертації категорій шкали Лікерта в числові значення
convert_likert_to_numeric <- function(model) {
# Отримуємо порогові значення
thresholds <- c(-Inf, model$zeta, Inf)
# Обчислюємо середні значення ймовірностей для кожної категорії
probs <- numeric(length(thresholds) - 1)
for(i in 1:(length(thresholds) - 1)) {
# Перетворюємо порогові значення в ймовірності через логістичну функцію
p1 <- plogis(thresholds[i])
p2 <- plogis(thresholds[i + 1])
# Обчислюємо середнє значення ймовірності для категорії
probs[i] <- (p2 + p1) / 2
}
# Створюємо іменований вектор з результатами
names(probs) <- levels(model$lev)
return(probs)
}
# Застосування функції до моделі
numeric_values <- convert_likert_to_numeric(model)
# Конвертація початкових відповідей в нові числові значення
numeric_responses <- numeric_values[responses_ordered]
sjmisc::frq(numeric_responses)
## x <numeric>
## # total N=100 valid N=100 mean=0.50 sd=0.28
##
## Value | N | Raw % | Valid % | Cum. %
## -------------------------------------
## 0.10 | 21 | 21 | 21 | 21
## 0.31 | 20 | 20 | 20 | 41
## 0.53 | 23 | 23 | 23 | 64
## 0.73 | 17 | 17 | 17 | 81
## 0.91 | 19 | 19 | 19 | 100
## <NA> | 0 | 0 | <NA> | <NA>
# Візуалізація результатів
# Створення датафрейму з усіма трансформаціями
df_analysis <- data.frame(
Original=responses,
Linear = responses_01,
Z_score = as.numeric(responses_z),
Rank = responses_rank,
Blom = responses_blom,
Tukey = responses_tukey,
VanDerWaerden = responses_vdw,
Ordinal = numeric_responses
)
# Перетворення датафрейма з широкого формату в довгий
df_melted <- melt(df_analysis)
# Створення графіка
ggplot(df_melted, aes(x = value)) +
geom_density(aes(fill = variable), alpha = 0.3) +
facet_wrap(~variable, scales = "free") +
theme_minimal() +
theme(
plot.title = element_text(size = 14, face = "bold"),
strip.text = element_text(size = 10, face = "bold"),
axis.title = element_text(size = 12),
legend.position = "none"
) +
labs(
title = "Розподіл значень для різних методів трансформації",
x = "Значення",
y = "Щільність"
)
Візуалізація щільності розподілу трансформованих значень показує, що методи Блома, Тьюкі та ван дер Вардена дають схожі та близькі до нормального розподілу результати, що може бути перевагою при застосуванні параметричних методів аналізу.
# Create a data frame with all transformations including original data
df_all <- data.frame(
Original = responses,
Linear = responses_01,
Z_score = as.numeric(responses_z),
Rank = responses_rank,
Blom = responses_blom,
Tukey = responses_tukey,
VanDerWaerden = responses_vdw,
Ordinal = numeric_responses
)
# Create scatter plots with regression lines using GGally
ggpairs(df_all,
lower = list(continuous = wrap("points", alpha = 0.3, color = "blue")),
diag = list(continuous = wrap("densityDiag", alpha = 0.5)),
upper = list(continuous = wrap("cor", size = 3))) +
theme_minimal() +
theme(
axis.text = element_text(size = 8),
strip.text = element_text(size = 8),
plot.title = element_text(size = 14, face = "bold")
) +
labs(title = "Матриця діаграм розсіювання та взаємозв'язку")
Порівняльний аналіз різних методів трансформації (лінійна нормалізація, z-стандартизація, ранги, зворотні нормальні перетворення) демонструє їх високу узгодженість, що видно з матриці кореляцій та діаграм розсіювання.
Використання порядкової логістичної регресії без додаткових
предикторів допомагає обчислити «порогові» значення та оцінити,
наскільки рівномірно розташовані категорії. Якщо ці пороги показують
відносно сталий крок, ми маємо підстави вважати, що шкала достатньо
«однорідна» й підходить для подальших кількісних досліджень.
Трансформація шкали на основі емпіричного розподілу даних дозволяє
отримати метричні властивості шкали. Такий підхід дає можливість
застосовувати до отриманих даних широкий спектр мстатистичних методів
аналізу. Трансформація на основі порядкової логістичної регресії
видається найбільш теоретично обґрунтованою, оскільки:
враховує реальну структуру даних через оцінку порогових значень;
забезпечує нелінійне перетворення, що краще відповідає природі
порядкових даних;
дає змогу врахувати можливу нерівномірність відстаней між
категоріями.
Різні методи оцифрування (лінійна нормалізація, z-стандартизація, ранги,
зворотні нормальні перетворення тощо) показують сильний зв’язок з
вихідною шкалою.
Likert, R. (1932). A Technique for the Measurement of Attitudes. In Archives of Psychology, 140, 1-55.
Soloman, S. R., & Sawilowsky, S. S.(2009). Impact of Rank-Based Normalizing Transformations on the Accuracy of Test Scores. Journal of Modern Applied Statistical Methods, 8(2), 448–462. https://doi.org/10.22237/jmasm/1257034080