ICED

library("lavaan")
## This is lavaan 0.6-8
## lavaan is FREE software! Please report any bugs.
source("R/ICED_syntax.R")
source("R/ICED_run.R")
source("R/ICED_boot.R")
source("R/str2cov.R")
source("R/sim_ICED.R")

ICED: IntraClass Effect Decomposition

This script is intended to highlight progress and functionality with the ICED package

generate syntax

The ICED_syntax() function takes a dataframe and generates the lavaan syntax to run the model (the first variable must be time). Here we save it to the syn object. The model will also be printed to the console. We are aiming to recreate the model from Brandmaier et al. (2018), Figure 4

Brandmaier et al. (2018) Figure 4
struc <- data.frame(time = c("T1", "T2", "T3", "T4"),
                    day = c("day1","day1","day2","day2"),
                    session = c("ses1", "ses1","ses2", "ses3"))

syn <- iced_syntax(struc)
## ! regressions
## T =~ 1*T1
## T =~ 1*T2
## T =~ 1*T3
## T =~ 1*T4
## day1 =~ 1*T1
## day1 =~ 1*T2
## day2 =~ 1*T3
## day2 =~ 1*T4
## ses1 =~ 1*T1
## ses1 =~ 1*T2
## ses2 =~ 1*T3
## ses3 =~ 1*T4
## E1 =~ 1*T1
## E2 =~ 1*T2
## E3 =~ 1*T3
## E4 =~ 1*T4
## ! residuals, variances and covariances
## T ~~ time*T
## day1 ~~ day*day1
## day2 ~~ day*day2
## ses1 ~~ session*ses1
## ses2 ~~ session*ses2
## ses3 ~~ session*ses3
## E1 ~~ e*E1
## E2 ~~ e*E2
## E3 ~~ e*E3
## E4 ~~ e*E4
## T ~~ 0*day1
## T ~~ 0*day2
## T ~~ 0*ses1
## T ~~ 0*ses2
## T ~~ 0*ses3
## T ~~ 0*E1
## T ~~ 0*E2
## T ~~ 0*E3
## T ~~ 0*E4
## day1 ~~ 0*day2
## day1 ~~ 0*ses1
## day1 ~~ 0*ses2
## day1 ~~ 0*ses3
## day1 ~~ 0*E1
## day1 ~~ 0*E2
## day1 ~~ 0*E3
## day1 ~~ 0*E4
## day2 ~~ 0*ses1
## day2 ~~ 0*ses2
## day2 ~~ 0*ses3
## day2 ~~ 0*E1
## day2 ~~ 0*E2
## day2 ~~ 0*E3
## day2 ~~ 0*E4
## ses1 ~~ 0*ses2
## ses1 ~~ 0*ses3
## ses1 ~~ 0*E1
## ses1 ~~ 0*E2
## ses1 ~~ 0*E3
## ses1 ~~ 0*E4
## ses2 ~~ 0*ses3
## ses2 ~~ 0*E1
## ses2 ~~ 0*E2
## ses2 ~~ 0*E3
## ses2 ~~ 0*E4
## ses3 ~~ 0*E1
## ses3 ~~ 0*E2
## ses3 ~~ 0*E3
## ses3 ~~ 0*E4
## E1 ~~ 0*E2
## E1 ~~ 0*E3
## E1 ~~ 0*E4
## E2 ~~ 0*E3
## E2 ~~ 0*E4
## E3 ~~ 0*E4
## ! observed means
## T1~1
## T2~1
## T3~1
## T4~1
## !set lower bounds of variances
## time > 0.0001 
## day > 0.0001 
## session > 0.0001 
## e > 0.0001

simulate data

We’ll simulate data to run the ICED model on. The sim_ICED function takes the model structure dataframe we used earlier and a list of variances for each latent variable. The function returns several outputs, including the simulated data.

sim1 <- sim_ICED(struc,
                 variances = list(time = 10,
                                  day = 2,
                                  session = 1,
                                  error = 3),
                 n = 2000)

head(sim1$data)
##             T1         T2        T3         T4
## 1 -6.892969387 -6.5932264 -8.723213 -7.6298887
## 2  2.563843435  6.7974728  1.521446  3.0070102
## 3  3.750682653  2.0135844  1.898953  3.3198217
## 4 -0.008140112  0.8534418 -2.378560 -0.9479120
## 5 -2.319533037 -2.1481638 -3.104065 -0.6225882
## 6  3.568513686  0.6051093  1.038575 -3.9176493

