knitr::opts_chunk$set(echo = TRUE)

library(tidyverse)
library(haven)
library(dplyr)
library(psych)
library(DT)
# library(knitr)
library(openxlsx)
library(expss)

library(psych)
library(likert)
library(careless)
library(corrplot)

library(survey) # analyze survey with weights
library(srvyr) 

library(knitr)

library(readr)
library(lavaan)

library(qualtRics)
library(corrplot)
library(sem)
library(semPlot)
library(semPower)

library(lavaan)
library(GPArotation)
library(lme4)
library(ggplot2)

library(tidyr)
library(RColorBrewer)

#set working directory & load data set
setwd("~/Google Drive/My Drive/CircEUlar/WP4/WP4 Survey")
d <- read_sav("Circular Consumption Survey_updated.sav") # create extra columns for open-ended questions, though response labels are preserved

As the data set includes many variables that are not relevant for the current RQ, we will create a new data set with only the relevant variables.

#data set with only columns relevant for the analysis
#dR <- subset(d, select = c(37:40, 149:152, 154:157, 159:162, 258:261, 263:266, 268:271, 295:261, 263:266, 268:271, 295:297, 299:301, 303:306, 308, 309))

dR <- subset(d, select = c("country", "gender", "birthyear", "educ_UK", "educ_NL", "educ_DE", "educ_IT", "educ_LT", "hhincome", "bio_val", "alt_val", "ego_val", "hed_val", "ccb_gov", "ccb_busi", "ccb_cit", "ccb_se", "ccb_oe", "ccb_pn", "ccb_pa", "ccb_ar", "pweight"))

Sample descriptives

dR$age <- 2024 - dR$birthyear

#For continuous variables:

# Age - Mean and SD
age_per_country <- dR %>%
  group_by(country) %>%
  summarise(
    mean_age = mean(age, na.rm = TRUE),  # Mean age
    sd_age = sd(age, na.rm = TRUE)       # Standard deviation of age
  )
print(age_per_country)
## # A tibble: 5 × 3
##   country            mean_age sd_age
##   <dbl+lbl>             <dbl>  <dbl>
## 1 1 [United Kingdom]     48.3   18.0
## 2 2 [Germany]            51.3   16.3
## 3 3 [Netherlands]        48.9   17.7
## 4 4 [Italy]              50.9   17.5
## 5 5 [Lithuania]          48.0   17.5
hist(dR$age, 
     main="Age of participants",    
     xlab="Year of birth",    
     ylab="Amount of people",          
     col="lightblue",               
     border="black")

Countries: 1 = United Kingdom 2 = Germany 3 = The Netherlands 4 = Italy 5 = Lithuania

#For categorical variables:

#country
table(dR$country)
## 
##    1    2    3    4    5 
## 1053 1100 1081 1409 1008
#gender distribution per country 
table(dR$country, dR$gender)
##    
##       1   2
##   1 519 534
##   2 536 564
##   3 535 546
##   4 694 715
##   5 462 546
# education
dR$educ_group_UK <- cut(dR$educ_UK, breaks=c(-1, 2, 4, 8), labels = c("0-2", "3-4", "5-8"))
dR$educ_group_DE <- cut(dR$educ_DE, breaks=c(-1, 3, 5, 8), labels = c("0-3", "4-5", "6-8"))
dR$educ_group_NL <- cut(dR$educ_NL, breaks=c(-1, 2, 4, 8), labels = c("0-2", "3-4", "5-8"))
dR$educ_group_IT <- cut(dR$educ_IT, breaks=c(-1, 2, 4, 8), labels = c("0-2", "3-4", "5-8"))
dR$educ_group_LT <- cut(dR$educ_LT, breaks=c(-1, 2, 4, 8), labels = c("0-2", "3-4", "5-8"))

tab <- data.frame(
  UK = as.numeric(prop.table(table(d$educ_group_UK)) * 100),
  DE = as.numeric(prop.table(table(d$educ_group_DE)) * 100),
  NL = as.numeric(prop.table(table(d$educ_group_NL)) * 100),
  IT = as.numeric(prop.table(table(d$educ_group_IT)) * 100),
  LT = as.numeric(prop.table(table(d$educ_group_LT)) * 100)
)
## Warning: Unknown or uninitialised column: `educ_group_UK`.
## Warning: Unknown or uninitialised column: `educ_group_DE`.
## Warning: Unknown or uninitialised column: `educ_group_NL`.
## Warning: Unknown or uninitialised column: `educ_group_IT`.
## Warning: Unknown or uninitialised column: `educ_group_LT`.
#rownames(tab) <- c("0-2", "3-4", "5-8")
round(tab, 1)
## [1] UK DE NL IT LT
## <0 rows> (or 0-length row.names)
tab
## [1] UK DE NL IT LT
## <0 rows> (or 0-length row.names)
#household income per country
table(dR$country, dR$hhincome)
##    
##       1   2   3   4   5   6   7   8   9  10  11
##   1  44  83 146 148 118  95  99  44  95  64 117
##   2  16  49 106 122 123 131 111 111 126 108  97
##   3  27  32  73  98 134 157 152  88 148 101  71
##   4  71  96 239 275 211 167 142  70  84  28  26
##   5 149 229 239 155  99  57  27  13  17   7  16

gender: 1 male 2 female 3 diverse 99 prefer not to say

Rename model variables (and code so that higher numbers is stronger agreement/engagement)

Descriptives of model variables

describeBy(dR[, c("bio", "alt", "hed", "ego", "pa", "ar", "se", "oe", "pn", "gov", "busi", "ind")])
## Warning in describeBy(dR[, c("bio", "alt", "hed", "ego", "pa", "ar", "se", : no
## grouping variable requested
##      vars    n mean   sd median trimmed  mad min max range  skew kurtosis   se
## bio     1 5651 4.84 1.80      5    5.00 1.48   1   7     6 -0.52    -0.76 0.02
## alt     2 5651 4.90 1.83      5    5.07 1.48   1   7     6 -0.61    -0.74 0.02
## hed     3 5651 4.75 1.82      5    4.88 1.48   1   7     6 -0.46    -0.85 0.02
## ego     4 5651 3.84 1.68      4    3.84 1.48   1   7     6  0.06    -0.73 0.02
## pa      5 5651 4.38 1.76      4    4.46 1.48   1   7     6 -0.29    -0.74 0.02
## ar      6 5651 3.90 1.75      4    3.91 1.48   1   7     6 -0.07    -0.85 0.02
## se      7 5651 3.66 1.71      4    3.64 1.48   1   7     6  0.01    -0.80 0.02
## oe      8 5651 3.69 1.71      4    3.67 1.48   1   7     6 -0.02    -0.78 0.02
## pn      9 5651 3.51 1.75      4    3.45 1.48   1   7     6  0.12    -0.88 0.02
## gov    10 5651 3.09 1.82      3    2.93 2.97   1   7     6  0.39    -0.91 0.02
## busi   11 5651 3.06 1.80      3    2.90 2.97   1   7     6  0.38    -0.90 0.02
## ind    12 5651 3.44 1.79      4    3.36 1.48   1   7     6  0.13    -0.96 0.02
summary(dR[, c("bio", "alt", "hed", "ego", "pa", "ar", "se", "oe", "pn", "gov", "busi", "ind")])
##       bio             alt             hed             ego       
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:4.000   1st Qu.:4.000   1st Qu.:3.000   1st Qu.:3.000  
##  Median :5.000   Median :5.000   Median :5.000   Median :4.000  
##  Mean   :4.843   Mean   :4.902   Mean   :4.748   Mean   :3.844  
##  3rd Qu.:6.000   3rd Qu.:6.000   3rd Qu.:6.000   3rd Qu.:5.000  
##  Max.   :7.000   Max.   :7.000   Max.   :7.000   Max.   :7.000  
##        pa              ar              se              oe       
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:3.000   1st Qu.:3.000   1st Qu.:2.000   1st Qu.:2.000  
##  Median :4.000   Median :4.000   Median :4.000   Median :4.000  
##  Mean   :4.377   Mean   :3.902   Mean   :3.662   Mean   :3.692  
##  3rd Qu.:6.000   3rd Qu.:5.000   3rd Qu.:5.000   3rd Qu.:5.000  
##  Max.   :7.000   Max.   :7.000   Max.   :7.000   Max.   :7.000  
##        pn             gov            busi            ind       
##  Min.   :1.000   Min.   :1.00   Min.   :1.000   Min.   :1.000  
##  1st Qu.:2.000   1st Qu.:1.00   1st Qu.:1.000   1st Qu.:2.000  
##  Median :4.000   Median :3.00   Median :3.000   Median :4.000  
##  Mean   :3.514   Mean   :3.09   Mean   :3.062   Mean   :3.441  
##  3rd Qu.:5.000   3rd Qu.:4.00   3rd Qu.:4.000   3rd Qu.:5.000  
##  Max.   :7.000   Max.   :7.00   Max.   :7.000   Max.   :7.000
std_devs <- sapply(dR[, c("bio", "alt", "hed", "ego", "pa", "ar", "se", "oe", "pn", "gov", "busi", "ind")], sd, na.rm = TRUE)
print(std_devs)
##      bio      alt      hed      ego       pa       ar       se       oe 
## 1.800941 1.827367 1.815965 1.676475 1.759294 1.754855 1.708616 1.712705 
##       pn      gov     busi      ind 
## 1.751646 1.816225 1.798300 1.788116

Histograms of model variables for all countries together

# Biospheric values
hist(dR$bio, 
     main = "Distribution of Scores", 
     xlab = "Biospheric values", 
     ylab = "Frequency", 
     col = "lightblue", 
     border = "black")

# Altruistic values
hist(dR$alt, 
     main = "Distribution of Scores", 
     xlab = "Altruistic values", 
     ylab = "Frequency", 
     col = "lightblue", 
     border = "black")

