Подкаст про вимірювання довіри до поліції

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

Методика

Дані, що аналізуються, походять з п’ятого раунду Європейського соціального дослідження (ЄСД), проведеного в Україні у 2011 році. Польовий етап цього дослідження в Україні був реалізований Центром соціальних та маркетингових досліджень SOCIS, який опитав 1931 респондента. Цільовою групою було населення країни віком від 15 років та старше. Збір даних здійснювався методом особистого формалізованого інтерв’ю “віч-на-віч”.

Вибірка незважувалася.

У даному дослідженні аналізується дані щодо довіри до міліції, яка функціонувала в Україні на момент збору даних. Слід зазначити, що у 2015 році в Україні відбулася реформа правоохоронних органів, внаслідок якої міліцію було реорганізовано в Національну поліцію.

Теоретичною основою для вимірювання довіри в рамках ЄСД слугує модель, розроблена Jonathan Jackson, Mike Hough, Stephen Farrall, Jan de Keijser та Kauko Aromaa. Вона передбачала три латентні фактори: 1) довіра до ефективності (TrEf);
2) довіра до процесуальної справедливості (TrFa);
3) довіра до перерозподільчої справедливості (TrRs).

Довіра до ефективності поліції (Trust in police effectiveness, TrEf) вимірюється за допомогою:

  • Ґрунтуючись на тому, що Ви чули, або на Вашому власному досвіді, як Ви вважаєте, наскільки міліція в Україні успішна у попередженні злочинів, що пов’язані із застосуванням насильства або загрозою застосування насильства? (plcpvcr)

    • Шкала відповідей: 0 означає «Зовсім неуспішна», а 10 – «Дуже успішна».
  • А наскільки, на Вашу думку, міліція в Україні успішна у затриманні грабіжників, які вчиняють пограбування квартир зі зломом? (plcpbrg)

    • Шкала відповідей: від 0 («Зовсім неуспішна») до 10 («Дуже успішна»).
  • Якщо б в районі, неподалік від місця Вашого проживання, був би скоєний злочин із застосуванням насильства або пограбування квартири, і була викликана міліція, як Ви думаєте, наскільки повільно чи швидко вона діставалися б до місця злочину? (plcarcr)

    • Шкала відповідей: 0 означає «Дуже повільно», а 10 – «Дуже швидко».

Довіра до процесуальної справедливості поліції (Trust in police procedural fairness, TrFa) вимірюється за допомогою:

  • Ґрунтуючись на тому, що Ви чули або на Вашому власному досвіді, як часто, на Вашу думку, міліція в Україні ставиться до людей з повагою. (plcrspc)

    • Шкала відповідей: 1 – “Зовсім не часто”, 2 – “Не дуже часто”, 3 – “Часто”, 4 – “Або дуже часто”.
  • Як Ви вважаєте, як часто міліція в Україні приймає справедливі та неупереджені рішення стосовно тих справ, якими займається? Ви б сказали, що… (plcfrdc)

    • Шкала відповідей: 1 – “Зовсім не часто”, 2 – “Не дуже часто”, 3 – “Часто”, 4 – “Або дуже часто”.
  • Як Ви думаєте, як часто міліція, розглядаючи справи людей в Україні, пояснює свої рішення і дії, коли її просять це зробити? Ви сказали б, що… (plcexdc)

    • Шкала відповідей: 1 – “Зовсім не часто”, 2 – “Не дуже часто”, 3 – “Часто”, 4 – “Або дуже часто”. Додаткова категорія: Ніхто ніколи не просить міліцію пояснити свої рішення.

Довіра до перерозподільчої справедливості (Trust in police distributive fairness, TrRs) вимірюється за допомогою:

  • Коли потерпілі звертаються в міліцію, як Ви вважаєте, чи поводиться міліція з ними гірше, якщо вони багаті люди, бідні люди, або однаково поводиться як з багатими, так і з бідними? (plcvcrp)

    • Шкала відповідей: 1 - “З багатими поводиться гірше”, 2 - “З бідними поводиться гірше”, 3 - “З багатими і з бідними поводиться однаково”.
  • Як Ви вважаєте, коли потерпілі звертаються в міліцію, чи ставиться вона до деяких людей гірше через їхню расу або національність, чи ставиться до всіх однаково? (plcvcrc)

    • Шкала відповідей: 1- “До людей, які за расою або національністю відрізняються від більшості населення України, ставиться гірше”, 2 - “До людей тієї ж раси або національності, що й більшість населення України, ставиться гірше”, 3- “До всіх ставиться однаково, не зважаючи на расу чи національність”.

