Data analysis pilot study: test framing and bioinspired items

Author

Julius Fenn, Stephanie Bugler

1 Notes

2 global variables

Define your global variables (can take some time to run):

3 create raw data files

# sets the directory of location of this script as the current directory
# setwd(dirname(rstudioapi::getSourceEditorContext()$path))

### load packages
require(pacman)
p_load('tidyverse', 'jsonlite',
       'stargazer',  'DT', 'psych',
       'writexl', 'moments', 'lavaan', 'semPlot', 'mirt', 'MplusAutomation',
       'afex', 'emmeans', 'jtools')


setwd("../01_dataPreperation/outputs")
dat <- read_rds(file = "questionnaire.rds")


### load functions
setwd("../../../functions")
for(i in 1:length(dir())){
  # print(dir()[i])
  source(dir()[i], encoding = "utf-8")
}

rm(i)


### summary function
data_summary <- function(data, varname, groupnames){
  require(plyr)
  summary_func <- function(x, col){
    c(mean = mean(x[[col]], na.rm=TRUE),
      se = sd(x[[col]], na.rm=TRUE) / sqrt(length(x[[col]])))
  }
  data_sum<-ddply(data, groupnames, .fun=summary_func,
                  varname)
  data_sum <- plyr::rename(data_sum, c("mean" = varname))
  return(data_sum)
}

4 Evaluate questionnaires

4.1 Descriptives

To describe sample

psych::describe(dat[, c("sociodemo_age")])
   vars   n  mean    sd median trimmed   mad min max range skew kurtosis   se
X1    1 594 45.71 13.44     45   45.47 16.31  18  83    65 0.15    -0.86 0.55
table(dat$sociodemo_gender)

female   male 
   270    324 
table(dat$sociodemo_priorExperience)

             new         not_sure somewhat_similar     very_similar 
             560               10               17                7 

To describe length of study:

psych::describe(dat[, c("total_min_prolific")])
   vars   n mean  sd median trimmed  mad  min   max range skew kurtosis   se
X1    1 594 5.48 3.5    4.6    4.82 1.72 1.82 28.25 26.43 3.22    13.51 0.14
hist(dat$total_min_prolific)

To describe conditions:

table(dat$framingCondition, dat$whichItemsFirst)
             
              bioinspired sustainable
  bioinspired         198           0
  neutral              96         101
  sustainable           0         199

4.2 Overall EFA

Promax rotation, factoring method minimum residual, if scale is a likert scale less or equal than 7 answering options the EFA or parallel analysis is computed over a polychoric correlation to account for non-normality of data (see in detail R-Code “helperFunctions”)

#### Overall EFA
regExOverall <- "^Bioinspiration|^EcologicalDimension"


psych::cor.plot(r = cor(dat[, str_detect(string = colnames(dat),
                                                   pattern = regExOverall)]
                        , use = "pairwise.complete.obs"),
                upper = FALSE, xlas = 2, main = "Overall")

#> parallel analysis
tmp_parallelAnalysis <- dimensionalityTest(label = "Overall",
                             regEx = regExOverall, dataset = dat)

Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Overall 
Number of components:  2 
#> EFA (# of factors=5)
tmp_EFA <- explorativeFactorAnalysis(label = "Overall",
                                 regEx = regExOverall,
                                 dataset = dat, nfac = 2)
tmp_EFA[[1]]
Factor Analysis using method =  minres
Call: fa(r = tmp_dat, nfactors = nfac, rotate = "promax", cor = "cor")
Standardized loadings (pattern matrix) based upon correlation matrix
                        MR1   MR2    h2   u2 com
EcologicalDimension-1 -0.14  0.87 0.740 0.26 1.0
EcologicalDimension-4  0.10  0.57 0.350 0.65 1.1
EcologicalDimension-2 -0.11  0.84 0.682 0.32 1.0
EcologicalDimension-3 -0.07  0.85 0.710 0.29 1.0
Bioinspiration-PN2r   -0.20  0.07 0.039 0.96 1.2
Bioinspiration-PN1     0.72  0.23 0.621 0.38 1.2
Bioinspiration-IPI4    0.84 -0.04 0.700 0.30 1.0
Bioinspiration-VRtN4r  0.67 -0.06 0.442 0.56 1.0
Bioinspiration-VRtN2   0.86 -0.04 0.723 0.28 1.0
Bioinspiration-IPI1    0.85 -0.13 0.708 0.29 1.0
Bioinspiration-VRtN1   0.75  0.09 0.600 0.40 1.0
Bioinspiration-IPI3    0.82 -0.04 0.656 0.34 1.0
Bioinspiration-VRtN3   0.76  0.07 0.598 0.40 1.0
Bioinspiration-PN3     0.48  0.36 0.412 0.59 1.8
Bioinspiration-IPI2r   0.46 -0.15 0.209 0.79 1.2
Bioinspiration-PN4     0.59  0.21 0.432 0.57 1.2

                       MR1  MR2
SS loadings           5.82 2.80
Proportion Var        0.36 0.18
Cumulative Var        0.36 0.54
Proportion Explained  0.68 0.32
Cumulative Proportion 0.68 1.00

 With factor correlations of 
     MR1  MR2
MR1 1.00 0.17
MR2 0.17 1.00

Mean item complexity =  1.1
Test of the hypothesis that 2 factors are sufficient.

df null model =  120  with the objective function =  9.47 with Chi Square =  5560.09
df of  the model are 89  and the objective function was  0.82 

The root mean square of the residuals (RMSR) is  0.04 
The df corrected root mean square of the residuals is  0.05 

The harmonic n.obs is  594 with the empirical chi square  230.42  with prob <  1.7e-14 
The total n.obs was  594  with Likelihood Chi Square =  480.1  with prob <  6e-55 

Tucker Lewis Index of factoring reliability =  0.903
RMSEA index =  0.086  and the 90 % confidence intervals are  0.079 0.094
BIC =  -88.33
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                   MR1  MR2
Correlation of (regression) scores with factors   0.97 0.95
Multiple R square of scores with factors          0.94 0.90
Minimum correlation of possible factor scores     0.88 0.79

two factor structure, within bioinspiried dimensions no strong differences in overall answering patterns; 1 items is dysfunctional (negative correlated)

4.2.1 for “Bioinspiration Items”

#### Overall EFA
regExOverall <- "^Bioinspiration"


psych::cor.plot(r = cor(dat[, str_detect(string = colnames(dat),
                                                   pattern = regExOverall)]
                        , use = "pairwise.complete.obs"),
                upper = FALSE, xlas = 2, main = "Overall")

#> parallel analysis
tmp_parallelAnalysis <- dimensionalityTest(label = "Overall",
                             regEx = regExOverall, dataset = dat)

Parallel analysis suggests that the number of factors =  4  and the number of components =  1 
Overall 
Number of components:  1 
#> EFA (# of factors=5)
tmp_EFA <- explorativeFactorAnalysis(label = "Overall",
                                 regEx = regExOverall,
                                 dataset = dat, nfac = 2)