# Hedonic values
hist(dR$hed, 
     main = "Distribution of Scores", 
     xlab = "Hedonic values", 
     ylab = "Frequency", 
     col = "lightblue", 
     border = "black")

# Egoistic values
hist(dR$ego, 
     main = "Distribution of Scores", 
     xlab = "Egoistic values", 
     ylab = "Frequency", 
     col = "lightblue", 
     border = "black")

# Problem awareness
hist(dR$pa, 
     main = "Distribution of Scores", 
     xlab = "Problem awareness", 
     ylab = "Frequency", 
     col = "lightblue", 
     border = "black")

# Ascription of responsibility
hist(dR$ar, 
     main = "Distribution of Scores", 
     xlab = "Ascription of Responsibility", 
     ylab = "Frequency", 
     col = "lightblue", 
     border = "black")

# Self-efficacy
hist(dR$se, 
     main = "Distribution of Scores", 
     xlab = "Self-efficacy", 
     ylab = "Frequency", 
     col = "lightblue", 
     border = "black")

# Outcome efficacy
hist(dR$oe, 
     main = "Distribution of Scores", 
     xlab = "Outcome efficacy", 
     ylab = "Frequency", 
     col = "lightblue", 
     border = "black")

# Personal norms
hist(dR$pn, 
     main = "Distribution of Scores", 
     xlab = "Outcome efficacy", 
     ylab = "Frequency", 
     col = "lightblue", 
     border = "black")

Figure with overview over all means, sd per variable, per country

dR_reduced <- subset(dR, select = c("country", "bio", "alt", "hed", "ego", "pa", "ar", "se", "oe", "pn", "gov", "busi", "ind"))


# Reshape the data to long format
dR_long <- dR_reduced %>%
  pivot_longer(-country, names_to = "variable", values_to = "value")
dR_long
## # A tibble: 67,812 × 3
##    country     variable value
##    <dbl+lbl>   <chr>    <dbl>
##  1 2 [Germany] bio          7
##  2 2 [Germany] alt          6
##  3 2 [Germany] hed          6
##  4 2 [Germany] ego          3
##  5 2 [Germany] pa           6
##  6 2 [Germany] ar           6
##  7 2 [Germany] se           5
##  8 2 [Germany] oe           4
##  9 2 [Germany] pn           5
## 10 2 [Germany] gov          5
## # ℹ 67,802 more rows
dR_long$country <- as.factor(dR_long$country)
dR_long$variable <- as.factor(dR_long$variable)

dR_long <- dR_long %>%
  mutate(variable = factor(variable, 
                           levels = c("ind", "busi", "gov", "pn", "oe", "se", "ar", "pa", "ego", "hed", "alt","bio"), 
                           labels = c("CCBs aimed at other individuals", "CCBs aimed at businesses", "CCBs aimed at governments", "Personal norms", "Outcome efficacy", "Self-efficacy", "Ascription of responsibility", "Problem awareness", "Egoistic values", "Hedonic values", "Altruistic values", "Biospheric values")))

variables_m_sd <- ggplot(dR_long) +
  aes(x = value, y = variable, colour = country, fill = country) +
  stat_summary(fun = mean, geom = "point", size = 3, position = position_dodge(width = 0.5)) +  # Mean as points
  stat_summary(fun.data = mean_sdl, fun.args = list(mult = 1), 
               geom = "errorbar", width = 0.2, position = position_dodge(width = 0.5)) +  # SD as error bars
    scale_colour_manual(values = rev(brewer.pal(n = 5, name = "Dark2"))) +
  labs(
    x = "means ± SD",                       # Rename x-axis
    y = "variable",           # Rename y-axis
    colour = "country",       # Rename colour legend
    fill = "country"
  ) +
  #legend ...
  theme_bw()

variables_m_sd 

# Export as PDF
#pdf("Figure variables and M, SD.pdf", width = 8, height = 12)

Testing country differences in the extended VBN variables

library(effectsize)
## 
## Attaching package: 'effectsize'
## The following object is masked from 'package:xtable':
## 
##     display
## The following object is masked from 'package:psych':
## 
##     phi
aov_bio <- aov(bio ~ country, data = dR)
summary(aov_bio)
##               Df Sum Sq Mean Sq F value Pr(>F)    
## country        1    282  282.28   88.38 <2e-16 ***
## Residuals   5649  18043    3.19                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
aov_alt <- aov(alt ~ country, data = dR)
summary(aov_alt)
##               Df Sum Sq Mean Sq F value Pr(>F)    
## country        1    327   327.4   99.76 <2e-16 ***
## Residuals   5649  18539     3.3                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
aov_hed <- aov(hed ~ country, data = dR)
summary(aov_hed)
##               Df Sum Sq Mean Sq F value Pr(>F)    
## country        1    586   586.3   183.5 <2e-16 ***
## Residuals   5649  18046     3.2                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
aov_ego <- aov(ego ~ country, data = dR)
summary(aov_ego)
##               Df Sum Sq Mean Sq F value Pr(>F)  
## country        1     10  10.151   3.614 0.0574 .
## Residuals   5649  15870   2.809                 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
aov_pa <- aov(pa ~ country, data = dR)
summary(aov_pa)
##               Df Sum Sq Mean Sq F value Pr(>F)
## country        1      7   7.275   2.351  0.125
## Residuals   5649  17480   3.094
aov_ar <- aov(ar ~ country, data = dR)
summary(aov_ar)
##               Df Sum Sq Mean Sq F value  Pr(>F)   
## country        1     27  27.377   8.902 0.00286 **
## Residuals   5649  17372   3.075                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
aov_se <- aov(se ~ country, data = dR)
summary(aov_se)
##               Df Sum Sq Mean Sq F value Pr(>F)
## country        1      1   1.147   0.393  0.531
## Residuals   5649  16493   2.920
aov_oe <- aov(oe ~ country, data = dR)
summary(aov_oe)
##               Df Sum Sq Mean Sq F value   Pr(>F)    
## country        1     36   35.82   12.23 0.000473 ***
## Residuals   5649  16538    2.93                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
aov_pn <- aov(pn ~ country, data = dR)
summary(aov_pn)
##               Df Sum Sq Mean Sq F value   Pr(>F)    
## country        1     56   55.97    18.3 1.92e-05 ***
## Residuals   5649  17280    3.06                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Effect sizes (η² for ANOVA)
eta_squared(aov_bio, partial = FALSE)
## # Effect Size for ANOVA (Type I)
## 
## Parameter | Eta2 |       95% CI
## -------------------------------
## country   | 0.02 | [0.01, 1.00]
## 
## - One-sided CIs: upper bound fixed at [1.00].
eta_squared(aov_alt, partial = FALSE)
## # Effect Size for ANOVA (Type I)
## 
## Parameter | Eta2 |       95% CI
## -------------------------------
## country   | 0.02 | [0.01, 1.00]
## 
## - One-sided CIs: upper bound fixed at [1.00].
eta_squared(aov_hed, partial = FALSE)
## # Effect Size for ANOVA (Type I)
## 
## Parameter | Eta2 |       95% CI
## -------------------------------
## country   | 0.03 | [0.02, 1.00]
## 
## - One-sided CIs: upper bound fixed at [1.00].
eta_squared(aov_ego, partial = FALSE)
## # Effect Size for ANOVA (Type I)
## 
## Parameter |     Eta2 |       95% CI
## -----------------------------------
## country   | 6.39e-04 | [0.00, 1.00]
## 
## - One-sided CIs: upper bound fixed at [1.00].
eta_squared(aov_pa, partial = FALSE)
## # Effect Size for ANOVA (Type I)
## 
## Parameter |     Eta2 |       95% CI
## -----------------------------------
## country   | 4.16e-04 | [0.00, 1.00]
## 
## - One-sided CIs: upper bound fixed at [1.00].
eta_squared(aov_ar, partial = FALSE)
## # Effect Size for ANOVA (Type I)
## 
## Parameter |     Eta2 |       95% CI
## -----------------------------------
## country   | 1.57e-03 | [0.00, 1.00]
## 
## - One-sided CIs: upper bound fixed at [1.00].
eta_squared(aov_se, partial = FALSE)
## # Effect Size for ANOVA (Type I)
## 
## Parameter |     Eta2 |       95% CI
## -----------------------------------
## country   | 6.95e-05 | [0.00, 1.00]
## 
## - One-sided CIs: upper bound fixed at [1.00].
eta_squared(aov_oe, partial = FALSE)
## # Effect Size for ANOVA (Type I)
## 
## Parameter |     Eta2 |       95% CI
## -----------------------------------
## country   | 2.16e-03 | [0.00, 1.00]
## 
## - One-sided CIs: upper bound fixed at [1.00].
eta_squared(aov_pn, partial = FALSE)
## # Effect Size for ANOVA (Type I)
## 
## Parameter |     Eta2 |       95% CI
## -----------------------------------
## country   | 3.23e-03 | [0.00, 1.00]
## 
## - One-sided CIs: upper bound fixed at [1.00].

Results from anova: For all variables there are significant country differences.

Results from effect sizes: The effect sizes are very small to small.

Engagement in CCBs

Descriptives for CCBs

#overall
describeBy(dR$gov)
## Warning in describeBy(dR$gov): no grouping variable requested
##    vars    n mean   sd median trimmed  mad min max range skew kurtosis   se
## X1    1 5651 3.09 1.82      3    2.93 2.97   1   7     6 0.39    -0.91 0.02
describeBy(dR$busi)
## Warning in describeBy(dR$busi): no grouping variable requested
##    vars    n mean  sd median trimmed  mad min max range skew kurtosis   se
## X1    1 5651 3.06 1.8      3     2.9 2.97   1   7     6 0.38     -0.9 0.02
describeBy(dR$ind)
## Warning in describeBy(dR$ind): no grouping variable requested
##    vars    n mean   sd median trimmed  mad min max range skew kurtosis   se
## X1    1 5651 3.44 1.79      4    3.36 1.48   1   7     6 0.13    -0.96 0.02
#per country
dR <- dR %>%
  mutate(country = case_when(
    country == 1 ~ "United Kingdom",
    country == 2 ~ "Germany",
    country == 3 ~ "Netherlands",
    country == 4 ~ "Italy",
    country == 5 ~ "Lithuania",
    TRUE ~ as.character(country)  # fallback for unmatched values
  ))