Однак, у процесі попереднього аналізу даних для української вибірки 2011 року, виникла низка методологічних та емпіричних підстав для модифікації цієї вихідної моделі, зокрема, шляхом виключення третього фактору (TrRs).

  1. Проблеми з індикаторами фактору TrRs

    • Кількість індикаторів: Фактор TrRs вимірювався лише двома індикаторами (ставлення до багатих/бідних та ставлення до різних рас/національностей). У контексті структурного конфірматорного факторного аналізу (CFA) фактори, що визначаються менш ніж трьома індикаторами, часто є проблематичними з точки зору ідентифікації моделі та стабільності факторних навантажень.

    • Проблемне розуміння індикатора. Запитання, що стосувалося ставлення міліції до осіб різної расової чи національної приналежності, продемонструвало суттєві проблеми з розумінням серед українських респондентів у 2011 році. Це виявилося у значно вищому відсотку відповідей “важко відповісти” або пропусків порівняно з іншими індикаторами довіри.

    • Характер шкали індикаторів: Варіанти відповіді на два запитання представляють собою категоріальну, а не порядкову шкалу. Це ускладнює її використання в традиційних моделях CFA, які зазвичай вимагають принаймні порядкового рівня вимірювання для індикаторів латентних змінних.

  2. Емпірична невідповідність трифакторної моделі

    • Попередні спроби побудувати трифакторну модель, включаючи дихотомізовані індикатори фактора TrRs, демонстрували негативну дисперсію залишків одного із індикаторів (питання щодо поводження з групами з різним матеріальним статусом) через високу тетрахоричну кореляцію змінних.

    • Навіть перегляд факторної структури та виключення найбільш проблемного індикатора з блоку TrRs (питання щодо поводження з групами з різною національністю) та спроби провести CFA для двофакторної структури, що складалася б з факторів TrEf та TrFa, результати все одно вказували на незадовільну відповідність моделі емпіричним даним.

    • Виключення фактору TrRs дозволяє побудувати більш парсимонічну (ощадливу) та емпірично обґрунтовану модель, що краще відповідає зібраним даним. Фактори TrEf та TrFa, вимірювані трьома індикаторами кожен, мають значно кращий психометричний потенціал для формування надійних та валідних латентних конструктів.

  3. Прагнення до надійності та валідності вимірювання

    • Головною метою перевірки вимірювальної моделі є отримання надійних та валідних інструментів для вимірювання теоретичних конструктів. Якщо певний компонент моделі (в даному випадку фактор TrRs) демонструє слабкі психометричні властивості та проблеми з даними, його включення може радше зашкодити загальній якості моделі, ніж покращити її.

    • Фокусування на двох більш сильних та емпірично підтверджених факторах (TrEf та TrFa) забезпечує вищу надійність висновків щодо структури довіри до міліції в українському контексті 2011 року.

Отже, рішення про перехід до двофакторної моделі було зумовлене не теоретичними міркуваннями апріорі, а радше емпіричними проблемами, виявленими під час аналізу специфіки українських даних ЄСД 2011 року. Уточнення моделі шляхом виключення слабкого та проблемного фактору є виправданим кроком на шляху до побудови більш адекватної та надійної репрезентації досліджуваного феномену.

Підготовка даних та дескриптивний аналіз

Імпорт даних

base_file_name <- "ESS5e03_5-subset.sav"
base_df <- read_sav(base_file_name)

Вибір змінних

base_variables_to_select_two_factor <- c(
  # Фактор 1: Довіра до ефективності поліції (TrEf)
  "plcpvcr",
  "plccbrg", 
  "plcarcr",

  # Фактор 2: Довіра до процесуальної справедливості поліції (TrFa)
  "plcrspc",
  "plcfrdc",
  "plcexdc"
)

# Припускаємо, що ваш датафрейм називається 'base_df'
base_PoliceData_two_factor <- base_df %>% 
  select(all_of(base_variables_to_select_two_factor))


base_all_labels <- var_label(base_PoliceData_two_factor) 