we can also examine how well sim_ICED has recovered our variance parameters by setting check_recovery = TRUE. lets simulate two datasets, one large and another small.

sim2 <- sim_ICED(struc,
                 variances = list(time = 10,
                                  day = 2,
                                  session = 1,
                                  error = 3),
                 n = 2000,
                 check_recovery = TRUE)
## [1] "n =  2000 data simulated"
## [1] "data simulated based on ICC1 =  0.625"
##    time     day session   error 
##      10       2       1       3 
## [1] "model parameters recovered:"
## [1] "ICC1 = 0.644583202724004"
##    timeest     dayest sessionest       eest 
## 10.5419826  1.9993960  0.8164775  2.9968714
sim3 <- sim_ICED(struc,
                 variances = list(time = 10,
                                  day = 2,
                                  session = 1,
                                  error = 3),
                 n = 20,
                 check_recovery = TRUE)
## [1] "n =  20 data simulated"
## [1] "data simulated based on ICC1 =  0.625"
##    time     day session   error 
##      10       2       1       3 
## [1] "model parameters recovered:"
## [1] "ICC1 = 0.540163701082888"
##    timeest     dayest sessionest       eest 
##  6.4965675  0.5116045  2.2645328  2.7543297

str2cov

The sim_ICED function uses a helper function str2cov, which takes the same structure data.frame and the list of variances we specified earlier to generate the expected covariance of the model. This is then passed to mvrnorm to generate the data. e.g.

str2cov(struc,
        list(time = 10,
             day = 2,
             session = 1,
             error = 3),
        e_label = "error")
##    T1 T2 T3 T4
## T1 16 13 10 10
## T2 13 16 10 10
## T3 10 10 16 12
## T4 10 10 12 16

run_ICED

we can now run our model. The run_ICED function will print a bunch of relevant outputs. Note that the sim_ICED function returns a list of objects, so we need to specify the data part

res1 <- run_ICED(model = syn,
                 data = sim1$data)
## $ICC
## [1] 0.6315415
## 
## $ICC2
## [1] 0.828968
## 
## $timeest
## [1] 10.12744
## 
## $dayest
## [1] 2.023995
## 
## $sessionest
## [1] 0.8988333
## 
## $eest
## [1] 2.985794
## 
## $EffectiveError
## [1] 2.089485
## 
## $AbsoluteError
## [1] 2.058057
## 
## $phi_dependability
## [1] 0.831106
## 
## $lavaan
## lavaan 0.6-8 ended normally after 209 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        14
##   Number of inequality constraints                   4
##                                                       
##   Number of observations                          2000
##   Number of missing patterns                         1
##                                                       
## Model Test User Model:
##                                                       
##   Test statistic                                 3.685
##   Degrees of freedom                                 6
##   P-value (Chi-square)                           0.719
## 
## $est_cov
##    T1     T2     T3     T4    
## T1 16.036                     
## T2 13.050 16.036              
## T3 10.127 10.127 16.036       
## T4 10.127 10.127 12.151 16.036

we can also bootstrap our estimates. The output now includes 95% CIs on the ICC and ICC2. Best to use more than 10 boots, but set to 10 for speed here

run_ICED(model = syn,
         data = sim1$data,
         boot = 10)
## Warning in norm.inter(t, alpha): extreme order statistics used as endpoints

## Warning in norm.inter(t, alpha): extreme order statistics used as endpoints

## $ICC
## [1] 0.6315415
## 
## $ICC_CIs
## [1] 0.6190221 0.6469655
## 
## $ICC2
## [1] 0.828968
## 
## $ICC2_CIs
## [1] 0.8237431 0.8462589
## 
## $timeest
## [1] 10.12744
## 
## $dayest
## [1] 2.023995
## 
## $sessionest
## [1] 0.8988333
## 
## $eest
## [1] 2.985794
## 
## $EffectiveError
## [1] 2.089485
## 
## $AbsoluteError
## [1] 2.058057
## 
## $phi_dependability
## [1] 0.831106
## 
## $lavaan
## lavaan 0.6-8 ended normally after 209 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        14
##   Number of inequality constraints                   4
##                                                       
##   Number of observations                          2000
##   Number of missing patterns                         1
##                                                       
## Model Test User Model:
##                                                       
##   Test statistic                                 3.685
##   Degrees of freedom                                 6
##   P-value (Chi-square)                           0.719
## 
## $est_cov
##    T1     T2     T3     T4    
## T1 16.036                     
## T2 13.050 16.036              
## T3 10.127 10.127 16.036       
## T4 10.127 10.127 12.151 16.036

