Factor Structure and Measurement Properties of the Integral Index of Social Well-Being (IISWB-20): Evidence from Wartime Ukraine

Analytical Code Report — Working Version

Author

Andrii Bova

Published

February 25, 2026

Abstract

Background. The Integral Index of Social Well-Being (IISWB-20) is a 20-item instrument designed to assess social functioning across seven theoretical domains. Its original authors prescribe a single composite mean score, yet this scoring strategy has not been evaluated under modern psychometric standards. Objective. This report provides a comprehensive psychometric evaluation of the IISWB-20 factor structure using data from a nationally representative Ukrainian wartime sample. Methods. The analytical pipeline integrates polychoric correlation analysis, parallel analysis, Exploratory Graph Analysis (EGA), Exploratory Factor Analysis (EFA), Confirmatory Factor Analysis (CFA), Exploratory Structural Equation Modeling (ESEM) with target rotation, and Schmid–Leiman orthogonalization — all estimated using the WLSMV estimator appropriate for ordinal survey data collected under sampling weights. Results. Six correlated factors emerged consistently across methods. The ESEM model with target rotation provided the best fit. Schmid–Leiman decomposition was used to evaluate the psychometric defensibility of the composite mean score. Conclusions. The primary contribution is a psychometrically justified verdict on whether the IISWB-20 composite mean score is defensible under modern measurement standards. Bifactor CFA did not converge and is therefore excluded; a higher-order (second-order) CFA is retained as a supplementary model in Appendix A.

Keywords

social well-being, IISWB-20, ESEM, Schmid–Leiman, omega-hierarchical, WLSMV, ordinal data, wartime Ukraine

Working version. This analytical report accompanies a manuscript currently under preparation. Code and results are complete; narrative sections will be updated upon manuscript submission.

1 Packages

Show / Hide Code
# -- Core data management -----------------------------------------------------
library(here)
library(haven)
library(tidyverse)
library(sjlabelled)
library(tibble)

# -- Factor analysis / SEM ----------------------------------------------------
library(psych)      # fa(), omega(), schmid(), fa.parallel(), KMO()
library(lavaan)     # cfa()
library(semTools)   # reliability(), htmt()
library(EGAnet)     # EGA(), bootEGA(), itemStability()

# -- Visualization ------------------------------------------------------------
library(patchwork)
library(corrplot)
library(RColorBrewer)
library(scales)

# -- Reporting ----------------------------------------------------------------
library(knitr)
library(kableExtra)
library(parameters)
library(performance)

# -- Shared color palette (six factors) ---------------------------------------
factor_colors <- c(
  "#E41A1C", "#377EB8", "#4DAF4A",
  "#984EA3", "#FF7F00", "#A65628"
)

Introduction

This document presents a sequential psychometric analysis of the Integral Index of Social Well-Being (IISWB-20) [Golovakha1997, GolovPanina2001], an instrument designed to measure seven theoretical domains of social functioning:

  1. Personal domain — psychological resources of the individual
  2. Professional-labour domain — opportunities in the sphere of work
  3. Informational-cultural domain — access to knowledge
  4. Recreational-cultural domain — health and leisure
  5. Material-household domain (Level 1) — basic needs
  6. Material-household domain (Level 2) — higher consumer needs
  7. Social security — legal protection

The instrument prescribes a single composite mean score. The central empirical question addressed here is whether this scoring strategy remains defensible under modern psychometric standards. The analysis proceeds in five phases: (1) data suitability, (2) dimensionality assessment, (3) exploratory factor analysis, (4) confirmatory and ESEM modeling, and (5) Schmid–Leiman decomposition with mean-score justification.

Modeling note. Bifactor CFA and bifactor ESEM were estimated but failed to converge or produced non-interpretable fit indices and are excluded from the main analysis. The higher-order (second-order) CFA is presented as M3 in the main analysis (Section 7.3). The primary composite-score verdict is based on Schmid–Leiman orthogonalization (Phase 5), which does not require a converging bifactor model. Complete lavaan syntax for all models is provided in Appendix A.

2 Instruments

The IISWB-20 questionnaire consists of 20 items assessing subjective deprivation across various domains. Respondents are asked to evaluate the extent to which they lack specific resources, opportunities, or states. The table below outlines the main question, the response alternatives, and the 20 items in both English and Ukrainian.

Show / Hide Code
# Створення датафрейму з питаннями
iiswb_items <- tribble(
  ~English_Formulation, ~Ukrainian_Formulation,
  
  # Main Question
  "**Main Question:** Which of the following do you lack?", "**Основне запитання:** Чого з наведеного Вам не вистачає?",
  
  # Items
  "**[f6.1]** Ability to adapt to new social conditions", "Вміння жити в нових суспільних умовах",
  "**[f6.2]** Health", "Здоров'я",
  "**[f6.3]** Suitable job", "Роботи, що підходить",
  "**[f6.4]** Necessary clothing", "Необхідного одягу",
  "**[f6.5]** Good housing", "Хорошого житла",
  "**[f6.6]** Contemporary economic knowledge", "Сучасних економічних знань",
  "**[f6.7]** Self-confidence", "Упевненості в своїх силах",
  "**[f6.8]** Necessary medical care", "Необхідної медичної допомоги",
  "**[f6.9]** Fashionable and beautiful clothing", "Модного та красивого одягу",
  "**[f6.10]** Necessary furniture", "Необхідних меблів",
  "**[f6.11]** Contemporary political knowledge", "Сучасних політичних знань",
  "**[f6.12]** Determination in achieving one's goals", "Рішучості в досягненні своїх цілей",
  "**[f6.13]** Legal assistance to protect one's rights and interests", "Юридичної допомоги для захисту своїх прав та інтересів",
  "**[f6.14]** Opportunity for a fulfilling vacation", "Можливості повноцінно проводити відпустку",
  "**[f6.15]** Opportunity for additional income", "Можливості мати додатковий заробіток",
  "**[f6.16]** Opportunity to buy essential food products", "Можливості купувати найнеобхідніші продукти",
  "**[f6.17]** Initiative and independence in solving life problems", "Ініціативи i самостійності під час розв’язання життєвих проблем",
  "**[f6.18]** Fulfilling leisure time", "Повноцінного дозвілля",
  "**[f6.19]** Opportunity to work with full dedication", "Можливості працювати з повною віддачею",
  "**[f6.20]** Opportunity to eat according to one's tastes", "Можливості харчуватися відповідно до своїх смаків"
)

# Вивід таблиці питань
kable(iiswb_items, 
      col.names = c("English Formulation", "Ukrainian Formulation"),
      align = c("l", "l"))
Table 1: IISWB-20: Questionnaire Items
English Formulation Ukrainian Formulation
Main Question: Which of the following do you lack? Основне запитання: Чого з наведеного Вам не вистачає?
[f6.1] Ability to adapt to new social conditions Вміння жити в нових суспільних умовах
[f6.2] Health Здоров’я
[f6.3] Suitable job Роботи, що підходить
[f6.4] Necessary clothing Необхідного одягу
[f6.5] Good housing Хорошого житла
[f6.6] Contemporary economic knowledge Сучасних економічних знань
[f6.7] Self-confidence Упевненості в своїх силах
[f6.8] Necessary medical care Необхідної медичної допомоги
[f6.9] Fashionable and beautiful clothing Модного та красивого одягу
[f6.10] Necessary furniture Необхідних меблів
[f6.11] Contemporary political knowledge Сучасних політичних знань
[f6.12] Determination in achieving one’s goals Рішучості в досягненні своїх цілей
[f6.13] Legal assistance to protect one’s rights and interests Юридичної допомоги для захисту своїх прав та інтересів
[f6.14] Opportunity for a fulfilling vacation Можливості повноцінно проводити відпустку
[f6.15] Opportunity for additional income Можливості мати додатковий заробіток
[f6.16] Opportunity to buy essential food products Можливості купувати найнеобхідніші продукти
[f6.17] Initiative and independence in solving life problems Ініціативи i самостійності під час розв’язання життєвих проблем
[f6.18] Fulfilling leisure time Повноцінного дозвілля
[f6.19] Opportunity to work with full dedication Можливості працювати з повною віддачею
[f6.20] Opportunity to eat according to one’s tastes Можливості харчуватися відповідно до своїх смаків
Table 2: IISWB-20: Response Alternatives
English Formulation Ukrainian Formulation
[1] Lack (Not enough) Не вистачає
[2] Hard to say whether it is enough or not Важко сказати, вистачає чи ні
[3] Enough (Do not lack) Вистачає
[4] Not interested Не цікавить

3 Data Loading and Preparation

Show / Hide Code
# Load raw SPSS data file
data_raw <- read_sav(here("Monitoring2024.sav"))

# Preserve original SPSS variable labels for items f6.1–f6.20
original_labels <- data_raw %>%
  select(starts_with("f6.")) %>%
  map(~ attr(.x, "label")) %>%
  unlist()

# Build a code → label reference table used throughout the report
questions_df <- tibble(
  old_var  = names(original_labels),
  new_var  = paste0("Q", seq_along(original_labels)),
  question = original_labels
)
Show / Hide Code
kable(
  questions_df,
  col.names = c("Original Variable", "New Variable", "Item Formulation (Ukrainian)"),
  booktabs  = TRUE,
  align     = c("l", "l", "l")
) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed"),
    full_width = TRUE,
    font_size  = 10
  ) %>%
  column_spec(3, width = "50em")
Table 3: Variable Mapping and Item Formulations
Original Variable New Variable Item Formulation (Ukrainian)
f6.1 Q1 Вміння жити в нових суспільних умовах
f6.2 Q2 Здоров'я
f6.3 Q3 Роботи, що підходить
f6.4 Q4 Необхідного одягу
f6.5 Q5 Хорошого житла
f6.6 Q6 Сучасних економічних знань
f6.7 Q7 Упевненості в своїх силах
f6.8 Q8 Необхідної медичної допомоги
f6.9 Q9 Модного та красивого одягу
f6.10 Q10 Необхідних меблів
f6.11 Q11 Сучасних політичних знань
f6.12 Q12 Рішучості в досягненні своїх цілей
f6.13 Q13 Юридичної допомоги для захисту своїх прав та інтересів
f6.14 Q14 Можливості повноцінно проводити відпустку
f6.15 Q15 Можливості мати додатковий заробіток
f6.16 Q16 Можливості купувати найнеобхідніші продукти
f6.17 Q17 Ініціативи i самостійності під час розв’язання життєвих проблем
f6.18 Q18 Повноцінного дозвілля
f6.19 Q19 Можливості працювати з повною віддачею
f6.20 Q20 Можливості харчуватися відповідно до своїх смаків
f6.49 Q21 Можливості дати дітям повноцінну освіту
Show / Hide Code
# Response codes: 1 = "Not enough"; 2 & 4 = "Hard to say" (collapsed); 3 = "Enough"
df <- data_raw %>%
  select(
    Q1  = f6.1,  Q2  = f6.2,  Q3  = f6.3,  Q4  = f6.4,  Q5  = f6.5,
    Q6  = f6.6,  Q7  = f6.7,  Q8  = f6.8,  Q9  = f6.9,  Q10 = f6.10,
    Q11 = f6.11, Q12 = f6.12, Q13 = f6.13, Q14 = f6.14, Q15 = f6.15,
    Q16 = f6.16, Q17 = f6.17, Q18 = f6.18, Q19 = f6.19, Q20 = f6.20,
    wt  = wt_UA4101
  ) %>%
  mutate(across(starts_with("Q"), ~ case_when(
    .x == 1         ~ 1L,
    .x %in% c(2, 4) ~ 2L,
    .x == 3         ~ 3L,
    TRUE            ~ as.integer(.x)
  ))) %>%
  drop_na()

# Attach value labels
value_labels <- c("Not enough" = 1, "Hard to say" = 2, "Enough" = 3)
df[paste0("Q", 1:20)] <- lapply(
  df[paste0("Q", 1:20)], set_labels, labels = value_labels
)

# Restore SPSS variable labels under new names
for (i in seq_len(20)) {
  old_name <- paste0("f6.", i)
  if (old_name %in% names(original_labels))
    attr(df[[paste0("Q", i)]], "label") <- original_labels[old_name]
}

cat("Unweighted N :", nrow(df), "\n")
Unweighted N : 4101 
Show / Hide Code
cat("Weighted   N :", round(sum(df$wt)), "\n")
Weighted   N : 4101 
Show / Hide Code
cat("Indicators   :", 20L, "\n")
Indicators   : 20 

4 Theoretical Domain Structure

Show / Hide Code
# Seven-domain structure as specified in original IISWB-20 documentation.
# NOTE: Social Security has only one item (Q13) — a single-item domain that
# poses identification challenges in higher-order models (see Appendix A).
theoretical_structure <- list(
  "Personal Domain"                    = c("Q1",  "Q7",  "Q17", "Q12"),
  "Professional-Labour Domain"         = c("Q19", "Q3",  "Q15"),
  "Informational-Cultural Domain"      = c("Q6",  "Q11"),
  "Recreational-Cultural Domain"       = c("Q2",  "Q8",  "Q18", "Q14"),
  "Material-Household Domain (Lvl 1)"  = c("Q16", "Q5",  "Q4",  "Q10"),
  "Material-Household Domain (Lvl 2)"  = c("Q20", "Q9"),
  "Social Security"                    = c("Q13")
)
Show / Hide Code
# Weighted response frequencies for a single variable
weighted_freq <- function(var, weight) {
  tibble(value = var, weight = weight) %>%
    group_by(value) %>%
    summarise(n = sum(weight), .groups = "drop") %>%
    mutate(
      percent     = n / sum(n) * 100,
      value_label = factor(
        value, levels = 1:3,
        labels = c("Not enough", "Hard to say", "Enough")
      )
    )
}

# Extract a single fit index from a lavaan object
fi <- function(fit_obj, index) fitMeasures(fit_obj, index)

# APA-style p-value formatting
fmt_p <- function(p) ifelse(p < .001, "< .001", sprintf("%.3f", p))

# Interpret fit index against Hu & Bentler (1999) thresholds
interpret_fit <- function(metric_name, value) {
  case_when(
    metric_name %in% c("cfi.robust", "tli.robust") ~
      ifelse(value >= .95, "Excellent", ifelse(value >= .90, "Acceptable", "Poor")),
    metric_name == "rmsea.robust" ~
      ifelse(value <= .05, "Excellent", ifelse(value <= .08, "Acceptable", "Marginal")),
    metric_name == "srmr" ~
      ifelse(value <= .05, "Excellent", ifelse(value <= .08, "Acceptable", "Poor")),
    TRUE ~ ""
  )
}

# Reusable fit-index table builder
fit_table <- function(fit_obj,
                      caption  = "Global Fit Indices",
                      highlight_row = NULL) {
  metrics <- fitMeasures(fit_obj, c(
    "chisq.scaled", "df.scaled", "pvalue.scaled",
    "cfi.robust", "tli.robust",
    "rmsea.robust", "rmsea.ci.lower.robust", "rmsea.ci.upper.robust",
    "srmr"
  ))
  tbl <- tibble(
    `Fit Index`            = c("χ² (Scaled)", "df", "p-value",
                               "CFI (Robust)", "TLI (Robust)",
                               "RMSEA (Robust)",
                               "RMSEA 90% CI Lower", "RMSEA 90% CI Upper",
                               "SRMR"),
    Value                  = round(as.numeric(metrics), 3),
    `Acceptable Threshold` = c("—", "—", "—", "≥ .95", "≥ .95",
                               "≤ .06", "—", "—", "≤ .08"),
    Interpretation         = map2_chr(`Fit Index`, Value, interpret_fit)
  )
  out <- kable(tbl, booktabs = TRUE,
               caption = caption,
               align   = c("l", "c", "c", "l")) %>%
    kable_styling(bootstrap_options = c("striped", "hover"),
                  full_width = FALSE)
  out
}

4.1 Frequency Distributions by Theoretical Domain

Show / Hide Code
all_freq_data <- imap_dfr(theoretical_structure, function(vars, block_name) {
  map_dfr(vars, ~ weighted_freq(df[[.x]], df$wt) %>% mutate(variable = .x)) %>%
    mutate(domain = block_name)
}) %>%
  left_join(questions_df %>% select(new_var, question),
            by = c("variable" = "new_var")) %>%
  mutate(
    # Wrap long labels at ~30 characters for two-line display
    question_wrap = str_wrap(str_trunc(question, 60), width = 30)
  )

ggplot(all_freq_data,
       aes(x    = reorder(question_wrap, as.numeric(variable)),
           y    = percent,
           fill = value_label)) +
  geom_col(position = "stack", width = 0.72) +
  scale_fill_manual(
    values = c("Not enough" = "#D73027", "Hard to say" = "#FEE08B", "Enough" = "#1A9850"),
    name   = "Response",
    breaks = c("Not enough", "Hard to say", "Enough")
  ) +
  scale_y_continuous(breaks = c(0, 25, 50, 75, 100),
                     labels = c("0", "25", "50", "75", "100"),
                     expand = expansion(mult = c(0, 0.02))) +
  facet_wrap(~ domain, scales = "free_y", ncol = 2) +
  coord_flip() +
  labs(x = NULL, y = "Percentage (%)") +
  theme(
    axis.text.y      = element_text(size = 9, lineheight = 1.1),
    axis.text.x      = element_text(size = 9),
    axis.title.x     = element_text(size = 10),
    strip.text       = element_text(face = "bold", size = 10),
    legend.title     = element_text(size = 10),
    legend.text      = element_text(size = 9),
    panel.grid.major.y = element_blank(),
    panel.grid.major.x = element_line(color = "grey85"),
    plot.margin      = margin(8, 12, 8, 8)
  )
Figure 1: Figure 1. Weighted Response Frequency Distributions by Theoretical Domain

5 Phase 1: Data Suitability

5.1 Polychoric Correlation Matrix

Show / Hide Code
# Weighted polychoric correlations are appropriate for ordinal items because
# they estimate the latent continuous correlations underlying observed ordinal
# responses (Olsson, 1979).
cat("Computing weighted polychoric correlation matrix...\n")
Computing weighted polychoric correlation matrix...
Show / Hide Code
poly_matrix <- polychoric(df[, paste0("Q", 1:20)], weight = df$wt)$rho %>%
  round(3)

# Bartlett's test of sphericity (H0: correlation matrix = identity matrix).
bartlett_result <- cortest.bartlett(poly_matrix, n = sum(df$wt))
cat("\n=== BARTLETT'S TEST OF SPHERICITY ===\n")

