## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----setup-------------------------------------------------------------------- library(plavaan) library(lavaan) ## ----------------------------------------------------------------------------- # Load the PoliticalDemocracy data data("PoliticalDemocracy", package = "lavaan") # Recode y2 and y6 to have negative loadings PoliticalDemocracy$y2 <- -PoliticalDemocracy$y2 PoliticalDemocracy$y6 <- -PoliticalDemocracy$y6 # Configural invariance (pretend y7 is not available in dem65), # and freely estimated latent means and variances config_mod <- " dem60 =~ y1 + y2 + y3 + y4 dem65 =~ y5 + y6 + y8 dem60 ~~ dem65 dem60 ~~ 1 * dem60 dem65 ~~ NA * dem65 dem60 ~ 0 dem65 ~ NA * 1 y1 ~~ y5 y2 ~~ y6 y4 ~~ y8 " fit_dry <- cfa(config_mod, data = PoliticalDemocracy, auto.fix.first = FALSE, do.fit = FALSE) ## ----------------------------------------------------------------------------- parTable(fit_dry) # Create matrix to indicate the same item loadings across groups/time in columns for # penalization on the pairwise differences ld_mat <- rbind(1:4, c(5:6, NA, 7)) int_mat <- rbind(21:24, c(25:26, NA, 27)) fit_pen <- penalized_est( fit_dry, w = .03, pen_diff_id = list(loadings = ld_mat, intercepts = int_mat), se = "robust.huber.white" ) summary(fit_pen)