if (length(base_all_labels) > 0 && !all(sapply(base_all_labels, is.null))) { # Перевіряємо, чи є хоч якісь мітки
  cat("Формулювання запитань (мітки змінних):\n")
  for (base_var_name in names(base_all_labels)) {
    if (!is.null(base_all_labels[[base_var_name]])) { # Виводимо тільки якщо мітка існує
      cat("Змінна:", base_var_name, "\n")
      cat("Формулювання запитання:", base_all_labels[[base_var_name]], "\n\n")
    } else {
      cat("Змінна:", base_var_name, "- формулювання не знайдено.\n\n")
    }
  }
} else {
  cat("Для цього датафрейму не знайдено міток змінних (формулювань запитань).\n")
  cat("Переконайтеся, що ви їх призначили за допомогою var_label() або attr().\n")
}
## Формулювання запитань (мітки змінних):
## Змінна: plcpvcr 
## Формулювання запитання: How successful police are at preventing crimes in country 
## 
## Змінна: plccbrg 
## Формулювання запитання: How successful police are at catching house burglars in country 
## 
## Змінна: plcarcr 
## Формулювання запитання: How quickly would police arrive at a violent crime scene near to where you live 
## 
## Змінна: plcrspc 
## Формулювання запитання: How often do police treat people in country with respect 
## 
## Змінна: plcfrdc 
## Формулювання запитання: How often do police make fair, impartial decisions 
## 
## Змінна: plcexdc 
## Формулювання запитання: How often do the police explain their decisions and actions when asked

Відсутні значення змінних

# 1. Підрахунок NA значень для датафрейму base_PoliceData_two_factor
base_na_counts_two_factor <- colSums(is.na(base_PoliceData_two_factor))

# 2. Створення датафрейму для таблиці kable
base_df_for_kable_two_factor <- data.frame(
  Variable_Name = names(base_na_counts_two_factor),
  NA_Count_Value = unname(base_na_counts_two_factor)
)

# 3. Відображення таблиці за допомогою kable
kable(base_df_for_kable_two_factor,
      caption = "Кількість NA значень по змінних (двофакторна модель)", # Оновлений заголовок
      rownames = FALSE,
      col.names = c("Змінна", "NA_Кількість")) %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed")) %>%
  column_spec(column = 1, width = "25em") %>% 
  column_spec(column = 2, width = "25em")
Кількість NA значень по змінних (двофакторна модель)
Змінна NA_Кількість
plcpvcr 186
plccbrg 209
plcarcr 219
plcrspc 232
plcfrdc 386
plcexdc 394
# Змінні, які нас цікавлять
target_variables <- c("plcvcrp", "plcvcrc")

cat("Детальний аналіз змінних:\n\n")
## Детальний аналіз змінних:
for (var_name in target_variables) {
  cat("------------------------------------\n")
  cat("Змінна:", var_name, "\n")
  cat("------------------------------------\n")
  
  # Перевірка, чи існує змінна в датафреймі
  if (var_name %in% names(base_df)) {
    
    # Отримання та виведення формулювання запитання (мітки)
    # Використовуємо `tryCatch` для безпечного отримання мітки, 
    # оскільки `var_label` може повернути помилку, якщо змінна не "labelled"
    # або якщо пакет `labelled` не завантажений.
    # Альтернативно, можна використовувати attr(base_PoliceData_two_factor[[var_name]], "label")
    
    question_label <- NULL # Ініціалізація
    if (requireNamespace("labelled", quietly = TRUE)) {
        question_label <- labelled::var_label(base_df[[var_name]])
    } else { # Якщо пакет labelled не доступний, спробуємо стандартний атрибут
        question_label <- attr(base_df[[var_name]], "label")
    }

    if (!is.null(question_label) && !is.na(question_label) && nzchar(question_label)) {
      cat("Формулювання запитання:", question_label, "\n")
    } else {
      cat("Формулювання запитання: не знайдено або порожнє для цієї змінної.\n")
    }
    
    # Підрахунок та виведення кількості NA
    num_na <- sum(is.na(base_df[[var_name]]))
    cat("Кількість пропущених значень (NA):", num_na, "\n\n")
    
  } else {
    cat("Помилка: Змінна '", var_name, "' не знайдена у датафреймі 'base_df'.\n\n", sep = "")
  }
}
## ------------------------------------
## Змінна: plcvcrp 
## ------------------------------------
## Формулювання запитання: How police treat victims of crime: Rich/poor 
## Кількість пропущених значень (NA): 230 
## 
## ------------------------------------
## Змінна: plcvcrc 
## ------------------------------------
## Формулювання запитання: How police treat victims of crime: Different races/ethnic groups 
## Кількість пропущених значень (NA): 601