=== BARTLETT'S TEST OF SPHERICITY ===
Show / Hide Code
cat("Chi-square :", round(bartlett_result$chisq, 2), "\n")
Chi-square : 33077 
Show / Hide Code
cat("df         :", bartlett_result$df, "\n")
df         : 190 
Show / Hide Code
cat("p-value    :", fmt_p(bartlett_result$p.value), "\n")
p-value    : < .001 
Show / Hide Code
# Kaiser-Meyer-Olkin sampling adequacy (minimum acceptable threshold: .70)
kmo_result <- KMO(poly_matrix)
kmo_interp <- case_when(
  kmo_result$MSA >= .90 ~ "marvellous",
  kmo_result$MSA >= .80 ~ "meritorious",
  kmo_result$MSA >= .70 ~ "middling",
  kmo_result$MSA >= .60 ~ "mediocre",
  kmo_result$MSA >= .50 ~ "miserable",
  TRUE                  ~ "unacceptable"
)
cat("\n=== KAISER-MEYER-OLKIN (KMO) ===\n")

=== KAISER-MEYER-OLKIN (KMO) ===
Show / Hide Code
cat("Overall KMO:", round(kmo_result$MSA, 3),
    paste0("(", kmo_interp, ")\n"))
Overall KMO: 0.907 (marvellous)
Show / Hide Code
kmo_items <- tibble(
  Variable = names(kmo_result$MSAi),
  KMO      = kmo_result$MSAi,
  `Item Formulation (Ukrainian)` = map_chr(
    names(kmo_result$MSAi),
    ~ str_trunc(questions_df$question[questions_df$new_var == .x], 55)
  )
) %>% arrange(KMO)

kable(kmo_items, digits = 3, booktabs = TRUE,
      align = c("l", "c", "l")) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = TRUE) %>%
  row_spec(which(kmo_items$KMO < .60), bold = TRUE, color = "#C0392B")
Table 4: Item-Level KMO Values (Ascending Order)
Variable KMO Item Formulation (Ukrainian)
Q11 0.834 Сучасних політичних знань
Q14 0.851 Можливості повноцінно проводити відпустку
Q6 0.856 Сучасних економічних знань
Q18 0.868 Повноцінного дозвілля
Q16 0.886 Можливості купувати найнеобхідніші продукти
Q4 0.889 Необхідного одягу
Q12 0.892 Рішучості в досягненні своїх цілей
Q3 0.898 Роботи, що підходить
Q9 0.910 Модного та красивого одягу
Q20 0.912 Можливості харчуватися відповідно до своїх смаків
Q8 0.912 Необхідної медичної допомоги
Q7 0.915 Упевненості в своїх силах
Q2 0.924 Здоров'я
Q19 0.927 Можливості працювати з повною віддачею
Q10 0.927 Необхідних меблів
Q5 0.933 Хорошого житла
Q13 0.935 Юридичної допомоги для захисту своїх прав та інтересів
Q17 0.935 Ініціативи i самостійності під час розв’язання життє...
Q15 0.940 Можливості мати додатковий заробіток
Q1 0.962 Вміння жити в нових суспільних умовах

Note. KMO ≥ .70 is the minimum acceptable threshold. Items with KMO < .60 (highlighted in red) may be candidates for removal.

Show / Hide Code
corrplot(
  poly_matrix,
  method        = "color",
  type          = "upper",
  order         = "hclust",
  hclust.method = "average",
  addrect       = 7,
  tl.col        = "black",
  tl.srt        = 45,
  tl.cex        = 0.8,
  col           = colorRampPalette(c("#4575B4", "white", "#D73027"))(200),
  mar           = c(0, 0, 2, 0)
)
Figure 2: Figure 2. Weighted Polychoric Correlation Matrix (hierarchical clustering, k = 7)

6 Phase 2: Dimensionality Assessment

6.1 Parallel Analysis

Show / Hide Code
# Parallel analysis (PA) with polychoric matrix is preferred over the
# Kaiser eigenvalue-greater-than-one rule (Horn, 1965; Zwick & Velicer, 1986).
set.seed(123)
pa_res <- fa.parallel(
  x           = poly_matrix,
  n.obs       = sum(df$wt),
  fa          = "both",
  fm          = "wls",
  n.iter      = 500,
  show.legend = TRUE
)

Figure 3. Parallel Analysis Scree Plot (Weighted Polychoric Matrix)
Parallel analysis suggests that the number of factors =  6  and the number of components =  4 
Show / Hide Code
cat("\nPA recommended factors   :", pa_res$nfact, "\n")

PA recommended factors   : 6 
Show / Hide Code
cat("PA recommended components:", pa_res$ncomp, "\n")
PA recommended components: 4 
Show / Hide Code
eigen_table <- tibble(
  Factor         = seq_len(length(pa_res$fa.values)),
  `Actual FA`    = pa_res$fa.values,
  `Simulated FA` = pa_res$fa.sim,
  `Retain?`      = ifelse(`Actual FA` > `Simulated FA`, "✓", "✗")
) %>% head(10)

kable(eigen_table, digits = 3, booktabs = TRUE,
      align = c("c", "r", "r", "c")) %>%
  kable_styling(bootstrap_options = c("striped", "hover"),
                full_width = FALSE) %>%
  row_spec(which(eigen_table$`Retain?` == "✓"), background = "#D5E8D4")
Table 5: Eigenvalues from Parallel Analysis (First 10 Factors)
Factor Actual FA Simulated FA Retain?
1 6.512 0.279
2 1.007 0.192
3 0.620 0.164
4 0.431 0.141
5 0.388 0.123
6 0.247 0.106
7 0.088 0.091
8 0.012 0.078
9 -0.052 0.065
10 -0.082 0.052

Note. Factors with actual eigenvalue exceeding the 95th-percentile simulated value are retained (✓).

6.2 Exploratory Graph Analysis (EGA)

Show / Hide Code
# EGA uses GLASSO regularization + Walktrap community detection (Golino & Epskamp, 2017).
ega_result <- EGA(
  data      = poly_matrix,
  n         = sum(df$wt),
  model     = "glasso",
  plot.EGA  = TRUE,
  seed      = 123,
  plot.args = list(
    title      = "Network Structure — IISWB-20 Indicators (EGA)",
    node.size  = 8,
    label.size = 3
  )
)

Figure 4. Network Structure of IISWB-20 Indicators (EGA, GLASSO/Walktrap)
Show / Hide Code
cat("EGA detected dimensions:", ega_result$n.dim, "\n")
EGA detected dimensions: 6 
Show / Hide Code
ega_membership <- tibble(
  Variable  = names(ega_result$wc),
  Dimension = ega_result$wc,
  `Item Formulation (Ukrainian)` = map_chr(
    names(ega_result$wc),
    ~ str_trunc(questions_df$question[questions_df$new_var == .x], 60)
  )
) %>% arrange(Dimension, Variable)

membership_counts <- table(ega_membership$Dimension)

kable(ega_membership,
      col.names = c("Code", "Dimension (Cluster)", "Item Formulation (Ukrainian)"),
      booktabs  = TRUE,
      align     = c("l", "c", "l")) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = TRUE) %>%
  pack_rows(index = membership_counts)
Table 6: Item Assignment to EGA-Detected Dimensions
Code Dimension (Cluster) Item Formulation (Ukrainian)
1
Q1 1 Вміння жити в нових суспільних умовах
Q12 1 Рішучості в досягненні своїх цілей
Q17 1 Ініціативи i самостійності під час розв’язання життєвих п...
Q7 1 Упевненості в своїх силах
2
Q13 2 Юридичної допомоги для захисту своїх прав та інтересів
Q2 2 Здоров'я
Q8 2 Необхідної медичної допомоги
3
Q15 3 Можливості мати додатковий заробіток
Q19 3 Можливості працювати з повною віддачею
Q3 3 Роботи, що підходить
4
Q10 4 Необхідних меблів
Q16 4 Можливості купувати найнеобхідніші продукти
Q20 4 Можливості харчуватися відповідно до своїх смаків
Q4 4 Необхідного одягу
Q5 4 Хорошого житла
Q9 4 Модного та красивого одягу
5
Q11 5 Сучасних політичних знань
Q6 5 Сучасних економічних знань
6
Q14 6 Можливості повноцінно проводити відпустку
Q18 6 Повноцінного дозвілля

6.2.1 Bootstrap Stability

Show / Hide Code
# 500 parametric bootstrap iterations; item stability > .75 is the threshold
# for reliable cluster membership (Christensen & Golino, 2021).
cat("Running bootstrap stability (500 iterations)...\n")
Running bootstrap stability (500 iterations)...
Show / Hide Code
ega_boot <- bootEGA(
  data                  = df[, paste0("Q", 1:20)],
  iter                  = 500,
  type                  = "parametric",
  ncores                = 2,
  seed                  = 123,
  plot.typicalStructure = FALSE
)

Show / Hide Code
item_stab <- itemStability(ega_boot, IS.plot = FALSE)
print(item_stab)
EGA Type: EGA 
Bootstrap Samples: 500 (Parametric)

Proportion Replicated in Dimensions:

   Q1    Q2    Q3    Q4    Q5    Q6    Q7    Q8    Q9   Q10   Q11   Q12   Q13 
1.000 0.996 0.560 1.000 1.000 0.988 0.998 0.980 1.000 1.000 0.988 0.998 0.998 
  Q14   Q15   Q16   Q17   Q18   Q19   Q20 
0.620 0.742 0.994 1.000 0.620 0.718 0.994 

7 Phase 3: Exploratory Factor Analysis — 6-Factor Solution

Show / Hide Code
# Extraction: WLS (analog of WLSMV in the EFA framework).
# Rotation: oblimin (oblique) — domains are expected to share variance.
# The 6-factor solution is based on convergent PA + EGA evidence.
efa_6 <- fa(
  r        = poly_matrix,
  nfactors = 6,
  n.obs    = sum(df$wt),
  rotate   = "oblimin",
  fm       = "wls"
)

cat("=== 6-FACTOR EFA — LOADINGS (cutoff = .30, sorted) ===\n")
=== 6-FACTOR EFA — LOADINGS (cutoff = .30, sorted) ===
Show / Hide Code
print(efa_6$loadings, cutoff = .30, sort = TRUE)

Loadings:
    WLS1   WLS2   WLS5   WLS6   WLS3   WLS4  
Q4   0.832                                   
Q9   0.609                                   
Q10  0.631                                   
Q7          0.674                            
Q12         0.735                            
Q17         0.564                            
Q2                 0.623                     
Q8                 0.778                     
Q3                        0.769              
Q14                              0.759       
Q18                              0.680       
Q6                                      0.709
Q11                                     0.817
Q1          0.378                            
Q5   0.450                                   
Q13                0.391                     
Q15                       0.465              
Q16  0.433         0.312                     
Q19                       0.453              
Q20  0.423                                   

                WLS1  WLS2  WLS5  WLS6  WLS3  WLS4
SS loadings    2.127 1.620 1.347 1.187 1.248 1.259
Proportion Var 0.106 0.081 0.067 0.059 0.062 0.063
Cumulative Var 0.106 0.187 0.255 0.314 0.376 0.439
Show / Hide Code
fa.diagram(efa_6, main = "6-Factor EFA Structure", cut = .30, simple = FALSE)

Figure 5. Factor Structure Diagram — 6-Factor EFA (WLS, Oblimin)
Show / Hide Code
data.frame(
  Metric = c("TLI", "RMSEA", "RMSEA 90% CI", "χ²", "df", "p-value"),
  Value  = c(
    round(efa_6$TLI, 3),
    round(efa_6$RMSEA[1], 3),
    paste0("[", round(efa_6$RMSEA[2], 3), "; ", round(efa_6$RMSEA[3], 3), "]"),
    round(efa_6$STATISTIC, 2),
    efa_6$dof,
    fmt_p(efa_6$PVAL)
  )
) %>%
  kable(booktabs = TRUE, align = c("l", "c")) %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Table 7: Fit Indices — 6-Factor EFA Solution
Metric Value
TLI 0.909
RMSEA 0.062
RMSEA 90% CI [0.059; 0.065]
χ² 1427.18
df 85
p-value < .001
Show / Hide Code
print(round(efa_6$Vaccounted, 3))
Table 8: Variance Explained — 6-Factor EFA Solution
                       WLS1  WLS2  WLS5  WLS6  WLS3  WLS4
SS loadings           2.530 1.952 1.730 1.532 1.470 1.461
Proportion Var        0.126 0.098 0.087 0.077 0.074 0.073
Cumulative Var        0.126 0.224 0.311 0.387 0.461 0.534
Proportion Explained  0.237 0.183 0.162 0.144 0.138 0.137
Cumulative Proportion 0.237 0.420 0.582 0.725 0.863 1.000

7.1 EGA vs. EFA Structure Comparison

Show / Hide Code
ega_vs_efa <- data.frame(
  Code        = c("Q1",  "Q12", "Q17", "Q7",
                  "Q13", "Q2",  "Q8",
                  "Q15", "Q19", "Q3",
                  "Q10", "Q16", "Q20", "Q4",  "Q5",  "Q9",
                  "Q11", "Q6",
                  "Q14", "Q18"),
  EGA_Cluster = c(1, 1, 1, 1,  2, 2, 2,  3, 3, 3,
                  4, 4, 4, 4, 4, 4,  5, 5,  6, 6),
  Factor_Name = c(
    rep("Personal Potential",   4),
    rep("Health & Security",    3),
    rep("Work & Realization",   3),
    rep("Material Wellbeing",   6),
    rep("Socio-Cultural",       2),
    rep("Leisure & Recreation", 2)
  ),
  `Item Content (Ukrainian)` = c(
    "Вміння жити в нових умовах", "Рішучість у досягненні цілей",
    "Ініціатива та самостійність", "Упевненість у своїх силах",
    "Юридична допомога", "Здоров'я", "Медична допомога",
    "Додатковий заробіток", "Робота з повною віддачею", "Підходяща робота",
    "Необхідні меблі", "Найнеобхідніші продукти", "Харчування за смаком",
    "Необхідний одяг", "Хороше житло", "Модний одяг",
    "Політичні знання", "Економічні знання",
    "Відпустка", "Повноцінне дозвілля"
  ),
  stringsAsFactors = FALSE,
  check.names      = FALSE
)

kable(ega_vs_efa, booktabs = TRUE, align = c("l", "c", "l", "l")) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = TRUE) %>%
  collapse_rows(columns = c(2, 3), valign = "top")
Table 9: Item Assignment: EGA vs. EFA (6-Factor Solution)
Code EGA_Cluster Factor_Name Item Content (Ukrainian)
Q1 1 Personal Potential Вміння жити в нових умовах
Q12 Рішучість у досягненні цілей
Q17 Ініціатива та самостійність
Q7 Упевненість у своїх силах
Q13 2 Health & Security Юридична допомога
Q2 Здоров'я
Q8 Медична допомога
Q15 3 Work & Realization Додатковий заробіток
Q19 Робота з повною віддачею
Q3 Підходяща робота
Q10 4 Material Wellbeing Необхідні меблі
Q16 Найнеобхідніші продукти
Q20 Харчування за смаком
Q4 Необхідний одяг
Q5 Хороше житло
Q9 Модний одяг
Q11 5 Socio-Cultural Політичні знання
Q6 Економічні знання
Q14 6 Leisure & Recreation Відпустка
Q18 Повноцінне дозвілля

8 Phase 4: Confirmatory Modeling

8.1 M0: Unidimensional CFA (Theoretical Baseline)

Purpose. M0 is the theoretical baseline specified by the original authors [@Golovakha1997; @Panina2001], who prescribed a single composite mean score. Poor fit motivates multidimensional modeling.

Show / Hide Code
model_uni <- paste("UNI_Factor =~", paste0("Q", 1:20, collapse = " + "))

fit_uni <- cfa(
  model            = model_uni,
  data             = df,
  ordered          = TRUE,
  sampling.weights = "wt",
  estimator        = "WLSMV",
  std.lv           = TRUE,
  se               = "robust"
)
fit_harman <- fit_uni    # alias for model comparison table
Show / Hide Code
fit_table(fit_uni)
Table 10: Global Fit Indices — M0: Unidimensional CFA
Global Fit Indices
Fit Index Value Acceptable Threshold Interpretation
χ² (Scaled) 4462.601
df 170.000
p-value 0.000
CFI (Robust) 0.709 ≥ .95
TLI (Robust) 0.675 ≥ .95
RMSEA (Robust) 0.115 ≤ .06
RMSEA 90% CI Lower 0.112
RMSEA 90% CI Upper 0.119
SRMR 0.079 ≤ .08

8.2 M1: Six Correlated Factors CFA

Identification note. Two two-indicator factors (F_Leisure: Q14, Q18; F_Info_Culture: Q6, Q11) are technically identified when factor variances are fixed (std.lv = TRUE) and residual variances are freely estimated. Freed error covariances Q4 ~~ Q9 and Q16 ~~ Q20 are included on theoretical grounds (item-content overlap within the Material domain) and are supported by the top modification indices.

Show / Hide Code
model_6_cfa <- "
  # F1: Material Wellbeing (6 items)
  Material_Wellbeing =~ Q4  + Q9  + Q10 + Q5  + Q16 + Q20

  # F2: Personal Potential (4 items)
  Personal           =~ Q7  + Q12 + Q17 + Q1

  # F3: Health & Security (3 items; Q13 subsumed here, consistent with EGA)
  Health_Security    =~ Q2  + Q8  + Q13

  # F4: Professional Realization (3 items)
  Work               =~ Q3  + Q15 + Q19

  # F5: Leisure & Recreation (2 items — just-identified)
  Leisure            =~ Q14 + Q18

  # F6: Socio-Cultural Competence (2 items — just-identified)
  Info_Culture       =~ Q6  + Q11

  # Freed error covariances: content overlap within Material domain
  Q4  ~~ Q9    # clothing: necessary vs. fashionable
  Q16 ~~ Q20   # food: basic vs. preferred taste
"

fit_robust <- cfa(
  model            = model_6_cfa,
  data             = df,
  ordered          = TRUE,
  sampling.weights = "wt",
  estimator        = "WLSMV",
  se               = "robust"
)
Show / Hide Code
fit_table(fit_robust)
Table 11: Global Fit Indices — M1: Six Correlated Factors CFA
Global Fit Indices
Fit Index Value Acceptable Threshold Interpretation
χ² (Scaled) 1119.919
df 153.000
p-value 0.000
CFI (Robust) 0.923 ≥ .95
TLI (Robust) 0.905 ≥ .95
RMSEA (Robust) 0.062 ≤ .06
RMSEA 90% CI Lower 0.059
RMSEA 90% CI Upper 0.066
SRMR 0.041 ≤ .08

Note. WLSMV uses mean-and-variance adjusted χ² and robust CFI/TLI/RMSEA. Thresholds: CFI/TLI ≥ .95 (excellent), ≥ .90 (acceptable); RMSEA ≤ .06 (excellent), ≤ .08 (acceptable); SRMR ≤ .05 (excellent), ≤ .08 (acceptable) (Hu & Bentler, 1999).