print(dR %>%
  group_by(country) %>%
  summarise(
    mean_ccb_gov = mean(gov, na.rm = TRUE),
    sd_ccb_gov = sd(gov, na.rm = TRUE),
    mean_ccb_busi = mean(busi, na.rm = TRUE),
    sd_ccb_busi = sd(busi, na.rm = TRUE),
    mean_ccb_ind = mean(ind, na.rm = TRUE),
    sd_ccb_ind = sd(ind, na.rm = TRUE)
  ))
## # A tibble: 5 × 7
##   country        mean_ccb_gov sd_ccb_gov mean_ccb_busi sd_ccb_busi mean_ccb_ind
##   <chr>                 <dbl>      <dbl>         <dbl>       <dbl>        <dbl>
## 1 Germany                2.96       1.86          2.84        1.80         3.10
## 2 Italy                  3.18       1.74          3.14        1.71         3.75
## 3 Lithuania              3.53       1.75          3.66        1.75         3.94
## 4 Netherlands            2.50       1.63          2.54        1.62         2.75
## 5 United Kingdom         3.29       1.94          3.15        1.94         3.60
## # ℹ 1 more variable: sd_ccb_ind <dbl>

Distributions of CCBs for all countries together

# Reshape data to long format for the 3 variables
dR_long <- dR %>%
  pivot_longer(
    cols = c(gov, busi, ind),
    names_to = "variable",
    values_to = "value")

# Rename variable labels for nicer x-axis
dR_long$variable <- factor(dR_long$variable, 
                          levels = c("gov", "busi", "ind"),
                          labels = c("Governments", "Businesses", "Other individuals"))

# Plot all countries pooled, with violins and boxplots by variable
ccb_plot <- ggplot(dR_long, aes(x = variable, y = value, fill = variable)) +
  geom_violin(trim = FALSE, alpha = 0.6) +
  geom_boxplot(width = 0.1, outlier.size = 0.5, color = "black") +
  scale_fill_manual(values = rev(brewer.pal(n = 4, name = "YlGnBu"))) +
  scale_y_continuous(
    breaks = 0:8,  # full scale breaks (adjust if needed)
    labels = c(" ", "(1) Never", "(2)", "(3)", "(4)", "(5)", "(6)", "(7) Frequently", "")
  ) +
  theme_minimal() +
  theme(
    panel.grid.minor = element_blank(),  # remove minor grid lines
    text = element_text(color = "black"),  # make all text black
    axis.text = element_text(color = "black"),  # explicitly make axis text black
    axis.title = element_text(color = "black"),  # axis titles black
    plot.title = element_text(color = "black", hjust = 0.5),  # title black and centered
    legend.text = element_text(color = "black"),  # legend text black (if legend shown)
    legend.title = element_text(color = "black")  # legend title black
  ) +
  labs(title = "Distribution of CCBs for different actors (all countries pooled)",
       x = "CCBs aimed at",
       y = "Freuquency of engagement") +
  theme(axis.text.x = element_text(angle = 30, vjust = 0.7, hjust = 0.8),
        legend.position = "none",
        plot.title = element_text(hjust = 0.5))

ccb_plot

ggsave("ccb_plot.png", plot = ccb_plot, width = 10, height = 6, dpi = 300)

Country differences in CCB engagement

library(lsr)

aov_gov <- aov(gov ~ country, data = dR)
summary(aov_gov)
##               Df Sum Sq Mean Sq F value Pr(>F)    
## country        4    648  161.97   50.84 <2e-16 ***
## Residuals   5646  17990    3.19                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
etaSquared(aov_gov)
##            eta.sq eta.sq.part
## country 0.0347626   0.0347626
aov_busi <- aov(busi ~ country, data = dR)
summary(aov_busi)
##               Df Sum Sq Mean Sq F value Pr(>F)    
## country        4    719  179.79   57.83 <2e-16 ***
## Residuals   5646  17552    3.11                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
etaSquared(aov_busi)
##             eta.sq eta.sq.part
## country 0.03936066  0.03936066
aov_ind <- aov(ind ~ country, data = dR)
summary(aov_ind)
##               Df Sum Sq Mean Sq F value Pr(>F)    
## country        4   1050  262.60   87.14 <2e-16 ***
## Residuals   5646  17015    3.01                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
etaSquared(aov_ind)
##             eta.sq eta.sq.part
## country 0.05814637  0.05814637

Distributions of CCBs per country

CCBs aimed at governments

ccb_gov_plot <- ggplot(dR, aes(x = country, y = gov, fill = country)) +
  geom_violin(trim = FALSE, alpha = 0.6) +
  geom_boxplot(width = 0.1, outlier.size = 0.5, color = "black") +
  scale_fill_manual(values = rev(brewer.pal(n = 5, name = "Dark2"))) + 
  theme_minimal() +
  scale_y_continuous(
    breaks = 0:8,  # full scale breaks (adjust if needed)
    labels = c(" ", "(1) Never", "(2)", "(3)", "(4)", "(5)", "(6)", "(7) Frequently", "")
  ) +
  theme_minimal() +
  theme(
    panel.grid.minor = element_blank(),  # remove minor grid lines
    text = element_text(color = "black"),  # make all text black
    axis.text = element_text(color = "black"),  # explicitly make axis text black
    axis.title = element_text(color = "black"),  # axis titles black
    plot.title = element_text(color = "black", hjust = 0.5),  # title black and centered
    legend.text = element_text(color = "black"),  # legend text black (if legend shown)
    legend.title = element_text(color = "black")  # legend title black
  ) +
  labs(title = "Distribution of CCBs aimed at governments by country",
       x = "Country",
       y = "Frequency of engagement") +
  theme(axis.text.x = element_text(angle = 30, vjust = 0.5, hjust=1),
        legend.position = "none",
        plot.title = element_text(hjust = 0.5))
ccb_gov_plot

ggsave("ccb_gov_plot.png", plot = ccb_gov_plot, width = 10, height = 6, dpi = 300)

CCBs aimed at businesses

ccb_busi_plot <- ggplot(dR, aes(x = country, y = busi, fill = country)) +
  geom_violin(trim = FALSE, alpha = 0.6) +
  geom_boxplot(width = 0.1, outlier.size = 0.5, color = "black") +
  scale_fill_manual(values = rev(brewer.pal(n = 5, name = "Dark2"))) + 
  theme_minimal() +
  scale_y_continuous(
    breaks = 0:8,  # full scale breaks (adjust if needed)
    labels = c(" ", "(1) Never", "(2)", "(3)", "(4)", "(5)", "(6)", "(7) Frequently", "")
  ) +
  theme_minimal() +
  theme(
    panel.grid.minor = element_blank(),  # remove minor grid lines
    text = element_text(color = "black"),  # make all text black
    axis.text = element_text(color = "black"),  # explicitly make axis text black
    axis.title = element_text(color = "black"),  # axis titles black
    plot.title = element_text(color = "black", hjust = 0.5),  # title black and centered
    legend.text = element_text(color = "black"),  # legend text black (if legend shown)
    legend.title = element_text(color = "black")  # legend title black
  ) +
  labs(title = "Distribution of CCBs aimed at businesses by country",
       x = "Country",
       y = "Frequency of engagement") +
  theme(axis.text.x = element_text(angle = 30, vjust = 0.5, hjust=1),
        legend.position = "none",
        plot.title = element_text(hjust = 0.5))
ccb_busi_plot

ggsave("ccb_busi_plot.png", plot = ccb_busi_plot, width = 10, height = 6, dpi = 300)

CCBs aimed at other individuals

ccb_ind_plot <- ggplot(dR, aes(x = country, y = ind, fill = country)) +
  geom_violin(trim = FALSE, alpha = 0.6) +
  geom_boxplot(width = 0.1, outlier.size = 0.5, color = "black") +
  scale_fill_manual(values = rev(brewer.pal(n = 5, name = "Dark2"))) + 
  theme_minimal() +
  scale_y_continuous(
    breaks = 0:8,  
    labels = c(" ", "(1) Never", "(2)", "(3)", "(4)", "(5)", "(6)", "(7) Frequently", "")
  ) +
  theme_minimal() +
  theme(
    panel.grid.minor = element_blank(),  # remove minor grid lines
    text = element_text(color = "black"),  # make all text black
    axis.text = element_text(color = "black"),  # explicitly make axis text black
    axis.title = element_text(color = "black"),  # axis titles black
    plot.title = element_text(color = "black", hjust = 0.5),  # title black and centered
    legend.text = element_text(color = "black"),  # legend text black (if legend shown)
    legend.title = element_text(color = "black")  # legend title black
  ) +
  labs(title = "Distribution of CCBs aimed at other individuals by country",
       x = "Country",
       y = "Frequency of engagement") +
  theme(axis.text.x = element_text(angle = 30, vjust = 0.5, hjust=1),
        legend.position = "none",
        plot.title = element_text(hjust = 0.5))
ccb_ind_plot

ggsave("ccb_ind_plot.png", plot = ccb_ind_plot, width = 10, height = 6, dpi = 300)

Testing differences between different CCBs

There is a significant difference between the means of CCBs aimed at individuals versus CCBs aimed at governments or businesses. However, the effect sizes are negligible to small.