Очищення від NA

# 1. Видалення рядків з будь-якими NA значеннями
base_PoliceData_two_factor_clean <- na.omit(base_PoliceData_two_factor)

cat("Розмірність base_PoliceData_two_factor після na.omit:", dim(base_PoliceData_two_factor_clean), "\n")
## Розмірність base_PoliceData_two_factor після na.omit: 1176 6
base_PoliceData_final <- base_PoliceData_two_factor_clean  %>%
  filter(
    plcpvcr >= 0 & plcpvcr <= 10,
    plccbrg >= 0 & plccbrg <= 10,
    plcarcr >= 0 & plcarcr <= 10,
    plcexdc != 5 # Припускаю, що це правильна умова, оскільки вона вже була
  )

base_final_variables_to_keep <- c(
  "plcpvcr", "plccbrg", "plcarcr", 
  "plcrspc", "plcfrdc", "plcexdc" 
  )

base_PoliceData_model_ready <- base_PoliceData_final %>%
  select(all_of(base_final_variables_to_keep))

cat("Розмірність датафрейму base_PoliceData_model_ready після відбору змінних:", dim(base_PoliceData_model_ready), "\n")
## Розмірність датафрейму base_PoliceData_model_ready після відбору змінних: 998 6
cat("Назви стовпців у base_PoliceData_model_ready:\n")
## Назви стовпців у base_PoliceData_model_ready:
print(colnames(base_PoliceData_model_ready))
## [1] "plcpvcr" "plccbrg" "plcarcr" "plcrspc" "plcfrdc" "plcexdc"

Частоти змінних