Show / Hide Code
loadings_df <- standardizedSolution(fit_robust) %>%
  filter(op == "=~") %>%
  mutate(
    Sig  = case_when(
      pvalue < .001 ~ "***",
      pvalue < .01  ~ "**",
      pvalue < .05  ~ "*",
      TRUE          ~ ""
    ),
    `Item (Ukrainian)` = map_chr(
      rhs,
      ~ str_wrap(
          str_trunc(questions_df$question[questions_df$new_var == .x], 60),
          width = 40
        )
    )
  ) %>%
  select(Factor = lhs, Item = rhs,
         `β` = est.std, SE = se, z,
         Sig, `Item (Ukrainian)`)

kable(loadings_df, digits = 3, booktabs = TRUE,
      align = c("l", "l", "r", "r", "r", "c", "l")) %>%
  kable_styling(bootstrap_options = c("striped", "hover"),
                full_width = TRUE) %>%
  pack_rows(
    index = table(factor(loadings_df$Factor, levels = unique(loadings_df$Factor)))
  ) %>%
  column_spec(7, width = "14cm")
Table 12: Standardized Factor Loadings — M1: Six Correlated Factors CFA
Factor Item β SE z Sig Item (Ukrainian)
Material_Wellbeing
Material_Wellbeing Q4 0.726 0.015 49.0 *** Необхідного одягу
Material_Wellbeing Q9 0.636 0.016 39.9 *** Модного та красивого одягу
Material_Wellbeing Q10 0.657 0.015 44.6 *** Необхідних меблів
Material_Wellbeing Q5 0.563 0.018 31.9 *** Хорошого житла
Material_Wellbeing Q16 0.731 0.015 47.6 *** Можливості купувати найнеобхідніші продукти
Material_Wellbeing Q20 0.752 0.015 49.8 *** Можливості харчуватися відповідно до своїх смаків
Personal
Personal Q7 0.734 0.014 53.8 *** Упевненості в своїх силах
Personal Q12 0.715 0.014 52.1 *** Рішучості в досягненні своїх цілей
Personal Q17 0.722 0.014 50.8 *** Ініціативи i самостійності під час розв’язання життєвих п...
Personal Q1 0.682 0.016 42.6 *** Вміння жити в нових суспільних умовах
Health_Security
Health_Security Q2 0.676 0.021 31.7 *** Здоров'я
Health_Security Q8 0.750 0.015 48.9 *** Необхідної медичної допомоги
Health_Security Q13 0.614 0.018 33.7 *** Юридичної допомоги для захисту своїх прав та інтересів
Work
Work Q3 0.685 0.016 42.3 *** Роботи, що підходить
Work Q15 0.678 0.017 39.7 *** Можливості мати додатковий заробіток
Work Q19 0.659 0.016 41.6 *** Можливості працювати з повною віддачею
Leisure
Leisure Q14 0.755 0.025 29.9 *** Можливості повноцінно проводити відпустку
Leisure Q18 0.754 0.021 36.0 *** Повноцінного дозвілля
Info_Culture
Info_Culture Q6 0.813 0.018 44.8 *** Сучасних економічних знань
Info_Culture Q11 0.703 0.018 39.1 *** Сучасних політичних знань

Note. β = fully standardized loading. *** p < .001, ** p < .01, * p < .05. β ≥ .50 indicates adequate indicator reliability (Hair et al., 2019).

Show / Hide Code
latent_vars  <- unique(loadings_df$Factor)
factor_cors  <- standardizedSolution(fit_robust) %>%
  filter(op == "~~", lhs != rhs,
         lhs %in% latent_vars, rhs %in% latent_vars)

cor_matrix <- diag(1, nrow = length(latent_vars))
rownames(cor_matrix) <- colnames(cor_matrix) <- latent_vars
for (i in seq_len(nrow(factor_cors))) {
  cor_matrix[factor_cors$lhs[i], factor_cors$rhs[i]] <- factor_cors$est.std[i]
  cor_matrix[factor_cors$rhs[i], factor_cors$lhs[i]] <- factor_cors$est.std[i]
}

corrplot(
  cor_matrix,
  method      = "color",
  type        = "upper",
  addCoef.col = "black",
  tl.col      = "black",
  col         = colorRampPalette(c("#4575B4", "white", "#D73027"))(200),
  mar         = c(0, 0, 2, 0)
)
Figure 3: Figure 6. Inter-Factor Correlations — M1: Six Correlated Factors CFA

Inter-factor correlations r > .50 indicate substantial shared variance across domains, motivating a higher-order model (Appendix A) and the Schmid–Leiman decomposition (Phase 5).

8.2.1 Modification Indices

Show / Hide Code
modindices(fit_robust, sort. = TRUE, minimum.value = 10) %>%
  filter(op == "~~") %>%
  head(20) %>%
  select(lhs, op, rhs, mi, epc, sepc.all) %>%
  kable(digits = 3, booktabs = TRUE,
        col.names = c("Variable 1", "Op", "Variable 2", "MI", "EPC", "SEPC"),
        align     = c("l", "c", "l", "r", "r", "r")) %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = TRUE)
Table 13: Top-20 Modification Indices — Error Covariances (MI > 10)
Variable 1 Op Variable 2 MI EPC SEPC
Q7 ~~ Q12 72.9 0.168 0.355
Q10 ~~ Q5 50.2 0.147 0.236
Q15 ~~ Q19 41.4 -0.160 -0.289
Q13 ~~ Q6 38.2 0.131 0.285
Q4 ~~ Q10 33.8 0.119 0.230
Q16 ~~ Q8 28.7 0.114 0.253
Q3 ~~ Q19 22.6 0.110 0.201
Q12 ~~ Q19 21.7 0.096 0.182
Q12 ~~ Q8 21.7 -0.109 -0.236
Q16 ~~ Q12 21.3 -0.111 -0.232
Q2 ~~ Q13 18.5 -0.111 -0.190
Q17 ~~ Q14 17.7 -0.120 -0.264
Q20 ~~ Q3 14.5 0.081 0.168
Q15 ~~ Q14 14.4 0.100 0.207
Q9 ~~ Q16 14.3 -0.089 -0.169
Q4 ~~ Q13 14.2 -0.096 -0.177
Q17 ~~ Q1 13.6 -0.082 -0.163
Q13 ~~ Q14 12.4 0.090 0.175
Q16 ~~ Q18 12.1 -0.090 -0.202
Q20 ~~ Q12 11.8 -0.077 -0.166

Note. MI > 10 is conventionally considered substantively meaningful. Post-hoc modifications require theoretical justification and cross-validation.

8.2.2 Reliability and Convergent Validity

Show / Hide Code
rel_results    <- semTools::reliability(fit_robust)
reliability_df <- as.data.frame(t(rel_results)) %>%
  rownames_to_column("Factor_Code") %>%
  mutate(
    Domain = case_when(
      Factor_Code == "Material_Wellbeing" ~ "Material Wellbeing",
      Factor_Code == "Personal"           ~ "Personal Potential",
      Factor_Code == "Health_Security"    ~ "Health & Security",
      Factor_Code == "Work"               ~ "Professional Realization",
      Factor_Code == "Leisure"            ~ "Leisure & Recreation",
      Factor_Code == "Info_Culture"       ~ "Socio-Cultural Competence",
      TRUE ~ Factor_Code
    )
  ) %>%
  select(
    Domain,
    `α (Ordinal)` = alpha.ord,
    `ω (McDonald)` = omega3,
    AVE            = avevar
  ) %>%
  mutate(
    `α ≥ .70`   = ifelse(`α (Ordinal)`  >= .70, "✓", "✗"),
    `ω ≥ .70`   = ifelse(`ω (McDonald)` >= .70, "✓", "✗"),
    `AVE ≥ .50` = ifelse(AVE             >= .50, "✓", "✗")
  )

kable(reliability_df, digits = 3, booktabs = TRUE,
      align = c("l", "c", "c", "c", "c", "c", "c")) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = TRUE) %>%
  row_spec(which(reliability_df$`ω (McDonald)` >= .70),
           background = "#D5E8D4") %>%
  row_spec(which(reliability_df$`ω (McDonald)` <  .70),
           background = "#FADBD8")
cat("Categorical Omega")
Categorical Omega
Show / Hide Code
semTools::compRelSEM (fit_robust)
Material_Wellbeing           Personal    Health_Security               Work 
             0.754              0.746              0.648              0.634 
           Leisure       Info_Culture 
             0.610              0.645 
Table 14: Reliability and Convergent Validity Indices — M1: Six Correlated Factors CFA
Domain α (Ordinal) ω (McDonald) AVE α ≥ .70 ω ≥ .70 AVE ≥ .50
Material Wellbeing 0.843 0.754 0.463
Personal Potential 0.799 0.746 0.509
Health & Security 0.710 0.648 0.465
Professional Realization 0.706 0.634 0.454
Leisure & Recreation 0.726 0.610 0.570
Socio-Cultural Competence 0.727 0.645 0.577

Note. α (Ordinal) = ordinal alpha based on polychoric correlations; ω (McDonald) = model-based composite reliability; AVE = Average Variance Extracted. Green rows: ω ≥ .70 (acceptable); red rows: ω < .70. AVE ≥ .50 required for convergent validity (Fornell & Larcker, 1981).

8.2.3 Discriminant Validity (HTMT)

Show / Hide Code
# HTMT < .85 = strict criterion; < .90 = liberal criterion
# (Henseler, Ringle & Sarstedt, 2015)
htmt_matrix <- semTools::htmt(
  model   = model_6_cfa,
  data    = df,
  ordered = TRUE
)
htmt_upper <- htmt_matrix[upper.tri(htmt_matrix)]

kable(round(htmt_matrix, 3), align = "c", booktabs = TRUE) %>%
  kable_styling(bootstrap_options = c("striped", "hover"),
                full_width = TRUE) %>%
  row_spec(0, bold = TRUE)
Table 15: Heterotrait–Monotrait Ratio (HTMT) — Discriminant Validity
Material_Wellbeing Personal Health_Security Work Leisure Info_Culture
Material_Wellbeing 1.000 0.604 0.719 0.689 0.521 0.423
Personal 0.604 1.000 0.643 0.724 0.434 0.575
Health_Security 0.719 0.643 1.000 0.669 0.586 0.502
Work 0.689 0.724 0.669 1.000 0.502 0.424
Leisure 0.521 0.434 0.586 0.502 1.000 0.353
Info_Culture 0.423 0.575 0.502 0.424 0.353 1.000

Note. HTMT strict criterion (< .85): ✓ Passed. Max HTMT = 0.724.

8.3 M2: Six-Factor ESEM with Target Rotation (Primary Model)

Why ESEM over CFA? Forcing zero cross-loadings (CFA) creates misspecification when items were designed to assess conceptually overlapping constructs (Asparouhov & Muthén, 2009; Marsh et al., 2014). Target rotation allows small cross-loadings while preserving the theoretically motivated loading pattern. ESEM with target rotation is the primary measurement model for the IISWB-20. Full lavaan output is available in Appendix A.

Show / Hide Code
fit_table(esem_6_fit)
Table 16: Global Fit Indices — M2: Six-Factor ESEM (Target Rotation)
Global Fit Indices
Fit Index Value Acceptable Threshold Interpretation
χ² (Scaled) 426.014
df 85.000
p-value 0.000
CFI (Robust) 0.965 ≥ .95
TLI (Robust) 0.921 ≥ .95
RMSEA (Robust) 0.057 ≤ .06
RMSEA 90% CI Lower 0.051
RMSEA 90% CI Upper 0.062
SRMR 0.019 ≤ .08

Note. WLSMV uses mean-and-variance adjusted χ² and robust CFI/TLI/RMSEA. Thresholds: CFI/TLI ≥ .95 (excellent), ≥ .90 (acceptable); RMSEA ≤ .06 (excellent), ≤ .08 (acceptable); SRMR ≤ .05 (excellent), ≤ .08 (acceptable) (Hu & Bentler, 1999).

8.3.1 ESEM Standardized Loadings

Show / Hide Code
library(dplyr)
library(tidyr)
library(stringr)
library(knitr)
library(kableExtra)
library(lavaan)

#----------------------------
# Step 1: item-level metadata
#----------------------------
item_meta <- primary_factor_map %>%
  mutate(
    sort_key = match(primary_factor, names(esem_factor_labels)),
    Domain   = esem_factor_labels[primary_factor]
  )

#----------------------------
# Step 2: long loadings + formatting
#----------------------------
esem_long <- standardizedSolution(esem_6_fit) %>%
  filter(op == "=~") %>%
  select(factor = lhs, item = rhs, loading = est.std) %>%
  left_join(primary_factor_map, by = "item") %>%
  mutate(
    loading_fmt = case_when(
      factor == primary_factor & abs(loading) >= .50 ~
        cell_spec(
          sprintf("%.3f", loading),
          bold = TRUE,
          format = "html"
        ),
      
      factor == primary_factor ~
        cell_spec(
          sprintf("%.3f", loading),
          italic = TRUE,
          format = "html"
        ),
      
      TRUE ~ sprintf("%.3f", loading)
    ),
    factor_label = esem_factor_labels[factor]
  ) %>%
  select(item, factor_label, loading_fmt)

#----------------------------
# Step 3: pivot to wide
#----------------------------
esem_loading_wide <- esem_long %>%
  pivot_wider(
    names_from  = factor_label,
    values_from = loading_fmt
  ) %>%
  left_join(item_meta, by = "item") %>%
  left_join(
    questions_df %>% select(item = new_var, question),
    by = "item"
  ) %>%
  mutate(
    question = str_trunc(question, 48)
  ) %>%
  arrange(sort_key, item) %>%
  select(
    Item = item,
    all_of(esem_factor_labels),
    `Item (Ukrainian)` = question,
    Domain
  )


#----------------------------
# Step 5: drop helper column
#----------------------------
esem_loading_display <- esem_loading_wide %>%
  select(-Domain)

#----------------------------
# Step 6: render table
#----------------------------
kable(
  esem_loading_display,
  format = "html",
  booktabs = TRUE,
  align = c("l", rep("r", length(esem_factor_labels)), "l"),
  escape = FALSE
) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed"),
    full_width = TRUE
  ) %>%
  column_spec(ncol(esem_loading_display), width = "10cm")
Table 17: Standardized Factor Loadings — M2: Six-Factor ESEM (Target Rotation)
Item f1 f2 f3 f4 f5 f6 Item (Ukrainian)
Q10 0.698 0.060 -0.048 -0.085 0.089 -0.015 Необхідних меблів
Q16 0.589 -0.156 0.233 0.209 -0.183 0.094 Можливості купувати найнеобхідніші продукти
Q20 0.565 -0.168 0.146 0.250 -0.008 0.086 Можливості харчуватися відповідно до своїх см...
Q4 0.926 0.079 -0.074 -0.093 -0.077 -0.046 Необхідного одягу
Q5 0.507 0.079 -0.029 -0.045 0.192 -0.043 Хорошого житла
Q9 0.663 0.106 -0.102 -0.026 0.095 -0.001 Модного та красивого одягу
Q1 0.123 0.384 0.145 0.007 0.057 0.104 Вміння жити в нових суспільних умовах
Q12 -0.092 0.736 -0.033 0.155 0.026 0.078 Рішучості в досягненні своїх цілей
Q17 0.202 0.567 0.091 0.005 -0.116 0.033 Ініціативи i самостійності під час розв’язанн...
Q7 -0.031 0.683 0.092 0.091 0.008 0.018 Упевненості в своїх силах
Q13 -0.031 0.058 0.413 -0.008 0.195 0.160 Юридичної допомоги для захисту своїх прав та ...
Q2 -0.001 0.149 0.598 0.021 0.023 -0.028 Здоров'я
Q8 0.095 0.025 0.786 -0.059 0.020 -0.051 Необхідної медичної допомоги
Q15 0.154 0.022 -0.042 0.443 0.169 0.089 Можливості мати додатковий заробіток
Q19 0.009 0.268 0.041 0.465 0.006 -0.030 Можливості працювати з повною віддачею
Q3 0.051 0.054 -0.035 0.773 0.008 -0.048 Роботи, що підходить
Q14 0.015 -0.058 0.072 0.112 0.721 0.046 Можливості повноцінно проводити відпустку
Q18 0.081 0.032 0.104 0.008 0.631 -0.002 Повноцінного дозвілля
Q11 0.056 0.040 -0.053 -0.065 -0.050 0.789 Сучасних політичних знань
Q6 -0.040 0.070 0.028 0.012 0.057 0.697 Сучасних економічних знань

Note. Values are fully standardized loadings (β). Bold = primary loading ≥ .50 (adequate indicator reliability; Hair et al., 2019). Remaining values = cross-loadings. Target rotation constrains non-primary loadings toward zero but allows them to be freely estimated, reflecting true partial associations across domains.

8.3.2 ESEM Reliability

Show / Hide Code
# McDonald's ω approximated from primary-factor loadings and item residuals.
# semTools::reliability() does not handle EFA/ESEM rotation blocks.
esem_omega_df <- esem_params %>%
  inner_join(primary_factor_map, by = "item") %>%
  filter(factor == primary_factor) %>%
  inner_join(esem_resid, by = "item") %>%
  group_by(factor) %>%
  summarise(
    n_items      = n(),
    sum_lambda   = sum(loading),
    sum_residual = sum(residual),
    omega_esem   = sum_lambda^2 / (sum_lambda^2 + sum_residual),
    .groups      = "drop"
  ) %>%
  mutate(
    Domain    = esem_factor_labels[factor],
    `ω ≥ .70` = ifelse(omega_esem >= .70, "✓", "✗")
  ) %>%
  select(Domain, `Items (primary)` = n_items,
         `ω (ESEM)` = omega_esem, `ω ≥ .70`)

kable(esem_omega_df, digits = 3, booktabs = TRUE,
      align = c("l", "c", "c", "c")) %>%
  kable_styling(bootstrap_options = c("striped", "hover"),
                full_width = FALSE) %>%
  row_spec(which(esem_omega_df$`ω ≥ .70` == "✓"), background = "#D5E8D4") %>%
  row_spec(which(esem_omega_df$`ω ≥ .70` == "✗"), background = "#FADBD8")
Table 18: Composite Reliability (ω) — M2: ESEM 6-Factor Model
Domain Items (primary) ω (ESEM) ω ≥ .70
Material Wellbeing 6 0.851
Personal Potential 4 0.750
Health & Security 3 0.679
Professional Realization 3 0.646
Leisure & Recreation 2 0.679
Socio-Cultural Competence 2 0.725

