# 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")
<- read_rds(file = "questionnaire.rds")
dat
### load functions
setwd("../../../functions")
for(i in 1:length(dir())){
# print(dir()[i])
source(dir()[i], encoding = "utf-8")
}
rm(i)
### summary function
<- function(data, varname, groupnames){
data_summary require(plyr)
<- function(x, col){
summary_func c(mean = mean(x[[col]], na.rm=TRUE),
se = sd(x[[col]], na.rm=TRUE) / sqrt(length(x[[col]])))
}<-ddply(data, groupnames, .fun=summary_func,
data_sum
varname)<- plyr::rename(data_sum, c("mean" = varname))
data_sum return(data_sum)
}
Data analysis pilot study: test framing and bioinspired items
1 Notes
2 global variables
Define your global variables (can take some time to run):
3 create raw data files
4 Evaluate questionnaires
4.1 Descriptives
To describe sample
::describe(dat[, c("sociodemo_age")]) psych
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:
::describe(dat[, c("total_min_prolific")]) psych
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
<- "^Bioinspiration|^EcologicalDimension"
regExOverall
::cor.plot(r = cor(dat[, str_detect(string = colnames(dat),
psychpattern = regExOverall)]
use = "pairwise.complete.obs"),
, upper = FALSE, xlas = 2, main = "Overall")
#> parallel analysis
<- dimensionalityTest(label = "Overall",
tmp_parallelAnalysis 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)
<- explorativeFactorAnalysis(label = "Overall",
tmp_EFA regEx = regExOverall,
dataset = dat, nfac = 2)
1]] tmp_EFA[[
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
<- "^Bioinspiration"
regExOverall
::cor.plot(r = cor(dat[, str_detect(string = colnames(dat),
psychpattern = regExOverall)]
use = "pairwise.complete.obs"),
, upper = FALSE, xlas = 2, main = "Overall")
#> parallel analysis
<- dimensionalityTest(label = "Overall",
tmp_parallelAnalysis 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)
<- explorativeFactorAnalysis(label = "Overall",
tmp_EFA 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.
1]] tmp_EFA[[
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:
<- "^EcologicalDimension"
regEx <- "Ecology"
nameVariable
sum(str_detect(string = colnames(dat), pattern = regEx))
[1] 4
<- na.omit(dat[,str_detect(string = colnames(dat), pattern = regEx)])
tmp_dat
<- CFAstats(dataset = tmp_dat, regularExp = regEx, labelLatent = str_remove(string = nameVariable, pattern = "mean_"),
tmp 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
<- "^Bioinspiration"
regEx <- "Bioinspiration"
nameVariable
sum(str_detect(string = colnames(dat), pattern = regEx))
[1] 12
<- na.omit(dat[,str_detect(string = colnames(dat), pattern = regEx)])
tmp_dat
<- CFAstats(dataset = tmp_dat, regularExp = regEx, labelLatent = str_remove(string = nameVariable, pattern = "mean_"),
tmp 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
<- "^Bioinspiration"
regEx <- "Bioinspiration"
nameVariable
sum(str_detect(string = colnames(dat), pattern = regEx))
[1] 12
<- na.omit(dat[,str_detect(string = colnames(dat), pattern = regEx)])
tmp_dat
<- CFAstats(dataset = tmp_dat, regularExp = regEx, labelLatent = str_remove(string = nameVariable, pattern = "mean_"),
tmp 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
<- "^Bioinspiration-VRtN"
regEx <- "VRtN"
nameVariable
sum(str_detect(string = colnames(dat), pattern = regEx))
[1] 4
<- na.omit(dat[,str_detect(string = colnames(dat), pattern = regEx)])
tmp_dat
<- CFAstats(dataset = tmp_dat, regularExp = regEx, labelLatent = str_remove(string = nameVariable, pattern = "mean_"),
tmp 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
<- "^Bioinspiration-IPI"
regEx <- "IPI"
nameVariable
sum(str_detect(string = colnames(dat), pattern = regEx))
[1] 4
<- na.omit(dat[,str_detect(string = colnames(dat), pattern = regEx)])
tmp_dat
<- CFAstats(dataset = tmp_dat, regularExp = regEx, labelLatent = str_remove(string = nameVariable, pattern = "mean_"),
tmp 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
<- "^Bioinspiration-PN"
regEx <- "PN"
nameVariable
sum(str_detect(string = colnames(dat), pattern = regEx))
[1] 4
<- na.omit(dat[,str_detect(string = colnames(dat), pattern = regEx)])
tmp_dat
<- CFAstats(dataset = tmp_dat, regularExp = regEx, labelLatent = str_remove(string = nameVariable, pattern = "mean_"),
tmp 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
$`Bioinspiration-PN2r` <- NULL dat
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
<- "^Bioinspiration"
regEx
# Filter variables matching the pattern
<- dat[, str_detect(colnames(dat), pattern = regEx)]
irt_items
# Drop rows with missing data (mirt requires complete cases)
<- na.omit(irt_items)
irt_items
# Ensure all items are treated as ordered factors
<- lapply(irt_items, function(x) as.numeric(as.character(x)))
irt_items[] # Fit Graded Response Model (1-factor)
<- mirt(data = irt_items, model = 1, itemtype = "graded", verbose = FALSE)
mod_grm
# 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:
<- mirt(data = irt_items, model = 1, itemtype = "graded", verbose = FALSE)
mod_1f <- mirt(data = irt_items, model = 2, itemtype = "graded", verbose = FALSE)
mod_2f <- mirt(data = irt_items, model = 3, itemtype = "graded", verbose = FALSE)
mod_3f 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
$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")]) dat
manifest correlations:
::cor.plot(r = cor(dat[, str_detect(string = colnames(dat),
psychpattern = "^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
<- data_summary(dat, "mean_Ecological", "framingCondition") eco_summary
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
<- data_summary(dat, "mean_Bioinspiration", "framingCondition")
bio_summary
# 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
<- names(table(dat$PROLIFIC_PID))[table(dat$PROLIFIC_PID) >= 2]
tmp_removeIDs
dim(dat)
[1] 594 51
<- dat[!dat$PROLIFIC_PID %in% tmp_removeIDs,]
dat dim(dat)
[1] 582 51
ANOVAs + post hoc tests:
# --- ANOVA for Bioinspiration ---
<- aov_ez(
aov_bio 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
<- emmeans(aov_bio, "framingCondition")
em_bio <- pairs(em_bio, adjust = "tukey")
bio_posthoc 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_ez(
aov_eco 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
<- emmeans(aov_eco, "framingCondition")
em_eco <- pairs(em_eco, adjust = "tukey")
eco_posthoc 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
<- data_summary(dat, "mean_Bioinspiration", "framingCondition")
bio_plot_data <- data_summary(dat, "mean_Ecological", "framingCondition")
eco_plot_data
# --- 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 %>%
dat_subset 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_subset %>%
dat_long_scaled 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
<- lm(ratingScore ~ framingCondition * ratingType, data = dat_long_scaled)
model_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) %>%
::summarise(
dplyrN = 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_subset %>%
dat_long 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(
== "bioinspired" & whichItemsFirst == "bioinspired" ~ "bioinspired",
framingCondition == "sustainable" & whichItemsFirst == "sustainable" ~ "sustainable",
framingCondition == "neutral" & whichItemsFirst == "sustainable" ~ "neut_sustainable",
framingCondition == "neutral" & whichItemsFirst == "bioinspired" ~ "neut_bioinspired"
framingCondition
))
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