Warning in fa.stats(r = r, f = f, phi = phi, n.obs = n.obs, np.obs = np.obs, :
The estimated weights for the factor scores are probably incorrect.  Try a
different factor score estimation method.
tmp_EFA[[1]]
Factor Analysis using method =  minres
Call: fa(r = tmp_dat, nfactors = nfac, rotate = "promax", cor = "cor")
Standardized loadings (pattern matrix) based upon correlation matrix
                        MR1   MR2    h2   u2 com
Bioinspiration-PN2r   -0.11 -0.09 0.033 0.97 1.9
Bioinspiration-PN1     0.02  0.83 0.713 0.29 1.0
Bioinspiration-IPI4    0.80  0.09 0.753 0.25 1.0
Bioinspiration-VRtN4r  0.52  0.19 0.442 0.56 1.3
Bioinspiration-VRtN2   0.58  0.32 0.714 0.29 1.6
Bioinspiration-IPI1    0.85  0.03 0.758 0.24 1.0
Bioinspiration-VRtN1   0.26  0.58 0.623 0.38 1.4
Bioinspiration-IPI3    0.77  0.09 0.700 0.30 1.0
Bioinspiration-VRtN3   0.37  0.46 0.597 0.40 1.9
Bioinspiration-PN3    -0.20  0.82 0.476 0.52 1.1
Bioinspiration-IPI2r   0.66 -0.21 0.277 0.72 1.2
Bioinspiration-PN4    -0.02  0.72 0.498 0.50 1.0

                       MR1  MR2
SS loadings           3.59 2.99
Proportion Var        0.30 0.25
Cumulative Var        0.30 0.55
Proportion Explained  0.55 0.45
Cumulative Proportion 0.55 1.00

 With factor correlations of 
     MR1  MR2
MR1 1.00 0.72
MR2 0.72 1.00

Mean item complexity =  1.3
Test of the hypothesis that 2 factors are sufficient.

df null model =  66  with the objective function =  7.1 with Chi Square =  4173.53
df of  the model are 43  and the objective function was  0.34 

The root mean square of the residuals (RMSR) is  0.03 
The df corrected root mean square of the residuals is  0.04 

The harmonic n.obs is  594 with the empirical chi square  95.74  with prob <  6.9e-06 
The total n.obs was  594  with Likelihood Chi Square =  199.61  with prob <  4.9e-22 

Tucker Lewis Index of factoring reliability =  0.941
RMSEA index =  0.078  and the 90 % confidence intervals are  0.068 0.09
BIC =  -75.03
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                   MR1  MR2
Correlation of (regression) scores with factors   0.96 0.94
Multiple R square of scores with factors          0.92 0.89
Minimum correlation of possible factor scores     0.84 0.77

4.3 Descriptives, correlation plot, EFA, CFA for “Ecological Items”

Applied a self-written function for example to check the reliability and amount of explained variance for the first factor:

regEx <- "^EcologicalDimension"
nameVariable <- "Ecology"


sum(str_detect(string = colnames(dat), pattern = regEx))
[1] 4
tmp_dat <- na.omit(dat[,str_detect(string = colnames(dat), pattern = regEx)])


tmp <- CFAstats(dataset = tmp_dat, regularExp = regEx, labelLatent = str_remove(string = nameVariable, pattern = "mean_"), 
                showPlots = TRUE, 
                computeEFA = TRUE, 
                computeCFA = TRUE, 
                computeCFAMplus = FALSE)



descriptive statistics: 
                      Mean   SD Median CoeffofVariation Minimum Maximun
EcologicalDimension-1 5.57 1.19      6             0.21       2       7
EcologicalDimension-4 4.99 1.39      5             0.28       1       7
EcologicalDimension-2 5.52 1.23      6             0.22       1       7
EcologicalDimension-3 5.50 1.19      6             0.22       1       7
                      Lower Quantile Upper Quantile Skewness Kurtosis(-3)
EcologicalDimension-1              2              7    -0.60        -0.25
EcologicalDimension-4              1              7    -0.51        -0.02
EcologicalDimension-2              1              7    -0.64        -0.11
EcologicalDimension-3              1              7    -0.53        -0.20
                      KS-Test
EcologicalDimension-1       0
EcologicalDimension-4       0
EcologicalDimension-2       0
EcologicalDimension-3       0


variables under investigation:  EcologicalDimension1 EcologicalDimension4 EcologicalDimension2 EcologicalDimension3 

Cronbachs Alpha: 0.86 

Parallel analysis suggests that the number of factors =  1  and the number of components =  1 
Ecology 
Number of components:  1 



EFA factor loadings (1 factor solution): 

Loadings:
                     MR1  
EcologicalDimension1 0.903
EcologicalDimension4 0.611
EcologicalDimension2 0.870
EcologicalDimension3 0.893

                 MR1
SS loadings    2.743
Proportion Var 0.686
CFA summary and fit statistics: 
lavaan 0.6-19 ended normally after 19 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                         8

  Number of observations                           594

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                 3.186       1.890
  Degrees of freedom                                 2           2
  P-value (Chi-square)                           0.203       0.389
  Scaling correction factor                                  1.686
    Yuan-Bentler correction (Mplus variant)                       

Model Test Baseline Model:

  Test statistic                              1226.980     561.496
  Degrees of freedom                                 6           6
  P-value                                        0.000       0.000
  Scaling correction factor                                  2.185

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.999       1.000
  Tucker-Lewis Index (TLI)                       0.997       1.001
                                                                  
  Robust Comparative Fit Index (CFI)                         1.000
  Robust Tucker-Lewis Index (TLI)                            1.000

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -3285.951   -3285.951
  Scaling correction factor                                  1.681
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -3284.358   -3284.358
  Scaling correction factor                                  1.682
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                6587.903    6587.903
  Bayesian (BIC)                              6622.998    6622.998
  Sample-size adjusted Bayesian (SABIC)       6597.600    6597.600

Root Mean Square Error of Approximation:

  RMSEA                                          0.032       0.000
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.093       0.065
  P-value H_0: RMSEA <= 0.050                    0.596       0.858
  P-value H_0: RMSEA >= 0.080                    0.114       0.012
                                                                  
  Robust RMSEA                                               0.000
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.104
  P-value H_0: Robust RMSEA <= 0.050                         0.645
  P-value H_0: Robust RMSEA >= 0.080                         0.144

Standardized Root Mean Square Residual:

  SRMR                                           0.009       0.009

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  Ecology =~                                                            
    EcologclDmnsn1    1.000                               1.048    0.880
    EcologclDmnsn4    0.727    0.054   13.516    0.000    0.762    0.548
    EcologclDmnsn2    0.969    0.044   21.792    0.000    1.016    0.828
    EcologclDmnsn3    0.979    0.040   24.603    0.000    1.027    0.861

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .EcologclDmnsn1    0.321    0.046    6.975    0.000    0.321    0.226
   .EcologclDmnsn4    1.355    0.133   10.190    0.000    1.355    0.700
   .EcologclDmnsn2    0.474    0.049    9.671    0.000    0.474    0.315
   .EcologclDmnsn3    0.367    0.058    6.290    0.000    0.367    0.258
    Ecology           1.099    0.087   12.637    0.000    1.000    1.000



CFA first 6 Modification Indices: 
                    lhs op                  rhs    mi    epc sepc.lv sepc.all
15 EcologicalDimension2 ~~ EcologicalDimension3 2.938 -0.086  -0.086   -0.205
10 EcologicalDimension1 ~~ EcologicalDimension4 2.938 -0.066  -0.066   -0.100
12 EcologicalDimension1 ~~ EcologicalDimension3 1.455  0.068   0.068    0.197
13 EcologicalDimension4 ~~ EcologicalDimension2 1.455  0.049   0.049    0.061
11 EcologicalDimension1 ~~ EcologicalDimension2 0.387  0.033   0.033    0.083
14 EcologicalDimension4 ~~ EcologicalDimension3 0.387  0.024   0.024    0.034
   sepc.nox
15   -0.205
10   -0.100
12    0.197
13    0.061
11    0.083
14    0.034

4.4 Descriptives, correlation plot, EFA, CFA for “Bioinspiration Items”

4.4.1 overall

regEx <- "^Bioinspiration"
nameVariable <- "Bioinspiration"


sum(str_detect(string = colnames(dat), pattern = regEx))
[1] 12
tmp_dat <- na.omit(dat[,str_detect(string = colnames(dat), pattern = regEx)])


tmp <- CFAstats(dataset = tmp_dat, regularExp = regEx, labelLatent = str_remove(string = nameVariable, pattern = "mean_"), 
                showPlots = TRUE, 
                computeEFA = TRUE, 
                computeCFA = TRUE, 
                computeCFAMplus = FALSE)



descriptive statistics: 
                      Mean   SD Median CoeffofVariation Minimum Maximun
Bioinspiration-PN2r   3.09 1.08      3             0.35       1       5
Bioinspiration-PN1    3.54 0.97      4             0.28       1       5
Bioinspiration-IPI4   3.78 0.97      4             0.26       1       5
Bioinspiration-VRtN4r 3.26 1.10      3             0.34       1       5
Bioinspiration-VRtN2  3.47 1.10      4             0.32       1       5
Bioinspiration-IPI1   3.78 1.00      4             0.26       1       5
Bioinspiration-VRtN1  3.44 1.04      4             0.30       1       5
Bioinspiration-IPI3   3.93 0.94      4             0.24       1       5
Bioinspiration-VRtN3  3.45 0.98      4             0.28       1       5
Bioinspiration-PN3    3.55 0.92      4             0.26       1       5
Bioinspiration-IPI2r  3.40 1.06      4             0.31       1       5
Bioinspiration-PN4    3.15 1.07      3             0.34       1       5
                      Lower Quantile Upper Quantile Skewness Kurtosis(-3)
Bioinspiration-PN2r                1              5     0.02        -0.88
Bioinspiration-PN1                 1              5    -0.61        -0.08
Bioinspiration-IPI4                1              5    -0.73         0.11
Bioinspiration-VRtN4r              1              5    -0.27        -0.85
Bioinspiration-VRtN2               1              5    -0.64        -0.40
Bioinspiration-IPI1                1              5    -0.73         0.03
Bioinspiration-VRtN1               1              5    -0.56        -0.36
Bioinspiration-IPI3                1              5    -0.83         0.32
Bioinspiration-VRtN3               1              5    -0.49        -0.34
Bioinspiration-PN3                 1              5    -0.38        -0.32
Bioinspiration-IPI2r               1              5    -0.31        -0.75
Bioinspiration-PN4                 1              5    -0.24        -0.87
                      KS-Test
Bioinspiration-PN2r         0
Bioinspiration-PN1          0
Bioinspiration-IPI4         0
Bioinspiration-VRtN4r       0
Bioinspiration-VRtN2        0
Bioinspiration-IPI1         0
Bioinspiration-VRtN1        0
Bioinspiration-IPI3         0
Bioinspiration-VRtN3        0
Bioinspiration-PN3          0
Bioinspiration-IPI2r        0
Bioinspiration-PN4          0


variables under investigation:  BioinspirationPN2r BioinspirationPN1 BioinspirationIPI4 BioinspirationVRtN4r BioinspirationVRtN2 BioinspirationIPI1 BioinspirationVRtN1 BioinspirationIPI3 BioinspirationVRtN3 BioinspirationPN3 BioinspirationIPI2r BioinspirationPN4 
Some items ( Bioinspiration-PN2r ) were negatively correlated with the first principal component and 
probably should be reversed.  
To do this, run the function again with the 'check.keys=TRUE' optionCronbachs Alpha: 0.89 

Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Bioinspiration 
Number of components:  2 


EFA factor loadings (1 factor solution): 

Loadings:
                     MR1   
BioinspirationPN2r   -0.173
BioinspirationPN1     0.794
BioinspirationIPI4    0.866
BioinspirationVRtN4r  0.690
BioinspirationVRtN2   0.883
BioinspirationIPI1    0.845
BioinspirationVRtN1   0.814
BioinspirationIPI3    0.842
BioinspirationVRtN3   0.816
BioinspirationPN3     0.581
BioinspirationIPI2r   0.461
BioinspirationPN4     0.669

                 MR1
SS loadings    6.412
Proportion Var 0.534
CFA summary and fit statistics: 
lavaan 0.6-19 ended normally after 51 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        24

  Number of observations                           594

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                               524.698     412.126
  Degrees of freedom                                54          54
  P-value (Chi-square)                           0.000       0.000
  Scaling correction factor                                  1.273
    Yuan-Bentler correction (Mplus variant)                       

Model Test Baseline Model:

  Test statistic                              4214.921    3159.829
  Degrees of freedom                                66          66
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.334

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.887       0.884
  Tucker-Lewis Index (TLI)                       0.861       0.859
                                                                  
  Robust Comparative Fit Index (CFI)                         0.890
  Robust Tucker-Lewis Index (TLI)                            0.865

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -8394.197   -8394.197
  Scaling correction factor                                  1.212
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -8131.848   -8131.848
  Scaling correction factor                                  1.254
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                               16836.394   16836.394
  Bayesian (BIC)                             16941.679   16941.679
  Sample-size adjusted Bayesian (SABIC)      16865.486   16865.486

Root Mean Square Error of Approximation:

  RMSEA                                          0.121       0.106
  90 Percent confidence interval - lower         0.112       0.097
  90 Percent confidence interval - upper         0.131       0.114
  P-value H_0: RMSEA <= 0.050                    0.000       0.000
  P-value H_0: RMSEA >= 0.080                    1.000       1.000
                                                                  
  Robust RMSEA                                               0.119
  90 Percent confidence interval - lower                     0.109
  90 Percent confidence interval - upper                     0.130
  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.060       0.060

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian

Latent Variables:
                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  Bioinspiration =~                                                      
    BioinsprtnPN2r     1.000                               0.204    0.189
    BioinspirtnPN1    -3.530    0.891   -3.960    0.000   -0.719   -0.739
    BioinsprtnIPI4    -4.054    1.031   -3.931    0.000   -0.826   -0.849
    BinsprtnVRtN4r    -3.554    0.948   -3.748    0.000   -0.724   -0.657
    BionsprtnVRtN2    -4.546    1.150   -3.954    0.000   -0.926   -0.845
    BioinsprtnIPI1    -4.110    1.031   -3.984    0.000   -0.837   -0.841
    BionsprtnVRtN1    -3.870    0.980   -3.951    0.000   -0.789   -0.761
    BioinsprtnIPI3    -3.799    0.967   -3.928    0.000   -0.774   -0.820
    BionsprtnVRtN3    -3.674    0.936   -3.927    0.000   -0.749   -0.762
    BioinspirtnPN3    -2.380    0.645   -3.693    0.000   -0.485   -0.526
    BionsprtnIPI2r    -2.300    0.641   -3.587    0.000   -0.469   -0.440
    BioinspirtnPN4    -3.235    0.820   -3.946    0.000   -0.659   -0.618

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .BioinsprtnPN2r    1.119    0.053   20.947    0.000    1.119    0.964
   .BioinspirtnPN1    0.431    0.038   11.475    0.000    0.431    0.455
   .BioinsprtnIPI4    0.264    0.026   10.047    0.000    0.264    0.279
   .BinsprtnVRtN4r    0.691    0.063   10.986    0.000    0.691    0.569
   .BionsprtnVRtN2    0.344    0.032   10.661    0.000    0.344    0.286
   .BioinsprtnIPI1    0.290    0.028   10.275    0.000    0.290    0.293
   .BionsprtnVRtN1    0.453    0.039   11.714    0.000    0.453    0.421
   .BioinsprtnIPI3    0.291    0.026   11.342    0.000    0.291    0.327
   .BionsprtnVRtN3    0.404    0.032   12.571    0.000    0.404    0.419
   .BioinspirtnPN3    0.615    0.038   16.398    0.000    0.615    0.723
   .BionsprtnIPI2r    0.912    0.057   16.096    0.000    0.912    0.806
   .BioinspirtnPN4    0.702    0.044   16.009    0.000    0.702    0.618
    Bioinspiration    0.042    0.021    1.934    0.053    1.000    1.000



CFA first 6 Modification Indices: 
                  lhs op                rhs     mi    epc sepc.lv sepc.all
49 BioinspirationIPI4 ~~ BioinspirationIPI1 83.606  0.132   0.132    0.476
44  BioinspirationPN1 ~~  BioinspirationPN3 71.077  0.188   0.188    0.366
46  BioinspirationPN1 ~~  BioinspirationPN4 67.447  0.198   0.198    0.360
72 BioinspirationIPI1 ~~ BioinspirationIPI3 52.170  0.106   0.106    0.363
51 BioinspirationIPI4 ~~ BioinspirationIPI3 43.220  0.093   0.093    0.334
74 BioinspirationIPI1 ~~  BioinspirationPN3 35.797 -0.115  -0.115   -0.273
   sepc.nox
49    0.476
44    0.366
46    0.360
72    0.363
51    0.334
74   -0.273

4.4.2 overall

regEx <- "^Bioinspiration"
nameVariable <- "Bioinspiration"


sum(str_detect(string = colnames(dat), pattern = regEx))
[1] 12
tmp_dat <- na.omit(dat[,str_detect(string = colnames(dat), pattern = regEx)])


tmp <- CFAstats(dataset = tmp_dat, regularExp = regEx, labelLatent = str_remove(string = nameVariable, pattern = "mean_"), 
                showPlots = TRUE, 
                computeEFA = TRUE, 
                computeCFA = TRUE, 
                computeCFAMplus = FALSE)



descriptive statistics: 
                      Mean   SD Median CoeffofVariation Minimum Maximun
Bioinspiration-PN2r   3.09 1.08      3             0.35       1       5
Bioinspiration-PN1    3.54 0.97      4             0.28       1       5
Bioinspiration-IPI4   3.78 0.97      4             0.26       1       5
Bioinspiration-VRtN4r 3.26 1.10      3             0.34       1       5
Bioinspiration-VRtN2  3.47 1.10      4             0.32       1       5
Bioinspiration-IPI1   3.78 1.00      4             0.26       1       5
Bioinspiration-VRtN1  3.44 1.04      4             0.30       1       5
Bioinspiration-IPI3   3.93 0.94      4             0.24       1       5
Bioinspiration-VRtN3  3.45 0.98      4             0.28       1       5
Bioinspiration-PN3    3.55 0.92      4             0.26       1       5
Bioinspiration-IPI2r  3.40 1.06      4             0.31       1       5
Bioinspiration-PN4    3.15 1.07      3             0.34       1       5
                      Lower Quantile Upper Quantile Skewness Kurtosis(-3)
Bioinspiration-PN2r                1              5     0.02        -0.88
Bioinspiration-PN1                 1              5    -0.61        -0.08
Bioinspiration-IPI4                1              5    -0.73         0.11
Bioinspiration-VRtN4r              1              5    -0.27        -0.85
Bioinspiration-VRtN2               1              5    -0.64        -0.40
Bioinspiration-IPI1                1              5    -0.73         0.03
Bioinspiration-VRtN1               1              5    -0.56        -0.36
Bioinspiration-IPI3                1              5    -0.83         0.32
Bioinspiration-VRtN3               1              5    -0.49        -0.34
Bioinspiration-PN3                 1              5    -0.38        -0.32
Bioinspiration-IPI2r               1              5    -0.31        -0.75
Bioinspiration-PN4                 1              5    -0.24        -0.87
                      KS-Test
Bioinspiration-PN2r         0
Bioinspiration-PN1          0
Bioinspiration-IPI4         0
Bioinspiration-VRtN4r       0
Bioinspiration-VRtN2        0
Bioinspiration-IPI1         0
Bioinspiration-VRtN1        0
Bioinspiration-IPI3         0
Bioinspiration-VRtN3        0
Bioinspiration-PN3          0
Bioinspiration-IPI2r        0
Bioinspiration-PN4          0


variables under investigation:  BioinspirationPN2r BioinspirationPN1 BioinspirationIPI4 BioinspirationVRtN4r BioinspirationVRtN2 BioinspirationIPI1 BioinspirationVRtN1 BioinspirationIPI3 BioinspirationVRtN3 BioinspirationPN3 BioinspirationIPI2r BioinspirationPN4 
Some items ( Bioinspiration-PN2r ) were negatively correlated with the first principal component and 
probably should be reversed.  
To do this, run the function again with the 'check.keys=TRUE' optionCronbachs Alpha: 0.89 

Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Bioinspiration 
Number of components:  2 


EFA factor loadings (1 factor solution): 

Loadings:
                     MR1   
BioinspirationPN2r   -0.173
BioinspirationPN1     0.794
BioinspirationIPI4    0.866
BioinspirationVRtN4r  0.690
BioinspirationVRtN2   0.883
BioinspirationIPI1    0.845
BioinspirationVRtN1   0.814
BioinspirationIPI3    0.842
BioinspirationVRtN3   0.816
BioinspirationPN3     0.581
BioinspirationIPI2r   0.461
BioinspirationPN4     0.669

                 MR1
SS loadings    6.412
Proportion Var 0.534
CFA summary and fit statistics: 
lavaan 0.6-19 ended normally after 51 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        24

  Number of observations                           594

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                               524.698     412.126
  Degrees of freedom                                54          54
  P-value (Chi-square)                           0.000       0.000
  Scaling correction factor                                  1.273
    Yuan-Bentler correction (Mplus variant)                       

Model Test Baseline Model:

  Test statistic                              4214.921    3159.829
  Degrees of freedom                                66          66
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.334

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.887       0.884
  Tucker-Lewis Index (TLI)                       0.861       0.859
                                                                  
  Robust Comparative Fit Index (CFI)                         0.890
  Robust Tucker-Lewis Index (TLI)                            0.865

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -8394.197   -8394.197
  Scaling correction factor                                  1.212
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -8131.848   -8131.848
  Scaling correction factor                                  1.254
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                               16836.394   16836.394
  Bayesian (BIC)                             16941.679   16941.679
  Sample-size adjusted Bayesian (SABIC)      16865.486   16865.486

Root Mean Square Error of Approximation:

  RMSEA                                          0.121       0.106
  90 Percent confidence interval - lower         0.112       0.097
  90 Percent confidence interval - upper         0.131       0.114
  P-value H_0: RMSEA <= 0.050                    0.000       0.000
  P-value H_0: RMSEA >= 0.080                    1.000       1.000
                                                                  
  Robust RMSEA                                               0.119
  90 Percent confidence interval - lower                     0.109
  90 Percent confidence interval - upper                     0.130
  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.060       0.060

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian

Latent Variables:
                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  Bioinspiration =~                                                      
    BioinsprtnPN2r     1.000                               0.204    0.189
    BioinspirtnPN1    -3.530    0.891   -3.960    0.000   -0.719   -0.739
    BioinsprtnIPI4    -4.054    1.031   -3.931    0.000   -0.826   -0.849
    BinsprtnVRtN4r    -3.554    0.948   -3.748    0.000   -0.724   -0.657
    BionsprtnVRtN2    -4.546    1.150   -3.954    0.000   -0.926   -0.845
    BioinsprtnIPI1    -4.110    1.031   -3.984    0.000   -0.837   -0.841
    BionsprtnVRtN1    -3.870    0.980   -3.951    0.000   -0.789   -0.761
    BioinsprtnIPI3    -3.799    0.967   -3.928    0.000   -0.774   -0.820
    BionsprtnVRtN3    -3.674    0.936   -3.927    0.000   -0.749   -0.762
    BioinspirtnPN3    -2.380    0.645   -3.693    0.000   -0.485   -0.526
    BionsprtnIPI2r    -2.300    0.641   -3.587    0.000   -0.469   -0.440
    BioinspirtnPN4    -3.235    0.820   -3.946    0.000   -0.659   -0.618

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .BioinsprtnPN2r    1.119    0.053   20.947    0.000    1.119    0.964
   .BioinspirtnPN1    0.431    0.038   11.475    0.000    0.431    0.455
   .BioinsprtnIPI4    0.264    0.026   10.047    0.000    0.264    0.279
   .BinsprtnVRtN4r    0.691    0.063   10.986    0.000    0.691    0.569
   .BionsprtnVRtN2    0.344    0.032   10.661    0.000    0.344    0.286
   .BioinsprtnIPI1    0.290    0.028   10.275    0.000    0.290    0.293
   .BionsprtnVRtN1    0.453    0.039   11.714    0.000    0.453    0.421
   .BioinsprtnIPI3    0.291    0.026   11.342    0.000    0.291    0.327
   .BionsprtnVRtN3    0.404    0.032   12.571    0.000    0.404    0.419
   .BioinspirtnPN3    0.615    0.038   16.398    0.000    0.615    0.723
   .BionsprtnIPI2r    0.912    0.057   16.096    0.000    0.912    0.806
   .BioinspirtnPN4    0.702    0.044   16.009    0.000    0.702    0.618
    Bioinspiration    0.042    0.021    1.934    0.053    1.000    1.000



CFA first 6 Modification Indices: 
                  lhs op                rhs     mi    epc sepc.lv sepc.all
49 BioinspirationIPI4 ~~ BioinspirationIPI1 83.606  0.132   0.132    0.476
44  BioinspirationPN1 ~~  BioinspirationPN3 71.077  0.188   0.188    0.366
46  BioinspirationPN1 ~~  BioinspirationPN4 67.447  0.198   0.198    0.360
72 BioinspirationIPI1 ~~ BioinspirationIPI3 52.170  0.106   0.106    0.363
51 BioinspirationIPI4 ~~ BioinspirationIPI3 43.220  0.093   0.093    0.334
74 BioinspirationIPI1 ~~  BioinspirationPN3 35.797 -0.115  -0.115   -0.273
   sepc.nox
49    0.476
44    0.366
46    0.360
72    0.363
51    0.334
74   -0.273

4.4.3 Visual Resemblance to Nature

regEx <- "^Bioinspiration-VRtN"
nameVariable <- "VRtN"


sum(str_detect(string = colnames(dat), pattern = regEx))
[1] 4
tmp_dat <- na.omit(dat[,str_detect(string = colnames(dat), pattern = regEx)])


tmp <- CFAstats(dataset = tmp_dat, regularExp = regEx, labelLatent = str_remove(string = nameVariable, pattern = "mean_"), 
                showPlots = TRUE, 
                computeEFA = TRUE, 
                computeCFA = TRUE, 
                computeCFAMplus = FALSE)



descriptive statistics: 
                      Mean   SD Median CoeffofVariation Minimum Maximun
Bioinspiration-VRtN4r 3.26 1.10      3             0.34       1       5
Bioinspiration-VRtN2  3.47 1.10      4             0.32       1       5
Bioinspiration-VRtN1  3.44 1.04      4             0.30       1       5
Bioinspiration-VRtN3  3.45 0.98      4             0.28       1       5
                      Lower Quantile Upper Quantile Skewness Kurtosis(-3)
Bioinspiration-VRtN4r              1              5    -0.27        -0.85
Bioinspiration-VRtN2               1              5    -0.64        -0.40
Bioinspiration-VRtN1               1              5    -0.56        -0.36
Bioinspiration-VRtN3               1              5    -0.49        -0.34
                      KS-Test
Bioinspiration-VRtN4r       0
Bioinspiration-VRtN2        0
Bioinspiration-VRtN1        0
Bioinspiration-VRtN3        0


variables under investigation:  BioinspirationVRtN4r BioinspirationVRtN2 BioinspirationVRtN1 BioinspirationVRtN3 

Cronbachs Alpha: 0.86 

Parallel analysis suggests that the number of factors =  1  and the number of components =  1 
VRtN 
Number of components:  1 



EFA factor loadings (1 factor solution): 

Loadings:
                     MR1  
BioinspirationVRtN4r 0.692
BioinspirationVRtN2  0.907
BioinspirationVRtN1  0.844
BioinspirationVRtN3  0.832

                 MR1
SS loadings    2.706
Proportion Var 0.677
CFA summary and fit statistics: 
lavaan 0.6-19 ended normally after 20 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                         8

  Number of observations                           594

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                 1.238       0.928
  Degrees of freedom                                 2           2
  P-value (Chi-square)                           0.538       0.629
  Scaling correction factor                                  1.334
    Yuan-Bentler correction (Mplus variant)                       

Model Test Baseline Model:

  Test statistic                              1122.703     737.036
  Degrees of freedom                                 6           6
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.523

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    1.000       1.000
  Tucker-Lewis Index (TLI)                       1.002       1.004
                                                                  
  Robust Comparative Fit Index (CFI)                         1.000
  Robust Tucker-Lewis Index (TLI)                            1.004

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -2934.000   -2934.000
  Scaling correction factor                                  1.187
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -2933.381   -2933.381
  Scaling correction factor                                  1.217
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                5883.999    5883.999
  Bayesian (BIC)                              5919.094    5919.094
  Sample-size adjusted Bayesian (SABIC)       5893.697    5893.697

Root Mean Square Error of Approximation:

  RMSEA                                          0.000       0.000
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.071       0.055
  P-value H_0: RMSEA <= 0.050                    0.846       0.932
  P-value H_0: RMSEA >= 0.080                    0.026       0.006
                                                                  
  Robust RMSEA                                               0.000
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.075
  P-value H_0: Robust RMSEA <= 0.050                         0.846
  P-value H_0: Robust RMSEA >= 0.080                         0.038

Standardized Root Mean Square Residual:

  SRMR                                           0.006       0.006

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  VRtN =~                                                               
    BinsprtnVRtN4r    1.000                               0.733    0.665
    BionsprtnVRtN2    1.305    0.082   16.009    0.000    0.957    0.873
    BionsprtnVRtN1    1.145    0.074   15.440    0.000    0.840    0.810
    BionsprtnVRtN3    1.043    0.065   16.066    0.000    0.765    0.779

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .BinsprtnVRtN4r    0.678    0.063   10.744    0.000    0.678    0.557
   .BionsprtnVRtN2    0.286    0.033    8.572    0.000    0.286    0.238
   .BionsprtnVRtN1    0.370    0.035   10.581    0.000    0.370    0.344
   .BionsprtnVRtN3    0.379    0.034   11.220    0.000    0.379    0.393
    VRtN              0.538    0.063    8.526    0.000    1.000    1.000



CFA first 6 Modification Indices: 
                    lhs op                 rhs    mi    epc sepc.lv sepc.all
12 BioinspirationVRtN4r ~~ BioinspirationVRtN3 0.913  0.026   0.026    0.051
13  BioinspirationVRtN2 ~~ BioinspirationVRtN1 0.913  0.037   0.037    0.114
14  BioinspirationVRtN2 ~~ BioinspirationVRtN3 0.871 -0.032  -0.032   -0.096
11 BioinspirationVRtN4r ~~ BioinspirationVRtN1 0.871 -0.027  -0.027   -0.053
15  BioinspirationVRtN1 ~~ BioinspirationVRtN3 0.000  0.000   0.000    0.001
10 BioinspirationVRtN4r ~~ BioinspirationVRtN2 0.000  0.000   0.000    0.001
   sepc.nox
12    0.051
13    0.114
14   -0.096
11   -0.053
15    0.001
10    0.001

4.4.4 Intentionality & Perceived Inspiration

regEx <- "^Bioinspiration-IPI"
nameVariable <- "IPI"


sum(str_detect(string = colnames(dat), pattern = regEx))
[1] 4
tmp_dat <- na.omit(dat[,str_detect(string = colnames(dat), pattern = regEx)])


tmp <- CFAstats(dataset = tmp_dat, regularExp = regEx, labelLatent = str_remove(string = nameVariable, pattern = "mean_"), 
                showPlots = TRUE, 
                computeEFA = TRUE, 
                computeCFA = TRUE, 
                computeCFAMplus = FALSE)



descriptive statistics: 
                     Mean   SD Median CoeffofVariation Minimum Maximun
Bioinspiration-IPI4  3.78 0.97      4             0.26       1       5
Bioinspiration-IPI1  3.78 1.00      4             0.26       1       5
Bioinspiration-IPI3  3.93 0.94      4             0.24       1       5
Bioinspiration-IPI2r 3.40 1.06      4             0.31       1       5
                     Lower Quantile Upper Quantile Skewness Kurtosis(-3)
Bioinspiration-IPI4               1              5    -0.73         0.11
Bioinspiration-IPI1               1              5    -0.73         0.03
Bioinspiration-IPI3               1              5    -0.83         0.32
Bioinspiration-IPI2r              1              5    -0.31        -0.75
                     KS-Test
Bioinspiration-IPI4        0
Bioinspiration-IPI1        0
Bioinspiration-IPI3        0
Bioinspiration-IPI2r       0


variables under investigation:  BioinspirationIPI4 BioinspirationIPI1 BioinspirationIPI3 BioinspirationIPI2r 

Cronbachs Alpha: 0.85 

Parallel analysis suggests that the number of factors =  1  and the number of components =  1 
IPI 
Number of components:  1 



EFA factor loadings (1 factor solution): 

Loadings:
                    MR1  
BioinspirationIPI4  0.925
BioinspirationIPI1  0.922
BioinspirationIPI3  0.900
BioinspirationIPI2r 0.509

                 MR1
SS loadings    2.776
Proportion Var 0.694
CFA summary and fit statistics: 
lavaan 0.6-19 ended normally after 20 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                         8

  Number of observations                           594

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                 1.508       1.265
  Degrees of freedom                                 2           2
  P-value (Chi-square)                           0.470       0.531
  Scaling correction factor                                  1.193
    Yuan-Bentler correction (Mplus variant)                       

Model Test Baseline Model:

  Test statistic                              1351.155     792.040
  Degrees of freedom                                 6           6
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.706

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    1.000       1.000
  Tucker-Lewis Index (TLI)                       1.001       1.003
                                                                  
  Robust Comparative Fit Index (CFI)                         1.000
  Robust Tucker-Lewis Index (TLI)                            1.002

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -2680.102   -2680.102
  Scaling correction factor                                  1.463
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -2679.348   -2679.348
  Scaling correction factor                                  1.409
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                5376.204    5376.204
  Bayesian (BIC)                              5411.299    5411.299
  Sample-size adjusted Bayesian (SABIC)       5385.902    5385.902

Root Mean Square Error of Approximation:

  RMSEA                                          0.000       0.000
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.075       0.065
  P-value H_0: RMSEA <= 0.050                    0.810       0.875
  P-value H_0: RMSEA >= 0.080                    0.035       0.016
                                                                  
  Robust RMSEA                                               0.000
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.078
  P-value H_0: Robust RMSEA <= 0.050                         0.811
  P-value H_0: Robust RMSEA >= 0.080                         0.043

Standardized Root Mean Square Residual:

  SRMR                                           0.007       0.007

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  IPI =~                                                                
    BioinsprtnIPI4    1.000                               0.869    0.893
    BioinsprtnIPI1    1.022    0.034   29.782    0.000    0.889    0.892
    BioinsprtnIPI3    0.930    0.039   23.839    0.000    0.808    0.856
    BionsprtnIPI2r    0.559    0.050   11.162    0.000    0.486    0.457

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .BioinsprtnIPI4    0.191    0.026    7.403    0.000    0.191    0.202
   .BioinsprtnIPI1    0.202    0.028    7.149    0.000    0.202    0.204
   .BioinsprtnIPI3    0.238    0.028    8.512    0.000    0.238    0.267
   .BionsprtnIPI2r    0.896    0.058   15.340    0.000    0.896    0.791
    IPI               0.755    0.060   12.500    0.000    1.000    1.000



CFA first 6 Modification Indices: 
                  lhs op                 rhs    mi    epc sepc.lv sepc.all
11 BioinspirationIPI4 ~~  BioinspirationIPI3 1.311 -0.043  -0.043   -0.200
14 BioinspirationIPI1 ~~ BioinspirationIPI2r 1.311 -0.026  -0.026   -0.062
10 BioinspirationIPI4 ~~  BioinspirationIPI1 0.821  0.040   0.040    0.205
15 BioinspirationIPI3 ~~ BioinspirationIPI2r 0.821  0.021   0.021    0.044
12 BioinspirationIPI4 ~~ BioinspirationIPI2r 0.097  0.007   0.007    0.017
13 BioinspirationIPI1 ~~  BioinspirationIPI3 0.097  0.012   0.012    0.054
   sepc.nox
11   -0.200
14   -0.062
10    0.205
15    0.044
12    0.017
13    0.054

4.4.5 Perceived Naturalness

regEx <- "^Bioinspiration-PN"
nameVariable <- "PN"


sum(str_detect(string = colnames(dat), pattern = regEx))
[1] 4
tmp_dat <- na.omit(dat[,str_detect(string = colnames(dat), pattern = regEx)])


tmp <- CFAstats(dataset = tmp_dat, regularExp = regEx, labelLatent = str_remove(string = nameVariable, pattern = "mean_"), 
                showPlots = TRUE, 
                computeEFA = TRUE, 
                computeCFA = TRUE, 
                computeCFAMplus = FALSE)



descriptive statistics: 
                    Mean   SD Median CoeffofVariation Minimum Maximun
Bioinspiration-PN2r 3.09 1.08      3             0.35       1       5
Bioinspiration-PN1  3.54 0.97      4             0.28       1       5
Bioinspiration-PN3  3.55 0.92      4             0.26       1       5
Bioinspiration-PN4  3.15 1.07      3             0.34       1       5
                    Lower Quantile Upper Quantile Skewness Kurtosis(-3) KS-Test
Bioinspiration-PN2r              1              5     0.02        -0.88       0
Bioinspiration-PN1               1              5    -0.61        -0.08       0
Bioinspiration-PN3               1              5    -0.38        -0.32       0
Bioinspiration-PN4               1              5    -0.24        -0.87       0


variables under investigation:  BioinspirationPN2r BioinspirationPN1 BioinspirationPN3 BioinspirationPN4 
Some items ( Bioinspiration-PN2r ) were negatively correlated with the first principal component and 
probably should be reversed.  
To do this, run the function again with the 'check.keys=TRUE' optionCronbachs Alpha: 0.54 

Parallel analysis suggests that the number of factors =  2  and the number of components =  1 
PN 
Number of components:  1 

KMO criteria is to low (< .6) for: 
 BioinspirationPN2r 
 mean KMO: 0.69 


EFA factor loadings (1 factor solution): 

Loadings:
                   MR1   
BioinspirationPN2r -0.132
BioinspirationPN1   0.904
BioinspirationPN3   0.696
BioinspirationPN4   0.775

                 MR1
SS loadings    1.919
Proportion Var 0.480
CFA summary and fit statistics: 
lavaan 0.6-19 ended normally after 41 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                         8

  Number of observations                           594

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                21.304      16.653
  Degrees of freedom                                 2           2
  P-value (Chi-square)                           0.000       0.000
  Scaling correction factor                                  1.279
    Yuan-Bentler correction (Mplus variant)                       

Model Test Baseline Model:

  Test statistic                               586.532     434.901
  Degrees of freedom                                 6           6
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.349

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.967       0.966
  Tucker-Lewis Index (TLI)                       0.900       0.898
                                                                  
  Robust Comparative Fit Index (CFI)                         0.968
  Robust Tucker-Lewis Index (TLI)                            0.903

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -3107.036   -3107.036
  Scaling correction factor                                  1.058
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -3096.384   -3096.384
  Scaling correction factor                                  1.102
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                6230.073    6230.073
  Bayesian (BIC)                              6265.168    6265.168
  Sample-size adjusted Bayesian (SABIC)       6239.770    6239.770

Root Mean Square Error of Approximation:

  RMSEA                                          0.127       0.111
  90 Percent confidence interval - lower         0.082       0.071
  90 Percent confidence interval - upper         0.179       0.157
  P-value H_0: RMSEA <= 0.050                    0.003       0.008
  P-value H_0: RMSEA >= 0.080                    0.957       0.902
                                                                  
  Robust RMSEA                                               0.126
  90 Percent confidence interval - lower                     0.075
  90 Percent confidence interval - upper                     0.184
  P-value H_0: Robust RMSEA <= 0.050                         0.009
  P-value H_0: Robust RMSEA >= 0.080                         0.931

Standardized Root Mean Square Residual:

  SRMR                                           0.042       0.042

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  PN =~                                                                 
    BioinsprtnPN2r    1.000                               0.161    0.149
    BioinspirtnPN1   -5.224    1.815   -2.879    0.004   -0.841   -0.863
    BioinspirtnPN3   -3.791    1.377   -2.753    0.006   -0.610   -0.662
    BioinspirtnPN4   -4.813    1.653   -2.912    0.004   -0.775   -0.727

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .BioinsprtnPN2r    1.134    0.053   21.438    0.000    1.134    0.978
   .BioinspirtnPN1    0.242    0.047    5.090    0.000    0.242    0.255
   .BioinspirtnPN3    0.478    0.038   12.534    0.000    0.478    0.562
   .BioinspirtnPN4    0.536    0.051   10.488    0.000    0.536    0.472
    PN                0.026    0.018    1.418    0.156    1.000    1.000



CFA first 6 Modification Indices: 
                  lhs op               rhs     mi    epc sepc.lv sepc.all
11 BioinspirationPN2r ~~ BioinspirationPN3 15.241  0.130   0.130    0.176
14  BioinspirationPN1 ~~ BioinspirationPN4 15.241 -0.860  -0.860   -2.390
12 BioinspirationPN2r ~~ BioinspirationPN4 10.826 -0.121  -0.121   -0.156
13  BioinspirationPN1 ~~ BioinspirationPN3 10.826  0.500   0.500    1.471
15  BioinspirationPN3 ~~ BioinspirationPN4  0.012  0.014   0.014    0.027
10 BioinspirationPN2r ~~ BioinspirationPN1  0.012 -0.004  -0.004   -0.007
   sepc.nox
11    0.176
14   -2.390
12   -0.156
13    1.471
15    0.027
10   -0.007

4.5 Delete Items

dat$`Bioinspiration-PN2r` <- NULL

4.6 Item Response Theory (polytomous) for “Bioinspiration Items”

Factor Loadings (F1) indicate how strongly each item is associated with the latent trait, rule of thumb:

  • 0.70 = strong
  • 0.40–0.69 = moderate
  • < 0.40 = weak

Communality (h²) is the proportion of variance in each item explained by the factor, rule of thumb: + h² > 0.40 → item is well represented + h² < 0.30 → potentially problematic item

# Choose dataset and regular expression
regEx <- "^Bioinspiration"

# Filter variables matching the pattern
irt_items <- dat[, str_detect(colnames(dat), pattern = regEx)]

# Drop rows with missing data (mirt requires complete cases)
irt_items <- na.omit(irt_items)

# Ensure all items are treated as ordered factors
irt_items[] <- lapply(irt_items, function(x) as.numeric(as.character(x)))
# Fit Graded Response Model (1-factor)
mod_grm <- mirt(data = irt_items, model = 1, itemtype = "graded", verbose = FALSE)

# Summarize model
summary(mod_grm)
                         F1    h2
Bioinspiration-PN1    0.796 0.634
Bioinspiration-IPI4   0.908 0.825
Bioinspiration-VRtN4r 0.742 0.551
Bioinspiration-VRtN2  0.894 0.800
Bioinspiration-IPI1   0.894 0.800
Bioinspiration-VRtN1  0.814 0.663
Bioinspiration-IPI3   0.884 0.781
Bioinspiration-VRtN3  0.822 0.676
Bioinspiration-PN3    0.586 0.343
Bioinspiration-IPI2r  0.515 0.266
Bioinspiration-PN4    0.679 0.461

SS loadings:  6.799 
Proportion Var:  0.618 

Factor correlations: 

   F1
F1  1
# Plot Item Characteristic Curves (ICCs) for all items
plot(mod_grm, type = "trace", facet_items = TRUE, main = "Item Characteristic Curves")

# Plot Test Information Curve
plot(mod_grm, type = "info", main = "Test Information Curve: Bioinspiration")

### compare results to:
cor.plot(r = cor(irt_items))

Compare 1-Factor vs. 2-Factor Models:

mod_1f <- mirt(data = irt_items, model = 1, itemtype = "graded", verbose = FALSE)
mod_2f <- mirt(data = irt_items, model = 2, itemtype = "graded", verbose = FALSE)
mod_3f <- mirt(data = irt_items, model = 3, itemtype = "graded", verbose = FALSE)
anova(mod_1f, mod_2f, mod_3f)
            AIC    SABIC       HQ      BIC    logLik      X2 df p
mod_1f 14244.40 14311.07 14338.37 14485.68 -7067.199             
mod_2f 13930.42 14009.21 14041.47 14215.56 -6900.207 333.984 10 0
mod_3f 13875.44 13965.14 14001.87 14200.07 -6863.719  72.976  9 0

significant p-value (e.g., < .05) supports the 2-factor model.

summary(mod_2f)

Rotation:  oblimin 

Rotated factor loadings: 

                           F1      F2    h2
Bioinspiration-PN1     0.8206  0.0939 0.789
Bioinspiration-IPI4    0.0576  0.8953 0.876
Bioinspiration-VRtN4r  0.2874  0.5092 0.545
Bioinspiration-VRtN2   0.3887  0.5721 0.786
Bioinspiration-IPI1   -0.0262  0.9556 0.879
Bioinspiration-VRtN1   0.6285  0.2785 0.715
Bioinspiration-IPI3    0.0524  0.8710 0.825
Bioinspiration-VRtN3   0.5420  0.3615 0.696
Bioinspiration-PN3     0.8705 -0.1694 0.582
Bioinspiration-IPI2r  -0.1880  0.7049 0.349
Bioinspiration-PN4     0.7028  0.0742 0.572

Rotated SS loadings:  2.89 3.808 

Factor correlations: 

      F1 F2
F1 1.000   
F2 0.693  1
summary(mod_3f)

Rotation:  oblimin 

Rotated factor loadings: 

                            F1      F2       F3    h2
Bioinspiration-PN1     0.51245  0.1925  0.36832 0.801
Bioinspiration-IPI4    0.03886  0.8876  0.04312 0.877
Bioinspiration-VRtN4r -0.09635  0.1354  0.68409 0.575
Bioinspiration-VRtN2  -0.05536  0.1544  0.80541 0.832
Bioinspiration-IPI1   -0.00474  0.9498 -0.00925 0.885
Bioinspiration-VRtN1   0.11126 -0.0927  0.88065 0.754
Bioinspiration-IPI3    0.03194  0.8625  0.04339 0.827
Bioinspiration-VRtN3   0.08199  0.0477  0.75909 0.710
Bioinspiration-PN3     0.51609 -0.0510  0.38173 0.565
Bioinspiration-IPI2r  -0.33803  0.3317  0.38126 0.383
Bioinspiration-PN4     0.58423  0.3574  0.02875 0.627

Rotated SS loadings:  1.019 2.765 2.9 

Factor correlations: 

      F1    F2 F3
F1 1.000         
F2 0.296 1.000   
F3 0.503 0.828  1

4.7 test for measurment invariance

to check if items betweens different framing conditions were answered in a similar fashion (related to differential item functioning)

4.8 ant colony algorithm

  • Ant Colony / Genetic Algorithm
  • if necessary add to CFAs regularized SEM (regSEM)

5 Compute mean scores

dat$mean_Bioinspiration <- rowMeans(x = dat[,str_subset(colnames(dat), pattern = "^Bioinspiration")])
dat$mean_Bioinspiration_PN <- rowMeans(x = dat[,str_subset(colnames(dat), pattern = "^Bioinspiration-PN")])
dat$mean_Bioinspiration_IPI <- rowMeans(x = dat[,str_subset(colnames(dat), pattern = "^Bioinspiration-IPI")])
dat$mean_Bioinspiration_VRtN <- rowMeans(x = dat[,str_subset(colnames(dat), pattern = "^Bioinspiration-VRtN")])

dat$mean_Ecological <- rowMeans(x = dat[,str_subset(colnames(dat), pattern = "^EcologicalDimension")])

manifest correlations:

psych::cor.plot(r = cor(dat[, str_detect(string = colnames(dat),
                                                   pattern = "^mean_")]
                        , use = "pairwise.complete.obs"),
                upper = FALSE, xlas = 2, main = "Overall")

6 Test Hypotheses

6.1 Descriptive

# Summaries of participant-level scores by framing condition
eco_summary <- data_summary(dat, "mean_Ecological", "framingCondition")
Lade nötiges Paket: plyr
------------------------------------------------------------------------------
You have loaded plyr after dplyr - this is likely to cause problems.
If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
library(plyr); library(dplyr)
------------------------------------------------------------------------------

Attache Paket: 'plyr'
Die folgenden Objekte sind maskiert von 'package:dplyr':

    arrange, count, desc, failwith, id, mutate, rename, summarise,
    summarize
Das folgende Objekt ist maskiert 'package:purrr':

    compact
bio_summary <- data_summary(dat, "mean_Bioinspiration", "framingCondition")

# View results
print(eco_summary)
  framingCondition mean_Ecological         se
1      bioinspired        4.848485 0.07519984
2          neutral        5.464467 0.06789697
3      sustainable        5.869347 0.06002766
print(bio_summary)
  framingCondition mean_Bioinspiration         se
1      bioinspired            3.922865 0.03627758
2          neutral            3.476234 0.05016594
3      sustainable            3.172225 0.05824618
# Plots the mean scores on the Bioinspiration & Ecological Dimension by Framing Condition
ggplot(dat, aes(x = framingCondition, y = mean_Ecological)) +
  geom_boxplot(fill = "lightgreen") +
  labs(title = "Ecological Dimension by Framing", y = "Mean Score") +
  theme_minimal()

ggplot(dat, aes(x = framingCondition, y = mean_Bioinspiration)) +
  geom_boxplot(fill = "skyblue") +
  labs(title = "Bioinspiration by Framing", y = "Mean Score") +
  theme_minimal()

6.2 ANOVAs

!!! to discuss

tmp_removeIDs <- names(table(dat$PROLIFIC_PID))[table(dat$PROLIFIC_PID) >= 2]

dim(dat)
[1] 594  51
dat <- dat[!dat$PROLIFIC_PID %in% tmp_removeIDs,]
dim(dat)
[1] 582  51

ANOVAs + post hoc tests:

# --- ANOVA for Bioinspiration ---
aov_bio <- aov_ez(
  id = "PROLIFIC_PID",  # replace with your participant ID column name
  dv = "mean_Bioinspiration",
  data = dat,
  between = "framingCondition"
)
print(aov_bio)
Anova Table (Type 3 tests)

Response: mean_Bioinspiration
            Effect     df  MSE         F  ges p.value
1 framingCondition 2, 579 0.48 55.67 *** .161   <.001
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
# Post hoc (Tukey) for Bioinspiration
em_bio <- emmeans(aov_bio, "framingCondition")
bio_posthoc <- pairs(em_bio, adjust = "tukey")
print(bio_posthoc)
 contrast                  estimate     SE  df t.ratio p.value
 bioinspired - neutral        0.439 0.0704 579   6.234  <.0001
 bioinspired - sustainable    0.735 0.0701 579  10.495  <.0001
 neutral - sustainable        0.296 0.0700 579   4.234  0.0001

P value adjustment: tukey method for comparing a family of 3 estimates 
# --- ANOVA for Ecological Dimension ---
aov_eco <- aov_ez(
  id = "PROLIFIC_PID",  # replace with your participant ID column name
  dv = "mean_Ecological",
  data = dat,
  between = "framingCondition"
)
print(aov_eco)
Anova Table (Type 3 tests)

Response: mean_Ecological
            Effect     df  MSE         F  ges p.value
1 framingCondition 2, 579 0.91 59.06 *** .169   <.001
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
# Post hoc (Tukey) for Ecological
em_eco <- emmeans(aov_eco, "framingCondition")
eco_posthoc <- pairs(em_eco, adjust = "tukey")
print(eco_posthoc)
 contrast                  estimate     SE  df t.ratio p.value
 bioinspired - neutral       -0.633 0.0975 579  -6.494  <.0001
 bioinspired - sustainable   -1.047 0.0970 579 -10.800  <.0001
 neutral - sustainable       -0.414 0.0968 579  -4.278  0.0001

P value adjustment: tukey method for comparing a family of 3 estimates 

plots in APA7 style:

# Summarize means and SE for plotting
bio_plot_data <- data_summary(dat, "mean_Bioinspiration", "framingCondition")
eco_plot_data <- data_summary(dat, "mean_Ecological", "framingCondition")

# --- Bioinspiration Plot ---
ggplot(bio_plot_data, aes(x = framingCondition, y = mean_Bioinspiration)) +
  geom_col(fill = "grey80", color = "black", width = 0.6) +
  geom_errorbar(aes(ymin = mean_Bioinspiration - se, ymax = mean_Bioinspiration + se), width = 0.15) +
  labs(x = "Framing Condition", y = "Mean Bioinspiration Score") +
  theme_apa() +
  theme(
    axis.title = element_text(face = "bold"),
    legend.position = "none"
  )

# --- Ecological Dimension Plot ---
ggplot(eco_plot_data, aes(x = framingCondition, y = mean_Ecological)) +
  geom_col(fill = "grey60", color = "black", width = 0.6) +
  geom_errorbar(aes(ymin = mean_Ecological - se, ymax = mean_Ecological + se), width = 0.15) +
  labs(x = "Framing Condition", y = "Mean Ecological Score") +
  theme_apa() +
  theme(
    axis.title = element_text(face = "bold"),
    legend.position = "none"
  )

6.3 Spillover

We are comparing the effect size or magnitude of:

  • How much “bioinspired” framing boosts sustainability ratings.
  • How much “sustainable” framing boosts bioinspiration ratings.
# Subset only relevant cases and variables
dat_subset <- dat %>%
  filter(framingCondition %in% c("bioinspired", "sustainable")) %>%
  select(PROLIFIC_PID, framingCondition, mean_Bioinspiration, mean_Ecological)


# Standardize the two scales
dat_subset <- dat_subset %>%
  mutate(
    z_Bioinspiration = scale(mean_Bioinspiration)[, 1],
    z_Sustainability = scale(mean_Ecological)[, 1]
  )


# Convert to long format
dat_long_scaled <- dat_subset %>%
  pivot_longer(cols = c(z_Bioinspiration, z_Sustainability),
               names_to = "ratingType",
               values_to = "ratingScore") %>%
  mutate(
    ratingType = recode(ratingType,
                        "z_Bioinspiration" = "Bioinspiration",
                        "z_Sustainability" = "Sustainability"),
    framingCondition = factor(framingCondition),
    ratingType = factor(ratingType)
  )

The interaction term now reflects difference in effect sizes in standard deviation units (comparable spillover strength):

# Run interaction model
model_scaled <- lm(ratingScore ~ framingCondition * ratingType, data = dat_long_scaled)
summary(model_scaled)

Call:
lm(formula = ratingScore ~ framingCondition * ratingType, data = dat_long_scaled)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.5716 -0.5824  0.1032  0.5826  2.3409 

Coefficients:
                                                     Estimate Std. Error
(Intercept)                                           0.48023    0.06345
framingConditionsustainable                          -0.94828    0.08917
ratingTypeSustainability                             -0.96805    0.08974
framingConditionsustainable:ratingTypeSustainability  1.91153    0.12610
                                                     t value Pr(>|t|)    
(Intercept)                                            7.568 1.08e-13 ***
framingConditionsustainable                          -10.635  < 2e-16 ***
ratingTypeSustainability                             -10.788  < 2e-16 ***
framingConditionsustainable:ratingTypeSustainability  15.159  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.8792 on 774 degrees of freedom
Multiple R-squared:  0.2289,    Adjusted R-squared:  0.2259 
F-statistic:  76.6 on 3 and 774 DF,  p-value: < 2.2e-16
dat_long_scaled %>%
  group_by(framingCondition, ratingType) %>%
  dplyr::summarise(
    N = n(),
    mean_DV = mean(ratingScore, na.rm = TRUE)
  )
`summarise()` has grouped output by 'framingCondition'. You can override using
the `.groups` argument.
# A tibble: 4 × 4
# Groups:   framingCondition [2]
  framingCondition ratingType         N mean_DV
  <fct>            <chr>          <int>   <dbl>
1 bioinspired      Bioinspiration   192   0.480
2 bioinspired      Sustainability   192  -0.488
3 sustainable      Bioinspiration   197  -0.468
4 sustainable      Sustainability   197   0.475
ggplot(dat_long_scaled, aes(x = framingCondition, y = ratingScore, fill = ratingType)) +
  stat_summary(fun = mean, geom = "bar", position = position_dodge(0.7), width = 0.6, color = "black") +
  stat_summary(fun.data = mean_se, geom = "errorbar", 
               position = position_dodge(0.7), width = 0.15) +
  labs(x = "Framing Condition", y = "Rating Score", fill = "Rating Type") +
  theme_minimal()

# Reshape from wide to long format
dat_long <- dat_subset %>%
  pivot_longer(cols = c(mean_Bioinspiration, mean_Ecological),
               names_to = "ratingType",
               values_to = "ratingScore") %>%
  mutate(
    ratingType = recode(ratingType,
                        "mean_Bioinspiration" = "Bioinspiration",
                        "mean_Ecological" = "Sustainability"),
    framingCondition = as.factor(framingCondition),
    ratingType = as.factor(ratingType)
  )


ggplot(dat_long, aes(x = framingCondition, y = ratingScore, fill = ratingType)) +
  stat_summary(
    fun = mean, geom = "col", position = position_dodge(0.75), 
    width = 0.6, color = "black"
  ) +
  stat_summary(
    fun.data = mean_se, geom = "errorbar", 
    position = position_dodge(0.75), width = 0.2, size = 0.8
  ) +
  scale_fill_manual(
    values = c("Bioinspiration" = "#4C72B0", "Sustainability" = "#55A868")
  ) +
  labs(
    x = "Framing Condition",
    y = "Mean Rating Score",
    fill = "Rating Type",
    title = "Effect of Framing on Bioinspiration and Sustainability Ratings"
  ) +
  theme_minimal(base_size = 14) +
  theme(
    axis.title = element_text(face = "bold"),
    axis.text = element_text(color = "black"),
    legend.position = "top",
    legend.title = element_text(face = "bold"),
    panel.grid.major.x = element_blank(),
    panel.grid.minor = element_blank()
  )
Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
ℹ Please use `linewidth` instead.

6.3.1 Coefficients and Interpretation

Term Estimate Interpretation
(Intercept) 0.48 Average standardized Bioinspiration rating under bioinspired framing (baseline condition).
framingConditionsustainable -0.95 Switching to sustainable framing decreases standardized Bioinspiration ratings by 0.95 SD.
ratingTypeSustainability -0.97 Under bioinspired framing, standardized Sustainability ratings are 0.97 SD lower than bioinspiration ratings.
framingConditionsustainable:ratingTypeSustainability 1.91 The key interaction: under sustainable framing, the difference between Sustainability and Bioinspiration ratings increases by 1.91 SD.

6.3.2 Interpretation of Spillover Effects

  • Bioinspired framing leads to higher bioinspiration ratings but lower sustainability ratings (relative to bioinspiration).
  • Sustainable framing leads to higher sustainability ratings relative to bioinspiration ratings.
  • The significant and large interaction effect (1.91 SD) indicates that the influence of framing on ratings differs markedly by rating type.
  • This confirms asymmetrical spillover effects:
    • Sustainable framing boosts sustainability ratings more strongly than it boosts bioinspiration.
    • Conversely, bioinspired framing boosts bioinspiration ratings more than sustainability.

6.3.3 include neutral condition

table(dat$framingCondition, dat$whichItemsFirst)
             
              bioinspired sustainable
  bioinspired         192           0
  neutral              94          99
  sustainable           0         197
dat <- dat %>%
  mutate(framingCondition_neutral = case_when(
    framingCondition == "bioinspired" & whichItemsFirst == "bioinspired" ~ "bioinspired",
    framingCondition == "sustainable" & whichItemsFirst == "sustainable" ~ "sustainable",
    framingCondition == "neutral" & whichItemsFirst == "sustainable" ~ "neut_sustainable",
    framingCondition == "neutral" & whichItemsFirst == "bioinspired" ~ "neut_bioinspired"
  ))

table(dat$framingCondition_neutral)

     bioinspired neut_bioinspired neut_sustainable      sustainable 
             192               94               99              197 
ggplot(dat, aes(x = framingCondition_neutral, y = mean_Bioinspiration)) +
  geom_boxplot(fill = "skyblue") +
  labs(title = "Bioinspiration by Framing", y = "Mean Score") +
  theme_minimal()

ggplot(dat, aes(x = framingCondition_neutral, y = mean_Ecological)) +
  geom_boxplot(fill = "skyblue") +
  labs(title = "Ecological Dimension by Framing", y = "Mean Score") +
  theme_minimal()

7 Appendix

7.1 latent class analysis for “Bioinspiration Items”

to come

7.2 latent class analysis for “Ecological Items”

to come