Note. ω (ESEM) approximated from primary-factor loadings and item residuals (Morin et al., 2016). ω ≥ .70 indicates acceptable reliability (McDonald, 1999). AVE is not reported for ESEM due to cross-loadings. For discriminant validity, see the HTMT matrix reported under M1 (cross-loadings < .30 further support discriminant validity in ESEM).

8.4 M3: Higher-Order (Second-Order) CFA

Purpose. M3 tests whether the six correlated first-order factors (M1) can be explained by a single second-order general factor (gSWB). A well-fitting higher-order model would support the composite mean score; a poorly fitting model motivates the ESEM approach (M2). Freed error covariances Q4 ~~ Q9 and Q16 ~~ Q20 are carried over from M1. Full lavaan output is available in Appendix A.

Show / Hide Code
fit_table(fit_ho)
Table 19: Global Fit Indices — M3: Higher-Order (Second-Order) CFA
Global Fit Indices
Fit Index Value Acceptable Threshold Interpretation
χ² (Scaled) 1278.257
df 162.000
p-value 0.000
CFI (Robust) 0.915 ≥ .95
TLI (Robust) 0.901 ≥ .95
RMSEA (Robust) 0.064 ≤ .06
RMSEA 90% CI Lower 0.060
RMSEA 90% CI Upper 0.067
SRMR 0.046 ≤ .08

8.4.1 First-Order Factor Loadings (Items → Factors)

Show / Hide Code
# Factor labels for display
ho_factor_labels <- c(
  F_Material   = "Material Wellbeing",
  F_Personal   = "Personal Potential",
  F_Health_Sec = "Health & Security",
  F_Work       = "Professional Realization",
  F_Leisure    = "Leisure & Recreation",
  F_Info_Cult  = "Socio-Cultural Competence"
)

ho_l1 <- standardizedSolution(fit_ho) %>%
  filter(op == "=~", lhs != "g_SWB") %>%
  mutate(
    Factor = ho_factor_labels[lhs],
    Sig    = case_when(
      pvalue < .001 ~ "***",
      pvalue < .01  ~ "**",
      pvalue < .05  ~ "*",
      TRUE          ~ ""
    ),
    `Item (Ukrainian)` = map_chr(
      rhs,
      ~ str_trunc(questions_df$question[questions_df$new_var == .x], 55)
    )
  ) %>%
  select(
    Factor,
    Item   = rhs,
    `β`    = est.std,
    SE     = se,
    z,
    Sig,
    `Item (Ukrainian)`
  )

kable(ho_l1, digits = 3, booktabs = TRUE,
      align = c("l", "l", "r", "r", "r", "c", "l")) %>%
  kable_styling(bootstrap_options = c("striped", "hover"),
                full_width = TRUE) %>%
  pack_rows(
    index = table(factor(ho_l1$Factor, levels = unique(ho_l1$Factor)))
  ) %>%
  column_spec(7, width = "12cm")
Table 20: Standardized First-Order Loadings — M3: Items on Six Subscale Factors
Factor Item β SE z Sig Item (Ukrainian)
Material Wellbeing
Material Wellbeing Q4 0.726 0.015 49.0 *** Необхідного одягу
Material Wellbeing Q9 0.637 0.016 39.9 *** Модного та красивого одягу
Material Wellbeing Q10 0.657 0.015 44.6 *** Необхідних меблів
Material Wellbeing Q5 0.563 0.018 31.8 *** Хорошого житла
Material Wellbeing Q16 0.731 0.015 47.4 *** Можливості купувати найнеобхідніші продукти
Material Wellbeing Q20 0.752 0.015 49.5 *** Можливості харчуватися відповідно до своїх смаків
Personal Potential
Personal Potential Q7 0.734 0.014 53.5 *** Упевненості в своїх силах
Personal Potential Q12 0.713 0.014 51.2 *** Рішучості в досягненні своїх цілей
Personal Potential Q17 0.723 0.014 50.7 *** Ініціативи i самостійності під час розв’язання життє...
Personal Potential Q1 0.684 0.016 42.6 *** Вміння жити в нових суспільних умовах
Health & Security
Health & Security Q2 0.677 0.021 31.7 *** Здоров'я
Health & Security Q8 0.749 0.015 48.8 *** Необхідної медичної допомоги
Health & Security Q13 0.614 0.018 33.6 *** Юридичної допомоги для захисту своїх прав та інтересів
Professional Realization
Professional Realization Q3 0.684 0.016 42.2 *** Роботи, що підходить
Professional Realization Q15 0.679 0.017 39.7 *** Можливості мати додатковий заробіток
Professional Realization Q19 0.658 0.016 41.4 *** Можливості працювати з повною віддачею
Leisure & Recreation
Leisure & Recreation Q14 0.755 0.025 29.8 *** Можливості повноцінно проводити відпустку
Leisure & Recreation Q18 0.755 0.021 35.8 *** Повноцінного дозвілля
Socio-Cultural Competence
Socio-Cultural Competence Q6 0.813 0.019 43.9 *** Сучасних економічних знань
Socio-Cultural Competence Q11 0.703 0.018 38.4 *** Сучасних політичних знань

Note. β = fully standardized loading. *** p < .001, ** p < .01, * p < .05. β ≥ .50 indicates adequate indicator reliability (Hair et al., 2019).

8.4.2 Second-Order Factor Loadings (Factors → gSWB)

Show / Hide Code
ho_l2 <- standardizedSolution(fit_ho) %>%
  filter(op == "=~", lhs == "g_SWB") %>%
  mutate(
    Subscale = ho_factor_labels[rhs],
    Sig      = case_when(
      pvalue < .001 ~ "***",
      pvalue < .01  ~ "**",
      pvalue < .05  ~ "*",
      TRUE          ~ ""
    ),
    R2 = round(est.std^2, 3)
  ) %>%
  select(
    Subscale,
    `β`  = est.std,
    SE   = se,
    z,
    Sig,
    `R² (variance expl. by g)` = R2
  )

kable(ho_l2, digits = 3, booktabs = TRUE,
      align = c("l", "r", "r", "r", "c", "r")) %>%
  kable_styling(bootstrap_options = c("striped", "hover"),
                full_width = FALSE)
Table 21: Standardized Second-Order Loadings — M3: Subscale Factors on g_SWB
Subscale β SE z Sig R² (variance expl. by g)
Material Wellbeing 0.812 0.013 62.2 *** 0.660
Personal Potential 0.797 0.014 58.8 *** 0.635
Health & Security 0.843 0.015 57.8 *** 0.711
Professional Realization 0.826 0.016 53.1 *** 0.682
Leisure & Recreation 0.630 0.021 29.4 *** 0.397
Socio-Cultural Competence 0.592 0.020 30.3 *** 0.351

Note. β = standardized path from gSWB to each first-order factor. R² = proportion of subscale variance explained by the general factor. Higher β indicates stronger subordination to the general social well-being construct.

8.4.3 Higher-Order Reliability: ωL1, ωL2, partialωL1

What this section reports. For hierarchical models, item score variance originates from both first-order subscale factors and the second-order general factor. Three specialized coefficients are reported (Zinbarg et al., 2005):

  • ωL1 (omegaL1): Total reliability of the IISWB-20 sum score (all common factors combined).
  • ωL2 (omegaL2): Variance attributable solely to gSWB. ωL2 > .70 justifies using the total IISWB-20 composite score.
  • partialωL1: Incremental reliability of subscale factors beyond the general factor.
Show / Hide Code
reliability_L2 <- semTools::reliabilityL2(fit_ho, "g_SWB")

data.frame(
  Coefficient = c("ωL1 (omegaL1)", "ωL2 (omegaL2)", "partialωL1"),
  Value       = round(as.numeric(reliability_L2), 3),
  Benchmark   = c("—", "≥ .70", "—"),
  Interpretation = c(
    "Total reliability of the IISWB-20 sum score (all common factors combined)",
    "Reliability attributable to the general social well-being factor (g_SWB) alone",
    "Incremental subscale reliability after controlling for the general factor"
  )
) %>%
  kable(align = c("l", "c", "c", "l"), booktabs = TRUE) %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = TRUE)
Table 22: Higher-Order Reliability Coefficients — M3: Second-Order CFA
Coefficient Value Benchmark Interpretation
ωL1 (omegaL1) 0.826 Total reliability of the IISWB-20 sum score (all common factors combined)
ωL2 (omegaL2) 0.899 ≥ .70 Reliability attributable to the general social well-being factor (g_SWB) alone
partialωL1 0.916 Incremental subscale reliability after controlling for the general factor

Note. ωL2 > .70 is the primary criterion for justifying a composite total score in a hierarchical model (Zinbarg et al., 2005; Reise et al., 2013). If ωL2 ≥ .70 and partialωL1 values are modest (< .30), the general factor dominates and subscale scores add limited incremental information beyond the total score.

8.4.4 M3 Subscale Reliability

Show / Hide Code
# semTools::reliability() returns alpha, omega, ave etc. for each latent factor.
# The g_SWB row reflects second-order factor reliability.
ho_rel <- semTools::reliability(fit_ho)

ho_rel_df <- as.data.frame(t(round(ho_rel, 3))) %>%
  rownames_to_column("Factor") %>%
  mutate(
    Factor = recode(Factor,
      F_Material   = "Material Wellbeing",
      F_Personal   = "Personal Potential",
      F_Health_Sec = "Health & Security",
      F_Work       = "Professional Realization",
      F_Leisure    = "Leisure & Recreation",
      F_Info_Cult  = "Socio-Cultural Competence",
      g_SWB        = "g_SWB (second-order)"
    )
  )

g_row <- which(ho_rel_df$Factor == "g_SWB (second-order)")

kable(ho_rel_df, booktabs = TRUE,
      align = c("l", rep("c", ncol(ho_rel_df) - 1))) %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = TRUE) %>%
  row_spec(g_row, bold = TRUE, background = "#EBF5FB")
Table 23: Subscale Reliability Indices — M3: Higher-Order CFA
Factor alpha alpha.ord omega omega2 omega3 avevar
Material Wellbeing 0.768 0.843 0.749 0.749 0.754 0.463
Personal Potential 0.723 0.799 0.740 0.740 0.746 0.509
Health & Security 0.626 0.710 0.643 0.643 0.648 0.465
Professional Realization 0.610 0.706 0.632 0.632 0.634 0.454
Leisure & Recreation 0.571 0.726 0.610 0.610 0.610 0.570
Socio-Cultural Competence 0.633 0.727 0.645 0.645 0.645 0.578

Note. ω = McDonald’s composite reliability; α = Cronbach’s alpha; AVE = Average Variance Extracted. Blue row = second-order factor gSWB. ω ≥ .70 indicates acceptable reliability (McDonald, 1999).

8.5 Comprehensive Model Comparison

Show / Hide Code
# NOTE: Bifactor CFA and bifactor ESEM are excluded because they did not
# converge or produced non-interpretable results.
data.frame(
  Model = c(
    "M0: Unidimensional CFA",
    "M1: Six Correlated Factors CFA",
    "M2: Six Factors ESEM (target rotation)",
    "M3: Higher-Order (Second-Order) CFA"
  ),
  CFI   = round(c(
    fi(fit_harman,  "cfi.robust"),
    fi(fit_robust,  "cfi.robust"),
    fi(esem_6_fit,  "cfi.robust"),
    fi(fit_ho,      "cfi.robust")
  ), 3),
  TLI   = round(c(
    fi(fit_harman,  "tli.robust"),
    fi(fit_robust,  "tli.robust"),
    fi(esem_6_fit,  "tli.robust"),
    fi(fit_ho,      "tli.robust")
  ), 3),
  RMSEA = round(c(
    fi(fit_harman,  "rmsea.robust"),
    fi(fit_robust,  "rmsea.robust"),
    fi(esem_6_fit,  "rmsea.robust"),
    fi(fit_ho,      "rmsea.robust")
  ), 3),
  SRMR  = round(c(
    fi(fit_harman,  "srmr"),
    fi(fit_robust,  "srmr"),
    fi(esem_6_fit,  "srmr"),
    fi(fit_ho,      "srmr")
  ), 3),
  ΔCFI  = c(NA,
            round(fi(fit_robust,  "cfi.robust") - fi(fit_harman, "cfi.robust"), 3),
            round(fi(esem_6_fit,  "cfi.robust") - fi(fit_robust, "cfi.robust"), 3),
            round(fi(fit_ho,      "cfi.robust") - fi(fit_robust, "cfi.robust"), 3))
) %>%
  kable(booktabs = TRUE, align = c("l", "c", "c", "c", "c", "c"),
        na = "—") %>%
  kable_styling(bootstrap_options = c("striped", "hover"),
                full_width = TRUE) %>%
  row_spec(3, bold = TRUE, background = "#D5E8D4") %>%
  row_spec(0, bold = TRUE)
Table 24: Comprehensive Model Comparison — M0 through M3
Model CFI TLI RMSEA SRMR ΔCFI
M0: Unidimensional CFA 0.709 0.675 0.115 0.079 NA
M1: Six Correlated Factors CFA 0.923 0.905 0.062 0.041 0.214
M2: Six Factors ESEM (target rotation) 0.965 0.921 0.057 0.019 0.041
M3: Higher-Order (Second-Order) CFA 0.915 0.901 0.064 0.046 -0.008

Note. Models ordered from most to least constrained. Green row = primary model (M2 ESEM). ΔCFI for M2 and M3 computed relative to M1. ΔCFI ≥ .01 indicates meaningful improvement (Cheung & Rensvold, 2002). Bifactor CFA and bifactor ESEM were estimated but excluded due to non-convergence. The Schmid–Leiman decomposition is reported in Phase 5.

8.5.1 Validity and Reliability Summary Across Models

Show / Hide Code
# Compare ordinal alpha and omega estimates (CFA vs ESEM) side by side.
# AVE is CFA-specific and is NOT reported for ESEM.
rel_cfa_join <- reliability_df %>%
  select(Domain, `α` = `α (Ordinal)`, `ω (CFA)` = `ω (McDonald)`)

rel_esem_join <- esem_omega_df %>%
  select(Domain, `ω (ESEM)` = `ω (ESEM)`)

validity_summary <- rel_cfa_join %>%
  left_join(rel_esem_join, by = "Domain")

kable(
  validity_summary,
  digits   = 3,
  booktabs = TRUE,
  align    = c("l", "c", "c", "c")
) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = TRUE) %>%
  add_header_above(c(" " = 1, "M1: CFA" = 2, "M2: ESEM" = 1))
Table 25: Validity and Reliability Comparison — M1 CFA vs. M2 ESEM
M1: CFA
M2: ESEM
Domain α ω (CFA) ω (ESEM)
Material Wellbeing 0.843 0.754 0.851
Personal Potential 0.799 0.746 0.750
Health & Security 0.710 0.648 0.679
Professional Realization 0.706 0.634 0.646
Leisure & Recreation 0.726 0.610 0.679
Socio-Cultural Competence 0.727 0.645 0.725

Note. α = ordinal alpha (polychoric); ω (CFA) = McDonald’s omega from M1 (computed via compRelSEM); ω (ESEM) = McDonald’s omega approximated from primary-factor loadings (Morin et al., 2016). ω ≥ .70 indicates acceptable reliability (McDonald, 1999). Discriminant validity (HTMT): All pairs HTMT < .85 ✓. AVE is not reported for ESEM due to the presence of cross-loadings.

9 Phase 5: Schmid–Leiman Decomposition and Mean-Score Justification

Decision framework (Rodriguez et al., 2016). The IISWB-20 composite mean score is psychometrically justified if and only if all three criteria are met:

  • ω_h ≥ .70 — at least 70% of total-score reliable variance is attributable to g.
  • ECV ≥ .60 — at least 60% of common variance is attributable to g.
  • PUC ≥ .70 — at least 70% of inter-item correlations primarily reflect g.

The Schmid–Leiman (SL) procedure is used here as the primary method because bifactor CFA failed to converge. SL orthogonalizes the oblique EFA solution analytically, yielding g loadings and domain-specific residual loadings without requiring a converging bifactor CFA.

9.1 Schmid–Leiman Orthogonalization

Show / Hide Code
# Schmid–Leiman on the 6-factor oblimin/WLS solution
sl_result <- psych::schmid(
  model    = poly_matrix,
  nfactors = 6,
  n.obs    = sum(df$wt),
  rotate   = "oblimin",
  fm       = "wls",
  digits   = 3
)
cat("=== SCHMID–LEIMAN DECOMPOSITION ===\n\n")
=== SCHMID–LEIMAN DECOMPOSITION ===
Show / Hide Code
print(sl_result)
Schmid-Leiman analysis 
Call: psych::schmid(model = poly_matrix, nfactors = 6, fm = "wls", 
    digits = 3, rotate = "oblimin", n.obs = sum(df$wt))

Schmid Leiman Factor loadings greater than  0.2 
       g   F1*   F2*   F3*   F4*   F5*   F6*   h2   h2   u2   p2
Q1  0.51        0.31                         0.39 0.39 0.61 0.68
Q2  0.54              0.42                   0.47 0.47 0.53 0.63
Q3  0.53                          0.57       0.63 0.63 0.37 0.45
Q4  0.57  0.62                               0.71 0.71 0.29 0.45
Q5  0.43  0.34                               0.33 0.33 0.67 0.57
Q6  0.46                                0.58 0.57 0.57 0.43 0.36
Q7  0.52        0.55                         0.58 0.58 0.42 0.47
Q8  0.61              0.52                   0.65 0.65 0.35 0.57
Q9  0.51  0.45                               0.47 0.47 0.53 0.55
Q10 0.50  0.47                               0.47 0.47 0.53 0.53
Q11 0.40                                0.67 0.62 0.62 0.38 0.26
Q12 0.51        0.60                         0.66 0.66 0.34 0.39
Q13 0.48              0.26                   0.36 0.36 0.64 0.65
Q14 0.43                    0.66             0.62 0.62 0.38 0.30
Q15 0.52                          0.35       0.42 0.42 0.58 0.64
Q16 0.62  0.32        0.21                   0.63 0.63 0.37 0.62
Q17 0.53        0.46                         0.52 0.52 0.48 0.54
Q18 0.43                    0.59             0.54 0.54 0.46 0.34
Q19 0.49        0.23              0.34       0.42 0.42 0.58 0.58
Q20 0.64  0.32                    0.22       0.61 0.61 0.39 0.67

With eigenvalues of:
   g  F1*  F2*  F3*  F4*  F5*  F6*   h2 
5.33 1.19 1.08 0.61 0.94 0.66 0.86 5.93 

general/max  0.9   max/min =   9.74
mean percent general =  0.51    with sd =  0.13 and cv of  0.25 

 The orthogonal loadings were 
Unstandardized loadings based upon covariance matrix
      F1   F2   F3   F4   F5   F6   h2   u2   H2   U2