model comparison

we can compare alternative models, for example constraining the variance of one component to zero

syntax2 <- iced_syntax(struc,
                       set_variances = c(res1$timeest, 
                                         res1$dayest, 
                                         0,
                                         res1$eest))
## Warning in iced_syntax(struc, set_variances = c(res1$timeest, res1$dayest, :
## set_variances must be list

## ! regressions
## T =~ 1*T1
## T =~ 1*T2
## T =~ 1*T3
## T =~ 1*T4
## day1 =~ 1*T1
## day1 =~ 1*T2
## day2 =~ 1*T3
## day2 =~ 1*T4
## ses1 =~ 1*T1
## ses1 =~ 1*T2
## ses2 =~ 1*T3
## ses3 =~ 1*T4
## E1 =~ 1*T1
## E2 =~ 1*T2
## E3 =~ 1*T3
## E4 =~ 1*T4
## ! residuals, variances and covariances
## T ~~ time*T
## day1 ~~ day*day1
## day2 ~~ day*day2
## ses1 ~~ session*ses1
## ses2 ~~ session*ses2
## ses3 ~~ session*ses3
## E1 ~~ e*E1
## E2 ~~ e*E2
## E3 ~~ e*E3
## E4 ~~ e*E4
## T ~~ 0*day1
## T ~~ 0*day2
## T ~~ 0*ses1
## T ~~ 0*ses2
## T ~~ 0*ses3
## T ~~ 0*E1
## T ~~ 0*E2
## T ~~ 0*E3
## T ~~ 0*E4
## day1 ~~ 0*day2
## day1 ~~ 0*ses1
## day1 ~~ 0*ses2
## day1 ~~ 0*ses3
## day1 ~~ 0*E1
## day1 ~~ 0*E2
## day1 ~~ 0*E3
## day1 ~~ 0*E4
## day2 ~~ 0*ses1
## day2 ~~ 0*ses2
## day2 ~~ 0*ses3
## day2 ~~ 0*E1
## day2 ~~ 0*E2
## day2 ~~ 0*E3
## day2 ~~ 0*E4
## ses1 ~~ 0*ses2
## ses1 ~~ 0*ses3
## ses1 ~~ 0*E1
## ses1 ~~ 0*E2
## ses1 ~~ 0*E3
## ses1 ~~ 0*E4
## ses2 ~~ 0*ses3
## ses2 ~~ 0*E1
## ses2 ~~ 0*E2
## ses2 ~~ 0*E3
## ses2 ~~ 0*E4
## ses3 ~~ 0*E1
## ses3 ~~ 0*E2
## ses3 ~~ 0*E3
## ses3 ~~ 0*E4
## E1 ~~ 0*E2
## E1 ~~ 0*E3
## E1 ~~ 0*E4
## E2 ~~ 0*E3
## E2 ~~ 0*E4
## E3 ~~ 0*E4
## ! observed means
## T1~1
## T2~1
## T3~1
## T4~1
## !set variances
##  
##  time == 10.1274398251025
##  day == 2.02399517103763
##  session == 0
##  e == 2.98579433458071
res2 <- run_ICED(syntax2,
                 sim1$data)
## $ICC
## [1] 0.6690418
## 
## $ICC2
## [1] 0.8520559
## 
## $timeest
## [1] 10.12744
## 
## $dayest
## [1] 2.023995
## 
## $sessionest
## [1] 0
## 
## $eest
## [1] 2.985794
## 
## $EffectiveError
## [1] 1.758446
## 
## $AbsoluteError
## [1] 1.758446
## 
## $phi_dependability
## [1] 0.8520559
## 
## $lavaan
## lavaan 0.6-8 ended normally after 1 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        14
##   Number of equality constraints                    10
##                                                       
##   Number of observations                          2000
##   Number of missing patterns                         1
##                                                       
## Model Test User Model:
##                                                       
##   Test statistic                               113.780
##   Degrees of freedom                                10
##   P-value (Chi-square)                           0.000
## 
## $est_cov
##    T1     T2     T3     T4    
## T1 15.137                     
## T2 12.151 15.137              
## T3 10.127 10.127 15.137       
## T4 10.127 10.127 12.151 15.137
anova(res1$lavaan,
      res2$lavaan)