frq(base_PoliceData_model_ready)
## How successful police are at preventing crimes in country (plcpvcr) <numeric> 
## # total N=998 valid N=998 mean=3.54 sd=2.13
## 
## Value |                  Label |   N | Raw % | Valid % | Cum. %
## ---------------------------------------------------------------
##     0 | Extremely unsuccessful | 108 | 10.82 |   10.82 |  10.82
##     1 |                     01 |  82 |  8.22 |    8.22 |  19.04
##     2 |                     02 | 122 | 12.22 |   12.22 |  31.26
##     3 |                     03 | 192 | 19.24 |   19.24 |  50.50
##     4 |                     04 | 132 | 13.23 |   13.23 |  63.73
##     5 |                     05 | 200 | 20.04 |   20.04 |  83.77
##     6 |                     06 |  77 |  7.72 |    7.72 |  91.48
##     7 |                     07 |  56 |  5.61 |    5.61 |  97.09
##     8 |                     08 |  18 |  1.80 |    1.80 |  98.90
##     9 |                     09 |   9 |  0.90 |    0.90 |  99.80
##    10 |   Extremely successful |   2 |  0.20 |    0.20 | 100.00
##    77 |                Refusal |   0 |  0.00 |    0.00 | 100.00
##    88 |             Don't know |   0 |  0.00 |    0.00 | 100.00
##    99 |              No answer |   0 |  0.00 |    0.00 | 100.00
##  <NA> |                   <NA> |   0 |  0.00 |    <NA> |   <NA>
## 
## How successful police are at catching house burglars in country (plccbrg) <numeric> 
## # total N=998 valid N=998 mean=3.62 sd=2.17
## 
## Value |                  Label |   N | Raw % | Valid % | Cum. %
## ---------------------------------------------------------------
##     0 | Extremely unsuccessful |  94 |  9.42 |    9.42 |   9.42
##     1 |                     01 |  85 |  8.52 |    8.52 |  17.94
##     2 |                     02 | 131 | 13.13 |   13.13 |  31.06
##     3 |                     03 | 190 | 19.04 |   19.04 |  50.10
##     4 |                     04 | 129 | 12.93 |   12.93 |  63.03
##     5 |                     05 | 189 | 18.94 |   18.94 |  81.96
##     6 |                     06 |  75 |  7.52 |    7.52 |  89.48
##     7 |                     07 |  67 |  6.71 |    6.71 |  96.19
##     8 |                     08 |  24 |  2.40 |    2.40 |  98.60
##     9 |                     09 |  12 |  1.20 |    1.20 |  99.80
##    10 |   Extremely successful |   2 |  0.20 |    0.20 | 100.00
##    77 |                Refusal |   0 |  0.00 |    0.00 | 100.00
##    88 |             Don't know |   0 |  0.00 |    0.00 | 100.00
##    99 |              No answer |   0 |  0.00 |    0.00 | 100.00
##  <NA> |                   <NA> |   0 |  0.00 |    <NA> |   <NA>
## 
## How quickly would police arrive at a violent crime scene near to where you live (plcarcr) <numeric> 
## # total N=998 valid N=998 mean=3.98 sd=2.34
## 
## Value |                                           Label |   N | Raw % | Valid % | Cum. %
## ----------------------------------------------------------------------------------------
##     0 |                                Extremely slowly |  82 |  8.22 |    8.22 |   8.22
##     1 |                                               1 |  68 |  6.81 |    6.81 |  15.03
##     2 |                                               2 | 122 | 12.22 |   12.22 |  27.25
##     3 |                                               3 | 187 | 18.74 |   18.74 |  45.99
##     4 |                                               4 | 113 | 11.32 |   11.32 |  57.31
##     5 |                                               5 | 192 | 19.24 |   19.24 |  76.55
##     6 |                                               6 |  70 |  7.01 |    7.01 |  83.57
##     7 |                                               7 |  85 |  8.52 |    8.52 |  92.08
##     8 |                                               8 |  50 |  5.01 |    5.01 |  97.09
##     9 |                                               9 |  18 |  1.80 |    1.80 |  98.90
##    10 |                               Extremely quickly |  11 |  1.10 |    1.10 | 100.00
##    55 | Violent crimes never occur near to where I live |   0 |  0.00 |    0.00 | 100.00
##    77 |                                         Refusal |   0 |  0.00 |    0.00 | 100.00
##    88 |                                      Don't know |   0 |  0.00 |    0.00 | 100.00
##    99 |                                       No answer |   0 |  0.00 |    0.00 | 100.00
##  <NA> |                                            <NA> |   0 |  0.00 |    <NA> |   <NA>
## 
## How often do police treat people in country with respect (plcrspc) <numeric> 
## # total N=998 valid N=998 mean=1.97 sd=0.70
## 
## Value |            Label |   N | Raw % | Valid % | Cum. %
## ---------------------------------------------------------
##     1 | Not at all often | 241 | 24.15 |   24.15 |  24.15
##     2 |   Not very often | 565 | 56.61 |   56.61 |  80.76
##     3 |            Often | 174 | 17.43 |   17.43 |  98.20
##     4 |       Very often |  18 |  1.80 |    1.80 | 100.00
##     7 |          Refusal |   0 |  0.00 |    0.00 | 100.00
##     8 |       Don't know |   0 |  0.00 |    0.00 | 100.00
##     9 |        No answer |   0 |  0.00 |    0.00 | 100.00
##  <NA> |             <NA> |   0 |  0.00 |    <NA> |   <NA>
## 
## How often do police make fair, impartial decisions (plcfrdc) <numeric> 
## # total N=998 valid N=998 mean=1.96 sd=0.67
## 
## Value |            Label |   N | Raw % | Valid % | Cum. %
## ---------------------------------------------------------
##     1 | Not at all often | 233 | 23.35 |   23.35 |  23.35
##     2 |   Not very often | 587 | 58.82 |   58.82 |  82.16
##     3 |            Often | 166 | 16.63 |   16.63 |  98.80
##     4 |       Very often |  12 |  1.20 |    1.20 | 100.00
##     7 |          Refusal |   0 |  0.00 |    0.00 | 100.00
##     8 |       Don't know |   0 |  0.00 |    0.00 | 100.00
##     9 |        No answer |   0 |  0.00 |    0.00 | 100.00
##  <NA> |             <NA> |   0 |  0.00 |    <NA> |   <NA>
## 
## How often do the police explain their decisions and actions when asked (plcexdc) <numeric> 
## # total N=998 valid N=998 mean=1.90 sd=0.68
## 
## Value |                                  Label |   N | Raw % | Valid % | Cum. %
## -------------------------------------------------------------------------------
##     1 |                       Not at all often | 269 | 26.95 |   26.95 |  26.95
##     2 |                         Not very often | 570 | 57.11 |   57.11 |  84.07
##     3 |                                  Often | 146 | 14.63 |   14.63 |  98.70
##     4 |                             Very often |  13 |  1.30 |    1.30 | 100.00
##     5 | No one ever asks the police to explain |   0 |  0.00 |    0.00 | 100.00
##     7 |                                Refusal |   0 |  0.00 |    0.00 | 100.00
##     8 |                             Don't know |   0 |  0.00 |    0.00 | 100.00
##     9 |                              No answer |   0 |  0.00 |    0.00 | 100.00
##  <NA> |                                   <NA> |   0 |  0.00 |    <NA> |   <NA>