library(afex)
## ************
## Welcome to afex. For support visit: http://afex.singmann.science/
## - Functions for ANOVAs: aov_car(), aov_ez(), and aov_4()
## - Methods for calculating p-values with mixed(): 'S', 'KR', 'LRT', and 'PB'
## - 'afex_aov' and 'mixed' objects can be passed to emmeans() for follow-up tests
## - Get and set global package options with: afex_options()
## - Set sum-to-zero contrasts globally: set_sum_contrasts()
## - For example analyses see: browseVignettes("afex")
## ************
## 
## Attaching package: 'afex'
## The following object is masked from 'package:lme4':
## 
##     lmer
library(emmeans)
## Welcome to emmeans.
## Caution: You lose important information if you filter this package's results.
## See '? untidy'
library(effectsize)
library(effsize)
## 
## Attaching package: 'effsize'
## The following object is masked from 'package:psych':
## 
##     cohen.d
#Sig. test for means of CCBs
dR_long <- dR %>%
  dplyr::select(id, gov, busi, ind) %>%
  tidyr::pivot_longer(cols = c(gov, busi, ind), names_to = "CCB_type", values_to = "value")

#checking for sig. differences between CCBs
aov_res <- aov_ez(id = "id", dv = "value", within = "CCB_type", data = dR_long)
summary(aov_res)
## 
## Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
## 
##             Sum Sq num Df Error SS den Df  F value    Pr(>F)    
## (Intercept) 173326      1    44589   5650 21962.75 < 2.2e-16 ***
## CCB_type       505      2    10385  11300   274.63 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Mauchly Tests for Sphericity
## 
##          Test statistic    p-value
## CCB_type        0.97529 2.0447e-31
## 
## 
## Greenhouse-Geisser and Huynh-Feldt Corrections
##  for Departure from Sphericity
## 
##           GG eps Pr(>F[GG])    
## CCB_type 0.97589  < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##             HF eps  Pr(>F[HF])
## CCB_type 0.9762206 1.7606e-114
#post hoc tests as ANOVA is signficiant
emmeans(aov_res, pairwise ~ CCB_type)
## $emmeans
##  CCB_type emmean     SE   df lower.CL upper.CL
##  gov        3.09 0.0242 5650     3.04     3.14
##  busi       3.06 0.0239 5650     3.01     3.11
##  ind        3.44 0.0238 5650     3.39     3.49
## 
## Confidence level used: 0.95 
## 
## $contrasts
##  contrast   estimate     SE   df t.ratio p.value
##  gov - busi    0.028 0.0173 5650   1.621  0.2369
##  gov - ind    -0.351 0.0194 5650 -18.107  <.0001
##  busi - ind   -0.379 0.0174 5650 -21.826  <.0001
## 
## P value adjustment: tukey method for comparing a family of 3 estimates
# Calculate effect sizes for pairwise differences
dR_subset <- dR %>% select(gov, busi, ind)

cohen_d_ind_gov <- cohen.d(dR_subset$ind, dR_subset$gov, paired = TRUE)
cohen_d_ind_gov
## 
## Cohen's d
## 
## d estimate: 0.1948821 (negligible)
## 95 percent confidence interval:
##     lower     upper 
## 0.1735857 0.2161784
cohen_d_ind_busi <- cohen.d(dR_subset$ind, dR_subset$busi, paired = TRUE)
cohen_d_ind_busi
## 
## Cohen's d
## 
## d estimate: 0.2114729 (small)
## 95 percent confidence interval:
##     lower     upper 
## 0.1922699 0.2306759

Testing CCB differences between countries

aov_gov <- aov(gov ~ country, data = dR)
summary(aov_gov)
##               Df Sum Sq Mean Sq F value Pr(>F)    
## country        4    648  161.97   50.84 <2e-16 ***
## Residuals   5646  17990    3.19                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
aov_busi <- aov(busi ~ country, data = dR)
summary(aov_busi)
##               Df Sum Sq Mean Sq F value Pr(>F)    
## country        4    719  179.79   57.83 <2e-16 ***
## Residuals   5646  17552    3.11                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
aov_ind <- aov(ind ~ country, data = dR)
summary(aov_ind)
##               Df Sum Sq Mean Sq F value Pr(>F)    
## country        4   1050  262.60   87.14 <2e-16 ***
## Residuals   5646  17015    3.01                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Post hoc pairwise comparisons (Tukey)
TukeyHSD(aov_gov)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = gov ~ country, data = dR)
## 
## $country
##                                  diff         lwr         upr     p adj
## Italy-Germany               0.2235073  0.02753805  0.41947660 0.0160221
## Lithuania-Germany           0.5755483  0.36317588  0.78792080 0.0000000
## Netherlands-Germany        -0.4595694 -0.66816646 -0.25097238 0.0000000
## United Kingdom-Germany      0.3276681  0.11767699  0.53765928 0.0002036
## Lithuania-Italy             0.3520410  0.15111228  0.55296976 0.0000177
## Netherlands-Italy          -0.6830767 -0.88001080 -0.48614269 0.0000000
## United Kingdom-Italy        0.1041608 -0.09424932  0.30257094 0.6066034
## Netherlands-Lithuania      -1.0351178 -1.24838081 -0.82185472 0.0000000
## United Kingdom-Lithuania   -0.2478802 -0.46250705 -0.03325336 0.0141212
## United Kingdom-Netherlands  0.7872376  0.57634577  0.99812935 0.0000000
TukeyHSD(aov_busi)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = busi ~ country, data = dR)
## 
## $country
##                                    diff        lwr         upr     p adj
## Italy-Germany               0.306290728  0.1127183  0.49986320 0.0001561
## Lithuania-Germany           0.819390332  0.6096153  1.02916536 0.0000000
## Netherlands-Germany        -0.292422841 -0.4984686 -0.08637705 0.0010316
## United Kingdom-Germany      0.315583182  0.1081603  0.52300603 0.0003234
## Lithuania-Italy             0.513099603  0.3146283  0.71157088 0.0000000
## Netherlands-Italy          -0.598713569 -0.7932390 -0.40418812 0.0000000
## United Kingdom-Italy        0.009292454 -0.1866910  0.20527592 0.9999370
## Netherlands-Lithuania      -1.111813173 -1.3224679 -0.90115845 0.0000000
## United Kingdom-Lithuania   -0.503807150 -0.7158090 -0.29180530 0.0000000
## United Kingdom-Netherlands  0.608006023  0.3996936  0.81631849 0.0000000
TukeyHSD(aov_ind)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = ind ~ country, data = dR)
## 
## $country
##                                  diff          lwr         upr     p adj
## Italy-Germany               0.6491806  0.458595708  0.83976548 0.0000000
## Lithuania-Germany           0.8349387  0.628401296  1.04147605 0.0000000
## Netherlands-Germany        -0.3506139 -0.553479600 -0.14774822 0.0000243
## United Kingdom-Germany      0.4975438  0.293322321  0.70176531 0.0000000
## Lithuania-Italy             0.1857581 -0.009650003  0.38116616 0.0715798
## Netherlands-Italy          -0.9997945 -1.191317659 -0.80827135 0.0000000
## United Kingdom-Italy       -0.1516368 -0.344595451  0.04132189 0.2015281
## Netherlands-Lithuania      -1.1855526 -1.392956076 -0.97814909 0.0000000
## United Kingdom-Lithuania   -0.3373949 -0.546124681 -0.12866504 0.0001025
## United Kingdom-Netherlands  0.8481577  0.643060333  1.05325511 0.0000000
#Effect sizes (η² for ANOVA)
eta_squared(aov_gov, partial = FALSE)
## # Effect Size for ANOVA (Type I)
## 
## Parameter | Eta2 |       95% CI
## -------------------------------
## country   | 0.03 | [0.03, 1.00]
## 
## - One-sided CIs: upper bound fixed at [1.00].
eta_squared(aov_busi, partial = FALSE)
## # Effect Size for ANOVA (Type I)
## 
## Parameter | Eta2 |       95% CI
## -------------------------------
## country   | 0.04 | [0.03, 1.00]
## 
## - One-sided CIs: upper bound fixed at [1.00].
eta_squared(aov_ind, partial = FALSE)
## # Effect Size for ANOVA (Type I)
## 
## Parameter | Eta2 |       95% CI
## -------------------------------
## country   | 0.06 | [0.05, 1.00]
## 
## - One-sided CIs: upper bound fixed at [1.00].

Correlation table

For CCBs in all countries together

#Variable labels
new_labels <- c("Biospheric values", "Altruistic values", "Hedonic values", "Egoistic values",
                "Problem awareness", "Ascription of responsibility", "Self-efficacy", "Outcome efficacy", "Personal norms",
                "CCBs aimed at governments", "CCBs aimed at businesses", "CCBs aimed at other individuals")

#correlation matrix
cor_matrix <- cor(dR[, c("bio", "alt", "hed", "ego", "pa", "ar", "se", "oe", "pn", "gov", "busi", "ind")])
rownames(cor_matrix) <- new_labels
colnames(cor_matrix) <- new_labels
corrplot(cor_matrix, 
         method = "color",    # Use color to represent correlation values
         type = "lower",       # Display the full matrix
         col = brewer.pal(n = 10, name = "RdYlBu"),
         addCoef.col = "black",  # Add correlation coefficients in black
         tl.col = "black",      # Label color
         tl.srt = 45,           # Angle for the text labels
         diag = TRUE)          # Optionally remove the diagonal (set to TRUE to include)

For CCBs per country

dR_UK <- subset(dR, (country == "United Kingdom"))
dR_GER <- subset(dR, (country == "Germany"))
dR_NL <- subset(dR, (country == "Netherlands"))
dR_IT <- subset(dR, (country == "Italy"))
dR_LI <- subset(dR, (country == "Lithuania"))