## Chi-Squared Difference Test
## 
##             Df   AIC   BIC    Chisq Chisq diff Df diff Pr(>Chisq)    
## res1$lavaan  6 39651 39696   3.6852                                  
## res2$lavaan 10 39753 39776 113.7797     110.09       4  < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

group comparisons

we can use iced_syntax to generate the syntax for multiple groups. The user can specify a number of groups or a vector of strings. Here we’ll also highlight that we can set the variances to be greater than zero also.

group_syntax <- iced_syntax(struc,
                            groups = 2,
                            fix_lower_bounds = TRUE)
## ! regressions
## T =~ 1*T1
## T =~ 1*T2
## T =~ 1*T3
## T =~ 1*T4
## day1 =~ 1*T1
## day1 =~ 1*T2
## day2 =~ 1*T3
## day2 =~ 1*T4
## ses1 =~ 1*T1
## ses1 =~ 1*T2
## ses2 =~ 1*T3
## ses3 =~ 1*T4
## E1 =~ 1*T1
## E2 =~ 1*T2
## E3 =~ 1*T3
## E4 =~ 1*T4
## ! residuals, variances and covariances
## T ~~ c(lattime1,lattime2)*T
## day1 ~~ c(latday1,latday2)*day1
## day2 ~~ c(latday1,latday2)*day2
## ses1 ~~ c(latsession1,latsession2)*ses1
## ses2 ~~ c(latsession1,latsession2)*ses2
## ses3 ~~ c(latsession1,latsession2)*ses3
## E1 ~~ c(late1,late2)*E1
## E2 ~~ c(late1,late2)*E2
## E3 ~~ c(late1,late2)*E3
## E4 ~~ c(late1,late2)*E4
## T ~~ 0*day1
## T ~~ 0*day2
## T ~~ 0*ses1
## T ~~ 0*ses2
## T ~~ 0*ses3
## T ~~ 0*E1
## T ~~ 0*E2
## T ~~ 0*E3
## T ~~ 0*E4
## day1 ~~ 0*day2
## day1 ~~ 0*ses1
## day1 ~~ 0*ses2
## day1 ~~ 0*ses3
## day1 ~~ 0*E1
## day1 ~~ 0*E2
## day1 ~~ 0*E3
## day1 ~~ 0*E4
## day2 ~~ 0*ses1
## day2 ~~ 0*ses2
## day2 ~~ 0*ses3
## day2 ~~ 0*E1
## day2 ~~ 0*E2
## day2 ~~ 0*E3
## day2 ~~ 0*E4
## ses1 ~~ 0*ses2
## ses1 ~~ 0*ses3
## ses1 ~~ 0*E1
## ses1 ~~ 0*E2
## ses1 ~~ 0*E3
## ses1 ~~ 0*E4
## ses2 ~~ 0*ses3
## ses2 ~~ 0*E1
## ses2 ~~ 0*E2
## ses2 ~~ 0*E3
## ses2 ~~ 0*E4
## ses3 ~~ 0*E1
## ses3 ~~ 0*E2
## ses3 ~~ 0*E3
## ses3 ~~ 0*E4
## E1 ~~ 0*E2
## E1 ~~ 0*E3
## E1 ~~ 0*E4
## E2 ~~ 0*E3
## E2 ~~ 0*E4
## E3 ~~ 0*E4
## ! observed means
## T1~1
## T2~1
## T3~1
## T4~1
## !set lower bounds of variances
## lattime1 > 0.0001 
## lattime2 > 0.0001 
## latday1 > 0.0001 
## latday2 > 0.0001 
## latsession1 > 0.0001 
## latsession2 > 0.0001 
## late1 > 0.0001 
## late2 > 0.0001
group_syntax <- iced_syntax(struc,
                            groups = c("group1", "group2"),
                            fix_lower_bounds = TRUE)