Описові статистики

base_PoliceDataUA <- data.frame(lapply(base_PoliceData_model_ready, as.numeric))

descr(base_PoliceDataUA, stats = c("mean", "sd", "min", "med", "max", "iqr", "cv", "skewness"))
## Descriptive Statistics  
## base_PoliceDataUA  
## N: 998  
## 
##                  plcarcr   plccbrg   plcexdc   plcfrdc   plcpvcr   plcrspc
## -------------- --------- --------- --------- --------- --------- ---------
##           Mean      3.98      3.62      1.90      1.96      3.54      1.97
##        Std.Dev      2.34      2.17      0.68      0.67      2.13      0.70
##            Min      0.00      0.00      1.00      1.00      0.00      1.00
##         Median      4.00      3.00      2.00      2.00      3.00      2.00
##            Max     10.00     10.00      4.00      4.00     10.00      4.00
##            IQR      3.00      3.00      1.00      0.00      3.00      0.00
##             CV      0.59      0.60      0.36      0.34      0.60      0.35
##       Skewness      0.23      0.18      0.37      0.29      0.12      0.36

Візуалізація кореляційної матриці

base_ordered_vars <- c("plcexdc",  "plcfrdc" , "plcrspc")

base_cor_matrix <- lavCor(base_PoliceDataUA, ordered = base_ordered_vars)

# kable(round(base_cor_matrix, 2), caption = "Кореляційна матриця") %>% kable_styling()

corrplot(base_cor_matrix, method = "color", type = "full",
         order = "original", tl.col = "darkgray", tl.cex = 0.8,
         number.cex = 0.7, addCoef.col = "darkgray")

Конфірматорний факторний аналіз

Специфікація моделі CFA

base_Model <- "
  # Фактор 1: Довіра до ефективності поліції (TrEf)
  TrEf =~ plcpvcr + plccbrg + plcarcr

  # Фактор 2: Довіра до процесуальної справедливості поліції (TrFa)
  TrFa =~ plcrspc + plcfrdc + plcexdc
"
base_FittedModel <- cfa(model = base_Model, data = base_PoliceDataUA, ordered = base_ordered_vars, std.lv = TRUE)