# Correlation matrix UK
cor_matrix_UK <- cor(dR_UK[, c("bio", "alt", "hed", "ego", "pa", "ar", "se", "oe", "pn", "gov", "busi", "ind")])
corrplot(cor_matrix_UK, 
         method = "color",    # Use color to represent correlation values
         type = "lower",       # Display the full matrix
         col = brewer.pal(n = 10, name = "RdYlBu"),
         addCoef.col = "black",  # Add correlation coefficients in black
         tl.col = "black",      # Label color
         tl.srt = 45,           # Angle for the text labels
         diag = FALSE)          # Optionally remove the diagonal (set to TRUE to include)

# Correlation matrix Germany
cor_matrix_GER <- cor(dR_GER[, c("bio", "alt", "hed", "ego", "pa", "ar", "se", "oe", "pn", "gov", "busi", "ind")])
corrplot(cor_matrix_GER, 
         method = "color",    # Use color to represent correlation values
         type = "lower",       # Display the full matrix
         col = brewer.pal(n = 10, name = "RdYlBu"),
         addCoef.col = "black",  # Add correlation coefficients in black
         tl.col = "black",      # Label color
         tl.srt = 45,           # Angle for the text labels
         diag = FALSE)          # Optionally remove the diagonal (set to TRUE to include)

# Correlation matrix Netherlands
cor_matrix_NL <- cor(dR_NL[, c("bio", "alt", "hed", "ego", "pa", "ar", "se", "oe", "pn", "gov", "busi", "ind")])
corrplot(cor_matrix_NL, 
         method = "color",    # Use color to represent correlation values
         type = "lower",       # Display the full matrix
         col = brewer.pal(n = 10, name = "RdYlBu"),
         addCoef.col = "black",  # Add correlation coefficients in black
         tl.col = "black",      # Label color
         tl.srt = 45,           # Angle for the text labels
         diag = FALSE)          # Optionally remove the diagonal (set to TRUE to include)

# Correlation matrix Italy
cor_matrix_IT <- cor(dR_IT[, c("bio", "alt", "hed", "ego", "pa", "ar", "se", "oe", "pn", "gov", "busi", "ind")])
corrplot(cor_matrix_IT, 
         method = "color",    # Use color to represent correlation values
         type = "lower",       # Display the full matrix
         col = brewer.pal(n = 10, name = "RdYlBu"),
         addCoef.col = "black",  # Add correlation coefficients in black
         tl.col = "black",      # Label color
         tl.srt = 45,           # Angle for the text labels
         diag = FALSE)          # Optionally remove the diagonal (set to TRUE to include)

# Correlation matrix Lithuania
cor_matrix_LI <- cor(dR_LI[, c("bio", "alt", "hed", "ego", "pa", "ar", "se", "oe", "pn", "gov", "busi", "ind")])
corrplot(cor_matrix_LI, 
         method = "color",    # Use color to represent correlation values
         type = "lower",       # Display the full matrix
         col = brewer.pal(n = 10, name = "RdYlBu"),
         addCoef.col = "black",  # Add correlation coefficients in black
         tl.col = "black",      # Label color
         tl.srt = 45,           # Angle for the text labels
         diag = FALSE)          # Optionally remove the diagonal (set to TRUE to include)

Path analysis

Path analysis for all countries together

library(lavaan)
library(lavaanPlot)
library(rsvg)
## Linking to librsvg 2.61.0
library(DiagrammeRsvg)

## VBN model & ego mediation
model_vbn_ego <- '
  # Regression paths
  pa ~ a1*bio + a2*alt + a3*hed + a4*ego
  ar ~ b*pa
  se ~ c1*ar + c2*ego
  oe ~ d1*ar + d2*ego
  pn ~ e1*se + e2*oe
  gov  ~ f1*pn + g1*ego
  busi ~ f2*pn + g2*ego
  ind  ~ f3*pn + g3*ego

  # Indirect effects (ego → se/oe → pn → outcomes): indirect = (ego → se → pn → ccb) + (ego → oe → pn → ccb)
  ego_gov_indirect := c2*e1*f1 + d2*e2*f1 
  ego_busi_indirect := c2*e1*f2 + d2*e2*f2
  ego_ind_indirect := c2*e1*f3 + d2*e2*f3
  
  # Total effects
  ego_gov_total := ego_gov_indirect + g1
  ego_busi_total := ego_busi_indirect + g2
  ego_ind_total := ego_ind_indirect + g3
'

#fit_vbn_ego_bootstrap <- lavaan::sem(model_vbn_ego, data = dR, se = "bootstrap", bootstrap = 5000)
fit_vbn_ego <- lavaan::sem(model_vbn_ego, data = dR)
summary(fit_vbn_ego, standardized = TRUE, fit.measures = TRUE, rsquare = TRUE, ci = TRUE)
## lavaan 0.6-20 ended normally after 19 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        28
## 
##   Number of observations                          5651
## 
## Model Test User Model:
##                                                       
##   Test statistic                              4042.997
##   Degrees of freedom                                40
##   P-value (Chi-square)                           0.000
## 
## Model Test Baseline Model:
## 
##   Test statistic                             33539.080
##   Degrees of freedom                                60
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.880
##   Tucker-Lewis Index (TLI)                       0.821
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)             -74973.887
##   Loglikelihood unrestricted model (H1)     -72952.389
##                                                       
##   Akaike (AIC)                              150003.775
##   Bayesian (BIC)                            150189.683
##   Sample-size adjusted Bayesian (SABIC)     150100.708
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.133
##   90 Percent confidence interval - lower         0.130
##   90 Percent confidence interval - upper         0.137
##   P-value H_0: RMSEA <= 0.050                    0.000
##   P-value H_0: RMSEA >= 0.080                    1.000
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.094
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##   pa ~                                                                  
##     bio       (a1)    0.249    0.020   12.689    0.000    0.211    0.288
##     alt       (a2)    0.054    0.020    2.717    0.007    0.015    0.094
##     hed       (a3)   -0.109    0.017   -6.389    0.000   -0.142   -0.075
##     ego       (a4)    0.036    0.014    2.565    0.010    0.008    0.063
##   ar ~                                                                  
##     pa         (b)    0.697    0.009   73.442    0.000    0.678    0.716
##   se ~                                                                  
##     ar        (c1)    0.539    0.011   50.489    0.000    0.518    0.560
##     ego       (c2)    0.087    0.011    7.788    0.000    0.065    0.109
##   oe ~                                                                  
##     ar        (d1)    0.602    0.010   59.431    0.000    0.583    0.622
##     ego       (d2)    0.068    0.011    6.417    0.000    0.047    0.089
##   pn ~                                                                  
##     se        (e1)    0.471    0.008   60.159    0.000    0.455    0.486
##     oe        (e2)    0.448    0.008   57.469    0.000    0.433    0.464
##   gov ~                                                                 
##     pn        (f1)    0.628    0.012   52.109    0.000    0.604    0.652
##     ego       (g1)    0.030    0.011    2.572    0.010    0.007    0.052
##   busi ~                                                                
##     pn        (f2)    0.619    0.012   52.360    0.000    0.596    0.643
##     ego       (g2)    0.086    0.011    7.592    0.000    0.063    0.108
##   ind ~                                                                 
##     pn        (f3)    0.669    0.011   59.682    0.000    0.647    0.691
##     ego       (g3)    0.050    0.011    4.694    0.000    0.029    0.071
##    Std.lv  Std.all
##                   
##     0.249    0.255
##     0.054    0.056
##    -0.109   -0.112
##     0.036    0.034
##                   
##     0.697    0.699
##                   
##     0.539    0.555
##     0.087    0.086
##                   
##     0.602    0.618
##     0.068    0.067
##                   
##     0.471    0.503
##     0.448    0.480
##                   
##     0.628    0.570
##     0.030    0.028
##                   
##     0.619    0.569
##     0.086    0.082
##                   
##     0.669    0.621
##     0.050    0.049
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##  .gov ~~                                                                
##    .busi              1.197    0.031   38.138    0.000    1.135    1.258
##    .ind               0.871    0.028   30.989    0.000    0.816    0.927
##  .busi ~~                                                               
##    .ind               1.045    0.029   36.373    0.000    0.989    1.101
##    Std.lv  Std.all
##                   
##     1.197    0.589
##     0.871    0.452
##                   
##     1.045    0.553
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##    .pa                2.902    0.055   53.155    0.000    2.795    3.009
##    .ar                1.575    0.030   53.155    0.000    1.517    1.633
##    .se                1.982    0.037   53.155    0.000    1.908    2.055
##    .oe                1.785    0.034   53.155    0.000    1.719    1.850
##    .pn                0.881    0.017   53.155    0.000    0.849    0.914
##    .gov               2.071    0.039   53.155    0.000    1.995    2.148
##    .busi              1.995    0.038   53.155    0.000    1.921    2.069
##    .ind               1.791    0.034   53.155    0.000    1.725    1.857
##    Std.lv  Std.all
##     2.902    0.938
##     1.575    0.512
##     1.982    0.681
##     1.785    0.610
##     0.881    0.346
##     2.071    0.671
##     1.995    0.660
##     1.791    0.606
## 
## R-Square:
##                    Estimate
##     pa                0.062
##     ar                0.488
##     se                0.319
##     oe                0.390
##     pn                0.654
##     gov               0.329
##     busi              0.340
##     ind               0.394
## 
## Defined Parameters:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##     ego_gov_indrct    0.045    0.005    9.850    0.000    0.036    0.054
##     ego_busi_ndrct    0.044    0.004    9.852    0.000    0.035    0.053
##     ego_ind_indrct    0.048    0.005    9.892    0.000    0.038    0.057
##     ego_gov_total     0.074    0.012    6.066    0.000    0.050    0.098
##     ego_busi_total    0.130    0.012   10.772    0.000    0.106    0.153
##     ego_ind_total     0.098    0.012    8.409    0.000    0.075    0.121
##    Std.lv  Std.all
##     0.045    0.043
##     0.044    0.043
##     0.048    0.047
##     0.074    0.071
##     0.130    0.125
##     0.098    0.095
#plot
lavaanPlot(
  model = fit_vbn_ego,
  graph_options = list(rankdir = "LR"),
  labels = list(
    bio = "Biospheric values", alt = "Altruistic values", hed = "Hedonic values", ego = "Egoistic values",
    pa = "Problem awareness", ar = "Ascription of responsibility", se = "Self-efficacy", oe = "Outcome efficacy",
    pn = "Personal norm", gov = "CCB aimed at governments", busi = "CCB aimed at businesses",
    ind = "CCB aimed at other citizens"
  ),
  node_options = list(shape = "box", fontname = "Helvetica"),
  edge_options = list(color = "grey"),
  coefs = TRUE,
  covs = FALSE,
  stars = c("regress")
)
##Analysis per country
dGER <- subset(dR, country == "Germany")
dIT <- subset(dR, country == "Italy")
dLT <- subset(dR, country == "Lithuania")
dNL <- subset(dR, country == "Netherlands")
dUK <- subset(dR, country == "United Kingdom")