## ! regressions
## T =~ 1*T1
## T =~ 1*T2
## T =~ 1*T3
## T =~ 1*T4
## day1 =~ 1*T1
## day1 =~ 1*T2
## day2 =~ 1*T3
## day2 =~ 1*T4
## ses1 =~ 1*T1
## ses1 =~ 1*T2
## ses2 =~ 1*T3
## ses3 =~ 1*T4
## E1 =~ 1*T1
## E2 =~ 1*T2
## E3 =~ 1*T3
## E4 =~ 1*T4
## ! residuals, variances and covariances
## T ~~ c(lattimegroup1,lattimegroup2)*T
## day1 ~~ c(latdaygroup1,latdaygroup2)*day1
## day2 ~~ c(latdaygroup1,latdaygroup2)*day2
## ses1 ~~ c(latsessiongroup1,latsessiongroup2)*ses1
## ses2 ~~ c(latsessiongroup1,latsessiongroup2)*ses2
## ses3 ~~ c(latsessiongroup1,latsessiongroup2)*ses3
## E1 ~~ c(lategroup1,lategroup2)*E1
## E2 ~~ c(lategroup1,lategroup2)*E2
## E3 ~~ c(lategroup1,lategroup2)*E3
## E4 ~~ c(lategroup1,lategroup2)*E4
## T ~~ 0*day1
## T ~~ 0*day2
## T ~~ 0*ses1
## T ~~ 0*ses2
## T ~~ 0*ses3
## T ~~ 0*E1
## T ~~ 0*E2
## T ~~ 0*E3
## T ~~ 0*E4
## day1 ~~ 0*day2
## day1 ~~ 0*ses1
## day1 ~~ 0*ses2
## day1 ~~ 0*ses3
## day1 ~~ 0*E1
## day1 ~~ 0*E2
## day1 ~~ 0*E3
## day1 ~~ 0*E4
## day2 ~~ 0*ses1
## day2 ~~ 0*ses2
## day2 ~~ 0*ses3
## day2 ~~ 0*E1
## day2 ~~ 0*E2
## day2 ~~ 0*E3
## day2 ~~ 0*E4
## ses1 ~~ 0*ses2
## ses1 ~~ 0*ses3
## ses1 ~~ 0*E1
## ses1 ~~ 0*E2
## ses1 ~~ 0*E3
## ses1 ~~ 0*E4
## ses2 ~~ 0*ses3
## ses2 ~~ 0*E1
## ses2 ~~ 0*E2
## ses2 ~~ 0*E3
## ses2 ~~ 0*E4
## ses3 ~~ 0*E1
## ses3 ~~ 0*E2
## ses3 ~~ 0*E3
## ses3 ~~ 0*E4
## E1 ~~ 0*E2
## E1 ~~ 0*E3
## E1 ~~ 0*E4
## E2 ~~ 0*E3
## E2 ~~ 0*E4
## E3 ~~ 0*E4
## ! observed means
## T1~1
## T2~1
## T3~1
## T4~1
## !set lower bounds of variances
## lattimegroup1 > 0.0001 
## lattimegroup2 > 0.0001 
## latdaygroup1 > 0.0001 
## latdaygroup2 > 0.0001 
## latsessiongroup1 > 0.0001 
## latsessiongroup2 > 0.0001 
## lategroup1 > 0.0001 
## lategroup2 > 0.0001

generating multiple group data takes a few more lines of code currently - but I plan to adapt this to take vectors within the lists.

variances_hi <- list(time = 8,
                  day = .25,
                  session = .2,
                  error = .25)

variances_lo <- list(time = 2,
                     day = .25,
                     session = .2,
                     error = .25)

sim_hi <- sim_ICED(structure = struc,
                 variances = variances_hi,
                 n = 100)$data

sim_lo <- sim_ICED(structure = struc,
                 variances = variances_lo,
                 n = 100)$data

sim_hi$group <- "high"
sim_lo$group <- "low"

sim_all <- rbind(sim_hi, sim_lo)

we can check the ICC reliability we have specified fairly easily, e.g. for the high group variances_hi$time / (sum(unlist(variances_hi))). For the high group ICC = 0.9195402, and the low group ICC = 0.7407407.

Then we can compare the groups (not currenly within run_ICED). Here, m0 is our base model constraining variances across groups, and m1 using the model we just generated to allow them to vary across groups.