summary(base_FittedModel, fit.measures = TRUE, standardized = TRUE, rsquare = TRUE)
## lavaan 0.6-19 ended normally after 22 iterations
## 
##   Estimator                                       DWLS
##   Optimization method                           NLMINB
##   Number of model parameters                        22
## 
##   Number of observations                           998
## 
## Model Test User Model:
##                                               Standard      Scaled
##   Test Statistic                                 7.581      40.933
##   Degrees of freedom                                 8           8
##   P-value (Chi-square)                           0.475       0.000
##   Scaling correction factor                                  0.192
##   Shift parameter                                            1.470
##     simple second-order correction                                
## 
## Model Test Baseline Model:
## 
##   Test statistic                             10680.028    4525.559
##   Degrees of freedom                                15          15
##   P-value                                        0.000       0.000
##   Scaling correction factor                                  2.364
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    1.000       0.993
##   Tucker-Lewis Index (TLI)                       1.000       0.986
##                                                                   
##   Robust Comparative Fit Index (CFI)                            NA
##   Robust Tucker-Lewis Index (TLI)                               NA
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.000       0.064
##   90 Percent confidence interval - lower         0.000       0.046
##   90 Percent confidence interval - upper         0.036       0.084
##   P-value H_0: RMSEA <= 0.050                    0.997       0.100
##   P-value H_0: RMSEA >= 0.080                    0.000       0.103
##                                                                   
##   Robust RMSEA                                                  NA
##   90 Percent confidence interval - lower                        NA
##   90 Percent confidence interval - upper                        NA
##   P-value H_0: Robust RMSEA <= 0.050                            NA
##   P-value H_0: Robust RMSEA >= 0.080                            NA
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.023       0.023
## 
## Parameter Estimates:
## 
##   Parameterization                               Delta
##   Standard errors                           Robust.sem
##   Information                                 Expected
##   Information saturated (h1) model        Unstructured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   TrEf =~                                                               
##     plcpvcr           1.805    0.067   27.013    0.000    1.805    0.847
##     plccbrg           1.829    0.068   26.899    0.000    1.829    0.844
##     plcarcr           1.860    0.074   25.062    0.000    1.860    0.794
##   TrFa =~                                                               
##     plcrspc           0.836    0.013   62.915    0.000    0.836    0.836
##     plcfrdc           0.915    0.011   84.465    0.000    0.915    0.915
##     plcexdc           0.854    0.012   73.130    0.000    0.854    0.854
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   TrEf ~~                                                               
##     TrFa              0.708    0.022   32.779    0.000    0.708    0.708
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .plcpvcr           3.536    0.068   52.171    0.000    3.536    1.660
##    .plccbrg           3.624    0.069   52.198    0.000    3.624    1.672
##    .plcarcr           3.980    0.076   52.669    0.000    3.980    1.698
## 
## Thresholds:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     plcrspc|t1       -0.702    0.043  -16.144    0.000   -0.702   -0.702
##     plcrspc|t2        0.869    0.046   19.038    0.000    0.869    0.869
##     plcrspc|t3        2.096    0.095   22.053    0.000    2.096    2.096
##     plcfrdc|t1       -0.727    0.044  -16.626    0.000   -0.727   -0.727
##     plcfrdc|t2        0.922    0.046   19.833    0.000    0.922    0.922
##     plcfrdc|t3        2.256    0.110   20.452    0.000    2.256    2.256
##     plcexdc|t1       -0.614    0.043  -14.439    0.000   -0.614   -0.614
##     plcexdc|t2        0.997    0.048   20.877    0.000    0.997    0.997
##     plcexdc|t3        2.225    0.107   20.782    0.000    2.225    2.225
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .plcpvcr           1.280    0.089   14.437    0.000    1.280    0.282
##    .plccbrg           1.355    0.089   15.197    0.000    1.355    0.288
##    .plcarcr           2.033    0.115   17.681    0.000    2.033    0.370
##    .plcrspc           0.300                               0.300    0.300
##    .plcfrdc           0.163                               0.163    0.163
##    .plcexdc           0.271                               0.271    0.271
##     TrEf              1.000                               1.000    1.000
##     TrFa              1.000                               1.000    1.000
## 
## R-Square:
##                    Estimate
##     plcpvcr           0.718
##     plccbrg           0.712
##     plcarcr           0.630
##     plcrspc           0.700
##     plcfrdc           0.837
##     plcexdc           0.729

Графічне представлення оціненої моделі КФА

library(webshot)
library(htmlwidgets)

# Створюємо графік
base_pl_fit.measures.m <- nice_lavaanPlot(
  model = base_FittedModel, 
  coefs = TRUE, 
  stand = TRUE, 
  covs = TRUE, 
  stars = c("coefs", "covs", "latent")
)


 base_pl_fit.measures.m 
# Зберігаємо як HTML
# saveWidget(base_pl_fit.measures.m, "temp_plot.html", selfcontained = TRUE)

# Або з конкретними розмірами обрізання
# webshot("temp_plot.html", "my_cfa_plot_cropped.jpeg", 
#        vwidth = 1200, vheight = 600,  # Менша висота
#        zoom = 2,
#        cliprect = c(0, 0, 1200, 600))  # x, y, width, height

# file.remove("temp_plot.html")

Конвергентна валідність та надійність конструктів

base_reliability_scores <- round(semTools::reliability(base_FittedModel), 2)
print(base_reliability_scores)
##           TrEf TrFa
## alpha     0.87 0.85
## alpha.ord   NA 0.90
## omega     0.87 0.83
## omega2    0.87 0.83
## omega3    0.86 0.83
## avevar    0.68 0.76

Джерело даних

European Social Survey (ESS). (2011). European Social Survey Round 5 Data (Data file edition 3.4). NSD - Norwegian Center for Research Data.