#fit_GER <- lavaan::sem(model_vbn_ego, data = dGER, se = "bootstrap", bootstrap = 5000)
fit_GER <- lavaan::sem(model_vbn_ego, data = dGER)
summary(fit_GER, standardized = TRUE, fit.measures = TRUE, rsquare = TRUE, ci = TRUE)
## lavaan 0.6-20 ended normally after 17 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        28
## 
##   Number of observations                          1100
## 
## Model Test User Model:
##                                                       
##   Test statistic                               698.620
##   Degrees of freedom                                40
##   P-value (Chi-square)                           0.000
## 
## Model Test Baseline Model:
## 
##   Test statistic                              6970.618
##   Degrees of freedom                                60
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.905
##   Tucker-Lewis Index (TLI)                       0.857
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)             -14494.861
##   Loglikelihood unrestricted model (H1)     -14145.551
##                                                       
##   Akaike (AIC)                               29045.723
##   Bayesian (BIC)                             29185.808
##   Sample-size adjusted Bayesian (SABIC)      29096.874
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.122
##   90 Percent confidence interval - lower         0.114
##   90 Percent confidence interval - upper         0.130
##   P-value H_0: RMSEA <= 0.050                    0.000
##   P-value H_0: RMSEA >= 0.080                    1.000
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.089
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##   pa ~                                                                  
##     bio       (a1)    0.368    0.047    7.791    0.000    0.276    0.461
##     alt       (a2)    0.157    0.047    3.341    0.001    0.065    0.248
##     hed       (a3)   -0.125    0.043   -2.926    0.003   -0.209   -0.041
##     ego       (a4)   -0.033    0.033   -1.022    0.307   -0.097    0.031
##   ar ~                                                                  
##     pa         (b)    0.723    0.021   33.930    0.000    0.682    0.765
##   se ~                                                                  
##     ar        (c1)    0.529    0.023   22.625    0.000    0.483    0.575
##     ego       (c2)    0.095    0.027    3.572    0.000    0.043    0.147
##   oe ~                                                                  
##     ar        (d1)    0.628    0.021   30.303    0.000    0.588    0.669
##     ego       (d2)    0.066    0.024    2.799    0.005    0.020    0.112
##   pn ~                                                                  
##     se        (e1)    0.386    0.019   20.765    0.000    0.349    0.422
##     oe        (e2)    0.531    0.019   28.308    0.000    0.494    0.568
##   gov ~                                                                 
##     pn        (f1)    0.683    0.026   26.696    0.000    0.633    0.733
##     ego       (g1)    0.056    0.026    2.143    0.032    0.005    0.107
##   busi ~                                                                
##     pn        (f2)    0.648    0.024   26.472    0.000    0.600    0.696
##     ego       (g2)    0.149    0.025    5.967    0.000    0.100    0.198
##   ind ~                                                                 
##     pn        (f3)    0.723    0.022   32.213    0.000    0.679    0.767
##     ego       (g3)    0.079    0.023    3.452    0.001    0.034    0.124
##    Std.lv  Std.all
##                   
##     0.368    0.267
##     0.157    0.116
##    -0.125   -0.091
##    -0.033   -0.030
##                   
##     0.723    0.715
##                   
##     0.529    0.562
##     0.095    0.089
##                   
##     0.628    0.674
##     0.066    0.062
##                   
##     0.386    0.406
##     0.531    0.553
##                   
##     0.683    0.626
##     0.056    0.050
##                   
##     0.648    0.615
##     0.149    0.139
##                   
##     0.723    0.693
##     0.079    0.074
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##  .gov ~~                                                                
##    .busi              0.975    0.064   15.355    0.000    0.851    1.100
##    .ind               0.666    0.055   12.027    0.000    0.558    0.775
##  .busi ~~                                                               
##    .ind               0.970    0.057   16.890    0.000    0.857    1.082
##    Std.lv  Std.all
##                   
##     0.975    0.522
##     0.666    0.389
##                   
##     0.970    0.592
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##    .pa                2.968    0.127   23.452    0.000    2.720    3.216
##    .ar                1.660    0.071   23.452    0.000    1.522    1.799
##    .se                2.043    0.087   23.452    0.000    1.872    2.214
##    .oe                1.606    0.068   23.452    0.000    1.472    1.740
##    .pn                0.975    0.042   23.452    0.000    0.894    1.057
##    .gov               1.951    0.083   23.452    0.000    1.788    2.115
##    .busi              1.787    0.076   23.452    0.000    1.638    1.937
##    .ind               1.503    0.064   23.452    0.000    1.377    1.628
##    Std.lv  Std.all
##     2.968    0.894
##     1.660    0.489
##     2.043    0.679
##     1.606    0.544
##     0.975    0.358
##     1.951    0.603
##     1.787    0.593
##     1.503    0.508
## 
## R-Square:
##                    Estimate
##     pa                0.106
##     ar                0.511
##     se                0.321
##     oe                0.456
##     pn                0.642
##     gov               0.397
##     busi              0.407
##     ind               0.492
## 
## Defined Parameters:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##     ego_gov_indrct    0.049    0.011    4.345    0.000    0.027    0.071
##     ego_busi_ndrct    0.046    0.011    4.345    0.000    0.026    0.067
##     ego_ind_indrct    0.052    0.012    4.364    0.000    0.029    0.075
##     ego_gov_total     0.105    0.028    3.704    0.000    0.049    0.160
##     ego_busi_total    0.195    0.027    7.220    0.000    0.142    0.248
##     ego_ind_total     0.131    0.026    5.091    0.000    0.080    0.181
##    Std.lv  Std.all
##     0.049    0.044
##     0.046    0.043
##     0.052    0.049
##     0.105    0.094
##     0.195    0.182
##     0.131    0.123
#fit_IT <- lavaan::sem(model_vbn_ego, data = dIT, se = "bootstrap", bootstrap = 5000)
fit_IT <- lavaan::sem(model_vbn_ego, data = dIT)
summary(fit_IT, standardized = TRUE, fit.measures = TRUE, rsquare = TRUE, ci = TRUE)
## lavaan 0.6-20 ended normally after 18 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        28
## 
##   Number of observations                          1409
## 
## Model Test User Model:
##                                                       
##   Test statistic                              1360.034
##   Degrees of freedom                                40
##   P-value (Chi-square)                           0.000
## 
## Model Test Baseline Model:
## 
##   Test statistic                              8550.542
##   Degrees of freedom                                60
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.845
##   Tucker-Lewis Index (TLI)                       0.767
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)             -18278.329
##   Loglikelihood unrestricted model (H1)     -17598.312
##                                                       
##   Akaike (AIC)                               36612.658
##   Bayesian (BIC)                             36759.676
##   Sample-size adjusted Bayesian (SABIC)      36670.730
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.153
##   90 Percent confidence interval - lower         0.146
##   90 Percent confidence interval - upper         0.160
##   P-value H_0: RMSEA <= 0.050                    0.000
##   P-value H_0: RMSEA >= 0.080                    1.000
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.100
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##   pa ~                                                                  
##     bio       (a1)    0.151    0.039    3.847    0.000    0.074    0.228
##     alt       (a2)    0.107    0.040    2.696    0.007    0.029    0.184
##     hed       (a3)   -0.072    0.037   -1.962    0.050   -0.144   -0.000
##     ego       (a4)    0.058    0.030    1.892    0.058   -0.002    0.117
##   ar ~                                                                  
##     pa         (b)    0.657    0.018   35.764    0.000    0.621    0.693
##   se ~                                                                  
##     ar        (c1)    0.596    0.022   27.525    0.000    0.553    0.638
##     ego       (c2)    0.070    0.023    3.040    0.002    0.025    0.116
##   oe ~                                                                  
##     ar        (d1)    0.614    0.021   29.035    0.000    0.572    0.655
##     ego       (d2)    0.064    0.023    2.824    0.005    0.020    0.108
##   pn ~                                                                  
##     se        (e1)    0.536    0.014   39.668    0.000    0.509    0.562
##     oe        (e2)    0.402    0.014   29.637    0.000    0.375    0.429
##   gov ~                                                                 
##     pn        (f1)    0.585    0.025   22.960    0.000    0.535    0.635
##     ego       (g1)   -0.020    0.025   -0.784    0.433   -0.069    0.029
##   busi ~                                                                
##     pn        (f2)    0.564    0.025   22.298    0.000    0.515    0.614
##     ego       (g2)    0.005    0.025    0.186    0.853   -0.044    0.053
##   ind ~                                                                 
##     pn        (f3)    0.634    0.023   27.000    0.000    0.588    0.680
##     ego       (g3)    0.018    0.023    0.793    0.428   -0.027    0.064
##    Std.lv  Std.all
##                   
##     0.151    0.173
##     0.107    0.117
##    -0.072   -0.078
##     0.058    0.051
##                   
##     0.657    0.690
##                   
##     0.596    0.590
##     0.070    0.065
##                   
##     0.614    0.610
##     0.064    0.059
##                   
##     0.536    0.589
##     0.402    0.440
##                   
##     0.585    0.523
##    -0.020   -0.018
##                   
##     0.564    0.512
##     0.005    0.004
##                   
##     0.634    0.585
##     0.018    0.017
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##  .gov ~~                                                                
##    .busi              1.248    0.064   19.552    0.000    1.123    1.374
##    .ind               0.755    0.054   13.873    0.000    0.648    0.862
##  .busi ~~                                                               
##    .ind               0.861    0.055   15.588    0.000    0.753    0.970
##    Std.lv  Std.all
##                   
##     1.248    0.610
##     0.755    0.398
##                   
##     0.861    0.457
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##    .pa                2.806    0.106   26.542    0.000    2.599    3.014
##    .ar                1.409    0.053   26.542    0.000    1.305    1.513
##    .se                1.772    0.067   26.542    0.000    1.641    1.903
##    .oe                1.691    0.064   26.542    0.000    1.566    1.815
##    .pn                0.611    0.023   26.542    0.000    0.566    0.656
##    .gov               2.059    0.078   26.542    0.000    1.907    2.211
##    .busi              2.033    0.077   26.542    0.000    1.883    2.183
##    .ind               1.751    0.066   26.542    0.000    1.622    1.880
##    Std.lv  Std.all
##     2.806    0.948
##     1.409    0.524
##     1.772    0.646
##     1.691    0.622
##     0.611    0.269
##     2.059    0.727
##     2.033    0.738
##     1.751    0.656
## 
## R-Square:
##                    Estimate
##     pa                0.052
##     ar                0.476
##     se                0.354
##     oe                0.378
##     pn                0.731
##     gov               0.273
##     busi              0.262
##     ind               0.344
## 
## Defined Parameters:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##     ego_gov_indrct    0.037    0.009    4.048    0.000    0.019    0.055
##     ego_busi_ndrct    0.036    0.009    4.044    0.000    0.018    0.053
##     ego_ind_indrct    0.040    0.010    4.066    0.000    0.021    0.060
##     ego_gov_total     0.017    0.027    0.658    0.511   -0.035    0.070
##     ego_busi_total    0.040    0.026    1.537    0.124   -0.011    0.092
##     ego_ind_total     0.059    0.025    2.340    0.019    0.010    0.108
##    Std.lv  Std.all
##     0.037    0.034
##     0.036    0.033
##     0.040    0.038
##     0.017    0.016
##     0.040    0.037
##     0.059    0.055
#fit_LT <- lavaan::sem(model_vbn_ego, data = dLT, se = "bootstrap", bootstrap = 5000)
fit_LT <- lavaan::sem(model_vbn_ego, data = dLT)
summary(fit_LT, standardized = TRUE, fit.measures = TRUE, rsquare = TRUE, ci = TRUE)
## lavaan 0.6-20 ended normally after 20 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        28
## 
##   Number of observations                          1008
## 
## Model Test User Model:
##                                                       
##   Test statistic                               797.769
##   Degrees of freedom                                40
##   P-value (Chi-square)                           0.000
## 
## Model Test Baseline Model:
## 
##   Test statistic                              5232.428
##   Degrees of freedom                                60
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.853
##   Tucker-Lewis Index (TLI)                       0.780
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)             -13602.587
##   Loglikelihood unrestricted model (H1)     -13203.703
##                                                       
##   Akaike (AIC)                               27261.175
##   Bayesian (BIC)                             27398.815
##   Sample-size adjusted Bayesian (SABIC)      27309.885
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.137
##   90 Percent confidence interval - lower         0.129
##   90 Percent confidence interval - upper         0.145
##   P-value H_0: RMSEA <= 0.050                    0.000
##   P-value H_0: RMSEA >= 0.080                    1.000
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.105
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##   pa ~                                                                  
##     bio       (a1)    0.177    0.049    3.618    0.000    0.081    0.273
##     alt       (a2)    0.039    0.046    0.842    0.400   -0.052    0.130
##     hed       (a3)   -0.041    0.038   -1.066    0.287   -0.116    0.034
##     ego       (a4)    0.039    0.038    1.033    0.302   -0.035    0.114
##   ar ~                                                                  
##     pa         (b)    0.653    0.023   27.828    0.000    0.607    0.699
##   se ~                                                                  
##     ar        (c1)    0.515    0.025   20.603    0.000    0.466    0.564
##     ego       (c2)    0.047    0.024    1.977    0.048    0.000    0.093
##   oe ~                                                                  
##     ar        (d1)    0.554    0.025   22.458    0.000    0.506    0.602
##     ego       (d2)    0.041    0.023    1.760    0.078   -0.005    0.087
##   pn ~                                                                  
##     se        (e1)    0.527    0.020   26.971    0.000    0.489    0.566
##     oe        (e2)    0.352    0.019   18.242    0.000    0.314    0.389
##   gov ~                                                                 
##     pn        (f1)    0.573    0.029   19.497    0.000    0.515    0.630
##     ego       (g1)    0.025    0.025    1.021    0.307   -0.023    0.073
##   busi ~                                                                
##     pn        (f2)    0.537    0.030   17.826    0.000    0.478    0.596
##     ego       (g2)    0.059    0.025    2.348    0.019    0.010    0.109
##   ind ~                                                                 
##     pn        (f3)    0.519    0.028   18.305    0.000    0.463    0.575
##     ego       (g3)    0.052    0.024    2.181    0.029    0.005    0.098
##    Std.lv  Std.all
##                   
##     0.177    0.199
##     0.039    0.045
##    -0.041   -0.042
##     0.039    0.041
##                   
##     0.653    0.659
##                   
##     0.515    0.544
##     0.047    0.052
##                   
##     0.554    0.577
##     0.041    0.045
##                   
##     0.527    0.565
##     0.352    0.382
##                   
##     0.573    0.524
##     0.025    0.027
##                   
##     0.537    0.489
##     0.059    0.064
##                   
##     0.519    0.499
##     0.052    0.059
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##  .gov ~~                                                                
##    .busi              1.279    0.079   16.274    0.000    1.125    1.432
##    .ind               0.985    0.071   13.937    0.000    0.847    1.124
##  .busi ~~                                                               
##    .ind               1.057    0.073   14.457    0.000    0.914    1.201
##    Std.lv  Std.all
##                   
##     1.279    0.597
##     0.985    0.489
##                   
##     1.057    0.511
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##    .pa                2.985    0.133   22.450    0.000    2.724    3.245
##    .ar                1.759    0.078   22.450    0.000    1.606    1.913
##    .se                1.935    0.086   22.450    0.000    1.767    2.104
##    .oe                1.887    0.084   22.450    0.000    1.722    2.052
##    .pn                0.961    0.043   22.450    0.000    0.877    1.045
##    .gov               2.089    0.093   22.450    0.000    1.907    2.272
##    .busi              2.196    0.098   22.450    0.000    2.004    2.387
##    .ind               1.946    0.087   22.450    0.000    1.776    2.116
##    Std.lv  Std.all
##     2.985    0.942
##     1.759    0.566
##     1.935    0.695
##     1.887    0.659
##     0.961    0.396
##     2.089    0.721
##     2.196    0.750
##     1.946    0.741
## 
## R-Square:
##                    Estimate
##     pa                0.058
##     ar                0.434
##     se                0.305
##     oe                0.341
##     pn                0.604
##     gov               0.279
##     busi              0.250
##     ind               0.259
## 
## Defined Parameters:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##     ego_gov_indrct    0.022    0.009    2.590    0.010    0.005    0.039
##     ego_busi_ndrct    0.021    0.008    2.586    0.010    0.005    0.037
##     ego_ind_indrct    0.020    0.008    2.587    0.010    0.005    0.036
##     ego_gov_total     0.048    0.026    1.831    0.067   -0.003    0.099
##     ego_busi_total    0.080    0.026    3.042    0.002    0.029    0.132
##     ego_ind_total     0.072    0.025    2.896    0.004    0.023    0.121
##    Std.lv  Std.all
##     0.022    0.025
##     0.021    0.023
##     0.020    0.023
##     0.048    0.052
##     0.080    0.087
##     0.072    0.083
#fit_NL <- lavaan::sem(model_vbn_ego, data = dNL, se = "bootstrap", bootstrap = 5000)
fit_NL <- lavaan::sem(model_vbn_ego, data = dNL)
summary(fit_NL, standardized = TRUE, fit.measures = TRUE, rsquare = TRUE, ci = TRUE)
## lavaan 0.6-20 ended normally after 16 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        28
## 
##   Number of observations                          1081
## 
## Model Test User Model:
##                                                       
##   Test statistic                               778.230
##   Degrees of freedom                                40
##   P-value (Chi-square)                           0.000
## 
## Model Test Baseline Model:
## 
##   Test statistic                              7169.878
##   Degrees of freedom                                60
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.896
##   Tucker-Lewis Index (TLI)                       0.844
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)             -13410.730
##   Loglikelihood unrestricted model (H1)     -13021.615
##                                                       
##   Akaike (AIC)                               26877.460
##   Bayesian (BIC)                             27017.058
##   Sample-size adjusted Bayesian (SABIC)      26928.124
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.131
##   90 Percent confidence interval - lower         0.123
##   90 Percent confidence interval - upper         0.139
##   P-value H_0: RMSEA <= 0.050                    0.000
##   P-value H_0: RMSEA >= 0.080                    1.000
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.086
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##   pa ~                                                                  
##     bio       (a1)    0.301    0.044    6.903    0.000    0.215    0.386
##     alt       (a2)   -0.046    0.048   -0.954    0.340   -0.141    0.049
##     hed       (a3)   -0.082    0.041   -2.011    0.044   -0.162   -0.002
##     ego       (a4)    0.034    0.031    1.072    0.284   -0.028    0.095
##   ar ~                                                                  
##     pa         (b)    0.713    0.021   34.672    0.000    0.673    0.753
##   se ~                                                                  
##     ar        (c1)    0.559    0.025   22.802    0.000    0.511    0.608
##     ego       (c2)    0.057    0.025    2.266    0.023    0.008    0.106
##   oe ~                                                                  
##     ar        (d1)    0.638    0.023   27.298    0.000    0.593    0.684
##     ego       (d2)    0.035    0.024    1.473    0.141   -0.012    0.082
##   pn ~                                                                  
##     se        (e1)    0.568    0.018   30.851    0.000    0.532    0.604
##     oe        (e2)    0.320    0.018   17.687    0.000    0.285    0.356
##   gov ~                                                                 
##     pn        (f1)    0.596    0.026   23.208    0.000    0.545    0.646
##     ego       (g1)    0.009    0.024    0.385    0.700   -0.038    0.057
##   busi ~                                                                
##     pn        (f2)    0.619    0.025   25.157    0.000    0.571    0.667
##     ego       (g2)    0.045    0.023    1.932    0.053   -0.001    0.091
##   ind ~                                                                 
##     pn        (f3)    0.657    0.024   27.451    0.000    0.610    0.703
##     ego       (g3)    0.005    0.023    0.235    0.814   -0.039    0.050
##    Std.lv  Std.all
##                   
##     0.301    0.291
##    -0.046   -0.049
##    -0.082   -0.096
##     0.034    0.032
##                   
##     0.713    0.726
##                   
##     0.559    0.569
##     0.057    0.057
##                   
##     0.638    0.638
##     0.035    0.034
##                   
##     0.568    0.605
##     0.320    0.347
##                   
##     0.596    0.577
##     0.009    0.010
##                   
##     0.619    0.607
##     0.045    0.047
##                   
##     0.657    0.641
##     0.005    0.005
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##  .gov ~~                                                                
##    .busi              1.213    0.061   19.763    0.000    1.092    1.333
##    .ind               0.952    0.056   17.060    0.000    0.842    1.061
##  .busi ~~                                                               
##    .ind               0.969    0.054   17.816    0.000    0.862    1.075
##    Std.lv  Std.all
##                   
##     1.213    0.752
##     0.952    0.607
##                   
##     0.969    0.645
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##    .pa                2.735    0.118   23.249    0.000    2.504    2.965
##    .ar                1.314    0.057   23.249    0.000    1.203    1.425
##    .se                1.806    0.078   23.249    0.000    1.654    1.958
##    .oe                1.640    0.071   23.249    0.000    1.502    1.779
##    .pn                0.853    0.037   23.249    0.000    0.781    0.925
##    .gov               1.683    0.072   23.249    0.000    1.541    1.824
##    .busi              1.545    0.066   23.249    0.000    1.415    1.675
##    .ind               1.461    0.063   23.249    0.000    1.338    1.584
##    Std.lv  Std.all
##     2.735    0.951
##     1.314    0.473
##     1.806    0.672
##     1.640    0.591
##     0.853    0.360
##     1.683    0.666
##     1.545    0.627
##     1.461    0.588
## 
## R-Square:
##                    Estimate
##     pa                0.049
##     ar                0.527
##     se                0.328
##     oe                0.409
##     pn                0.640
##     gov               0.334
##     busi              0.373
##     ind               0.412
## 
## Defined Parameters:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##     ego_gov_indrct    0.026    0.010    2.670    0.008    0.007    0.045
##     ego_busi_ndrct    0.027    0.010    2.673    0.008    0.007    0.047
##     ego_ind_indrct    0.029    0.011    2.675    0.007    0.008    0.050
##     ego_gov_total     0.035    0.026    1.354    0.176   -0.016    0.087
##     ego_busi_total    0.072    0.025    2.842    0.004    0.022    0.122
##     ego_ind_total     0.034    0.025    1.360    0.174   -0.015    0.083
##    Std.lv  Std.all
##     0.026    0.027
##     0.027    0.028
##     0.029    0.030
##     0.035    0.036
##     0.072    0.075
##     0.034    0.035
#fit_UK <- lavaan::sem(model_vbn_ego, data = dUK, se = "bootstrap", bootstrap = 5000)
fit_UK <- lavaan::sem(model_vbn_ego, data = dUK)
summary(fit_UK, standardized = TRUE, fit.measures = TRUE, rsquare = TRUE, ci = TRUE)
## lavaan 0.6-20 ended normally after 19 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        28
## 
##   Number of observations                          1053
## 
## Model Test User Model:
##                                                       
##   Test statistic                               830.566
##   Degrees of freedom                                40
##   P-value (Chi-square)                           0.000
## 
## Model Test Baseline Model:
## 
##   Test statistic                              6373.252
##   Degrees of freedom                                60
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.875
##   Tucker-Lewis Index (TLI)                       0.812
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)             -14396.218
##   Loglikelihood unrestricted model (H1)     -13980.935
##                                                       
##   Akaike (AIC)                               28848.436
##   Bayesian (BIC)                             28987.300
##   Sample-size adjusted Bayesian (SABIC)      28898.367
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.137
##   90 Percent confidence interval - lower         0.129
##   90 Percent confidence interval - upper         0.145
##   P-value H_0: RMSEA <= 0.050                    0.000
##   P-value H_0: RMSEA >= 0.080                    1.000
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.110
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##   pa ~                                                                  
##     bio       (a1)    0.250    0.049    5.126    0.000    0.154    0.346
##     alt       (a2)    0.047    0.048    0.991    0.322   -0.046    0.140
##     hed       (a3)   -0.128    0.045   -2.833    0.005   -0.217   -0.040
##     ego       (a4)    0.060    0.032    1.873    0.061   -0.003    0.122
##   ar ~                                                                  
##     pa         (b)    0.744    0.023   32.068    0.000    0.698    0.789
##   se ~                                                                  
##     ar        (c1)    0.499    0.025   19.590    0.000    0.449    0.549
##     ego       (c2)    0.170    0.027    6.289    0.000    0.117    0.223
##   oe ~                                                                  
##     ar        (d1)    0.592    0.024   25.004    0.000    0.545    0.638
##     ego       (d2)    0.159    0.025    6.333    0.000    0.110    0.208
##   pn ~                                                                  
##     se        (e1)    0.352    0.018   19.853    0.000    0.317    0.386
##     oe        (e2)    0.584    0.018   33.077    0.000    0.549    0.618
##   gov ~                                                                 
##     pn        (f1)    0.642    0.028   23.075    0.000    0.587    0.696
##     ego       (g1)    0.017    0.027    0.621    0.535   -0.037    0.071
##   busi ~                                                                
##     pn        (f2)    0.659    0.026   25.044    0.000    0.608    0.711
##     ego       (g2)    0.113    0.026    4.344    0.000    0.062    0.164
##   ind ~                                                                 
##     pn        (f3)    0.692    0.025   27.849    0.000    0.643    0.741
##     ego       (g3)    0.045    0.025    1.842    0.065   -0.003    0.093
##    Std.lv  Std.all
##                   
##     0.250    0.256
##     0.047    0.049
##    -0.128   -0.130
##     0.060    0.060
##                   
##     0.744    0.703
##                   
##     0.499    0.508
##     0.170    0.163
##                   
##     0.592    0.601
##     0.159    0.152
##                   
##     0.352    0.371
##     0.584    0.618
##                   
##     0.642    0.585
##     0.017    0.016
##                   
##     0.659    0.607
##     0.113    0.105
##                   
##     0.692    0.654
##     0.045    0.043
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##  .gov ~~                                                                
##    .busi              0.979    0.074   13.253    0.000    0.834    1.124
##    .ind               0.733    0.068   10.849    0.000    0.600    0.865
##  .busi ~~                                                               
##    .ind               1.085    0.069   15.747    0.000    0.950    1.220
##    Std.lv  Std.all
##                   
##     0.979    0.447
##     0.733    0.355
##                   
##     1.085    0.555
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##    .pa                2.863    0.125   22.946    0.000    2.618    3.107
##    .ar                1.715    0.075   22.946    0.000    1.569    1.862
##    .se                2.310    0.101   22.946    0.000    2.113    2.507
##    .oe                1.995    0.087   22.946    0.000    1.825    2.165
##    .pn                0.955    0.042   22.946    0.000    0.874    1.037
##    .gov               2.311    0.101   22.946    0.000    2.114    2.508
##    .busi              2.072    0.090   22.946    0.000    1.895    2.249
##    .ind               1.845    0.080   22.946    0.000    1.688    2.003
##    Std.lv  Std.all
##     2.863    0.945
##     1.715    0.506
##     2.310    0.707
##     1.995    0.606
##     0.955    0.325
##     2.311    0.654
##     2.072    0.597
##     1.845    0.560
## 
## R-Square:
##                    Estimate
##     pa                0.055
##     ar                0.494
##     se                0.293
##     oe                0.394
##     pn                0.675
##     gov               0.346
##     busi              0.403
##     ind               0.440
## 
## Defined Parameters:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##     ego_gov_indrct    0.098    0.012    8.041    0.000    0.074    0.122
##     ego_busi_ndrct    0.101    0.012    8.116    0.000    0.076    0.125
##     ego_ind_indrct    0.106    0.013    8.198    0.000    0.080    0.131
##     ego_gov_total     0.115    0.029    3.921    0.000    0.058    0.172
##     ego_busi_total    0.214    0.028    7.592    0.000    0.158    0.269
##     ego_ind_total     0.151    0.027    5.567    0.000    0.098    0.204
##    Std.lv  Std.all
##     0.098    0.090
##     0.101    0.094
##     0.106    0.101
##     0.115    0.106
##     0.214    0.199
##     0.151    0.144