Estimate CLPM1 and CLPM2 models to assess sensitivity to model specifications
#robustness analysis.
#library
library(tidyverse)
library(lavaan)
library(data.table)
library(viridis)
library(doParallel)
library(parallel)
library(patchwork)
#data
load("results/predicted_means/240816_pred-means-cleaned-df.Rdata")
#extract datafile from pref_results
MyData <- pred_results$df_combined
#CLPM1#
#without controls
EU_clpm1_constrained_lag <- '
# Estimate the lagged effects (constrained)
eu_2 ~ a*eu_1 + b*Feduc_a_1
eu_3 ~ a*eu_2 + b*Feduc_a_2
eu_4 ~ a*eu_3 + b*Feduc_a_3
eu_5 ~ a*eu_4 + b*Feduc_a_4
eu_6 ~ a*eu_5 + b*Feduc_a_5
eu_7 ~ a*eu_6 + b*Feduc_a_6
eu_8 ~ a*eu_7 + b*Feduc_a_7
eu_9 ~ a*eu_8 + b*Feduc_a_8
eu_10 ~ a*eu_9 + b*Feduc_a_9
eu_11 ~ a*eu_10 + b*Feduc_a_10
Feduc_a_2 ~ c*eu_1 + d*Feduc_a_1
Feduc_a_3 ~ c*eu_2 + d*Feduc_a_2
Feduc_a_4 ~ c*eu_3 + d*Feduc_a_3
Feduc_a_5 ~ c*eu_4 + d*Feduc_a_4
Feduc_a_6 ~ c*eu_5 + d*Feduc_a_5
Feduc_a_7 ~ c*eu_6 + d*Feduc_a_6
Feduc_a_8 ~ c*eu_7 + d*Feduc_a_7
Feduc_a_9 ~ c*eu_8 + d*Feduc_a_8
Feduc_a_10 ~ c*eu_9 + d*Feduc_a_9
Feduc_a_11 ~ c*eu_10 + d*Feduc_a_10
# Estimate the covariance at the first wave and residual covariances
eu_1 ~~ Feduc_a_1 # Covariance
eu_2 ~~ Feduc_a_2 # Covariance
eu_3 ~~ Feduc_a_3 # Covariance
eu_4 ~~ Feduc_a_4 # Covariance
eu_5 ~~ Feduc_a_5 # Covariance
eu_6 ~~ Feduc_a_6 # Covariance
eu_7 ~~ Feduc_a_7 # Covariance
eu_8 ~~ Feduc_a_8 # Covariance
eu_9 ~~ Feduc_a_9 # Covariance
eu_10 ~~ Feduc_a_10 # Covariance
eu_11 ~~ Feduc_a_11 # Covariance
# Estimate the variance
eu_1 ~~ eu_1
Feduc_a_1 ~~ Feduc_a_1
'
cult_clpm1_constrained_lag <- '
# Estimate the lagged effects (constrained)
cult_2 ~ a*cult_1 + b*Feduc_a_1
cult_3 ~ a*cult_2 + b*Feduc_a_2
cult_4 ~ a*cult_3 + b*Feduc_a_3
cult_5 ~ a*cult_4 + b*Feduc_a_4
cult_6 ~ a*cult_5 + b*Feduc_a_5
cult_7 ~ a*cult_6 + b*Feduc_a_6
cult_8 ~ a*cult_7 + b*Feduc_a_7
cult_9 ~ a*cult_8 + b*Feduc_a_8
cult_10 ~ a*cult_9 + b*Feduc_a_9
cult_11 ~ a*cult_10 + b*Feduc_a_10
Feduc_a_2 ~ c*cult_1 + d*Feduc_a_1
Feduc_a_3 ~ c*cult_2 + d*Feduc_a_2
Feduc_a_4 ~ c*cult_3 + d*Feduc_a_3
Feduc_a_5 ~ c*cult_4 + d*Feduc_a_4
Feduc_a_6 ~ c*cult_5 + d*Feduc_a_5
Feduc_a_7 ~ c*cult_6 + d*Feduc_a_6
Feduc_a_8 ~ c*cult_7 + d*Feduc_a_7
Feduc_a_9 ~ c*cult_8 + d*Feduc_a_8
Feduc_a_10 ~ c*cult_9 + d*Feduc_a_9
Feduc_a_11 ~ c*cult_10 + d*Feduc_a_10
# Estimate the covariance at the first wave.
cult_1 ~~ Feduc_a_1 # Covariance
cult_2 ~~ Feduc_a_2 # Covariance
cult_3 ~~ Feduc_a_3 # Covariance
cult_4 ~~ Feduc_a_4 # Covariance
cult_5 ~~ Feduc_a_5 # Covariance
cult_6 ~~ Feduc_a_6 # Covariance
cult_7 ~~ Feduc_a_7 # Covariance
cult_8 ~~ Feduc_a_8 # Covariance
cult_9 ~~ Feduc_a_9 # Covariance
cult_10 ~~ Feduc_a_10 # Covariance
cult_11 ~~ Feduc_a_11 # Covariance
# Estimate the variance
cult_1 ~~ cult_1
Feduc_a_1 ~~ Feduc_a_1
'
inc_diff_clpm1_constrained_lag <- '
# Estimate the lagged effects (constrained)
inc_diff_2 ~ a*inc_diff_1 + b*Feduc_a_1
inc_diff_3 ~ a*inc_diff_2 + b*Feduc_a_2
inc_diff_4 ~ a*inc_diff_3 + b*Feduc_a_3
inc_diff_5 ~ a*inc_diff_4 + b*Feduc_a_4
inc_diff_6 ~ a*inc_diff_5 + b*Feduc_a_5
inc_diff_7 ~ a*inc_diff_6 + b*Feduc_a_6
inc_diff_8 ~ a*inc_diff_7 + b*Feduc_a_7
inc_diff_9 ~ a*inc_diff_8 + b*Feduc_a_8
inc_diff_10 ~ a*inc_diff_9 + b*Feduc_a_9
inc_diff_11 ~ a*inc_diff_10 + b*Feduc_a_10
Feduc_a_2 ~ c*inc_diff_1 + d*Feduc_a_1
Feduc_a_3 ~ c*inc_diff_2 + d*Feduc_a_2
Feduc_a_4 ~ c*inc_diff_3 + d*Feduc_a_3
Feduc_a_5 ~ c*inc_diff_4 + d*Feduc_a_4
Feduc_a_6 ~ c*inc_diff_5 + d*Feduc_a_5
Feduc_a_7 ~ c*inc_diff_6 + d*Feduc_a_6
Feduc_a_8 ~ c*inc_diff_7 + d*Feduc_a_7
Feduc_a_9 ~ c*inc_diff_8 + d*Feduc_a_8
Feduc_a_10 ~ c*inc_diff_9 + d*Feduc_a_9
Feduc_a_11 ~ c*inc_diff_10 + d*Feduc_a_10
# Estimate the covariance at the first wave.
inc_diff_1 ~~ Feduc_a_1 # Covariance
inc_diff_2 ~~ Feduc_a_2 # Covariance
inc_diff_3 ~~ Feduc_a_3 # Covariance
inc_diff_4 ~~ Feduc_a_4 # Covariance
inc_diff_5 ~~ Feduc_a_5 # Covariance
inc_diff_6 ~~ Feduc_a_6 # Covariance
inc_diff_7 ~~ Feduc_a_7 # Covariance
inc_diff_8 ~~ Feduc_a_8 # Covariance
inc_diff_9 ~~ Feduc_a_9 # Covariance
inc_diff_10 ~~ Feduc_a_10 # Covariance
inc_diff_11 ~~ Feduc_a_11 # Covariance
# Estimate the variance
inc_diff_1 ~~ inc_diff_1
Feduc_a_1 ~~ Feduc_a_1
'
#store formulas in list
formulas_clpm1_nocontrols <- list(EU_clpm1_constrained_lag,
cult_clpm1_constrained_lag,
inc_diff_clpm1_constrained_lag)
# With control variables
EU_clpm1_control_constrained_lag <- '
# Estimate the lagged effects (constrained)
eu_2 ~ a*eu_1 + b*Feduc_a_1 + age_1 + educ_1 + work_1 + married_1
eu_3 ~ a*eu_2 + b*Feduc_a_2 + age_2 + educ_2 + work_2 + married_2
eu_4 ~ a*eu_3 + b*Feduc_a_3 + age_3 + educ_3 + work_3 + married_3
eu_5 ~ a*eu_4 + b*Feduc_a_4 + age_4 + educ_4 + work_4 + married_4
eu_6 ~ a*eu_5 + b*Feduc_a_5 + age_5 + educ_5 + work_5 + married_5
eu_7 ~ a*eu_6 + b*Feduc_a_6 + age_6 + educ_6 + work_6 + married_6
eu_8 ~ a*eu_7 + b*Feduc_a_7 + age_7 + educ_7 + work_7 + married_7
eu_9 ~ a*eu_8 + b*Feduc_a_8 + age_8 + educ_8 + work_8 + married_8
eu_10 ~ a*eu_9 + b*Feduc_a_9 + age_9 + educ_9 + work_9 + married_9
eu_11 ~ a*eu_10 + b*Feduc_a_10 + age_10 + educ_10 + work_10 + married_10
Feduc_a_2 ~ c*eu_1 + d*Feduc_a_1 + age_1 + educ_1 + work_1 + married_1
Feduc_a_3 ~ c*eu_2 + d*Feduc_a_2 + age_2 + educ_2 + work_2 + married_2
Feduc_a_4 ~ c*eu_3 + d*Feduc_a_3 + age_3 + educ_3 + work_3 + married_3
Feduc_a_5 ~ c*eu_4 + d*Feduc_a_4 + age_4 + educ_4 + work_4 + married_4
Feduc_a_6 ~ c*eu_5 + d*Feduc_a_5 + age_5 + educ_5 + work_5 + married_5
Feduc_a_7 ~ c*eu_6 + d*Feduc_a_6 + age_6 + educ_6 + work_6 + married_6
Feduc_a_8 ~ c*eu_7 + d*Feduc_a_7 + age_7 + educ_7 + work_7 + married_7
Feduc_a_9 ~ c*eu_8 + d*Feduc_a_8 + age_8 + educ_8 + work_8 + married_8
Feduc_a_10 ~ c*eu_9 + d*Feduc_a_9 + age_9 + educ_9 + work_9 + married_9
Feduc_a_11 ~ c*eu_10 + d*Feduc_a_10 + age_10 + educ_10 + work_10 + married_10
# Estimate the covariance at the first wave and residual covariances
eu_1 ~~ Feduc_a_1 # Covariance
eu_2 ~~ Feduc_a_2 # Covariance
eu_3 ~~ Feduc_a_3 # Covariance
eu_4 ~~ Feduc_a_4 # Covariance
eu_5 ~~ Feduc_a_5 # Covariance
eu_6 ~~ Feduc_a_6 # Covariance
eu_7 ~~ Feduc_a_7 # Covariance
eu_8 ~~ Feduc_a_8 # Covariance
eu_9 ~~ Feduc_a_9 # Covariance
eu_10 ~~ Feduc_a_10 # Covariance
eu_11 ~~ Feduc_a_11 # Covariance
# Estimate the variance
eu_1 ~~ eu_1
Feduc_a_1 ~~ Feduc_a_1
'
cult_clpm1_control_constrained_lag <- '
# Estimate the lagged effects (constrained)
cult_2 ~ a*cult_1 + b*Feduc_a_1 + age_1 + educ_1 + work_1 + married_1
cult_3 ~ a*cult_2 + b*Feduc_a_2 + age_2 + educ_2 + work_2 + married_2
cult_4 ~ a*cult_3 + b*Feduc_a_3 + age_3 + educ_3 + work_3 + married_3
cult_5 ~ a*cult_4 + b*Feduc_a_4 + age_4 + educ_4 + work_4 + married_4
cult_6 ~ a*cult_5 + b*Feduc_a_5 + age_5 + educ_5 + work_5 + married_5
cult_7 ~ a*cult_6 + b*Feduc_a_6 + age_6 + educ_6 + work_6 + married_6
cult_8 ~ a*cult_7 + b*Feduc_a_7 + age_7 + educ_7 + work_7 + married_7
cult_9 ~ a*cult_8 + b*Feduc_a_8 + age_8 + educ_8 + work_8 + married_8
cult_10 ~ a*cult_9 + b*Feduc_a_9 + age_9 + educ_9 + work_9 + married_9
cult_11 ~ a*cult_10 + b*Feduc_a_10 + age_10 + educ_10 + work_10 + married_10
Feduc_a_2 ~ c*cult_1 + d*Feduc_a_1 + age_1 + educ_1 + work_1 + married_1
Feduc_a_3 ~ c*cult_2 + d*Feduc_a_2 + age_2 + educ_2 + work_2 + married_2
Feduc_a_4 ~ c*cult_3 + d*Feduc_a_3 + age_3 + educ_3 + work_3 + married_3
Feduc_a_5 ~ c*cult_4 + d*Feduc_a_4 + age_4 + educ_4 + work_4 + married_4
Feduc_a_6 ~ c*cult_5 + d*Feduc_a_5 + age_5 + educ_5 + work_5 + married_5
Feduc_a_7 ~ c*cult_6 + d*Feduc_a_6 + age_6 + educ_6 + work_6 + married_6
Feduc_a_8 ~ c*cult_7 + d*Feduc_a_7 + age_7 + educ_7 + work_7 + married_7
Feduc_a_9 ~ c*cult_8 + d*Feduc_a_8 + age_8 + educ_8 + work_8 + married_8
Feduc_a_10 ~ c*cult_9 + d*Feduc_a_9 + age_9 + educ_9 + work_9 + married_9
Feduc_a_11 ~ c*cult_10 + d*Feduc_a_10 + age_10 + educ_10 + work_10 + married_10
# Estimate the covariance at the first wave.
cult_1 ~~ Feduc_a_1 # Covariance
cult_2 ~~ Feduc_a_2 # Covariance
cult_3 ~~ Feduc_a_3 # Covariance
cult_4 ~~ Feduc_a_4 # Covariance
cult_5 ~~ Feduc_a_5 # Covariance
cult_6 ~~ Feduc_a_6 # Covariance
cult_7 ~~ Feduc_a_7 # Covariance
cult_8 ~~ Feduc_a_8 # Covariance
cult_9 ~~ Feduc_a_9 # Covariance
cult_10 ~~ Feduc_a_10 # Covariance
cult_11 ~~ Feduc_a_11 # Covariance
# Estimate the variance
cult_1 ~~ cult_1
Feduc_a_1 ~~ Feduc_a_1
'
inc_diff_clpm1_control_constrained_lag <- '
# Estimate the lagged effects (constrained)
inc_diff_2 ~ a*inc_diff_1 + b*Feduc_a_1 + age_1 + educ_1 + work_1 + married_1
inc_diff_3 ~ a*inc_diff_2 + b*Feduc_a_2 + age_2 + educ_2 + work_2 + married_2
inc_diff_4 ~ a*inc_diff_3 + b*Feduc_a_3 + age_3 + educ_3 + work_3 + married_3
inc_diff_5 ~ a*inc_diff_4 + b*Feduc_a_4 + age_4 + educ_4 + work_4 + married_4
inc_diff_6 ~ a*inc_diff_5 + b*Feduc_a_5 + age_5 + educ_5 + work_5 + married_5
inc_diff_7 ~ a*inc_diff_6 + b*Feduc_a_6 + age_6 + educ_6 + work_6 + married_6
inc_diff_8 ~ a*inc_diff_7 + b*Feduc_a_7 + age_7 + educ_7 + work_7 + married_7
inc_diff_9 ~ a*inc_diff_8 + b*Feduc_a_8 + age_8 + educ_8 + work_8 + married_8
inc_diff_10 ~ a*inc_diff_9 + b*Feduc_a_9 + age_9 + educ_9 + work_9 + married_9
inc_diff_11 ~ a*inc_diff_10 + b*Feduc_a_10 + age_10 + educ_10 + work_10 + married_10
Feduc_a_2 ~ c*inc_diff_1 + d*Feduc_a_1 + age_1 + educ_1 + work_1 + married_1
Feduc_a_3 ~ c*inc_diff_2 + d*Feduc_a_2 + age_2 + educ_2 + work_2 + married_2
Feduc_a_4 ~ c*inc_diff_3 + d*Feduc_a_3 + age_3 + educ_3 + work_3 + married_3
Feduc_a_5 ~ c*inc_diff_4 + d*Feduc_a_4 + age_4 + educ_4 + work_4 + married_4
Feduc_a_6 ~ c*inc_diff_5 + d*Feduc_a_5 + age_5 + educ_5 + work_5 + married_5
Feduc_a_7 ~ c*inc_diff_6 + d*Feduc_a_6 + age_6 + educ_6 + work_6 + married_6
Feduc_a_8 ~ c*inc_diff_7 + d*Feduc_a_7 + age_7 + educ_7 + work_7 + married_7
Feduc_a_9 ~ c*inc_diff_8 + d*Feduc_a_8 + age_8 + educ_8 + work_8 + married_8
Feduc_a_10 ~ c*inc_diff_9 + d*Feduc_a_9 + age_9 + educ_9 + work_9 + married_9
Feduc_a_11 ~ c*inc_diff_10 + d*Feduc_a_10 + age_10 + educ_10 + work_10 + married_10
# Estimate the covariance at the first wave and residual covariances
inc_diff_1 ~~ Feduc_a_1 # Covariance
inc_diff_2 ~~ Feduc_a_2 # Covariance
inc_diff_3 ~~ Feduc_a_3 # Covariance
inc_diff_4 ~~ Feduc_a_4 # Covariance
inc_diff_5 ~~ Feduc_a_5 # Covariance
inc_diff_6 ~~ Feduc_a_6 # Covariance
inc_diff_7 ~~ Feduc_a_7 # Covariance
inc_diff_8 ~~ Feduc_a_8 # Covariance
inc_diff_9 ~~ Feduc_a_9 # Covariance
inc_diff_10 ~~ Feduc_a_10 # Covariance
inc_diff_11 ~~ Feduc_a_11 # Covariance
# Estimate the variance
inc_diff_1 ~~ inc_diff_1
Feduc_a_1 ~~ Feduc_a_1
'
#store formulas in list
formulas_clpm1_controls <- list(EU_clpm1_control_constrained_lag,
cult_clpm1_control_constrained_lag,
inc_diff_clpm1_control_constrained_lag)
#CLPM2#
#create formulas with no controls
EU_clpm2_constrained_lag <- '
# Estimate the lagged effects (constrained)
eu_2 ~ a*eu_1 + b*Feduc_a_1
eu_3 ~ a*eu_2 + b*Feduc_a_2 + c*eu_1 + d*Feduc_a_1
eu_4 ~ a*eu_3 + b*Feduc_a_3 + c*eu_2 + d*Feduc_a_2
eu_5 ~ a*eu_4 + b*Feduc_a_4 + c*eu_3 + d*Feduc_a_3
eu_6 ~ a*eu_5 + b*Feduc_a_5 + c*eu_4 + d*Feduc_a_4
eu_7 ~ a*eu_6 + b*Feduc_a_6 + c*eu_5 + d*Feduc_a_5
eu_8 ~ a*eu_7 + b*Feduc_a_7 + c*eu_6 + d*Feduc_a_6
eu_9 ~ a*eu_8 + b*Feduc_a_8 + c*eu_7 + d*Feduc_a_7
eu_10 ~ a*eu_9 + b*Feduc_a_9 + c*eu_8 + d*Feduc_a_8
eu_11 ~ a*eu_10 + b*Feduc_a_10 + c*eu_9 + d*Feduc_a_9
Feduc_a_2 ~ e*eu_1 + f*Feduc_a_1
Feduc_a_3 ~ e*eu_2 + f*Feduc_a_2 + g*eu_1 + h*Feduc_a_1
Feduc_a_4 ~ e*eu_3 + f*Feduc_a_3 + g*eu_2 + h*Feduc_a_2
Feduc_a_5 ~ e*eu_4 + f*Feduc_a_4 + g*eu_3 + h*Feduc_a_3
Feduc_a_6 ~ e*eu_5 + f*Feduc_a_5 + g*eu_4 + h*Feduc_a_4
Feduc_a_7 ~ e*eu_6 + f*Feduc_a_6 + g*eu_5 + h*Feduc_a_5
Feduc_a_8 ~ e*eu_7 + f*Feduc_a_7 + g*eu_6 + h*Feduc_a_6
Feduc_a_9 ~ e*eu_8 + f*Feduc_a_8 + g*eu_7 + h*Feduc_a_7
Feduc_a_10 ~ e*eu_9 + f*Feduc_a_9 + g*eu_8 + h*Feduc_a_8
Feduc_a_11 ~ e*eu_10 + f*Feduc_a_10 + g*eu_9 + h*Feduc_a_9
# Estimate the covariance at the first wave and residual covariances
eu_1 ~~ Feduc_a_1 # Covariance
eu_2 ~~ Feduc_a_2 # Covariance
eu_3 ~~ Feduc_a_3 # Covariance
eu_4 ~~ Feduc_a_4 # Covariance
eu_5 ~~ Feduc_a_5 # Covariance
eu_6 ~~ Feduc_a_6 # Covariance
eu_7 ~~ Feduc_a_7 # Covariance
eu_8 ~~ Feduc_a_8 # Covariance
eu_9 ~~ Feduc_a_9 # Covariance
eu_10 ~~ Feduc_a_10 # Covariance
eu_11 ~~ Feduc_a_11 # Covariance
# Estimate the variance
eu_1 ~~ eu_1
Feduc_a_1 ~~ Feduc_a_1
'
cult_clpm2_constrained_lag <- '
# Estimate the lagged effects (constrained)
eu_2 ~ a*eu_1 + b*Feduc_a_1
eu_3 ~ a*eu_2 + b*Feduc_a_2 + c*eu_1 + d*Feduc_a_1
eu_4 ~ a*eu_3 + b*Feduc_a_3 + c*eu_2 + d*Feduc_a_2
eu_5 ~ a*eu_4 + b*Feduc_a_4 + c*eu_3 + d*Feduc_a_3
eu_6 ~ a*eu_5 + b*Feduc_a_5 + c*eu_4 + d*Feduc_a_4
eu_7 ~ a*eu_6 + b*Feduc_a_6 + c*eu_5 + d*Feduc_a_5
eu_8 ~ a*eu_7 + b*Feduc_a_7 + c*eu_6 + d*Feduc_a_6
eu_9 ~ a*eu_8 + b*Feduc_a_8 + c*eu_7 + d*Feduc_a_7
eu_10 ~ a*eu_9 + b*Feduc_a_9 + c*eu_8 + d*Feduc_a_8
eu_11 ~ a*eu_10 + b*Feduc_a_10 + c*eu_9 + d*Feduc_a_9
Feduc_a_2 ~ e*eu_1 + f*Feduc_a_1
Feduc_a_3 ~ e*eu_2 + f*Feduc_a_2 + g*eu_1 + h*Feduc_a_1
Feduc_a_4 ~ e*eu_3 + f*Feduc_a_3 + g*eu_2 + h*Feduc_a_2
Feduc_a_5 ~ e*eu_4 + f*Feduc_a_4 + g*eu_3 + h*Feduc_a_3
Feduc_a_6 ~ e*eu_5 + f*Feduc_a_5 + g*eu_4 + h*Feduc_a_4
Feduc_a_7 ~ e*eu_6 + f*Feduc_a_6 + g*eu_5 + h*Feduc_a_5
Feduc_a_8 ~ e*eu_7 + f*Feduc_a_7 + g*eu_6 + h*Feduc_a_6
Feduc_a_9 ~ e*eu_8 + f*Feduc_a_8 + g*eu_7 + h*Feduc_a_7
Feduc_a_10 ~ e*eu_9 + f*Feduc_a_9 + g*eu_8 + h*Feduc_a_8
Feduc_a_11 ~ e*eu_10 + f*Feduc_a_10 + g*eu_9 + h*Feduc_a_9
# Estimate the covariance at the first wave.
cult_1 ~~ Feduc_a_1 # Covariance
cult_2 ~~ Feduc_a_2 # Covariance
cult_3 ~~ Feduc_a_3 # Covariance
cult_4 ~~ Feduc_a_4 # Covariance
cult_5 ~~ Feduc_a_5 # Covariance
cult_6 ~~ Feduc_a_6 # Covariance
cult_7 ~~ Feduc_a_7 # Covariance
cult_8 ~~ Feduc_a_8 # Covariance
cult_9 ~~ Feduc_a_9 # Covariance
cult_10 ~~ Feduc_a_10 # Covariance
cult_11 ~~ Feduc_a_11 # Covariance
# Estimate the variance
eu_1 ~~ eu_1
Feduc_a_1 ~~ Feduc_a_1
'
inc_diff_clpm2_constrained_lag <- '
# Estimate the lagged effects (constrained)
inc_diff_2 ~ a*inc_diff_1 + b*Feduc_a_1
inc_diff_3 ~ a*inc_diff_2 + b*Feduc_a_2 + c*inc_diff_1 + d*Feduc_a_1
inc_diff_4 ~ a*inc_diff_3 + b*Feduc_a_3 + c*inc_diff_2 + d*Feduc_a_2
inc_diff_5 ~ a*inc_diff_4 + b*Feduc_a_4 + c*inc_diff_3 + d*Feduc_a_3
inc_diff_6 ~ a*inc_diff_5 + b*Feduc_a_5 + c*inc_diff_4 + d*Feduc_a_4
inc_diff_7 ~ a*inc_diff_6 + b*Feduc_a_6 + c*inc_diff_5 + d*Feduc_a_5
inc_diff_8 ~ a*inc_diff_7 + b*Feduc_a_7 + c*inc_diff_6 + d*Feduc_a_6
inc_diff_9 ~ a*inc_diff_8 + b*Feduc_a_8 + c*inc_diff_7 + d*Feduc_a_7
inc_diff_10 ~ a*inc_diff_9 + b*Feduc_a_9 + c*inc_diff_8 + d*Feduc_a_8
inc_diff_11 ~ a*inc_diff_10 + b*Feduc_a_10 + c*inc_diff_9 + d*Feduc_a_9
Feduc_a_2 ~ e*inc_diff_1 + f*Feduc_a_1
Feduc_a_3 ~ e*inc_diff_2 + f*Feduc_a_2 + g*inc_diff_1 + h*Feduc_a_1
Feduc_a_4 ~ e*inc_diff_3 + f*Feduc_a_3 + g*inc_diff_2 + h*Feduc_a_2
Feduc_a_5 ~ e*inc_diff_4 + f*Feduc_a_4 + g*inc_diff_3 + h*Feduc_a_3
Feduc_a_6 ~ e*inc_diff_5 + f*Feduc_a_5 + g*inc_diff_4 + h*Feduc_a_4
Feduc_a_7 ~ e*inc_diff_6 + f*Feduc_a_6 + g*inc_diff_5 + h*Feduc_a_5
Feduc_a_8 ~ e*inc_diff_7 + f*Feduc_a_7 + g*inc_diff_6 + h*Feduc_a_6
Feduc_a_9 ~ e*inc_diff_8 + f*Feduc_a_8 + g*inc_diff_7 + h*Feduc_a_7
Feduc_a_10 ~ e*inc_diff_9 + f*Feduc_a_9 + g*inc_diff_8 + h*Feduc_a_8
Feduc_a_11 ~ e*inc_diff_10 + f*Feduc_a_10 + g*inc_diff_9 + h*Feduc_a_9
# Estimate the covariance at the first wave and residual covariances
inc_diff_1 ~~ Feduc_a_1 # Covariance
inc_diff_2 ~~ Feduc_a_2 # Covariance
inc_diff_3 ~~ Feduc_a_3 # Covariance
inc_diff_4 ~~ Feduc_a_4 # Covariance
inc_diff_5 ~~ Feduc_a_5 # Covariance
inc_diff_6 ~~ Feduc_a_6 # Covariance
inc_diff_7 ~~ Feduc_a_7 # Covariance
inc_diff_8 ~~ Feduc_a_8 # Covariance
inc_diff_9 ~~ Feduc_a_9 # Covariance
inc_diff_10 ~~ Feduc_a_10 # Covariance
inc_diff_11 ~~ Feduc_a_11 # Covariance
# Estimate the variance
inc_diff_1 ~~ inc_diff_1
Feduc_a_1 ~~ Feduc_a_1
'
#store formulas in list
formulas_clpm2_nocontrols <- list(EU_clpm2_constrained_lag,
cult_clpm2_constrained_lag,
inc_diff_clpm2_constrained_lag)
#create formulas with controls
EU_clpm2_control_constrained_lag <- '
# Estimate the lagged effects (constrained)
eu_2 ~ a*eu_1 + b*Feduc_a_1 + age_1 + educ_1 + work_1 + married_1
eu_3 ~ a*eu_2 + b*Feduc_a_2 + c*eu_1 + d*Feduc_a_1 + age_2 + educ_2 + work_2 + married_2
eu_4 ~ a*eu_3 + b*Feduc_a_3 + c*eu_2 + d*Feduc_a_2 + age_3 + educ_3 + work_3 + married_3
eu_5 ~ a*eu_4 + b*Feduc_a_4 + c*eu_3 + d*Feduc_a_3 + age_4 + educ_4 + work_4 + married_4
eu_6 ~ a*eu_5 + b*Feduc_a_5 + c*eu_4 + d*Feduc_a_4 + age_5 + educ_5 + work_5 + married_5
eu_7 ~ a*eu_6 + b*Feduc_a_6 + c*eu_5 + d*Feduc_a_5 + age_6 + educ_6 + work_6 + married_6
eu_8 ~ a*eu_7 + b*Feduc_a_7 + c*eu_6 + d*Feduc_a_6 + age_7 + educ_7 + work_7 + married_7
eu_9 ~ a*eu_8 + b*Feduc_a_8 + c*eu_7 + d*Feduc_a_7 + age_8 + educ_8 + work_8 + married_8
eu_10 ~ a*eu_9 + b*Feduc_a_9 + c*eu_8 + d*Feduc_a_8 + age_9 + educ_9 + work_9 + married_9
eu_11 ~ a*eu_10 + b*Feduc_a_10 + c*eu_9 + d*Feduc_a_9 + age_10 + educ_10 + work_10 + married_10
Feduc_a_2 ~ e*eu_1 + f*Feduc_a_1 + age_1 + educ_1 + work_1 + married_1
Feduc_a_3 ~ e*eu_2 + f*Feduc_a_2 + g*eu_1 + h*Feduc_a_1 + age_2 + educ_2 + work_2 + married_2
Feduc_a_4 ~ e*eu_3 + f*Feduc_a_3 + g*eu_2 + h*Feduc_a_2 + age_3 + educ_3 + work_3 + married_3
Feduc_a_5 ~ e*eu_4 + f*Feduc_a_4 + g*eu_3 + h*Feduc_a_3 + age_4 + educ_4 + work_4 + married_4
Feduc_a_6 ~ e*eu_5 + f*Feduc_a_5 + g*eu_4 + h*Feduc_a_4 + age_5 + educ_5 + work_5 + married_5
Feduc_a_7 ~ e*eu_6 + f*Feduc_a_6 + g*eu_5 + h*Feduc_a_5 + age_6 + educ_6 + work_6 + married_6
Feduc_a_8 ~ e*eu_7 + f*Feduc_a_7 + g*eu_6 + h*Feduc_a_6 + age_7 + educ_7 + work_7 + married_7
Feduc_a_9 ~ e*eu_8 + f*Feduc_a_8 + g*eu_7 + h*Feduc_a_7 + age_8 + educ_8 + work_8 + married_8
Feduc_a_10 ~ e*eu_9 + f*Feduc_a_9 + g*eu_8 + h*Feduc_a_8 + age_9 + educ_9 + work_9 + married_9
Feduc_a_11 ~ e*eu_10 + f*Feduc_a_10 + g*eu_9 + h*Feduc_a_9 + age_10 + educ_10 + work_10 + married_10
# Estimate the covariance at the first wave and residual covariances
eu_1 ~~ Feduc_a_1 # Covariance
eu_2 ~~ Feduc_a_2 # Covariance
eu_3 ~~ Feduc_a_3 # Covariance
eu_4 ~~ Feduc_a_4 # Covariance
eu_5 ~~ Feduc_a_5 # Covariance
eu_6 ~~ Feduc_a_6 # Covariance
eu_7 ~~ Feduc_a_7 # Covariance
eu_8 ~~ Feduc_a_8 # Covariance
eu_9 ~~ Feduc_a_9 # Covariance
eu_10 ~~ Feduc_a_10 # Covariance
eu_11 ~~ Feduc_a_11 # Covariance
# Estimate the variance
eu_1 ~~ eu_1
Feduc_a_1 ~~ Feduc_a_1
'
cult_clpm2_control_constrained_lag <- '
# Estimate the lagged effects (constrained)
cult_2 ~ a*cult_1 + b*Feduc_a_1 + age_1 + educ_1 + work_1 + married_1
cult_3 ~ a*cult_2 + b*Feduc_a_2 + c*cult_1 + d*Feduc_a_1 + age_2 + educ_2 + work_2 + married_2
cult_4 ~ a*cult_3 + b*Feduc_a_3 + c*cult_2 + d*Feduc_a_2 + age_3 + educ_3 + work_3 + married_3
cult_5 ~ a*cult_4 + b*Feduc_a_4 + c*cult_3 + d*Feduc_a_3 + age_4 + educ_4 + work_4 + married_4
cult_6 ~ a*cult_5 + b*Feduc_a_5 + c*cult_4 + d*Feduc_a_4 + age_5 + educ_5 + work_5 + married_5
cult_7 ~ a*cult_6 + b*Feduc_a_6 + c*cult_5 + d*Feduc_a_5 + age_6 + educ_6 + work_6 + married_6
cult_8 ~ a*cult_7 + b*Feduc_a_7 + c*cult_6 + d*Feduc_a_6 + age_7 + educ_7 + work_7 + married_7
cult_9 ~ a*cult_8 + b*Feduc_a_8 + c*cult_7 + d*Feduc_a_7 + age_8 + educ_8 + work_8 + married_8
cult_10 ~ a*cult_9 + b*Feduc_a_9 + c*cult_8 + d*Feduc_a_8 + age_9 + educ_9 + work_9 + married_9
cult_11 ~ a*cult_10 + b*Feduc_a_10 + c*cult_9 + d*Feduc_a_9 + age_10 + educ_10 + work_10 + married_10
Feduc_a_2 ~ e*cult_1 + f*Feduc_a_1 + age_1 + educ_1 + work_1 + married_1
Feduc_a_3 ~ e*cult_2 + f*Feduc_a_2 + g*cult_1 + h*Feduc_a_1 + age_2 + educ_2 + work_2 + married_2
Feduc_a_4 ~ e*cult_3 + f*Feduc_a_3 + g*cult_2 + h*Feduc_a_2 + age_3 + educ_3 + work_3 + married_3
Feduc_a_5 ~ e*cult_4 + f*Feduc_a_4 + g*cult_3 + h*Feduc_a_3 + age_4 + educ_4 + work_4 + married_4
Feduc_a_6 ~ e*cult_5 + f*Feduc_a_5 + g*cult_4 + h*Feduc_a_4 + age_5 + educ_5 + work_5 + married_5
Feduc_a_7 ~ e*cult_6 + f*Feduc_a_6 + g*cult_5 + h*Feduc_a_5 + age_6 + educ_6 + work_6 + married_6
Feduc_a_8 ~ e*cult_7 + f*Feduc_a_7 + g*cult_6 + h*Feduc_a_6 + age_7 + educ_7 + work_7 + married_7
Feduc_a_9 ~ e*cult_8 + f*Feduc_a_8 + g*cult_7 + h*Feduc_a_7 + age_8 + educ_8 + work_8 + married_8
Feduc_a_10 ~ e*cult_9 + f*Feduc_a_9 + g*cult_8 + h*Feduc_a_8 + age_9 + educ_9 + work_9 + married_9
Feduc_a_11 ~ e*cult_10 + f*Feduc_a_10 + g*cult_9 + h*Feduc_a_9 + age_10 + educ_10 + work_10 + married_10
# Estimate the covariance at the first wave.
cult_1 ~~ Feduc_a_1 # Covariance
cult_2 ~~ Feduc_a_2 # Covariance
cult_3 ~~ Feduc_a_3 # Covariance
cult_4 ~~ Feduc_a_4 # Covariance
cult_5 ~~ Feduc_a_5 # Covariance
cult_6 ~~ Feduc_a_6 # Covariance
cult_7 ~~ Feduc_a_7 # Covariance
cult_8 ~~ Feduc_a_8 # Covariance
cult_9 ~~ Feduc_a_9 # Covariance
cult_10 ~~ Feduc_a_10 # Covariance
cult_11 ~~ Feduc_a_11 # Covariance
# Estimate the variance
eu_1 ~~ eu_1
Feduc_a_1 ~~ Feduc_a_1
'
inc_diff_clpm2_control_constrained_lag <- '
# Estimate the lagged effects (constrained)
inc_diff_2 ~ a*inc_diff_1 + b*Feduc_a_1 + age_1 + educ_1 + work_1 + married_1
inc_diff_3 ~ a*inc_diff_2 + b*Feduc_a_2 + c*inc_diff_1 + d*Feduc_a_1 + age_2 + educ_2 + work_2 + married_2
inc_diff_4 ~ a*inc_diff_3 + b*Feduc_a_3 + c*inc_diff_2 + d*Feduc_a_2 + age_3 + educ_3 + work_3 + married_3
inc_diff_5 ~ a*inc_diff_4 + b*Feduc_a_4 + c*inc_diff_3 + d*Feduc_a_3 + age_4 + educ_4 + work_4 + married_4
inc_diff_6 ~ a*inc_diff_5 + b*Feduc_a_5 + c*inc_diff_4 + d*Feduc_a_4 + age_5 + educ_5 + work_5 + married_5
inc_diff_7 ~ a*inc_diff_6 + b*Feduc_a_6 + c*inc_diff_5 + d*Feduc_a_5 + age_6 + educ_6 + work_6 + married_6
inc_diff_8 ~ a*inc_diff_7 + b*Feduc_a_7 + c*inc_diff_6 + d*Feduc_a_6 + age_7 + educ_7 + work_7 + married_7
inc_diff_9 ~ a*inc_diff_8 + b*Feduc_a_8 + c*inc_diff_7 + d*Feduc_a_7 + age_8 + educ_8 + work_8 + married_8
inc_diff_10 ~ a*inc_diff_9 + b*Feduc_a_9 + c*inc_diff_8 + d*Feduc_a_8 + age_9 + educ_9 + work_9 + married_9
inc_diff_11 ~ a*inc_diff_10 + b*Feduc_a_10 + c*inc_diff_9 + d*Feduc_a_9 + age_10 + educ_10 + work_10 + married_10
Feduc_a_2 ~ e*inc_diff_1 + f*Feduc_a_1 + age_1 + educ_1 + work_1 + married_1
Feduc_a_3 ~ e*inc_diff_2 + f*Feduc_a_2 + g*inc_diff_1 + h*Feduc_a_1 + age_2 + educ_2 + work_2 + married_2
Feduc_a_4 ~ e*inc_diff_3 + f*Feduc_a_3 + g*inc_diff_2 + h*Feduc_a_2 + age_3 + educ_3 + work_3 + married_3
Feduc_a_5 ~ e*inc_diff_4 + f*Feduc_a_4 + g*inc_diff_3 + h*Feduc_a_3 + age_4 + educ_4 + work_4 + married_4
Feduc_a_6 ~ e*inc_diff_5 + f*Feduc_a_5 + g*inc_diff_4 + h*Feduc_a_4 + age_5 + educ_5 + work_5 + married_5
Feduc_a_7 ~ e*inc_diff_6 + f*Feduc_a_6 + g*inc_diff_5 + h*Feduc_a_5 + age_6 + educ_6 + work_6 + married_6
Feduc_a_8 ~ e*inc_diff_7 + f*Feduc_a_7 + g*inc_diff_6 + h*Feduc_a_6 + age_7 + educ_7 + work_7 + married_7
Feduc_a_9 ~ e*inc_diff_8 + f*Feduc_a_8 + g*inc_diff_7 + h*Feduc_a_7 + age_8 + educ_8 + work_8 + married_8
Feduc_a_10 ~ e*inc_diff_9 + f*Feduc_a_9 + g*inc_diff_8 + h*Feduc_a_8 + age_9 + educ_9 + work_9 + married_9
Feduc_a_11 ~ e*inc_diff_10 + f*Feduc_a_10 + g*inc_diff_9 + h*Feduc_a_9 + age_10 + educ_10 + work_10 + married_10
# Estimate the covariance at the first wave and residual covariances
inc_diff_1 ~~ Feduc_a_1 # Covariance
inc_diff_2 ~~ Feduc_a_2 # Covariance
inc_diff_3 ~~ Feduc_a_3 # Covariance
inc_diff_4 ~~ Feduc_a_4 # Covariance
inc_diff_5 ~~ Feduc_a_5 # Covariance
inc_diff_6 ~~ Feduc_a_6 # Covariance
inc_diff_7 ~~ Feduc_a_7 # Covariance
inc_diff_8 ~~ Feduc_a_8 # Covariance
inc_diff_9 ~~ Feduc_a_9 # Covariance
inc_diff_10 ~~ Feduc_a_10 # Covariance
inc_diff_11 ~~ Feduc_a_11 # Covariance
# Estimate the variance
inc_diff_1 ~~ inc_diff_1
Feduc_a_1 ~~ Feduc_a_1
'
#store formulas in list
formulas_clpm2_controls <- list(EU_clpm2_control_constrained_lag,
cult_clpm2_control_constrained_lag,
inc_diff_clpm2_control_constrained_lag)
filename <- file.path("results",
"riclpm",
"240821_lavaan-clpm-results.Rdata")
#full model list
clpm_model_formulas <- list(
EU_clpm1_constrained_lag,
cult_clpm1_constrained_lag,
inc_diff_clpm1_constrained_lag,
EU_clpm1_control_constrained_lag,
cult_clpm1_control_constrained_lag,
inc_diff_clpm1_control_constrained_lag,
EU_clpm2_constrained_lag,
cult_clpm2_constrained_lag,
inc_diff_clpm2_constrained_lag,
EU_clpm2_control_constrained_lag,
cult_clpm2_control_constrained_lag,
inc_diff_clpm2_control_constrained_lag
)
#estimation
if (!file.exists(filename)) {
# paralellize the estimation
numCores <- detectCores()
registerDoParallel(core = 6)
#estimate models and store in list
clpm_results_list <- foreach(a = 1:length(clpm_model_formulas),
.packages = "lavaan") %dopar% {
sem(
clpm_model_formulas[[a]],
data = MyData,
estimator = 'MLR',
missing = "ML",
meanstructure = T,
int.ov.free = T
)
}
#stop parralellization
stopImplicitCluster()
save(clpm_results_list,
file = filename)
} else
(
load(filename)
)
[1] “clpm_results_list”
#create sublist to loop over
clpm1_nocontrol <- clpm_results_list[1:3]
clpm1_control <- clpm_results_list[4:6]
clpm2_nocontrol <- clpm_results_list[7:9]
clpm2_control <- clpm_results_list[10:12]
#extract infro from lists
clpm1_nocontrol_df <- foreach(a = 1:3,
.combine = rbind) %do% {
standardizedSolution(clpm1_nocontrol[[a]]) %>%
mutate(depvar = a,
model = "clpm1",
control = "none") %>%
filter(row_number() %in% c(2,21)) %>%
mutate(effect = case_when(
label == "b" ~ 1,
label == "c" ~ 2
))
}
clpm1_control_df <- foreach(a = 1:3,
.combine = rbind) %do% {
standardizedSolution(clpm1_control[[a]]) %>%
mutate(depvar = a,
model = "clpm1",
control = "control") %>%
filter(row_number() %in% c(2,61)) %>%
mutate(effect = case_when(
label == "b" ~ 1,
label == "c" ~ 2
))
}
clpm2_nocontrol_df <- foreach(a = 1:3,
.combine = rbind) %do% {
standardizedSolution(clpm2_nocontrol[[a]]) %>%
mutate(depvar = a,
model = "clpm2",
control = "none") %>%
filter(row_number() %in% c(4,6,41,43)) %>%
mutate(effect = case_when(
label == "b" ~ 1,
label == "e" ~ 3,
label == "d" ~ 2,
label == "g" ~ 4,
))
}
clpm2_control_df <- foreach(a = 1:3,
.combine = rbind) %do% {
standardizedSolution(clpm2_control[[a]]) %>%
mutate(depvar = a,
model = "clpm2",
control = "control") %>%
filter(row_number() %in% c(8,10,85,87)) %>%
mutate(effect = case_when(
label == "b" ~ 1,
label == "e" ~ 3,
label == "d" ~ 2,
label == "g" ~ 4,
))
}
#create one df
results_df <- list(clpm1_control_df,
clpm1_nocontrol_df,
clpm2_control_df,
clpm2_nocontrol_df) %>%
bind_rows()
#plot_clpm1
plot_clpm1 <- results_df %>%
filter(model == "clpm1") %>%
filter(control == "control") %>%
rename(indep_var = rhs) %>%
mutate(effect = factor(effect,
levels = 1:2,
labels = c(
"Educational \n influence",
"Selection")),
depvar = case_when(
depvar == 1 ~ 2,
depvar == 2 ~ 1,
depvar == 3 ~ 3
),
depvar = factor(depvar,
levels = 1:3,
labels = c(
"Cultural Inclusion",
"European Integration",
"Income Equality"))) %>%
ggplot(aes(x = est.std,
y = effect,
shape = effect)) +
geom_vline(xintercept = 0) +
geom_linerange(aes(xmin = est.std - (se*1.96),
xmax = est.std + (se*1.96))) +
geom_point(aes(colour = effect),
size = 2) +
facet_wrap(vars(depvar),
ncol = 1) +
scale_x_continuous(limits = c(-0.10, 0.10)) +
scale_colour_viridis(discrete = T,
option = "D") +
theme(panel.background = element_rect(fill = "#FFFFFF"),
plot.background = element_rect(fill = "#FFFFFF"),
panel.grid = element_line(colour = "grey"),
panel.grid.major.y = element_blank(),
text = element_text(family = "sans", size = 12),
strip.background = element_rect(fill = "#A9A9A9"),
panel.grid.minor = element_blank(),
legend.position = "none",
legend.title = element_blank(),
legend.background = element_rect(fill = "#FFFFFF"),
legend.key = element_rect(fill = "#FFFFFF")) +
labs(y = "Path",
x = "Standardized Estimate")
ggsave(plot = plot_clpm1,
file = "plots/results/riclpm_clpm1_240821.pdf",
dpi = 600, width = 5, height = 4)
plot_clpm1
#plot_clpm2
plot_clpm2 <- results_df %>%
filter(model == "clpm2") %>%
filter(control == "control") %>%
rename(indep_var = rhs) %>%
mutate(effect = factor(effect,
levels = 1:4,
labels = c(
"Educational influence (lag 1)",
"Educational influence (lag 2)",
"Selection (lag 1)",
"Selection (lag 2)")),
depvar = case_when(
depvar == 1 ~ 2,
depvar == 2 ~ 1,
depvar == 3 ~ 3
),
depvar = factor(depvar,
levels = 1:3,
labels = c(
"Cultural Inclusion",
"European Integration",
"Income Equality"))) %>%
ggplot(aes(x = est.std,
y = effect,
shape = effect)) +
geom_vline(xintercept = 0) +
geom_linerange(aes(xmin = est.std - (se*1.96),
xmax = est.std + (se*1.96))) +
geom_point(aes(colour = effect,
fill = effect),
size = 2) +
facet_wrap(vars(depvar),
ncol = 1) +
scale_shape_manual(values = c(21,22,23,24)) +
scale_x_continuous(limits = c(-0.1, 0.1)) +
scale_colour_viridis(discrete = T,
option = "D") +
scale_fill_viridis(discrete = T,
option = "D") +
theme(panel.background = element_rect(fill = "#FFFFFF"),
plot.background = element_rect(fill = "#FFFFFF"),
panel.grid = element_line(colour = "grey"),
panel.grid.major.y = element_blank(),
text = element_text(family = "sans", size = 12),
strip.background = element_rect(fill = "#A9A9A9"),
panel.grid.minor = element_blank(),
legend.position = "none",
legend.title = element_blank(),
legend.background = element_rect(fill = "#FFFFFF"),
legend.key = element_rect(fill = "#FFFFFF")) +
labs(y = "Path",
x = "Standardized Estimate")
ggsave(plot = plot_clpm2,
file = "plots/results/riclpm_clpm2_240821.pdf",
dpi = 600, width = 5, height = 4)
plot_clpm2
Copyright © 2024 Jeroense Thijmen