m1 <- lavaan::lavaan(model = group_syntax,
               data = sim_all,
               group = "group")

m0 <- lavaan::lavaan(model = syn,
                     data = sim_all,
                     group = "group")
## Warning in lavaanify(model = FLAT, constraints = constraints, varTable = lavdata@ov, : lavaan WARNING: using a single label per parameter in a multiple group
##   setting implies imposing equality constraints across all the groups;
##   If this is not intended, either remove the label(s), or use a vector
##   of labels (one for each group);
##   See the Multiple groups section in the man page of model.syntax.
summary(m1)
## lavaan 0.6-8 ended normally after 376 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        28
##   Number of inequality constraints                   8
##                                                       
##   Number of observations per group:                   
##     high                                           100
##     low                                            100
##                                                       
## Model Test User Model:
##                                                       
##   Test statistic                                15.425
##   Degrees of freedom                                12
##   P-value (Chi-square)                           0.219
##   Test statistic for each group:
##     high                                         7.306
##     low                                          8.119
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## 
## Group 1 [high]:
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   T =~                                                
##     T1                1.000                           
##     T2                1.000                           
##     T3                1.000                           
##     T4                1.000                           
##   day1 =~                                             
##     T1                1.000                           
##     T2                1.000                           
##   day2 =~                                             
##     T3                1.000                           
##     T4                1.000                           
##   ses1 =~                                             
##     T1                1.000                           
##     T2                1.000                           
##   ses2 =~                                             
##     T3                1.000                           
##   ses3 =~                                             
##     T4                1.000                           
##   E1 =~                                               
##     T1                1.000                           
##   E2 =~                                               
##     T2                1.000                           
##   E3 =~                                               
##     T3                1.000                           
##   E4 =~                                               
##     T4                1.000                           
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   T ~~                                                
##     day1              0.000                           
##     day2              0.000                           
##     ses1              0.000                           
##     ses2              0.000                           
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   day1 ~~                                             
##     day2              0.000                           
##     ses1              0.000                           
##     ses2              0.000                           
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   day2 ~~                                             
##     ses1              0.000                           
##     ses2              0.000                           
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   ses1 ~~                                             
##     ses2              0.000                           
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   ses2 ~~                                             
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   ses3 ~~                                             
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   E1 ~~                                               
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   E2 ~~                                               
##     E3                0.000                           
##     E4                0.000                           
##   E3 ~~                                               
##     E4                0.000                           
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .T1               -0.013    0.296   -0.044    0.965
##    .T2                0.043    0.296    0.146    0.884
##    .T3                0.122    0.296    0.411    0.681
##    .T4                0.067    0.296    0.227    0.821
##     T                 0.000                           
##     day1              0.000                           
##     day2              0.000                           
##     ses1              0.000                           
##     ses2              0.000                           
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##     T       (ltt1)    7.985    1.174    6.798    0.000
##     day1    (ltd1)    0.407    0.098    4.172    0.000
##     day2    (ltd1)    0.407    0.098    4.172    0.000
##     ses1    (lts1)    0.153    0.061    2.535    0.011
##     ses2    (lts1)    0.153    0.061    2.535    0.011
##     ses3    (lts1)    0.153    0.061    2.535    0.011
##     E1      (ltg1)    0.216    0.031    7.073    0.000
##     E2      (ltg1)    0.216    0.031    7.073    0.000
##     E3      (ltg1)    0.216    0.031    7.073    0.000
##     E4      (ltg1)    0.216    0.031    7.073    0.000
##    .T1                0.000                           
##    .T2                0.000                           
##    .T3                0.000                           
##    .T4                0.000                           
## 
## 
## Group 2 [low]:
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   T =~                                                
##     T1                1.000                           
##     T2                1.000                           
##     T3                1.000                           
##     T4                1.000                           
##   day1 =~                                             
##     T1                1.000                           
##     T2                1.000                           
##   day2 =~                                             
##     T3                1.000                           
##     T4                1.000                           
##   ses1 =~                                             
##     T1                1.000                           
##     T2                1.000                           
##   ses2 =~                                             
##     T3                1.000                           
##   ses3 =~                                             
##     T4                1.000                           
##   E1 =~                                               
##     T1                1.000                           
##   E2 =~                                               
##     T2                1.000                           
##   E3 =~                                               
##     T3                1.000                           
##   E4 =~                                               
##     T4                1.000                           
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   T ~~                                                
##     day1              0.000                           
##     day2              0.000                           
##     ses1              0.000                           
##     ses2              0.000                           
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   day1 ~~                                             
##     day2              0.000                           
##     ses1              0.000                           
##     ses2              0.000                           
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   day2 ~~                                             
##     ses1              0.000                           
##     ses2              0.000                           
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   ses1 ~~                                             
##     ses2              0.000                           
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   ses2 ~~                                             
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   ses3 ~~                                             
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   E1 ~~                                               
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   E2 ~~                                               
##     E3                0.000                           
##     E4                0.000                           
##   E3 ~~                                               
##     E4                0.000                           
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .T1                0.056    0.180    0.310    0.757
##    .T2                0.038    0.180    0.212    0.832
##    .T3                0.035    0.180    0.191    0.848
##    .T4                0.038    0.180    0.210    0.833
##     T                 0.000                           
##     day1              0.000                           
##     day2              0.000                           
##     ses1              0.000                           
##     ses2              0.000                           
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##     T       (ltt2)    2.639    0.407    6.488    0.000
##     day1    (ltd2)    0.243    0.076    3.203    0.001
##     day2    (ltd2)    0.243    0.076    3.203    0.001
##     ses1    (lts2)    0.119    0.063    1.905    0.057
##     ses2    (lts2)    0.119    0.063    1.905    0.057
##     ses3    (lts2)    0.119    0.063    1.905    0.057
##     E1      (ltg2)    0.250    0.035    7.081    0.000
##     E2      (ltg2)    0.250    0.035    7.081    0.000
##     E3      (ltg2)    0.250    0.035    7.081    0.000
##     E4      (ltg2)    0.250    0.035    7.081    0.000
##    .T1                0.000                           
##    .T2                0.000                           
##    .T3                0.000                           
##    .T4                0.000                           
## 
## Constraints:
##                                                |Slack|
##     lattimegroup1 - (0.0001)                     7.985
##     lattimegroup2 - (0.0001)                     2.639
##     latdaygroup1 - (0.0001)                      0.407
##     latdaygroup2 - (0.0001)                      0.243
##     latsessiongroup1 - (0.0001)                  0.153
##     latsessiongroup2 - (0.0001)                  0.119
##     lategroup1 - (0.0001)                        0.216
##     lategroup2 - (0.0001)                        0.249
summary(m0)
## lavaan 0.6-8 ended normally after 434 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        28
##   Number of inequality constraints                   4
##                                                       
##   Number of observations per group:                   
##     high                                           100
##     low                                            100
##                                                       
## Model Test User Model:
##                                                       
##   Test statistic                                45.492
##   Degrees of freedom                                16
##   P-value (Chi-square)                           0.000
##   Test statistic for each group:
##     high                                        17.723
##     low                                         27.769
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## 
## Group 1 [high]:
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   T =~                                                
##     T1                1.000                           
##     T2                1.000                           
##     T3                1.000                           
##     T4                1.000                           
##   day1 =~                                             
##     T1                1.000                           
##     T2                1.000                           
##   day2 =~                                             
##     T3                1.000                           
##     T4                1.000                           
##   ses1 =~                                             
##     T1                1.000                           
##     T2                1.000                           
##   ses2 =~                                             
##     T3                1.000                           
##   ses3 =~                                             
##     T4                1.000                           
##   E1 =~                                               
##     T1                1.000                           
##   E2 =~                                               
##     T2                1.000                           
##   E3 =~                                               
##     T3                1.000                           
##   E4 =~                                               
##     T4                1.000                           
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   T ~~                                                
##     day1              0.000                           
##     day2              0.000                           
##     ses1              0.000                           
##     ses2              0.000                           
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   day1 ~~                                             
##     day2              0.000                           
##     ses1              0.000                           
##     ses2              0.000                           
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   day2 ~~                                             
##     ses1              0.000                           
##     ses2              0.000                           
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   ses1 ~~                                             
##     ses2              0.000                           
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   ses2 ~~                                             
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   ses3 ~~                                             
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   E1 ~~                                               
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   E2 ~~                                               
##     E3                0.000                           
##     E4                0.000                           
##   E3 ~~                                               
##     E4                0.000                           
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .T1               -0.013    0.245   -0.053    0.957
##    .T2                0.043    0.245    0.176    0.860
##    .T3                0.122    0.245    0.496    0.620
##    .T4                0.067    0.245    0.274    0.784
##     T                 0.000                           
##     day1              0.000                           
##     day2              0.000                           
##     ses1              0.000                           
##     ses2              0.000                           
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##     T       (time)    5.312    0.559    9.503    0.000
##     day1     (day)    0.326    0.061    5.327    0.000
##     day2     (day)    0.326    0.061    5.327    0.000
##     ses1    (sssn)    0.135    0.044    3.104    0.002
##     ses2    (sssn)    0.135    0.044    3.104    0.002
##     ses3    (sssn)    0.135    0.044    3.104    0.002
##     E1         (e)    0.233    0.023   10.006    0.000
##     E2         (e)    0.233    0.023   10.006    0.000
##     E3         (e)    0.233    0.023   10.006    0.000
##     E4         (e)    0.233    0.023   10.006    0.000
##    .T1                0.000                           
##    .T2                0.000                           
##    .T3                0.000                           
##    .T4                0.000                           
## 
## 
## Group 2 [low]:
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   T =~                                                
##     T1                1.000                           
##     T2                1.000                           
##     T3                1.000                           
##     T4                1.000                           
##   day1 =~                                             
##     T1                1.000                           
##     T2                1.000                           
##   day2 =~                                             
##     T3                1.000                           
##     T4                1.000                           
##   ses1 =~                                             
##     T1                1.000                           
##     T2                1.000                           
##   ses2 =~                                             
##     T3                1.000                           
##   ses3 =~                                             
##     T4                1.000                           
##   E1 =~                                               
##     T1                1.000                           
##   E2 =~                                               
##     T2                1.000                           
##   E3 =~                                               
##     T3                1.000                           
##   E4 =~                                               
##     T4                1.000                           
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   T ~~                                                
##     day1              0.000                           
##     day2              0.000                           
##     ses1              0.000                           
##     ses2              0.000                           
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   day1 ~~                                             
##     day2              0.000                           
##     ses1              0.000                           
##     ses2              0.000                           
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   day2 ~~                                             
##     ses1              0.000                           
##     ses2              0.000                           
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   ses1 ~~                                             
##     ses2              0.000                           
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   ses2 ~~                                             
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   ses3 ~~                                             
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   E1 ~~                                               
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
##   E2 ~~                                               
##     E3                0.000                           
##     E4                0.000                           
##   E3 ~~                                               
##     E4                0.000                           
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .T1                0.056    0.245    0.228    0.820
##    .T2                0.038    0.245    0.156    0.876
##    .T3                0.035    0.245    0.141    0.888
##    .T4                0.038    0.245    0.155    0.877
##     T                 0.000                           
##     day1              0.000                           
##     day2              0.000                           
##     ses1              0.000                           
##     ses2              0.000                           
##     ses3              0.000                           
##     E1                0.000                           
##     E2                0.000                           
##     E3                0.000                           
##     E4                0.000                           
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##     T       (time)    5.312    0.559    9.503    0.000
##     day1     (day)    0.326    0.061    5.327    0.000
##     day2     (day)    0.326    0.061    5.327    0.000
##     ses1    (sssn)    0.135    0.044    3.104    0.002
##     ses2    (sssn)    0.135    0.044    3.104    0.002
##     ses3    (sssn)    0.135    0.044    3.104    0.002
##     E1         (e)    0.233    0.023   10.006    0.000
##     E2         (e)    0.233    0.023   10.006    0.000
##     E3         (e)    0.233    0.023   10.006    0.000
##     E4         (e)    0.233    0.023   10.006    0.000
##    .T1                0.000                           
##    .T2                0.000                           
##    .T3                0.000                           
##    .T4                0.000                           
## 
## Constraints:
##                                                |Slack|
##     time - (0.0001)                              5.312
##     day - (0.0001)                               0.326
##     session - (0.0001)                           0.135
##     e - (0.0001)                                 0.233
anova(m1, m0)
## Chi-Squared Difference Test
## 
##    Df    AIC    BIC  Chisq Chisq diff Df diff Pr(>Chisq)    
## m1 12 2419.8 2472.5 15.425                                  
## m0 16 2441.8 2481.4 45.492     30.067       4  4.743e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1