Q1  0.25 0.44 0.21 0.17 0.12 0.20 0.39 0.61 0.39 0.61
Q2  0.20 0.24 0.56 0.15 0.16 0.09 0.47 0.53 0.47 0.53
Q3  0.20 0.24 0.15 0.08 0.70 0.04 0.63 0.37 0.63 0.37
Q4  0.80 0.17 0.16 0.04 0.12 0.06 0.71 0.29 0.71 0.29
Q5  0.47 0.16 0.11 0.25 0.09 0.05 0.33 0.67 0.33 0.67
Q6  0.09 0.23 0.15 0.17 0.11 0.67 0.57 0.43 0.57 0.43
Q7  0.15 0.68 0.15 0.13 0.17 0.15 0.58 0.42 0.58 0.42
Q8  0.31 0.14 0.69 0.15 0.15 0.10 0.65 0.35 0.65 0.35
Q9  0.60 0.20 0.09 0.19 0.12 0.09 0.47 0.53 0.47 0.53
Q10 0.63 0.15 0.13 0.15 0.09 0.09 0.47 0.53 0.47 0.53
Q11 0.13 0.19 0.09 0.07 0.05 0.74 0.62 0.38 0.62 0.38
Q12 0.10 0.74 0.05 0.14 0.21 0.20 0.66 0.34 0.66 0.34
Q13 0.15 0.17 0.39 0.29 0.12 0.24 0.36 0.64 0.36 0.64
Q14 0.15 0.09 0.13 0.74 0.15 0.13 0.62 0.38 0.62 0.38
Q15 0.25 0.19 0.12 0.25 0.47 0.16 0.42 0.58 0.42 0.58
Q16 0.58 0.08 0.40 0.00 0.33 0.15 0.63 0.37 0.63 0.37
Q17 0.32 0.59 0.18 0.01 0.13 0.15 0.52 0.48 0.52 0.48
Q18 0.20 0.15 0.15 0.67 0.07 0.09 0.54 0.46 0.54 0.46
Q19 0.16 0.38 0.16 0.09 0.46 0.07 0.42 0.58 0.42 0.58
Q20 0.57 0.07 0.32 0.16 0.36 0.15 0.61 0.39 0.61 0.39

                 F1   F2   F3   F4   F5   F6
SS loadings    2.84 2.14 1.51 1.44 1.42 1.33
Proportion Var 0.14 0.11 0.08 0.07 0.07 0.07
Cumulative Var 0.14 0.25 0.32 0.40 0.47 0.53

The degrees of freedom are 85  and the fit is  0.35 
The number of observations was  4101  with Chi Square =  1427  with prob <  0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016
The root mean square of the residuals is  0.01 
The df corrected root mean square of the residuals is  0.02
RMSEA index =  0.062  and the 10 % confidence intervals are  0.059 0.065
BIC =  720
Show / Hide Code
# Extract SL loading matrix for display
sl_loadings <- as.data.frame(sl_result$sl) %>%
  rownames_to_column("Item") %>%
  mutate(
    `Item (Ukrainian)` = map_chr(
      Item,
      ~ str_trunc(questions_df$question[questions_df$new_var == .x], 48)
    )
  )

kable(sl_loadings, digits = 3, booktabs = TRUE,
      align = c("l", rep("r", ncol(sl_loadings) - 2), "l")) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = TRUE)
Table 26: Schmid–Leiman Factor Loadings — General (g) and Specific Factors
Item g F1* F2* F3* F4* F5* F6* h2 u2 p2 com Item (Ukrainian)
Q1 0.514 0.096 0.309 0.104 0.073 -0.008 0.092 0.390 0.610 0.678 1.95 Вміння жити в нових суспільних умовах
Q2 0.542 -0.040 0.118 0.419 0.037 0.018 -0.006 0.467 0.533 0.628 2.02 Здоров'я
Q3 0.533 -0.009 0.057 0.000 0.003 0.575 -0.017 0.626 0.374 0.455 2.01 Роботи, що підходить
Q4 0.567 0.621 0.040 0.009 -0.034 -0.004 -0.004 0.708 0.292 0.453 2.00 Необхідного одягу
Q5 0.434 0.336 0.057 0.000 0.188 -0.002 -0.016 0.329 0.671 0.571 2.34 Хорошого житла
Q6 0.457 -0.049 0.040 0.021 0.055 0.018 0.584 0.573 0.427 0.364 1.94 Сучасних економічних знань
Q7 0.524 0.016 0.551 0.061 0.026 0.034 0.014 0.579 0.421 0.474 2.04 Упевненості в своїх силах
Q8 0.608 0.022 0.000 0.523 0.031 -0.006 0.000 0.648 0.352 0.571 1.97 Необхідної медичної допомоги
Q9 0.510 0.455 0.081 -0.039 0.122 0.011 0.015 0.472 0.528 0.550 2.17 Модного та красивого одягу
Q10 0.498 0.471 0.030 0.005 0.085 -0.011 0.020 0.471 0.529 0.528 2.07 Необхідних меблів
Q11 0.404 0.019 0.002 -0.026 -0.037 -0.030 0.674 0.621 0.379 0.263 1.66 Сучасних політичних знань
Q12 0.507 -0.016 0.601 -0.032 0.039 0.077 0.063 0.662 0.338 0.389 2.02 Рішучості в досягненні своїх цілей
Q13 0.483 -0.046 0.037 0.263 0.185 -0.001 0.149 0.361 0.639 0.646 2.16 Юридичної допомоги для захисту своїх прав та ...
Q14 0.434 0.001 -0.028 0.013 0.659 0.048 0.029 0.625 0.375 0.302 1.75 Можливості повноцінно проводити відпустку
Q15 0.516 0.066 0.022 -0.021 0.168 0.348 0.087 0.420 0.580 0.635 2.12 Можливості мати додатковий заробіток
Q16 0.623 0.324 -0.099 0.210 -0.100 0.191 0.088 0.629 0.371 0.616 2.19 Можливості купувати найнеобхідніші продукти
Q17 0.534 0.172 0.461 0.080 -0.092 -0.007 0.039 0.523 0.477 0.544 2.32 Ініціативи i самостійності під час розв’язанн...
Q18 0.430 0.058 0.046 0.043 0.590 -0.033 -0.014 0.538 0.462 0.343 1.89 Повноцінного дозвілля
Q19 0.493 -0.010 0.228 0.040 0.010 0.339 -0.012 0.423 0.577 0.576 2.26 Можливості працювати з повною віддачею
Q20 0.638 0.316 -0.109 0.136 0.060 0.220 0.078 0.608 0.392 0.669 1.99 Можливості харчуватися відповідно до своїх см...

Note. g = general social well-being factor (Schmid–Leiman orthogonalized). F1*–F6* = domain-specific residual factors after removing g. h2 = communality; p2 = proportion of communality due to g.

9.2 Omega-Hierarchical

Show / Hide Code
omega_sl <- psych::omega(
  m        = poly_matrix,
  nfactors = 6,
  n.obs    = sum(df$wt),
  rotate   = "oblimin",
  fm       = "wls",
  plot     = TRUE
)

Figure 7. Omega Decomposition — Schmid–Leiman Solution
Show / Hide Code
omega_h  <- omega_sl$omega_h
omega_t  <- omega_sl$omega.tot
ecv      <- omega_h / omega_t

# PUC: proportion of off-diagonal item-pair correlations not within the same factor
k_items      <- c(6, 4, 3, 3, 2, 2)      # factor sizes (empirical 6-factor solution)
total_pairs  <- choose(20, 2)              # = 190
within_pairs <- sum(choose(k_items, 2))    # = 29
puc          <- 1 - within_pairs / total_pairs

cat("\n=== OMEGA-HIERARCHICAL (Schmid–Leiman) ===\n\n")

=== OMEGA-HIERARCHICAL (Schmid–Leiman) ===
Show / Hide Code
cat(sprintf("ω_h  = %.3f  [Benchmark ≥ .70]  %s\n",
            omega_h, ifelse(omega_h >= .70, "✓ MET", "✗ NOT MET")))
ω_h  = 0.740  [Benchmark ≥ .70]  ✓ MET
Show / Hide Code
cat(sprintf("ω    = %.3f\n", omega_t))
ω    = 0.934
Show / Hide Code
cat(sprintf("ECV  = %.3f  [Benchmark ≥ .60]  %s\n",
            ecv,    ifelse(ecv    >= .60, "✓ MET", "✗ NOT MET")))
ECV  = 0.792  [Benchmark ≥ .60]  ✓ MET
Show / Hide Code
cat(sprintf("PUC  = %.3f  [Benchmark ≥ .70]  %s\n",
            puc,    ifelse(puc    >= .70, "✓ MET", "✗ NOT MET")))
PUC  = 0.847  [Benchmark ≥ .70]  ✓ MET
Show / Hide Code
cat(sprintf("\nCriteria met: %d / 3\n",
            sum(c(omega_h >= .70, ecv >= .60, puc >= .70))))

Criteria met: 3 / 3
Show / Hide Code
criteria_met <- sum(c(omega_h >= .70, ecv >= .60, puc >= .70))

verdict <- dplyr::case_when(
  criteria_met == 3 ~
    "ALL THREE CRITERIA MET. The IISWB-20 total mean score is psychometrically justified. Subscale scores should be reported as supplementary information.",
  criteria_met == 2 ~
    "TWO OF THREE CRITERIA MET. The composite score may be used with caution alongside subscale scores.",
  criteria_met <= 1 ~
    "FEWER THAN TWO CRITERIA MET. The composite score is NOT justified; score as separate subscales."
)

data.frame(
  Index       = c("ω_h (Omega-Hierarchical)",
                  "ECV (Explained Common Variance)",
                  "PUC (Proportion Uncontaminated Correlations)"),
  Value       = round(c(omega_h, ecv, puc), 3),
  Benchmark   = c("≥ .70", "≥ .60", "≥ .70"),
  Status      = c(ifelse(omega_h >= .70, "✓ Met", "✗ Not Met"),
                  ifelse(ecv     >= .60, "✓ Met", "✗ Not Met"),
                  ifelse(puc     >= .70, "✓ Met", "✗ Not Met")),
  Interpretation = c(
    "Proportion of total-score variance reliably attributable to g",
    "Proportion of common variance attributable to g",
    "Proportion of item pairs primarily reflecting g"
  )
) %>%
  kable(booktabs = TRUE, align = c("l", "c", "c", "c", "l")) %>%
  kable_styling(bootstrap_options = c("striped", "hover"),
                full_width = TRUE) %>%
  row_spec(which(c(omega_h >= .70, ecv >= .60, puc >= .70)),
           background = "#D5E8D4") %>%
  row_spec(which(!c(omega_h >= .70, ecv >= .60, puc >= .70)),
           background = "#FADBD8")
Table 27: Mean-Score Justification — Omega-Hierarchical Benchmarks
Index Value Benchmark Status Interpretation
ω_h (Omega-Hierarchical) 0.740 ≥ .70 ✓ Met Proportion of total-score variance reliably attributable to g
ECV (Explained Common Variance) 0.792 ≥ .60 ✓ Met Proportion of common variance attributable to g
PUC (Proportion Uncontaminated Correlations) 0.847 ≥ .70 ✓ Met Proportion of item pairs primarily reflecting g

Verdict. ALL THREE CRITERIA MET. The IISWB-20 total mean score is psychometrically justified. Subscale scores should be reported as supplementary information.

10 Summary and Recommendations

Show / Hide Code
cat("=== PSYCHOMETRIC ANALYSIS SUMMARY ===\n\n")
=== PSYCHOMETRIC ANALYSIS SUMMARY ===
Show / Hide Code
cat("1. DATA SUITABILITY\n")
1. DATA SUITABILITY
Show / Hide Code
cat("   Bartlett test : p < .001 — data suitable for factor analysis\n")
   Bartlett test : p < .001 — data suitable for factor analysis
Show / Hide Code
cat("   KMO           :", round(kmo_result$MSA, 3),
    paste0("(", kmo_interp, ")\n\n"))
   KMO           : 0.907 (marvellous)
Show / Hide Code
cat("2. DIMENSIONALITY\n")
2. DIMENSIONALITY
Show / Hide Code
cat("   Parallel analysis :", pa_res$nfact, "factors\n")
   Parallel analysis : 6 factors
Show / Hide Code
cat("   EGA               :", ega_result$n.dim, "dimensions\n")
   EGA               : 6 dimensions
Show / Hide Code
cat("   Final solution     : 6 factors\n\n")
   Final solution     : 6 factors
Show / Hide Code
cat("3. MODEL FIT\n")
3. MODEL FIT
Show / Hide Code
for (nm in c("M0: Unidimensional", "M1: CFA (6-factor)", "M2: ESEM (6-factor)", "M3: Higher-Order CFA")) {
  fit_obj <- switch(nm,
    "M0: Unidimensional"   = fit_uni,
    "M1: CFA (6-factor)"   = fit_robust,
    "M2: ESEM (6-factor)"  = esem_6_fit,
    "M3: Higher-Order CFA" = fit_ho
  )
  cat("  ", nm, "\n")
  m <- fitMeasures(fit_obj, c("cfi.robust", "tli.robust", "rmsea.robust", "srmr"))
  for (idx in names(m))
    cat(sprintf("       %-22s %.3f  %s\n", idx, m[idx], interpret_fit(idx, m[idx])))
}
   M0: Unidimensional 
       cfi.robust             0.709  Poor
       tli.robust             0.675  Poor
       rmsea.robust           0.115  Marginal
       srmr                   0.079  Acceptable
   M1: CFA (6-factor) 
       cfi.robust             0.923  Acceptable
       tli.robust             0.905  Acceptable
       rmsea.robust           0.062  Acceptable
       srmr                   0.041  Excellent
   M2: ESEM (6-factor) 
       cfi.robust             0.965  Excellent
       tli.robust             0.921  Acceptable
       rmsea.robust           0.057  Acceptable
       srmr                   0.019  Excellent
   M3: Higher-Order CFA 
       cfi.robust             0.915  Acceptable
       tli.robust             0.901  Acceptable
       rmsea.robust           0.064  Acceptable
       srmr                   0.046  Excellent
Show / Hide Code
cat("\n4. SCALE RELIABILITY (M1 CFA)\n")

4. SCALE RELIABILITY (M1 CFA)
Show / Hide Code
for (i in seq_len(nrow(reliability_df))) {
  cat(sprintf("   %-38s  α = %.3f %s  ω = %.3f %s  AVE = %.3f %s\n",
      reliability_df$Domain[i],
      reliability_df$`α (Ordinal)`[i],  ifelse(reliability_df$`α (Ordinal)`[i]  >= .70, "✓","✗"),
      reliability_df$`ω (McDonald)`[i], ifelse(reliability_df$`ω (McDonald)`[i] >= .70, "✓","✗"),
      reliability_df$AVE[i],            ifelse(reliability_df$AVE[i]             >= .50, "✓","✗")))
}
   Material Wellbeing                      α = 0.843 ✓  ω = 0.754 ✓  AVE = 0.463 ✗
   Personal Potential                      α = 0.799 ✓  ω = 0.746 ✓  AVE = 0.509 ✓
   Health & Security                       α = 0.710 ✓  ω = 0.648 ✗  AVE = 0.465 ✗
   Professional Realization                α = 0.706 ✓  ω = 0.634 ✗  AVE = 0.454 ✗
   Leisure & Recreation                    α = 0.726 ✓  ω = 0.610 ✗  AVE = 0.570 ✓
   Socio-Cultural Competence               α = 0.727 ✓  ω = 0.645 ✗  AVE = 0.577 ✓
Show / Hide Code
cat("\n5. COMPOSITE-SCORE VERDICT\n")

5. COMPOSITE-SCORE VERDICT
Show / Hide Code
criteria_met <- sum(c(omega_h >= .70, ecv >= .60, puc >= .70))
verdict_text <- dplyr::case_when(
  criteria_met == 3 ~ "ALL THREE CRITERIA MET. The IISWB-20 total mean score is psychometrically justified.",
  criteria_met == 2 ~ "TWO OF THREE CRITERIA MET. The composite score may be used with caution.",
  criteria_met <= 1 ~ "FEWER THAN TWO CRITERIA MET. The composite score is NOT justified."
)
cat("  ", verdict_text, "\n")
   ALL THREE CRITERIA MET. The IISWB-20 total mean score is psychometrically justified. 

11 Data Export

Show / Hide Code
# -- 1. Factor scores from ESEM (primary model) --------------------------------
factor_scores_esem <- lavPredict(esem_6_fit, type = "lv") %>%
  as.data.frame() %>%
  setNames(c("Material_Wellbeing", "Personal_Potential", "Health_Security",
             "Professional_Realization", "Leisure_Recreation",
             "Sociocultural_Competence"))

write.csv(factor_scores_esem, here("factor_scores_IISWB20_ESEM.csv"), row.names = FALSE)
write_sav(factor_scores_esem, here("factor_scores_IISWB20_ESEM.sav"))

# -- 2. Factor scores from CFA (backup) ----------------------------------------
factor_scores_cfa <- lavPredict(fit_robust, type = "lv") %>%
  as.data.frame() %>%
  setNames(names(factor_scores_esem))

write.csv(factor_scores_cfa, here("factor_scores_IISWB20_CFA.csv"), row.names = FALSE)
write_sav(factor_scores_cfa, here("factor_scores_IISWB20_CFA.sav"))

# -- 3. Ancillary files --------------------------------------------------------
write.csv(poly_matrix,    here("polychoric_correlation_matrix.csv"))
write.csv(reliability_df, here("reliability_6factors.csv"), row.names = FALSE)
write_sav(reliability_df, here("reliability_6factors.sav"))

sink(here("esem_6factor_full_output.txt"))
cat("=== ESEM 6-FACTOR MODEL — FULL OUTPUT ===\n\n")
summary(esem_6_fit, fit.measures = TRUE, standardized = TRUE, rsquare = TRUE)
sink()

cat("Export complete.\n")

References

Golovakha, E. I., & Panina, N. V. (1997). Integral index of social well-being (IISWB): Construction and application of a sociological test in mass surveys. Stilos.

Panina, N. V. (2001). Youth of Ukraine: Structure of values, social well-being, and moral-psychological state in conditions of total anomie. Sociology: Theory, Methods, Marketing, (1), 5–26.


How to cite (APA 7th ed.): Bova, A. A. (2026). Factor structure and measurement properties of the Integral Index of Social Well-Being (IISWB-20): Evidence from wartime Ukraine. Analytical Code Report — Working Version. RPubs. https://rpubs.com/abova/iiswb20

BibTeX:

@misc{bova2026,
  author   = {Bova, Andrii A.},
  title    = {Factor Structure and Measurement Properties of the Integral Index of
              Social Well-Being (IISWB-20): Evidence from Wartime Ukraine},
  subtitle = {Analytical Code Report --- Working Version},
  year     = {2026},
  url      = {https://rpubs.com/abova/iiswb20}
}

Appendix A: lavaan Model Syntax

This appendix provides the complete lavaan syntax for all CFA and ESEM models in the order they appear in the main analysis.

M0: Unidimensional CFA

Show / Hide Code
summary(fit_uni, standardized = TRUE, fit.measures = TRUE, rsquare = TRUE)
lavaan 0.6-21 ended normally after 18 iterations

  Estimator                                       DWLS
  Optimization method                           NLMINB
  Number of model parameters                        60

  Number of observations                          4101
  Sampling weights variable                         wt

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                              3814.951    4462.601
  Degrees of freedom                               170         170
  P-value (Unknown)                                 NA       0.000
  Scaling correction factor                                  0.862
  Shift parameter                                           38.569
    simple second-order correction                                

Model Test Baseline Model:

  Test statistic                             53748.987   25762.153
  Degrees of freedom                               190         190
  P-value                                           NA       0.000
  Scaling correction factor                                  2.094

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.932       0.832
  Tucker-Lewis Index (TLI)                       0.924       0.812
                                                                  
  Robust Comparative Fit Index (CFI)                         0.709
  Robust Tucker-Lewis Index (TLI)                            0.675

Root Mean Square Error of Approximation:

  RMSEA                                          0.072       0.078
  90 Percent confidence interval - lower         0.070       0.076
  90 Percent confidence interval - upper         0.074       0.080
  P-value H_0: RMSEA <= 0.050                    0.000       0.000
  P-value H_0: RMSEA >= 0.080                    0.000       0.105
                                                                  
  Robust RMSEA                                               0.115
  90 Percent confidence interval - lower                     0.112
  90 Percent confidence interval - upper                     0.119
  P-value H_0: Robust RMSEA <= 0.050                         0.000
  P-value H_0: Robust RMSEA >= 0.080                         1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.079       0.079

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
  UNI_Factor =~                                                         
    Q1                0.585    0.015   39.155    0.000    0.585    0.585
    Q2                0.565    0.018   31.389    0.000    0.565    0.565
    Q3                0.562    0.015   36.655    0.000    0.562    0.562
    Q4                0.676    0.014   49.796    0.000    0.676    0.676
    Q5                0.502    0.017   29.969    0.000    0.502    0.502
    Q6                0.503    0.015   32.461    0.000    0.503    0.503
    Q7                0.624    0.014   45.504    0.000    0.624    0.624
    Q8                0.619    0.014   42.899    0.000    0.619    0.619
    Q9                0.596    0.014   42.289    0.000    0.596    0.596
    Q10               0.586    0.014   40.639    0.000    0.586    0.586
    Q11               0.451    0.016   27.424    0.000    0.451    0.451
    Q12               0.601    0.014   43.271    0.000    0.601    0.601
    Q13               0.515    0.017   30.834    0.000    0.515    0.515
    Q14               0.496    0.021   23.965    0.000    0.496    0.496
    Q15               0.563    0.015   37.292    0.000    0.563    0.563
    Q16               0.698    0.013   54.753    0.000    0.698    0.698
    Q17               0.614    0.014   45.164    0.000    0.614    0.614
    Q18               0.487    0.018   27.060    0.000    0.487    0.487
    Q19               0.542    0.015   36.567    0.000    0.542    0.542
    Q20               0.709    0.013   55.780    0.000    0.709    0.709

Thresholds:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
    Q1|t1            -0.827    0.027  -30.841    0.000   -0.827   -0.827
    Q1|t2             0.377    0.024   15.569    0.000    0.377    0.377
    Q2|t1            -0.052    0.024   -2.184    0.029   -0.052   -0.052
    Q2|t2             0.671    0.025   27.193    0.000    0.671    0.671
    Q3|t1            -0.394    0.024  -16.642    0.000   -0.394   -0.394
    Q3|t2             0.442    0.025   18.006    0.000    0.442    0.442
    Q4|t1            -0.909    0.028  -32.743    0.000   -0.909   -0.909
    Q4|t2            -0.225    0.024   -9.412    0.000   -0.225   -0.225
    Q5|t1            -0.302    0.024  -12.818    0.000   -0.302   -0.302
    Q5|t2             0.261    0.024   10.993    0.000    0.261    0.261
    Q6|t1            -0.257    0.024  -10.837    0.000   -0.257   -0.257
    Q6|t2             0.884    0.025   35.350    0.000    0.884    0.884
    Q7|t1            -0.582    0.025  -23.038    0.000   -0.582   -0.582
    Q7|t2             0.242    0.024   10.090    0.000    0.242    0.242
    Q8|t1            -0.198    0.024   -8.350    0.000   -0.198   -0.198
    Q8|t2             0.560    0.025   22.642    0.000    0.560    0.560
    Q9|t1            -0.547    0.025  -21.947    0.000   -0.547   -0.547
    Q9|t2             0.637    0.025   25.142    0.000    0.637    0.637
    Q10|t1           -0.625    0.026  -24.135    0.000   -0.625   -0.625
    Q10|t2            0.097    0.023    4.144    0.000    0.097    0.097
    Q11|t1           -0.612    0.025  -24.850    0.000   -0.612   -0.612
    Q11|t2            0.695    0.025   28.193    0.000    0.695    0.695
    Q12|t1           -0.500    0.024  -20.620    0.000   -0.500   -0.500
    Q12|t2            0.434    0.024   17.766    0.000    0.434    0.434
    Q13|t1           -0.168    0.023   -7.133    0.000   -0.168   -0.168
    Q13|t2            1.003    0.029   34.505    0.000    1.003    1.003
    Q14|t1            0.498    0.025   20.039    0.000    0.498    0.498
    Q14|t2            1.291    0.031   41.740    0.000    1.291    1.291
    Q15|t1            0.016    0.024    0.681    0.496    0.016    0.016
    Q15|t2            1.057    0.027   38.460    0.000    1.057    1.057
    Q16|t1           -0.518    0.024  -21.248    0.000   -0.518   -0.518
    Q16|t2           -0.003    0.024   -0.147    0.883   -0.003   -0.003
    Q17|t1           -0.829    0.026  -31.364    0.000   -0.829   -0.829
    Q17|t2            0.126    0.023    5.381    0.000    0.126    0.126
    Q18|t1            0.091    0.024    3.864    0.000    0.091    0.091
    Q18|t2            0.925    0.028   32.653    0.000    0.925    0.925
    Q19|t1           -0.647    0.025  -25.665    0.000   -0.647   -0.647
    Q19|t2            0.332    0.024   13.947    0.000    0.332    0.332
    Q20|t1           -0.282    0.024  -12.017    0.000   -0.282   -0.282
    Q20|t2            0.315    0.024   13.309    0.000    0.315    0.315

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .Q1                0.657                               0.657    0.657
   .Q2                0.680                               0.680    0.680
   .Q3                0.684                               0.684    0.684
   .Q4                0.543                               0.543    0.543
   .Q5                0.748                               0.748    0.748
   .Q6                0.747                               0.747    0.747
   .Q7                0.611                               0.611    0.611
   .Q8                0.616                               0.616    0.616
   .Q9                0.645                               0.645    0.645
   .Q10               0.657                               0.657    0.657
   .Q11               0.797                               0.797    0.797
   .Q12               0.639                               0.639    0.639
   .Q13               0.734                               0.734    0.734
   .Q14               0.754                               0.754    0.754
   .Q15               0.683                               0.683    0.683
   .Q16               0.512                               0.512    0.512
   .Q17               0.623                               0.623    0.623
   .Q18               0.763                               0.763    0.763
   .Q19               0.707                               0.707    0.707
   .Q20               0.498                               0.498    0.498
    UNI_Factor        1.000                               1.000    1.000

R-Square:
                   Estimate
    Q1                0.343
    Q2                0.320
    Q3                0.316
    Q4                0.457
    Q5                0.252
    Q6                0.253
    Q7                0.389
    Q8                0.384
    Q9                0.355
    Q10               0.343
    Q11               0.203
    Q12               0.361
    Q13               0.266
    Q14               0.246
    Q15               0.317
    Q16               0.488
    Q17               0.377
    Q18               0.237
    Q19               0.293
    Q20               0.502

M1: Six Correlated Factors CFA

Show / Hide Code
summary(fit_robust, standardized = TRUE, fit.measures = TRUE, rsquare = TRUE)
lavaan 0.6-21 ended normally after 40 iterations

  Estimator                                       DWLS
  Optimization method                           NLMINB
  Number of model parameters                        77

  Number of observations                          4101
  Sampling weights variable                         wt

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                               819.151    1119.919
  Degrees of freedom                               153         153
  P-value (Unknown)                                 NA       0.000
  Scaling correction factor                                  0.752
  Shift parameter                                           30.082
    simple second-order correction                                

Model Test Baseline Model:

  Test statistic                             53748.987   25762.153
  Degrees of freedom                               190         190
  P-value                                           NA       0.000
  Scaling correction factor                                  2.094

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.988       0.962
  Tucker-Lewis Index (TLI)                       0.985       0.953
                                                                  
  Robust Comparative Fit Index (CFI)                         0.923
  Robust Tucker-Lewis Index (TLI)                            0.905

Root Mean Square Error of Approximation:

  RMSEA                                          0.033       0.039
  90 Percent confidence interval - lower         0.030       0.037
  90 Percent confidence interval - upper         0.035       0.041
  P-value H_0: RMSEA <= 0.050                    1.000       1.000
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.062
  90 Percent confidence interval - lower                     0.059
  90 Percent confidence interval - upper                     0.066
  P-value H_0: Robust RMSEA <= 0.050                         0.000
  P-value H_0: Robust RMSEA >= 0.080                         0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.041       0.041

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
  Material_Wellbeing =~                                                      
    Q4                     1.000                               0.726    0.726
    Q9                     0.876    0.024   35.959    0.000    0.636    0.636
    Q10                    0.905    0.026   35.203    0.000    0.657    0.657
    Q5                     0.776    0.028   27.638    0.000    0.563    0.563
    Q16                    1.007    0.028   35.441    0.000    0.731    0.731
    Q20                    1.036    0.030   34.305    0.000    0.752    0.752
  Personal =~                                                                
    Q7                     1.000                               0.734    0.734
    Q12                    0.974    0.024   39.831    0.000    0.715    0.715
    Q17                    0.983    0.026   38.395    0.000    0.722    0.722
    Q1                     0.929    0.027   34.343    0.000    0.682    0.682
  Health_Security =~                                                         
    Q2                     1.000                               0.676    0.676
    Q8                     1.110    0.044   25.108    0.000    0.750    0.750
    Q13                    0.910    0.042   21.444    0.000    0.614    0.614
  Work =~                                                                    
    Q3                     1.000                               0.685    0.685
    Q15                    0.990    0.035   28.209    0.000    0.678    0.678
    Q19                    0.962    0.032   30.490    0.000    0.659    0.659
  Leisure =~                                                                 
    Q14                    1.000                               0.755    0.755
    Q18                    0.999    0.053   18.996    0.000    0.754    0.754
  Info_Culture =~                                                            
    Q6                     1.000                               0.813    0.813
    Q11                    0.865    0.036   24.300    0.000    0.703    0.703

Covariances:
                        Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .Q4 ~~                                                                      
   .Q9                     0.141    0.019    7.482    0.000    0.141    0.266
 .Q16 ~~                                                                     
   .Q20                    0.144    0.018    8.124    0.000    0.144    0.320
  Material_Wellbeing ~~                                                      
    Personal               0.329    0.014   23.054    0.000    0.617    0.617
    Health_Securty         0.360    0.016   22.782    0.000    0.733    0.733
    Work                   0.343    0.015   22.976    0.000    0.690    0.690
    Leisure                0.290    0.017   16.963    0.000    0.530    0.530
    Info_Culture           0.248    0.015   16.679    0.000    0.421    0.421
  Personal ~~                                                                
    Health_Securty         0.310    0.014   21.502    0.000    0.624    0.624
    Work                   0.357    0.015   24.649    0.000    0.711    0.711
    Leisure                0.254    0.017   14.710    0.000    0.458    0.458
    Info_Culture           0.341    0.015   22.466    0.000    0.572    0.572
  Health_Security ~~                                                         
    Work                   0.295    0.014   20.633    0.000    0.637    0.637
    Leisure                0.294    0.019   15.156    0.000    0.576    0.576
    Info_Culture           0.280    0.016   17.629    0.000    0.510    0.510
  Work ~~                                                                    
    Leisure                0.253    0.017   14.962    0.000    0.490    0.490
    Info_Culture           0.234    0.015   15.460    0.000    0.421    0.421
  Leisure ~~                                                                 
    Info_Culture           0.240    0.019   12.784    0.000    0.392    0.392

Thresholds:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
    Q4|t1            -0.909    0.028  -32.743    0.000   -0.909   -0.909
    Q4|t2            -0.225    0.024   -9.412    0.000   -0.225   -0.225
    Q9|t1            -0.547    0.025  -21.947    0.000   -0.547   -0.547
    Q9|t2             0.637    0.025   25.142    0.000    0.637    0.637
    Q10|t1           -0.625    0.026  -24.135    0.000   -0.625   -0.625
    Q10|t2            0.097    0.023    4.144    0.000    0.097    0.097
    Q5|t1            -0.302    0.024  -12.818    0.000   -0.302   -0.302
    Q5|t2             0.261    0.024   10.993    0.000    0.261    0.261
    Q16|t1           -0.518    0.024  -21.248    0.000   -0.518   -0.518
    Q16|t2           -0.003    0.024   -0.147    0.883   -0.003   -0.003
    Q20|t1           -0.282    0.024  -12.017    0.000   -0.282   -0.282
    Q20|t2            0.315    0.024   13.309    0.000    0.315    0.315
    Q7|t1            -0.582    0.025  -23.038    0.000   -0.582   -0.582
    Q7|t2             0.242    0.024   10.090    0.000    0.242    0.242
    Q12|t1           -0.500    0.024  -20.620    0.000   -0.500   -0.500
    Q12|t2            0.434    0.024   17.766    0.000    0.434    0.434
    Q17|t1           -0.829    0.026  -31.364    0.000   -0.829   -0.829
    Q17|t2            0.126    0.023    5.381    0.000    0.126    0.126
    Q1|t1            -0.827    0.027  -30.841    0.000   -0.827   -0.827
    Q1|t2             0.377    0.024   15.569    0.000    0.377    0.377
    Q2|t1            -0.052    0.024   -2.184    0.029   -0.052   -0.052
    Q2|t2             0.671    0.025   27.193    0.000    0.671    0.671
    Q8|t1            -0.198    0.024   -8.350    0.000   -0.198   -0.198
    Q8|t2             0.560    0.025   22.642    0.000    0.560    0.560
    Q13|t1           -0.168    0.023   -7.133    0.000   -0.168   -0.168
    Q13|t2            1.003    0.029   34.505    0.000    1.003    1.003
    Q3|t1            -0.394    0.024  -16.642    0.000   -0.394   -0.394
    Q3|t2             0.442    0.025   18.006    0.000    0.442    0.442
    Q15|t1            0.016    0.024    0.681    0.496    0.016    0.016
    Q15|t2            1.057    0.027   38.460    0.000    1.057    1.057
    Q19|t1           -0.647    0.025  -25.665    0.000   -0.647   -0.647
    Q19|t2            0.332    0.024   13.947    0.000    0.332    0.332
    Q14|t1            0.498    0.025   20.039    0.000    0.498    0.498
    Q14|t2            1.291    0.031   41.740    0.000    1.291    1.291
    Q18|t1            0.091    0.024    3.864    0.000    0.091    0.091
    Q18|t2            0.925    0.028   32.653    0.000    0.925    0.925
    Q6|t1            -0.257    0.024  -10.837    0.000   -0.257   -0.257
    Q6|t2             0.884    0.025   35.350    0.000    0.884    0.884
    Q11|t1           -0.612    0.025  -24.850    0.000   -0.612   -0.612
    Q11|t2            0.695    0.025   28.193    0.000    0.695    0.695

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .Q4                0.473                               0.473    0.473
   .Q9                0.595                               0.595    0.595
   .Q10               0.568                               0.568    0.568
   .Q5                0.683                               0.683    0.683
   .Q16               0.466                               0.466    0.466
   .Q20               0.435                               0.435    0.435
   .Q7                0.461                               0.461    0.461
   .Q12               0.489                               0.489    0.489
   .Q17               0.479                               0.479    0.479
   .Q1                0.535                               0.535    0.535
   .Q2                0.544                               0.544    0.544
   .Q8                0.437                               0.437    0.437
   .Q13               0.622                               0.622    0.622
   .Q3                0.531                               0.531    0.531
   .Q15               0.540                               0.540    0.540
   .Q19               0.566                               0.566    0.566
   .Q14               0.430                               0.430    0.430
   .Q18               0.431                               0.431    0.431
   .Q6                0.340                               0.340    0.340
   .Q11               0.505                               0.505    0.505
    Materil_Wllbng    0.527    0.021   24.525    0.000    1.000    1.000
    Personal          0.539    0.020   26.919    0.000    1.000    1.000
    Health_Securty    0.456    0.029   15.855    0.000    1.000    1.000
    Work              0.469    0.022   21.145    0.000    1.000    1.000
    Leisure           0.570    0.038   14.954    0.000    1.000    1.000
    Info_Culture      0.660    0.029   22.396    0.000    1.000    1.000

R-Square:
                   Estimate
    Q4                0.527
    Q9                0.405
    Q10               0.432
    Q5                0.317
    Q16               0.534
    Q20               0.565
    Q7                0.539
    Q12               0.511
    Q17               0.521
    Q1                0.465
    Q2                0.456
    Q8                0.563
    Q13               0.378
    Q3                0.469
    Q15               0.460
    Q19               0.434
    Q14               0.570
    Q18               0.569
    Q6                0.660
    Q11               0.495

M2: Six Factors ESEM (Target Rotation)

Show / Hide Code
summary(esem_6_fit, standardized = TRUE, fit.measures = TRUE, rsquare = TRUE)
lavaan 0.6-21 ended normally after 80 iterations

  Estimator                                       DWLS
  Optimization method                           NLMINB
  Number of model parameters                       175
  Row rank of the constraints matrix                30

  Rotation method                          PST OBLIQUE
  Rotation algorithm (rstarts)                GPA (30)
  Standardized metric                             TRUE
  Row weights                                     None

  Number of observations                          4101
  Sampling weights variable                         wt

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                               198.724     426.014
  Degrees of freedom                                85          85
  P-value (Unknown)                                 NA       0.000
  Scaling correction factor                                  0.478
  Shift parameter                                            9.841
    simple second-order correction                                

Model Test Baseline Model:

  Test statistic                             53748.987   25762.153
  Degrees of freedom                               190         190
  P-value                                           NA       0.000
  Scaling correction factor                                  2.094

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.998       0.987
  Tucker-Lewis Index (TLI)                       0.995       0.970
                                                                  
  Robust Comparative Fit Index (CFI)                         0.965
  Robust Tucker-Lewis Index (TLI)                            0.921

Root Mean Square Error of Approximation:

  RMSEA                                          0.018       0.031
  90 Percent confidence interval - lower         0.015       0.028
  90 Percent confidence interval - upper         0.021       0.034
  P-value H_0: RMSEA <= 0.050                    1.000       1.000
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.057
  90 Percent confidence interval - lower                     0.051
  90 Percent confidence interval - upper                     0.062
  P-value H_0: Robust RMSEA <= 0.050                         0.022
  P-value H_0: Robust RMSEA >= 0.080                         0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.019       0.019

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
  f1 =~ block1                                                          
    Q1                0.123    0.027    4.506    0.000    0.123    0.123
    Q2               -0.001    0.029   -0.023    0.982   -0.001   -0.001
    Q3                0.051    0.022    2.273    0.023    0.051    0.051
    Q4                0.926    0.029   32.302    0.000    0.926    0.926
    Q5                0.507    0.033   15.483    0.000    0.507    0.507
    Q6               -0.040    0.019   -2.053    0.040   -0.040   -0.040
    Q7               -0.031    0.023   -1.328    0.184   -0.031   -0.031
    Q8                0.095    0.028    3.438    0.001    0.095    0.095
    Q9                0.663    0.027   24.774    0.000    0.663    0.663
    Q10               0.698    0.027   25.615    0.000    0.698    0.698
    Q11               0.056    0.019    2.862    0.004    0.056    0.056
    Q12              -0.092    0.022   -4.223    0.000   -0.092   -0.092
    Q13              -0.031    0.030   -1.021    0.307   -0.031   -0.031
    Q14               0.015    0.023    0.618    0.536    0.015    0.015
    Q15               0.154    0.029    5.398    0.000    0.154    0.154
    Q16               0.589    0.029   20.556    0.000    0.589    0.589
    Q17               0.202    0.024    8.277    0.000    0.202    0.202
    Q18               0.081    0.025    3.199    0.001    0.081    0.081
    Q19               0.009    0.029    0.292    0.771    0.009    0.009
    Q20               0.565    0.027   21.195    0.000    0.565    0.565
  f2 =~ block1                                                          
    Q1                0.384    0.026   14.728    0.000    0.384    0.384
    Q2                0.149    0.024    6.181    0.000    0.149    0.149
    Q3                0.054    0.023    2.339    0.019    0.054    0.054
    Q4                0.079    0.022    3.626    0.000    0.079    0.079
    Q5                0.079    0.029    2.743    0.006    0.079    0.079
    Q6                0.070    0.025    2.845    0.004    0.070    0.070
    Q7                0.683    0.025   27.700    0.000    0.683    0.683
    Q8                0.025    0.022    1.132    0.258    0.025    0.025
    Q9                0.106    0.023    4.567    0.000    0.106    0.106
    Q10               0.060    0.025    2.459    0.014    0.060    0.060
    Q11               0.040    0.024    1.671    0.095    0.040    0.040
    Q12               0.736    0.025   29.762    0.000    0.736    0.736
    Q13               0.058    0.026    2.183    0.029    0.058    0.058
    Q14              -0.058    0.022   -2.714    0.007   -0.058   -0.058
    Q15               0.022    0.026    0.855    0.393    0.022    0.022
    Q16              -0.156    0.022   -7.225    0.000   -0.156   -0.156
    Q17               0.567    0.025   22.930    0.000    0.567    0.567
    Q18               0.032    0.022    1.440    0.150    0.032    0.032
    Q19               0.268    0.023   11.516    0.000    0.268    0.268
    Q20              -0.168    0.022   -7.515    0.000   -0.168   -0.168
  f3 =~ block1                                                          
    Q1                0.145    0.030    4.774    0.000    0.145    0.145
    Q2                0.598    0.043   13.955    0.000    0.598    0.598
    Q3               -0.035    0.024   -1.449    0.147   -0.035   -0.035
    Q4               -0.074    0.028   -2.621    0.009   -0.074   -0.074
    Q5               -0.029    0.033   -0.897    0.370   -0.029   -0.029
    Q6                0.028    0.025    1.129    0.259    0.028    0.028
    Q7                0.092    0.029    3.211    0.001    0.092    0.092
    Q8                0.786    0.048   16.252    0.000    0.786    0.786
    Q9               -0.102    0.029   -3.527    0.000   -0.102   -0.102
    Q10              -0.048    0.028   -1.697    0.090   -0.048   -0.048
    Q11              -0.053    0.024   -2.236    0.025   -0.053   -0.053
    Q12              -0.033    0.025   -1.336    0.181   -0.033   -0.033
    Q13               0.413    0.038   10.997    0.000    0.413    0.413
    Q14               0.072    0.026    2.833    0.005    0.072    0.072
    Q15              -0.042    0.030   -1.389    0.165   -0.042   -0.042
    Q16               0.233    0.027    8.793    0.000    0.233    0.233
    Q17               0.091    0.029    3.158    0.002    0.091    0.091
    Q18               0.104    0.026    4.062    0.000    0.104    0.104
    Q19               0.041    0.029    1.393    0.164    0.041    0.041
    Q20               0.146    0.024    6.021    0.000    0.146    0.146
  f4 =~ block1                                                          
    Q1                0.007    0.029    0.257    0.797    0.007    0.007
    Q2                0.021    0.026    0.796    0.426    0.021    0.021
    Q3                0.773    0.042   18.433    0.000    0.773    0.773
    Q4               -0.093    0.027   -3.459    0.001   -0.093   -0.093
    Q5               -0.045    0.031   -1.436    0.151   -0.045   -0.045
    Q6                0.012    0.020    0.599    0.549    0.012    0.012
    Q7                0.091    0.023    3.887    0.000    0.091    0.091
    Q8               -0.059    0.024   -2.483    0.013   -0.059   -0.059
    Q9               -0.026    0.026   -1.030    0.303   -0.026   -0.026
    Q10              -0.085    0.027   -3.149    0.002   -0.085   -0.085
    Q11              -0.065    0.020   -3.295    0.001   -0.065   -0.065
    Q12               0.155    0.022    7.205    0.000    0.155    0.155
    Q13              -0.008    0.028   -0.283    0.777   -0.008   -0.008
    Q14               0.112    0.022    5.011    0.000    0.112    0.112
    Q15               0.443    0.035   12.585    0.000    0.443    0.443
    Q16               0.209    0.024    8.889    0.000    0.209    0.209
    Q17               0.005    0.026    0.203    0.839    0.005    0.005
    Q18               0.008    0.025    0.321    0.748    0.008    0.008
    Q19               0.465    0.037   12.598    0.000    0.465    0.465
    Q20               0.250    0.022   11.164    0.000    0.250    0.250
  f5 =~ block1                                                          
    Q1                0.057    0.023    2.422    0.015    0.057    0.057
    Q2                0.023    0.023    1.017    0.309    0.023    0.023
    Q3                0.008    0.020    0.423    0.672    0.008    0.008
    Q4               -0.077    0.023   -3.297    0.001   -0.077   -0.077
    Q5                0.192    0.025    7.807    0.000    0.192    0.192
    Q6                0.057    0.019    2.953    0.003    0.057    0.057
    Q7                0.008    0.020    0.391    0.696    0.008    0.008
    Q8                0.020    0.021    0.947    0.344    0.020    0.020
    Q9                0.095    0.022    4.384    0.000    0.095    0.095
    Q10               0.089    0.023    3.798    0.000    0.089    0.089
    Q11              -0.050    0.019   -2.685    0.007   -0.050   -0.050
    Q12               0.026    0.018    1.412    0.158    0.026    0.026
    Q13               0.195    0.022    8.710    0.000    0.195    0.195
    Q14               0.721    0.041   17.573    0.000    0.721    0.721
    Q15               0.169    0.022    7.579    0.000    0.169    0.169
    Q16              -0.183    0.026   -7.059    0.000   -0.183   -0.183
    Q17              -0.116    0.021   -5.456    0.000   -0.116   -0.116
    Q18               0.631    0.035   17.982    0.000    0.631    0.631
    Q19               0.006    0.023    0.275    0.784    0.006    0.006
    Q20              -0.008    0.023   -0.349    0.727   -0.008   -0.008
  f6 =~ block1                                                          
    Q1                0.104    0.023    4.483    0.000    0.104    0.104
    Q2               -0.028    0.024   -1.182    0.237   -0.028   -0.028
    Q3               -0.048    0.017   -2.763    0.006   -0.048   -0.048
    Q4               -0.046    0.022   -2.060    0.039   -0.046   -0.046
    Q5               -0.043    0.027   -1.577    0.115   -0.043   -0.043
    Q6                0.697    0.049   14.190    0.000    0.697    0.697
    Q7                0.018    0.021    0.859    0.390    0.018    0.018
    Q8               -0.051    0.020   -2.539    0.011   -0.051   -0.051
    Q9               -0.001    0.022   -0.042    0.967   -0.001   -0.001
    Q10              -0.015    0.024   -0.626    0.532   -0.015   -0.015
    Q11               0.789    0.051   15.443    0.000    0.789    0.789
    Q12               0.078    0.019    4.044    0.000    0.078    0.078
    Q13               0.160    0.024    6.766    0.000    0.160    0.160
    Q14               0.046    0.020    2.237    0.025    0.046    0.046
    Q15               0.089    0.023    3.875    0.000    0.089    0.089
    Q16               0.094    0.022    4.290    0.000    0.094    0.094
    Q17               0.033    0.022    1.493    0.135    0.033    0.033
    Q18              -0.002    0.020   -0.122    0.903   -0.002   -0.002
    Q19              -0.030    0.022   -1.340    0.180   -0.030   -0.030
    Q20               0.086    0.020    4.257    0.000    0.086    0.086

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  f1 ~~                                                                 
    f2                0.431    0.022   19.202    0.000    0.431    0.431
    f3                0.607    0.023   26.919    0.000    0.607    0.607
    f4                0.503    0.025   20.283    0.000    0.503    0.503
    f5                0.327    0.026   12.792    0.000    0.327    0.327
    f6                0.367    0.024   15.264    0.000    0.367    0.367
  f2 ~~                                                                 
    f3                0.361    0.029   12.467    0.000    0.361    0.361
    f4                0.428    0.030   14.171    0.000    0.428    0.428
    f5                0.300    0.026   11.662    0.000    0.300    0.300
    f6                0.436    0.027   16.448    0.000    0.436    0.436
  f3 ~~                                                                 
    f4                0.513    0.026   19.812    0.000    0.513    0.513
    f5                0.299    0.031    9.637    0.000    0.299    0.299
    f6                0.421    0.024   17.584    0.000    0.421    0.421
  f4 ~~                                                                 
    f5                0.218    0.028    7.739    0.000    0.218    0.218
    f6                0.326    0.025   13.255    0.000    0.326    0.326
  f5 ~~                                                                 
    f6                0.302    0.027   11.334    0.000    0.302    0.302

Thresholds:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
    Q1|t1            -0.827    0.027  -30.841    0.000   -0.827   -0.827
    Q1|t2             0.377    0.024   15.569    0.000    0.377    0.377
    Q2|t1            -0.052    0.024   -2.184    0.029   -0.052   -0.052
    Q2|t2             0.671    0.025   27.193    0.000    0.671    0.671
    Q3|t1            -0.394    0.024  -16.642    0.000   -0.394   -0.394
    Q3|t2             0.442    0.025   18.006    0.000    0.442    0.442
    Q4|t1            -0.909    0.028  -32.743    0.000   -0.909   -0.909
    Q4|t2            -0.225    0.024   -9.412    0.000   -0.225   -0.225
    Q5|t1            -0.302    0.024  -12.818    0.000   -0.302   -0.302
    Q5|t2             0.261    0.024   10.993    0.000    0.261    0.261
    Q6|t1            -0.257    0.024  -10.837    0.000   -0.257   -0.257
    Q6|t2             0.884    0.025   35.350    0.000    0.884    0.884
    Q7|t1            -0.582    0.025  -23.038    0.000   -0.582   -0.582
    Q7|t2             0.242    0.024   10.090    0.000    0.242    0.242
    Q8|t1            -0.198    0.024   -8.350    0.000   -0.198   -0.198
    Q8|t2             0.560    0.025   22.642    0.000    0.560    0.560
    Q9|t1            -0.547    0.025  -21.947    0.000   -0.547   -0.547
    Q9|t2             0.637    0.025   25.142    0.000    0.637    0.637
    Q10|t1           -0.625    0.026  -24.135    0.000   -0.625   -0.625
    Q10|t2            0.097    0.023    4.144    0.000    0.097    0.097
    Q11|t1           -0.612    0.025  -24.850    0.000   -0.612   -0.612
    Q11|t2            0.695    0.025   28.193    0.000    0.695    0.695
    Q12|t1           -0.500    0.024  -20.620    0.000   -0.500   -0.500
    Q12|t2            0.434    0.024   17.766    0.000    0.434    0.434
    Q13|t1           -0.168    0.023   -7.133    0.000   -0.168   -0.168
    Q13|t2            1.003    0.029   34.505    0.000    1.003    1.003
    Q14|t1            0.498    0.025   20.039    0.000    0.498    0.498
    Q14|t2            1.291    0.031   41.740    0.000    1.291    1.291
    Q15|t1            0.016    0.024    0.681    0.496    0.016    0.016
    Q15|t2            1.057    0.027   38.460    0.000    1.057    1.057
    Q16|t1           -0.518    0.024  -21.248    0.000   -0.518   -0.518
    Q16|t2           -0.003    0.024   -0.147    0.883   -0.003   -0.003
    Q17|t1           -0.829    0.026  -31.364    0.000   -0.829   -0.829
    Q17|t2            0.126    0.023    5.381    0.000    0.126    0.126
    Q18|t1            0.091    0.024    3.864    0.000    0.091    0.091
    Q18|t2            0.925    0.028   32.653    0.000    0.925    0.925
    Q19|t1           -0.647    0.025  -25.665    0.000   -0.647   -0.647
    Q19|t2            0.332    0.024   13.947    0.000    0.332    0.332
    Q20|t1           -0.282    0.024  -12.017    0.000   -0.282   -0.282
    Q20|t2            0.315    0.024   13.309    0.000    0.315    0.315

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .Q1                0.612                               0.612    0.612
   .Q2                0.547                               0.547    0.547
   .Q3                0.371                               0.371    0.371
   .Q4                0.295                               0.295    0.295
   .Q5                0.660                               0.660    0.660
   .Q6                0.435                               0.435    0.435
   .Q7                0.417                               0.417    0.417
   .Q8                0.339                               0.339    0.339
   .Q9                0.536                               0.536    0.536
   .Q10               0.529                               0.529    0.529
   .Q11               0.402                               0.402    0.402
   .Q12               0.349                               0.349    0.349
   .Q13               0.636                               0.636    0.636
   .Q14               0.382                               0.382    0.382
   .Q15               0.597                               0.597    0.597
   .Q16               0.328                               0.328    0.328
   .Q17               0.492                               0.492    0.492
   .Q18               0.481                               0.481    0.481
   .Q19               0.583                               0.583    0.583
   .Q20               0.373                               0.373    0.373
    f1                1.000                               1.000    1.000
    f2                1.000                               1.000    1.000
    f3                1.000                               1.000    1.000
    f4                1.000                               1.000    1.000
    f5                1.000                               1.000    1.000
    f6                1.000                               1.000    1.000

R-Square:
                   Estimate
    Q1                0.388
    Q2                0.453
    Q3                0.629
    Q4                0.705
    Q5                0.340
    Q6                0.565
    Q7                0.583
    Q8                0.661
    Q9                0.464
    Q10               0.471
    Q11               0.598
    Q12               0.651
    Q13               0.364
    Q14               0.618
    Q15               0.403
    Q16               0.672
    Q17               0.508
    Q18               0.519
    Q19               0.417
    Q20               0.627

M3: Higher-Order (Second-Order) CFA

Show / Hide Code
summary(fit_ho, standardized = TRUE, fit.measures = TRUE, rsquare = TRUE)
lavaan 0.6-21 ended normally after 52 iterations

  Estimator                                       DWLS
  Optimization method                           NLMINB
  Number of model parameters                        68

  Number of observations                          4101
  Sampling weights variable                         wt

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                              1027.069    1278.257
  Degrees of freedom                               162         162
  P-value (Unknown)                                 NA       0.000
  Scaling correction factor                                  0.826
  Shift parameter                                           34.893
    simple second-order correction                                

Model Test Baseline Model:

  Test statistic                             53748.987   25762.153
  Degrees of freedom                               190         190
  P-value                                           NA       0.000
  Scaling correction factor                                  2.094

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.984       0.956
  Tucker-Lewis Index (TLI)                       0.981       0.949
                                                                  
  Robust Comparative Fit Index (CFI)                         0.915
  Robust Tucker-Lewis Index (TLI)                            0.901

Root Mean Square Error of Approximation:

  RMSEA                                          0.036       0.041
  90 Percent confidence interval - lower         0.034       0.039
  90 Percent confidence interval - upper         0.038       0.043
  P-value H_0: RMSEA <= 0.050                    1.000       1.000
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.064
  90 Percent confidence interval - lower                     0.060
  90 Percent confidence interval - upper                     0.067
  P-value H_0: Robust RMSEA <= 0.050                         0.000
  P-value H_0: Robust RMSEA >= 0.080                         0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.046       0.046

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
  F_Material =~                                                         
    Q4                0.423    0.015   28.114    0.000    0.726    0.726
    Q9                0.371    0.015   25.528    0.000    0.637    0.637
    Q10               0.383    0.014   26.986    0.000    0.657    0.657
    Q5                0.328    0.014   23.726    0.000    0.563    0.563
    Q16               0.426    0.016   26.039    0.000    0.731    0.731
    Q20               0.438    0.017   26.094    0.000    0.752    0.752
  F_Personal =~                                                         
    Q7                0.444    0.015   29.086    0.000    0.734    0.734
    Q12               0.431    0.015   28.934    0.000    0.713    0.713
    Q17               0.437    0.016   27.769    0.000    0.723    0.723
    Q1                0.413    0.016   26.241    0.000    0.684    0.684
  F_Health_Sec =~                                                       
    Q2                0.364    0.021   17.479    0.000    0.677    0.677
    Q8                0.403    0.020   20.437    0.000    0.749    0.749
    Q13               0.330    0.018   18.861    0.000    0.614    0.614
  F_Work =~                                                             
    Q3                0.386    0.018   21.000    0.000    0.684    0.684
    Q15               0.383    0.020   19.625    0.000    0.679    0.679
    Q19               0.371    0.018   20.507    0.000    0.658    0.658
  F_Leisure =~                                                          
    Q14               0.586    0.024   24.739    0.000    0.755    0.755
    Q18               0.586    0.022   26.766    0.000    0.755    0.755
  F_Info_Cult =~                                                        
    Q6                0.655    0.021   31.688    0.000    0.813    0.813
    Q11               0.566    0.017   33.899    0.000    0.703    0.703
  g_SWB =~                                                              
    F_Material        1.394    0.066   21.150    0.000    0.812    0.812
    F_Personal        1.318    0.061   21.482    0.000    0.797    0.797
    F_Health_Sec      1.569    0.094   16.698    0.000    0.843    0.843
    F_Work            1.464    0.087   16.885    0.000    0.826    0.826
    F_Leisure         0.811    0.046   17.709    0.000    0.630    0.630
    F_Info_Cult       0.735    0.037   19.666    0.000    0.592    0.592

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .Q4 ~~                                                                 
   .Q9                0.141    0.019    7.454    0.000    0.141    0.266
 .Q16 ~~                                                                
   .Q20               0.145    0.018    8.090    0.000    0.145    0.321

Thresholds:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
    Q4|t1            -0.909    0.028  -32.743    0.000   -0.909   -0.909
    Q4|t2            -0.225    0.024   -9.412    0.000   -0.225   -0.225
    Q9|t1            -0.547    0.025  -21.947    0.000   -0.547   -0.547
    Q9|t2             0.637    0.025   25.142    0.000    0.637    0.637
    Q10|t1           -0.625    0.026  -24.135    0.000   -0.625   -0.625
    Q10|t2            0.097    0.023    4.144    0.000    0.097    0.097
    Q5|t1            -0.302    0.024  -12.818    0.000   -0.302   -0.302
    Q5|t2             0.261    0.024   10.993    0.000    0.261    0.261
    Q16|t1           -0.518    0.024  -21.248    0.000   -0.518   -0.518
    Q16|t2           -0.003    0.024   -0.147    0.883   -0.003   -0.003
    Q20|t1           -0.282    0.024  -12.017    0.000   -0.282   -0.282
    Q20|t2            0.315    0.024   13.309    0.000    0.315    0.315
    Q7|t1            -0.582    0.025  -23.038    0.000   -0.582   -0.582
    Q7|t2             0.242    0.024   10.090    0.000    0.242    0.242
    Q12|t1           -0.500    0.024  -20.620    0.000   -0.500   -0.500
    Q12|t2            0.434    0.024   17.766    0.000    0.434    0.434
    Q17|t1           -0.829    0.026  -31.364    0.000   -0.829   -0.829
    Q17|t2            0.126    0.023    5.381    0.000    0.126    0.126
    Q1|t1            -0.827    0.027  -30.841    0.000   -0.827   -0.827
    Q1|t2             0.377    0.024   15.569    0.000    0.377    0.377
    Q2|t1            -0.052    0.024   -2.184    0.029   -0.052   -0.052
    Q2|t2             0.671    0.025   27.193    0.000    0.671    0.671
    Q8|t1            -0.198    0.024   -8.350    0.000   -0.198   -0.198
    Q8|t2             0.560    0.025   22.642    0.000    0.560    0.560
    Q13|t1           -0.168    0.023   -7.133    0.000   -0.168   -0.168
    Q13|t2            1.003    0.029   34.505    0.000    1.003    1.003
    Q3|t1            -0.394    0.024  -16.642    0.000   -0.394   -0.394
    Q3|t2             0.442    0.025   18.006    0.000    0.442    0.442
    Q15|t1            0.016    0.024    0.681    0.496    0.016    0.016
    Q15|t2            1.057    0.027   38.460    0.000    1.057    1.057
    Q19|t1           -0.647    0.025  -25.665    0.000   -0.647   -0.647
    Q19|t2            0.332    0.024   13.947    0.000    0.332    0.332
    Q14|t1            0.498    0.025   20.039    0.000    0.498    0.498
    Q14|t2            1.291    0.031   41.740    0.000    1.291    1.291
    Q18|t1            0.091    0.024    3.864    0.000    0.091    0.091
    Q18|t2            0.925    0.028   32.653    0.000    0.925    0.925
    Q6|t1            -0.257    0.024  -10.837    0.000   -0.257   -0.257
    Q6|t2             0.884    0.025   35.350    0.000    0.884    0.884
    Q11|t1           -0.612    0.025  -24.850    0.000   -0.612   -0.612
    Q11|t2            0.695    0.025   28.193    0.000    0.695    0.695

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .Q4                0.473                               0.473    0.473
   .Q9                0.595                               0.595    0.595
   .Q10               0.568                               0.568    0.568
   .Q5                0.683                               0.683    0.683
   .Q16               0.466                               0.466    0.466
   .Q20               0.435                               0.435    0.435
   .Q7                0.461                               0.461    0.461
   .Q12               0.492                               0.492    0.492
   .Q17               0.477                               0.477    0.477
   .Q1                0.533                               0.533    0.533
   .Q2                0.542                               0.542    0.542
   .Q8                0.439                               0.439    0.439
   .Q13               0.623                               0.623    0.623
   .Q3                0.532                               0.532    0.532
   .Q15               0.538                               0.538    0.538
   .Q19               0.566                               0.566    0.566
   .Q14               0.431                               0.431    0.431
   .Q18               0.430                               0.430    0.430
   .Q6                0.339                               0.339    0.339
   .Q11               0.506                               0.506    0.506
   .F_Material        1.000                               0.340    0.340
   .F_Personal        1.000                               0.365    0.365
   .F_Health_Sec      1.000                               0.289    0.289
   .F_Work            1.000                               0.318    0.318
   .F_Leisure         1.000                               0.603    0.603
   .F_Info_Cult       1.000                               0.649    0.649
    g_SWB             1.000                               1.000    1.000

R-Square:
                   Estimate
    Q4                0.527
    Q9                0.405
    Q10               0.432
    Q5                0.317
    Q16               0.534
    Q20               0.565
    Q7                0.539
    Q12               0.508
    Q17               0.523
    Q1                0.467
    Q2                0.458
    Q8                0.561
    Q13               0.377
    Q3                0.468
    Q15               0.462
    Q19               0.434
    Q14               0.569
    Q18               0.570
    Q6                0.661
    Q11               0.494
    F_Material        0.660
    F_Personal        0.635
    F_Health_Sec      0.711
    F_Work            0.682
    F_Leisure         0.397
    F_Info_Cult       0.351

Reproducibility

Show / Hide Code
sessioninfo::session_info()
─ Session info ───────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.5.2 (2025-10-31 ucrt)
 os       Windows 11 x64 (build 26200)
 system   x86_64, mingw32
 ui       RTerm
 language (EN)
 collate  Ukrainian_Ukraine.utf8
 ctype    Ukrainian_Ukraine.utf8
 tz       Europe/Kiev
 date     2026-02-28
 pandoc   3.6.3 @ C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools/ (via rmarkdown)
 quarto   NA @ C:\\PROGRA~1\\RStudio\\RESOUR~1\\app\\bin\\quarto\\bin\\quarto.exe

─ Packages ───────────────────────────────────────────────────────────────────
 package        * version    date (UTC) lib source
 abind            1.4-8      2024-09-12 [1] CRAN (R 4.5.2)
 backports        1.5.0      2024-05-23 [1] CRAN (R 4.5.2)
 base64enc        0.1-6      2026-02-02 [1] CRAN (R 4.5.2)
 bayestestR       0.17.0     2025-08-29 [1] CRAN (R 4.5.2)
 broom            1.0.12     2026-01-27 [1] CRAN (R 4.5.2)
 car              3.1-5      2026-02-03 [1] CRAN (R 4.5.2)
 carData          3.0-6      2026-01-30 [1] CRAN (R 4.5.2)
 checkmate        2.3.4      2026-02-03 [1] CRAN (R 4.5.2)
 cli              3.6.5      2025-04-23 [1] CRAN (R 4.5.2)
 cluster          2.1.8.1    2025-03-12 [2] CRAN (R 4.5.2)
 coda             0.19-4.1   2024-01-31 [1] CRAN (R 4.5.2)
 codetools        0.2-20     2024-03-31 [2] CRAN (R 4.5.2)
 colorspace       2.1-2      2025-09-22 [1] CRAN (R 4.5.2)
 corpcor          1.6.10     2021-09-16 [1] CRAN (R 4.5.2)
 corrplot       * 0.95       2024-10-14 [1] CRAN (R 4.5.2)
 cowplot          1.2.0      2025-07-07 [1] CRAN (R 4.5.2)
 crayon           1.5.3      2024-06-20 [1] CRAN (R 4.5.2)
 data.table       1.18.2.1   2026-01-27 [1] CRAN (R 4.5.2)
 datawizard       1.3.0      2025-10-11 [1] CRAN (R 4.5.2)
 digest           0.6.39     2025-11-19 [1] CRAN (R 4.5.2)
 dplyr          * 1.2.0      2026-02-03 [1] CRAN (R 4.5.2)
 EGAnet         * 2.4.0      2025-12-06 [1] CRAN (R 4.5.2)
 emmeans          2.0.1      2025-12-16 [1] CRAN (R 4.5.2)
 estimability     1.5.1      2024-05-12 [1] CRAN (R 4.5.2)
 evaluate         1.0.5      2025-08-27 [1] CRAN (R 4.5.2)
 farver           2.1.2      2024-05-13 [1] CRAN (R 4.5.2)
 fastmap          1.2.0      2024-05-15 [1] CRAN (R 4.5.2)
 fdrtool          1.2.18     2024-08-20 [1] CRAN (R 4.5.2)
 forcats        * 1.0.1      2025-09-25 [1] CRAN (R 4.5.2)
 foreign          0.8-90     2025-03-31 [2] CRAN (R 4.5.2)
 Formula          1.2-5      2023-02-24 [1] CRAN (R 4.5.2)
 future           1.69.0     2026-01-16 [1] CRAN (R 4.5.2)
 future.apply     1.20.2     2026-02-20 [1] CRAN (R 4.5.2)
 generics         0.1.4      2025-05-09 [1] CRAN (R 4.5.2)
 GGally           2.4.0      2025-08-23 [1] CRAN (R 4.5.2)
 ggplot2        * 4.0.2      2026-02-03 [1] CRAN (R 4.5.2)
 ggpubr           0.6.3      2026-02-24 [1] CRAN (R 4.5.2)
 ggsignif         0.6.4      2022-10-13 [1] CRAN (R 4.5.2)
 ggstats          0.12.0     2025-12-22 [1] CRAN (R 4.5.2)
 glasso           1.11       2019-10-01 [1] CRAN (R 4.5.2)
 globals          0.19.0     2026-02-02 [1] CRAN (R 4.5.2)
 glue             1.8.0      2024-09-30 [1] CRAN (R 4.5.2)
 GPArotation      2025.3-1   2025-04-12 [1] CRAN (R 4.5.2)
 gridExtra        2.3        2017-09-09 [1] CRAN (R 4.5.2)
 gtable           0.3.6      2024-10-25 [1] CRAN (R 4.5.2)
 gtools           3.9.5      2023-11-20 [1] CRAN (R 4.5.2)
 haven          * 2.5.5      2025-05-30 [1] CRAN (R 4.5.2)
 here           * 1.0.2      2025-09-15 [1] CRAN (R 4.5.2)
 Hmisc            5.2-5      2026-01-09 [1] CRAN (R 4.5.2)
 hms              1.1.4      2025-10-17 [1] CRAN (R 4.5.2)
 htmlTable        2.4.3      2024-07-21 [1] CRAN (R 4.5.2)
 htmltools        0.5.9      2025-12-04 [1] CRAN (R 4.5.2)
 htmlwidgets      1.6.4      2023-12-06 [1] CRAN (R 4.5.2)
 igraph           2.2.2      2026-02-12 [1] CRAN (R 4.5.2)
 insight          1.4.6      2026-02-04 [1] CRAN (R 4.5.2)
 jpeg             0.1-11     2025-03-21 [1] CRAN (R 4.5.2)
 jsonlite         2.0.0      2025-03-27 [1] CRAN (R 4.5.2)
 kableExtra     * 1.4.0      2024-01-24 [1] CRAN (R 4.5.2)
 knitr          * 1.51       2025-12-20 [1] CRAN (R 4.5.2)
 labeling         0.4.3      2023-08-29 [1] CRAN (R 4.5.2)
 lattice          0.22-7     2025-04-02 [2] CRAN (R 4.5.2)
 lavaan         * 0.6-21     2025-12-21 [1] CRAN (R 4.5.2)
 lifecycle        1.0.5      2026-01-08 [1] CRAN (R 4.5.2)
 listenv          0.10.0     2025-11-02 [1] CRAN (R 4.5.2)
 lubridate      * 1.9.5      2026-02-04 [1] CRAN (R 4.5.2)
 magrittr         2.0.4      2025-09-12 [1] CRAN (R 4.5.2)
 MASS             7.3-65     2025-02-28 [2] CRAN (R 4.5.2)
 Matrix           1.7-4      2025-08-28 [2] CRAN (R 4.5.2)
 mnormt           2.1.2      2026-01-27 [1] CRAN (R 4.5.2)
 mvtnorm          1.3-3      2025-01-10 [1] CRAN (R 4.5.2)
 network          1.20.0     2026-02-07 [1] CRAN (R 4.5.2)
 nlme             3.1-168    2025-03-31 [2] CRAN (R 4.5.2)
 nnet             7.3-20     2025-01-01 [2] CRAN (R 4.5.2)
 numDeriv         2016.8-1.1 2019-06-06 [1] CRAN (R 4.5.2)
 parallelly       1.46.1     2026-01-08 [1] CRAN (R 4.5.2)
 parameters     * 0.28.3     2025-11-25 [1] CRAN (R 4.5.2)
 patchwork      * 1.3.2      2025-08-25 [1] CRAN (R 4.5.2)
 pbapply          1.7-4      2025-07-20 [1] CRAN (R 4.5.2)
 pbivnorm         0.6.0      2015-01-23 [1] CRAN (R 4.5.2)
 performance    * 0.16.0     2026-02-04 [1] CRAN (R 4.5.2)
 pillar           1.11.1     2025-09-17 [1] CRAN (R 4.5.2)
 pkgconfig        2.0.3      2019-09-22 [1] CRAN (R 4.5.2)
 plyr             1.8.9      2023-10-02 [1] CRAN (R 4.5.2)
 png              0.1-8      2022-11-29 [1] CRAN (R 4.5.2)
 prettyunits      1.2.0      2023-09-24 [1] CRAN (R 4.5.2)
 progress         1.2.3      2023-12-06 [1] CRAN (R 4.5.2)
 progressr        0.18.0     2025-11-06 [1] CRAN (R 4.5.2)
 psych          * 2.6.1      2026-02-03 [1] CRAN (R 4.5.2)
 purrr          * 1.2.1      2026-01-09 [1] CRAN (R 4.5.2)
 qgraph           1.9.8      2023-11-03 [1] CRAN (R 4.5.2)
 quadprog         1.5-8      2019-11-20 [1] CRAN (R 4.5.2)
 R6               2.6.1      2025-02-15 [1] CRAN (R 4.5.2)
 ragg             1.5.0      2025-09-02 [1] CRAN (R 4.5.2)
 RColorBrewer   * 1.1-3      2022-04-03 [1] CRAN (R 4.5.2)
 Rcpp             1.1.1      2026-01-10 [1] CRAN (R 4.5.2)
 readr          * 2.2.0      2026-02-19 [1] CRAN (R 4.5.2)
 reshape2         1.4.5      2025-11-12 [1] CRAN (R 4.5.2)
 rlang            1.1.7      2026-01-09 [1] CRAN (R 4.5.2)
 rmarkdown        2.30       2025-09-28 [1] CRAN (R 4.5.2)
 rpart            4.1.24     2025-01-07 [2] CRAN (R 4.5.2)
 rprojroot        2.1.1      2025-08-26 [1] CRAN (R 4.5.2)
 rstatix          0.7.3      2025-10-18 [1] CRAN (R 4.5.2)
 rstudioapi       0.18.0     2026-01-16 [1] CRAN (R 4.5.2)
 S7               0.2.1      2025-11-14 [1] CRAN (R 4.5.2)
 scales         * 1.4.0      2025-04-24 [1] CRAN (R 4.5.2)
 semTools       * 0.5-7      2025-03-13 [1] local (C:/Users/Admin/Downloads/semTools_0.5-7.tar.gz)
 sessioninfo      1.2.3      2025-02-05 [1] CRAN (R 4.5.2)
 sjlabelled     * 1.2.0      2022-04-10 [1] CRAN (R 4.5.2)
 sna              2.8        2024-09-08 [1] CRAN (R 4.5.2)
 statnet.common   4.13.0     2025-12-16 [1] CRAN (R 4.5.2)
 stringi          1.8.7      2025-03-27 [1] CRAN (R 4.5.2)
 stringr        * 1.6.0      2025-11-04 [1] CRAN (R 4.5.2)
 svglite          2.2.2      2025-10-21 [1] CRAN (R 4.5.2)
 systemfonts      1.3.1      2025-10-01 [1] CRAN (R 4.5.2)
 textshaping      1.0.4      2025-10-10 [1] CRAN (R 4.5.2)
 tibble         * 3.3.1      2026-01-11 [1] CRAN (R 4.5.2)
 tidyr          * 1.3.2      2025-12-19 [1] CRAN (R 4.5.2)
 tidyselect       1.2.1      2024-03-11 [1] CRAN (R 4.5.2)
 tidyverse      * 2.0.0      2023-02-22 [1] CRAN (R 4.5.2)
 timechange       0.4.0      2026-01-29 [1] CRAN (R 4.5.2)
 tzdb             0.5.0      2025-03-15 [1] CRAN (R 4.5.2)
 vctrs            0.7.1      2026-01-23 [1] CRAN (R 4.5.2)
 viridisLite      0.4.3      2026-02-04 [1] CRAN (R 4.5.2)
 withr            3.0.2      2024-10-28 [1] CRAN (R 4.5.2)
 xfun             0.56       2026-01-18 [1] CRAN (R 4.5.2)
 xml2             1.5.2      2026-01-17 [1] CRAN (R 4.5.2)
 xtable           1.8-8      2026-02-22 [1] CRAN (R 4.5.2)
 yaml             2.3.12     2025-12-10 [1] CRAN (R 4.5.2)

 [1] C:/Users/Admin/AppData/Local/R/win-library/4.5
 [2] C:/Program Files/R/R-4.5.2/library
 * ── Packages attached to the search path.

──────────────────────────────────────────────────────────────────────────────

Document last updated: 28 February 2026