riclpmr packagericlpmr.RmdHere is a brief example to help you get started.
To install the package:
#install.packages(devtools)
devtools::install_github('jflournoy/riclpmr')Generate a new model:
library(riclpmr)
var_groups <- list(
x=c("x_t1", "x_t2", "x_t3"),
y=c("y_t1", "y_t2", "y_t3"),
z=c("z_t1", "z_t2", "z_t3"))
model_text <- riclpmr::riclpm_text(var_groups)
cat(model_text)
#> ri_x =~ 1*x_t1 + 1*x_t2 + 1*x_t3
#> ri_y =~ 1*y_t1 + 1*y_t2 + 1*y_t3
#> ri_z =~ 1*z_t1 + 1*z_t2 + 1*z_t3
#> ri_x ~~ ri_x
#> ri_y ~~ ri_y
#> ri_z ~~ ri_z
#> ri_x ~~ ri_y + ri_z
#> ri_y ~~ ri_z
#> x_t1 ~ x_t1_mu*1
#> x_t2 ~ x_t2_mu*1
#> x_t3 ~ x_t3_mu*1
#> y_t1 ~ y_t1_mu*1
#> y_t2 ~ y_t2_mu*1
#> y_t3 ~ y_t3_mu*1
#> z_t1 ~ z_t1_mu*1
#> z_t2 ~ z_t2_mu*1
#> z_t3 ~ z_t3_mu*1
#> lat_x1 =~ 1*x_t1
#> lat_x2 =~ 1*x_t2
#> lat_x3 =~ 1*x_t3
#> lat_y1 =~ 1*y_t1
#> lat_y2 =~ 1*y_t2
#> lat_y3 =~ 1*y_t3
#> lat_z1 =~ 1*z_t1
#> lat_z2 =~ 1*z_t2
#> lat_z3 =~ 1*z_t3
#> lat_x1 ~~ lat_y1 + lat_z1
#> lat_x2 ~~ r_xy*lat_y2 + r_xz*lat_z2
#> lat_x3 ~~ r_xy*lat_y3 + r_xz*lat_z3
#> lat_y1 ~~ lat_z1
#> lat_y2 ~~ r_yz*lat_z2
#> lat_y3 ~~ r_yz*lat_z3
#> lat_x2 ~ x_x*lat_x1 + x_y*lat_y1 + x_z*lat_z1
#> lat_x3 ~ x_x*lat_x2 + x_y*lat_y2 + x_z*lat_z2
#> lat_y2 ~ y_x*lat_x1 + y_y*lat_y1 + y_z*lat_z1
#> lat_y3 ~ y_x*lat_x2 + y_y*lat_y2 + y_z*lat_z2
#> lat_z2 ~ z_x*lat_x1 + z_y*lat_y1 + z_z*lat_z1
#> lat_z3 ~ z_x*lat_x2 + z_y*lat_y2 + z_z*lat_z2
#> lat_x1 ~~ lat_x1
#> lat_x2 ~~ e_x*lat_x2
#> lat_x3 ~~ e_x*lat_x3
#> lat_y1 ~~ lat_y1
#> lat_y2 ~~ e_y*lat_y2
#> lat_y3 ~~ e_y*lat_y3
#> lat_z1 ~~ lat_z1
#> lat_z2 ~~ e_z*lat_z2
#> lat_z3 ~~ e_z*lat_z3
#We could edit the model code to set specific regresion coefficients. lavaan
#will automatically set them to 0.
fake_data <- riclpmr::simriclpm(riclpmModel = model_text, sample.nobs = 500)
#> Warning in (function (model = NULL, model.type = "sem", meanstructure = FALSE,
#> : lavaan WARNING: some regression coefficients are unspecified and will be set
#> to zero
fit <- riclpmr::lavriclpm(riclpmModel = model_text, data = fake_data)
lavaan::summary(fit)
#> lavaan 0.6.17 ended normally after 41 iterations
#>
#> Estimator ML
#> Optimization method NLMINB
#> Number of model parameters 51
#> Number of equality constraints 15
#>
#> Number of observations 500
#>
#> Model Test User Model:
#>
#> Test statistic 35.236
#> Degrees of freedom 18
#> P-value (Chi-square) 0.009
#>
#> Parameter Estimates:
#>
#> Standard errors Standard
#> Information Expected
#> Information saturated (h1) model Structured
#>
#> Latent Variables:
#> Estimate Std.Err z-value P(>|z|)
#> ri_x =~
#> x_t1 1.000
#> x_t2 1.000
#> x_t3 1.000
#> ri_y =~
#> y_t1 1.000
#> y_t2 1.000
#> y_t3 1.000
#> ri_z =~
#> z_t1 1.000
#> z_t2 1.000
#> z_t3 1.000
#> lat_x1 =~
#> x_t1 1.000
#> lat_x2 =~
#> x_t2 1.000
#> lat_x3 =~
#> x_t3 1.000
#> lat_y1 =~
#> y_t1 1.000
#> lat_y2 =~
#> y_t2 1.000
#> lat_y3 =~
#> y_t3 1.000
#> lat_z1 =~
#> z_t1 1.000
#> lat_z2 =~
#> z_t2 1.000
#> lat_z3 =~
#> z_t3 1.000
#>
#> Regressions:
#> Estimate Std.Err z-value P(>|z|)
#> lat_x2 ~
#> lat_x1 (x_x) 0.034 0.069 0.488 0.626
#> lat_y1 (x_y) 0.001 0.057 0.024 0.981
#> lat_z1 (x_z) -0.007 0.057 -0.120 0.905
#> lat_x3 ~
#> lat_x2 (x_x) 0.034 0.069 0.488 0.626
#> lat_y2 (x_y) 0.001 0.057 0.024 0.981
#> lat_z2 (x_z) -0.007 0.057 -0.120 0.905
#> lat_y2 ~
#> lat_x1 (y_x) 0.020 0.052 0.381 0.703
#> lat_y1 (y_y) 0.007 0.066 0.102 0.919
#> lat_z1 (y_z) -0.020 0.054 -0.378 0.706
#> lat_y3 ~
#> lat_x2 (y_x) 0.020 0.052 0.381 0.703
#> lat_y2 (y_y) 0.007 0.066 0.102 0.919
#> lat_z2 (y_z) -0.020 0.054 -0.378 0.706
#> lat_z2 ~
#> lat_x1 (z_x) 0.051 0.053 0.973 0.330
#> lat_y1 (z_y) 0.025 0.054 0.453 0.650
#> lat_z1 (z_z) 0.035 0.068 0.515 0.607
#> lat_z3 ~
#> lat_x2 (z_x) 0.051 0.053 0.973 0.330
#> lat_y2 (z_y) 0.025 0.054 0.453 0.650
#> lat_z2 (z_z) 0.035 0.068 0.515 0.607
#>
#> Covariances:
#> Estimate Std.Err z-value P(>|z|)
#> ri_x ~~
#> ri_y 0.061 0.066 0.931 0.352
#> ri_z 0.015 0.070 0.210 0.833
#> ri_y ~~
#> ri_z 0.017 0.065 0.264 0.792
#> lat_x1 ~~
#> lat_y1 0.010 0.061 0.158 0.874
#> lat_z1 0.040 0.063 0.631 0.528
#> .lat_x2 ~~
#> .lat_y2 (r_xy) 0.049 0.057 0.857 0.391
#> .lat_z2 (r_xz) -0.039 0.058 -0.677 0.498
#> .lat_x3 ~~
#> .lat_y3 (r_xy) 0.049 0.057 0.857 0.391
#> .lat_z3 (r_xz) -0.039 0.058 -0.677 0.498
#> lat_y1 ~~
#> lat_z1 -0.039 0.060 -0.642 0.521
#> .lat_y2 ~~
#> .lat_z2 (r_yz) -0.008 0.055 -0.154 0.878
#> .lat_y3 ~~
#> .lat_z3 (r_yz) -0.008 0.055 -0.154 0.878
#>
#> Intercepts:
#> Estimate Std.Err z-value P(>|z|)
#> .x_t1 (x_1_) 0.061 0.063 0.970 0.332
#> .x_t2 (x_2_) -0.014 0.065 -0.218 0.828
#> .x_t3 (x_3_) 0.003 0.065 0.049 0.961
#> .y_t1 (y_1_) -0.067 0.059 -1.125 0.261
#> .y_t2 (y_2_) -0.032 0.060 -0.523 0.601
#> .y_t3 (y_3_) 0.063 0.060 1.038 0.299
#> .z_t1 (z_1_) 0.066 0.063 1.062 0.288
#> .z_t2 (z_2_) 0.048 0.063 0.770 0.441
#> .z_t3 (z_3_) 0.064 0.063 1.020 0.308
#>
#> Variances:
#> Estimate Std.Err z-value P(>|z|)
#> ri_x 0.994 0.100 9.927 0.000
#> ri_y 0.841 0.086 9.787 0.000
#> ri_z 0.988 0.097 10.167 0.000
#> lat_x1 0.978 0.090 10.852 0.000
#> .lat_x2 (e_x) 1.103 0.086 12.823 0.000
#> .lat_x3 (e_x) 1.103 0.086 12.823 0.000
#> lat_y1 0.926 0.082 11.236 0.000
#> .lat_y2 (e_y) 0.976 0.076 12.802 0.000
#> .lat_y3 (e_y) 0.976 0.076 12.802 0.000
#> lat_z1 0.965 0.088 11.020 0.000
#> .lat_z2 (e_z) 0.987 0.079 12.557 0.000
#> .lat_z3 (e_z) 0.987 0.079 12.557 0.000
#> .x_t1 0.000
#> .x_t2 0.000
#> .x_t3 0.000
#> .y_t1 0.000
#> .y_t2 0.000
#> .y_t3 0.000
#> .z_t1 0.000
#> .z_t2 0.000
#> .z_t3 0.000