* using log directory ‘/data/blackswan/ripley/R/packages/tests-devel/semTools.Rcheck’ * using R Under development (unstable) (2026-07-16 r90264) * using platform: x86_64-pc-linux-gnu * R was compiled by gcc (GCC) 14.2.1 20240912 (Red Hat 14.2.1-3) GNU Fortran (GCC) 14.2.1 20240912 (Red Hat 14.2.1-3) * running under: Fedora Linux 40 (Workstation Edition) * using session charset: UTF-8 * current time: 2026-07-17 00:02:08 UTC * checking for file ‘semTools/DESCRIPTION’ ... OK * this is package ‘semTools’ version ‘0.5-9’ * package encoding: UTF-8 * checking package namespace information ... OK * checking package dependencies ... OK * checking if this is a source package ... OK * checking if there is a namespace ... OK * checking for executable files ... OK * checking for hidden files and directories ... OK * checking for portable file names ... OK * checking for sufficient/correct file permissions ... OK * checking whether package ‘semTools’ can be installed ... [22s/22s] OK * checking package directory ... OK * checking ‘build’ directory ... OK * checking DESCRIPTION meta-information ... OK * checking top-level files ... OK * checking for left-over files ... OK * checking index information ... OK * checking package subdirectories ... OK * checking code files for non-ASCII characters ... OK * checking R files for syntax errors ... OK * checking whether the package can be loaded ... OK * checking whether the package can be loaded with stated dependencies ... OK * checking whether the package can be unloaded cleanly ... OK * checking whether the namespace can be loaded with stated dependencies ... OK * checking whether the namespace can be unloaded cleanly ... OK * checking loading without being on the library search path ... OK * checking whether startup messages can be suppressed ... OK * checking dependencies in R code ... OK * checking S3 generic/method consistency ... OK * checking replacement functions ... OK * checking foreign function calls ... OK * checking R code for possible problems ... [53s/53s] OK * checking Rd files ... OK * checking Rd metadata ... OK * checking Rd line widths ... OK * checking Rd cross-references ... OK * checking for missing documentation entries ... OK * checking for code/documentation mismatches ... OK * checking Rd \usage sections ... OK * checking Rd contents ... OK * checking for unstated dependencies in examples ... OK * checking contents of ‘data’ directory ... OK * checking data for non-ASCII characters ... OK * checking LazyData ... OK * checking data for ASCII and uncompressed saves ... OK * checking sizes of PDF files under ‘inst/doc’ ... OK * checking installed files from ‘inst/doc’ ... OK * checking files in ‘vignettes’ ... OK * checking examples ... [53s/53s] OK * checking examples with --run-donttest ... [150s/152s] ERROR Running examples in ‘semTools-Ex.R’ failed The error most likely occurred in: > ### Name: measEq.syntax > ### Title: Syntax for measurement equivalence > ### Aliases: measEq.syntax > > ### ** Examples > > mod.cat <- ' FU1 =~ u1 + u2 + u3 + u4 + FU2 =~ u5 + u6 + u7 + u8 ' > ## the 2 factors are actually the same factor (FU) measured twice > longFacNames <- list(FU = c("FU1","FU2")) > > ## CONFIGURAL model: no constraints across groups or repeated measures > syntax.config <- measEq.syntax(configural.model = mod.cat, + # NOTE: data provides info about numbers of + # groups and thresholds + data = datCat, + ordered = paste0("u", 1:8), + parameterization = "theta", + ID.fac = "std.lv", ID.cat = "Wu.Estabrook.2016", + group = "g", longFacNames = longFacNames) > ## print lavaan syntax to the Console > cat(as.character(syntax.config)) ## LOADINGS: FU1 =~ c(NA, NA)*u1 + c(lambda.1_1.g1, lambda.1_1.g2)*u1 FU1 =~ c(NA, NA)*u2 + c(lambda.2_1.g1, lambda.2_1.g2)*u2 FU1 =~ c(NA, NA)*u3 + c(lambda.3_1.g1, lambda.3_1.g2)*u3 FU1 =~ c(NA, NA)*u4 + c(lambda.4_1.g1, lambda.4_1.g2)*u4 FU2 =~ c(NA, NA)*u5 + c(lambda.5_2.g1, lambda.5_2.g2)*u5 FU2 =~ c(NA, NA)*u6 + c(lambda.6_2.g1, lambda.6_2.g2)*u6 FU2 =~ c(NA, NA)*u7 + c(lambda.7_2.g1, lambda.7_2.g2)*u7 FU2 =~ c(NA, NA)*u8 + c(lambda.8_2.g1, lambda.8_2.g2)*u8 ## THRESHOLDS: u1 | c(NA, NA)*t1 + c(u1.thr1.g1, u1.thr1.g2)*t1 u1 | c(NA, NA)*t2 + c(u1.thr2.g1, u1.thr2.g2)*t2 u1 | c(NA, NA)*t3 + c(u1.thr3.g1, u1.thr3.g2)*t3 u1 | c(NA, NA)*t4 + c(u1.thr4.g1, u1.thr4.g2)*t4 u2 | c(NA, NA)*t1 + c(u2.thr1.g1, u2.thr1.g2)*t1 u2 | c(NA, NA)*t2 + c(u2.thr2.g1, u2.thr2.g2)*t2 u2 | c(NA, NA)*t3 + c(u2.thr3.g1, u2.thr3.g2)*t3 u2 | c(NA, NA)*t4 + c(u2.thr4.g1, u2.thr4.g2)*t4 u3 | c(NA, NA)*t1 + c(u3.thr1.g1, u3.thr1.g2)*t1 u3 | c(NA, NA)*t2 + c(u3.thr2.g1, u3.thr2.g2)*t2 u3 | c(NA, NA)*t3 + c(u3.thr3.g1, u3.thr3.g2)*t3 u3 | c(NA, NA)*t4 + c(u3.thr4.g1, u3.thr4.g2)*t4 u4 | c(NA, NA)*t1 + c(u4.thr1.g1, u4.thr1.g2)*t1 u4 | c(NA, NA)*t2 + c(u4.thr2.g1, u4.thr2.g2)*t2 u4 | c(NA, NA)*t3 + c(u4.thr3.g1, u4.thr3.g2)*t3 u4 | c(NA, NA)*t4 + c(u4.thr4.g1, u4.thr4.g2)*t4 u5 | c(NA, NA)*t1 + c(u5.thr1.g1, u5.thr1.g2)*t1 u5 | c(NA, NA)*t2 + c(u5.thr2.g1, u5.thr2.g2)*t2 u5 | c(NA, NA)*t3 + c(u5.thr3.g1, u5.thr3.g2)*t3 u5 | c(NA, NA)*t4 + c(u5.thr4.g1, u5.thr4.g2)*t4 u6 | c(NA, NA)*t1 + c(u6.thr1.g1, u6.thr1.g2)*t1 u6 | c(NA, NA)*t2 + c(u6.thr2.g1, u6.thr2.g2)*t2 u6 | c(NA, NA)*t3 + c(u6.thr3.g1, u6.thr3.g2)*t3 u6 | c(NA, NA)*t4 + c(u6.thr4.g1, u6.thr4.g2)*t4 u7 | c(NA, NA)*t1 + c(u7.thr1.g1, u7.thr1.g2)*t1 u7 | c(NA, NA)*t2 + c(u7.thr2.g1, u7.thr2.g2)*t2 u7 | c(NA, NA)*t3 + c(u7.thr3.g1, u7.thr3.g2)*t3 u7 | c(NA, NA)*t4 + c(u7.thr4.g1, u7.thr4.g2)*t4 u8 | c(NA, NA)*t1 + c(u8.thr1.g1, u8.thr1.g2)*t1 u8 | c(NA, NA)*t2 + c(u8.thr2.g1, u8.thr2.g2)*t2 u8 | c(NA, NA)*t3 + c(u8.thr3.g1, u8.thr3.g2)*t3 u8 | c(NA, NA)*t4 + c(u8.thr4.g1, u8.thr4.g2)*t4 ## INTERCEPTS: u1 ~ c(0, 0)*1 + c(nu.1.g1, nu.1.g2)*1 u2 ~ c(0, 0)*1 + c(nu.2.g1, nu.2.g2)*1 u3 ~ c(0, 0)*1 + c(nu.3.g1, nu.3.g2)*1 u4 ~ c(0, 0)*1 + c(nu.4.g1, nu.4.g2)*1 u5 ~ c(0, 0)*1 + c(nu.5.g1, nu.5.g2)*1 u6 ~ c(0, 0)*1 + c(nu.6.g1, nu.6.g2)*1 u7 ~ c(0, 0)*1 + c(nu.7.g1, nu.7.g2)*1 u8 ~ c(0, 0)*1 + c(nu.8.g1, nu.8.g2)*1 ## UNIQUE-FACTOR VARIANCES: u1 ~~ c(1, 1)*u1 + c(theta.1_1.g1, theta.1_1.g2)*u1 u2 ~~ c(1, 1)*u2 + c(theta.2_2.g1, theta.2_2.g2)*u2 u3 ~~ c(1, 1)*u3 + c(theta.3_3.g1, theta.3_3.g2)*u3 u4 ~~ c(1, 1)*u4 + c(theta.4_4.g1, theta.4_4.g2)*u4 u5 ~~ c(1, 1)*u5 + c(theta.5_5.g1, theta.5_5.g2)*u5 u6 ~~ c(1, 1)*u6 + c(theta.6_6.g1, theta.6_6.g2)*u6 u7 ~~ c(1, 1)*u7 + c(theta.7_7.g1, theta.7_7.g2)*u7 u8 ~~ c(1, 1)*u8 + c(theta.8_8.g1, theta.8_8.g2)*u8 ## UNIQUE-FACTOR COVARIANCES: u1 ~~ c(NA, NA)*u5 + c(theta.5_1.g1, theta.5_1.g2)*u5 u2 ~~ c(NA, NA)*u6 + c(theta.6_2.g1, theta.6_2.g2)*u6 u3 ~~ c(NA, NA)*u7 + c(theta.7_3.g1, theta.7_3.g2)*u7 u4 ~~ c(NA, NA)*u8 + c(theta.8_4.g1, theta.8_4.g2)*u8 ## LATENT MEANS/INTERCEPTS: FU1 ~ c(0, 0)*1 + c(alpha.1.g1, alpha.1.g2)*1 FU2 ~ c(0, 0)*1 + c(alpha.2.g1, alpha.2.g2)*1 ## COMMON-FACTOR VARIANCES: FU1 ~~ c(1, 1)*FU1 + c(psi.1_1.g1, psi.1_1.g2)*FU1 FU2 ~~ c(1, 1)*FU2 + c(psi.2_2.g1, psi.2_2.g2)*FU2 ## COMMON-FACTOR COVARIANCES: FU1 ~~ c(NA, NA)*FU2 + c(psi.2_1.g1, psi.2_1.g2)*FU2 > ## print a summary of model features > summary(syntax.config) This lavaan model syntax specifies a CFA with 8 manifest indicators (8 of which are ordinal) of 2 common factor(s). To identify the location and scale of each common factor, the factor means and variances were fixed to 0 and 1, respectively, unless equality constraints on measurement parameters allow them to be freed. The location and scale of each latent item-response underlying 8 ordinal indicators were identified using the "theta" parameterization, and the identification constraints recommended by Wu & Estabrook (2016). For details, read: https://doi.org/10.1007/s11336-016-9506-0 The following factors were measured on multiple occasions: "FU" was measured on 2 occasions Pattern matrix indicating num(eric), ord(ered), and lat(ent) indicators per factor: FU1 FU2 u1 ord u2 ord u3 ord u4 ord u5 ord u6 ord u7 ord u8 ord This model hypothesizes only configural invariance. > > ## THRESHOLD invariance: > ## only necessary to specify thresholds if you have no data > mod.th <- ' + u1 | t1 + t2 + t3 + t4 + u2 | t1 + t2 + t3 + t4 + u3 | t1 + t2 + t3 + t4 + u4 | t1 + t2 + t3 + t4 + u5 | t1 + t2 + t3 + t4 + u6 | t1 + t2 + t3 + t4 + u7 | t1 + t2 + t3 + t4 + u8 | t1 + t2 + t3 + t4 + ' > syntax.thresh <- measEq.syntax(configural.model = c(mod.cat, mod.th), + # NOTE: data not provided, so syntax must + # include thresholds, and number of + # groups == 2 is indicated by: + sample.nobs = c(1, 1), + parameterization = "theta", + ID.fac = "std.lv", ID.cat = "Wu.Estabrook.2016", + group = "g", group.equal = "thresholds", + longFacNames = longFacNames, + long.equal = "thresholds") > ## notice that constraining 4 thresholds allows intercepts and residual > ## variances to be freely estimated in all but the first group & occasion > cat(as.character(syntax.thresh)) ## LOADINGS: FU1 =~ c(NA, NA)*u1 + c(lambda.1_1.g1, lambda.1_1.g2)*u1 FU1 =~ c(NA, NA)*u2 + c(lambda.2_1.g1, lambda.2_1.g2)*u2 FU1 =~ c(NA, NA)*u3 + c(lambda.3_1.g1, lambda.3_1.g2)*u3 FU1 =~ c(NA, NA)*u4 + c(lambda.4_1.g1, lambda.4_1.g2)*u4 FU2 =~ c(NA, NA)*u5 + c(lambda.5_2.g1, lambda.5_2.g2)*u5 FU2 =~ c(NA, NA)*u6 + c(lambda.6_2.g1, lambda.6_2.g2)*u6 FU2 =~ c(NA, NA)*u7 + c(lambda.7_2.g1, lambda.7_2.g2)*u7 FU2 =~ c(NA, NA)*u8 + c(lambda.8_2.g1, lambda.8_2.g2)*u8 ## THRESHOLDS: u1 | c(NA, NA)*t1 + c(u1.thr1, u1.thr1)*t1 u1 | c(NA, NA)*t2 + c(u1.thr2, u1.thr2)*t2 u1 | c(NA, NA)*t3 + c(u1.thr3, u1.thr3)*t3 u1 | c(NA, NA)*t4 + c(u1.thr4, u1.thr4)*t4 u2 | c(NA, NA)*t1 + c(u2.thr1, u2.thr1)*t1 u2 | c(NA, NA)*t2 + c(u2.thr2, u2.thr2)*t2 u2 | c(NA, NA)*t3 + c(u2.thr3, u2.thr3)*t3 u2 | c(NA, NA)*t4 + c(u2.thr4, u2.thr4)*t4 u3 | c(NA, NA)*t1 + c(u3.thr1, u3.thr1)*t1 u3 | c(NA, NA)*t2 + c(u3.thr2, u3.thr2)*t2 u3 | c(NA, NA)*t3 + c(u3.thr3, u3.thr3)*t3 u3 | c(NA, NA)*t4 + c(u3.thr4, u3.thr4)*t4 u4 | c(NA, NA)*t1 + c(u4.thr1, u4.thr1)*t1 u4 | c(NA, NA)*t2 + c(u4.thr2, u4.thr2)*t2 u4 | c(NA, NA)*t3 + c(u4.thr3, u4.thr3)*t3 u4 | c(NA, NA)*t4 + c(u4.thr4, u4.thr4)*t4 u5 | c(NA, NA)*t1 + c(u1.thr1, u1.thr1)*t1 u5 | c(NA, NA)*t2 + c(u1.thr2, u1.thr2)*t2 u5 | c(NA, NA)*t3 + c(u1.thr3, u1.thr3)*t3 u5 | c(NA, NA)*t4 + c(u1.thr4, u1.thr4)*t4 u6 | c(NA, NA)*t1 + c(u2.thr1, u2.thr1)*t1 u6 | c(NA, NA)*t2 + c(u2.thr2, u2.thr2)*t2 u6 | c(NA, NA)*t3 + c(u2.thr3, u2.thr3)*t3 u6 | c(NA, NA)*t4 + c(u2.thr4, u2.thr4)*t4 u7 | c(NA, NA)*t1 + c(u3.thr1, u3.thr1)*t1 u7 | c(NA, NA)*t2 + c(u3.thr2, u3.thr2)*t2 u7 | c(NA, NA)*t3 + c(u3.thr3, u3.thr3)*t3 u7 | c(NA, NA)*t4 + c(u3.thr4, u3.thr4)*t4 u8 | c(NA, NA)*t1 + c(u4.thr1, u4.thr1)*t1 u8 | c(NA, NA)*t2 + c(u4.thr2, u4.thr2)*t2 u8 | c(NA, NA)*t3 + c(u4.thr3, u4.thr3)*t3 u8 | c(NA, NA)*t4 + c(u4.thr4, u4.thr4)*t4 ## INTERCEPTS: u1 ~ c(0, NA)*1 + c(nu.1.g1, nu.1.g2)*1 u2 ~ c(0, NA)*1 + c(nu.2.g1, nu.2.g2)*1 u3 ~ c(0, NA)*1 + c(nu.3.g1, nu.3.g2)*1 u4 ~ c(0, NA)*1 + c(nu.4.g1, nu.4.g2)*1 u5 ~ c(NA, NA)*1 + c(nu.5.g1, nu.5.g2)*1 u6 ~ c(NA, NA)*1 + c(nu.6.g1, nu.6.g2)*1 u7 ~ c(NA, NA)*1 + c(nu.7.g1, nu.7.g2)*1 u8 ~ c(NA, NA)*1 + c(nu.8.g1, nu.8.g2)*1 ## UNIQUE-FACTOR VARIANCES: u1 ~~ c(1, NA)*u1 + c(theta.1_1.g1, theta.1_1.g2)*u1 u2 ~~ c(1, NA)*u2 + c(theta.2_2.g1, theta.2_2.g2)*u2 u3 ~~ c(1, NA)*u3 + c(theta.3_3.g1, theta.3_3.g2)*u3 u4 ~~ c(1, NA)*u4 + c(theta.4_4.g1, theta.4_4.g2)*u4 u5 ~~ c(NA, NA)*u5 + c(theta.5_5.g1, theta.5_5.g2)*u5 u6 ~~ c(NA, NA)*u6 + c(theta.6_6.g1, theta.6_6.g2)*u6 u7 ~~ c(NA, NA)*u7 + c(theta.7_7.g1, theta.7_7.g2)*u7 u8 ~~ c(NA, NA)*u8 + c(theta.8_8.g1, theta.8_8.g2)*u8 ## UNIQUE-FACTOR COVARIANCES: u1 ~~ c(NA, NA)*u5 + c(theta.5_1.g1, theta.5_1.g2)*u5 u2 ~~ c(NA, NA)*u6 + c(theta.6_2.g1, theta.6_2.g2)*u6 u3 ~~ c(NA, NA)*u7 + c(theta.7_3.g1, theta.7_3.g2)*u7 u4 ~~ c(NA, NA)*u8 + c(theta.8_4.g1, theta.8_4.g2)*u8 ## LATENT MEANS/INTERCEPTS: FU1 ~ c(0, 0)*1 + c(alpha.1.g1, alpha.1.g2)*1 FU2 ~ c(0, 0)*1 + c(alpha.2.g1, alpha.2.g2)*1 ## COMMON-FACTOR VARIANCES: FU1 ~~ c(1, 1)*FU1 + c(psi.1_1.g1, psi.1_1.g2)*FU1 FU2 ~~ c(1, 1)*FU2 + c(psi.2_2.g1, psi.2_2.g2)*FU2 ## COMMON-FACTOR COVARIANCES: FU1 ~~ c(NA, NA)*FU2 + c(psi.2_1.g1, psi.2_1.g2)*FU2 > ## print a summary of model features > summary(syntax.thresh) This lavaan model syntax specifies a CFA with 8 manifest indicators (8 of which are ordinal) of 2 common factor(s). To identify the location and scale of each common factor, the factor means and variances were fixed to 0 and 1, respectively, unless equality constraints on measurement parameters allow them to be freed. The location and scale of each latent item-response underlying 8 ordinal indicators were identified using the "theta" parameterization, and the identification constraints recommended by Wu & Estabrook (2016). For details, read: https://doi.org/10.1007/s11336-016-9506-0 The following factors were measured on multiple occasions: "FU" was measured on 2 occasions Pattern matrix indicating num(eric), ord(ered), and lat(ent) indicators per factor: FU1 FU2 u1 ord u2 ord u3 ord u4 ord u5 ord u6 ord u7 ord u8 ord The following types of parameter were constrained to equality across groups: thresholds The following types of parameter were constrained to equality across repeated measures: thresholds > > > ## Fit a model to the data either in a subsequent step (recommended): > mod.config <- as.character(syntax.config) > fit.config <- cfa(mod.config, data = datCat, group = "g", + ordered = paste0("u", 1:8), parameterization = "theta") > ## or in a single step (not generally recommended): > fit.thresh <- measEq.syntax(configural.model = mod.cat, data = datCat, + ordered = paste0("u", 1:8), + parameterization = "theta", + ID.fac = "std.lv", ID.cat = "Wu.Estabrook.2016", + group = "g", group.equal = "thresholds", + longFacNames = longFacNames, + long.equal = "thresholds", return.fit = TRUE) > ## compare their fit to test threshold invariance > anova(fit.config, fit.thresh) Scaled and Shifted Chi-Squared Difference Test (method = “satorra.2000”) lavaan->lavTestLRT(): lavaan NOTE: The “Chisq” column contains standard test statistics, not the robust test that should be reported per model. A robust difference test is a function of two standard (not robust) statistics. Df AIC BIC Chisq Chisq diff RMSEA Df diff Pr(>Chisq) fit.config 30 19.061 fit.thresh 54 28.881 18.55 0 24 0.7755 > > > ## -------------------------------------------------------- > ## RECOMMENDED PRACTICE: fit one invariance model at a time > ## -------------------------------------------------------- > > ## - A downside of setting return.fit=TRUE is that if the model has trouble > ## converging, you don't have the opportunity to investigate the syntax, > ## or even to know whether an error resulted from the syntax-generator or > ## from lavaan itself. > ## - A downside of automatically fitting an entire set of invariance models > ## (like the old measurementInvariance() function did) is that you might > ## end up testing models that shouldn't even be fitted because less > ## restrictive models already fail (e.g., don't test full scalar > ## invariance if metric invariance fails! Establish partial metric > ## invariance first, then test equivalent of intercepts ONLY among the > ## indicators that have invariate loadings.) > > ## The recommended sequence is to (1) generate and save each syntax object, > ## (2) print it to the screen to verify you are fitting the model you expect > ## to (and potentially learn which identification constraints should be > ## released when equality constraints are imposed), and (3) fit that model > ## to the data, as you would if you had written the syntax yourself. > > ## Continuing from the examples above, after establishing invariance of > ## thresholds, we proceed to test equivalence of loadings and intercepts > ## (metric and scalar invariance, respectively) > ## simultaneously across groups and repeated measures. > > ## No test: > > ## metric invariance > syntax.metric <- measEq.syntax(configural.model = mod.cat, data = datCat, + ordered = paste0("u", 1:8), + parameterization = "theta", + ID.fac = "std.lv", ID.cat = "Wu.Estabrook.2016", + group = "g", longFacNames = longFacNames, + group.equal = c("thresholds","loadings"), + long.equal = c("thresholds","loadings")) > summary(syntax.metric) # summarize model features This lavaan model syntax specifies a CFA with 8 manifest indicators (8 of which are ordinal) of 2 common factor(s). To identify the location and scale of each common factor, the factor means and variances were fixed to 0 and 1, respectively, unless equality constraints on measurement parameters allow them to be freed. The location and scale of each latent item-response underlying 8 ordinal indicators were identified using the "theta" parameterization, and the identification constraints recommended by Wu & Estabrook (2016). For details, read: https://doi.org/10.1007/s11336-016-9506-0 The following factors were measured on multiple occasions: "FU" was measured on 2 occasions Pattern matrix indicating num(eric), ord(ered), and lat(ent) indicators per factor: FU1 FU2 u1 ord u2 ord u3 ord u4 ord u5 ord u6 ord u7 ord u8 ord The following types of parameter were constrained to equality across groups: thresholds loadings The following types of parameter were constrained to equality across repeated measures: thresholds loadings > mod.metric <- as.character(syntax.metric) # save as text > cat(mod.metric) # print/view lavaan syntax ## LOADINGS: FU1 =~ c(NA, NA)*u1 + c(lambda.1_1, lambda.1_1)*u1 FU1 =~ c(NA, NA)*u2 + c(lambda.2_1, lambda.2_1)*u2 FU1 =~ c(NA, NA)*u3 + c(lambda.3_1, lambda.3_1)*u3 FU1 =~ c(NA, NA)*u4 + c(lambda.4_1, lambda.4_1)*u4 FU2 =~ c(NA, NA)*u5 + c(lambda.1_1, lambda.1_1)*u5 FU2 =~ c(NA, NA)*u6 + c(lambda.2_1, lambda.2_1)*u6 FU2 =~ c(NA, NA)*u7 + c(lambda.3_1, lambda.3_1)*u7 FU2 =~ c(NA, NA)*u8 + c(lambda.4_1, lambda.4_1)*u8 ## THRESHOLDS: u1 | c(NA, NA)*t1 + c(u1.thr1, u1.thr1)*t1 u1 | c(NA, NA)*t2 + c(u1.thr2, u1.thr2)*t2 u1 | c(NA, NA)*t3 + c(u1.thr3, u1.thr3)*t3 u1 | c(NA, NA)*t4 + c(u1.thr4, u1.thr4)*t4 u2 | c(NA, NA)*t1 + c(u2.thr1, u2.thr1)*t1 u2 | c(NA, NA)*t2 + c(u2.thr2, u2.thr2)*t2 u2 | c(NA, NA)*t3 + c(u2.thr3, u2.thr3)*t3 u2 | c(NA, NA)*t4 + c(u2.thr4, u2.thr4)*t4 u3 | c(NA, NA)*t1 + c(u3.thr1, u3.thr1)*t1 u3 | c(NA, NA)*t2 + c(u3.thr2, u3.thr2)*t2 u3 | c(NA, NA)*t3 + c(u3.thr3, u3.thr3)*t3 u3 | c(NA, NA)*t4 + c(u3.thr4, u3.thr4)*t4 u4 | c(NA, NA)*t1 + c(u4.thr1, u4.thr1)*t1 u4 | c(NA, NA)*t2 + c(u4.thr2, u4.thr2)*t2 u4 | c(NA, NA)*t3 + c(u4.thr3, u4.thr3)*t3 u4 | c(NA, NA)*t4 + c(u4.thr4, u4.thr4)*t4 u5 | c(NA, NA)*t1 + c(u1.thr1, u1.thr1)*t1 u5 | c(NA, NA)*t2 + c(u1.thr2, u1.thr2)*t2 u5 | c(NA, NA)*t3 + c(u1.thr3, u1.thr3)*t3 u5 | c(NA, NA)*t4 + c(u1.thr4, u1.thr4)*t4 u6 | c(NA, NA)*t1 + c(u2.thr1, u2.thr1)*t1 u6 | c(NA, NA)*t2 + c(u2.thr2, u2.thr2)*t2 u6 | c(NA, NA)*t3 + c(u2.thr3, u2.thr3)*t3 u6 | c(NA, NA)*t4 + c(u2.thr4, u2.thr4)*t4 u7 | c(NA, NA)*t1 + c(u3.thr1, u3.thr1)*t1 u7 | c(NA, NA)*t2 + c(u3.thr2, u3.thr2)*t2 u7 | c(NA, NA)*t3 + c(u3.thr3, u3.thr3)*t3 u7 | c(NA, NA)*t4 + c(u3.thr4, u3.thr4)*t4 u8 | c(NA, NA)*t1 + c(u4.thr1, u4.thr1)*t1 u8 | c(NA, NA)*t2 + c(u4.thr2, u4.thr2)*t2 u8 | c(NA, NA)*t3 + c(u4.thr3, u4.thr3)*t3 u8 | c(NA, NA)*t4 + c(u4.thr4, u4.thr4)*t4 ## INTERCEPTS: u1 ~ c(0, NA)*1 + c(nu.1.g1, nu.1.g2)*1 u2 ~ c(0, NA)*1 + c(nu.2.g1, nu.2.g2)*1 u3 ~ c(0, NA)*1 + c(nu.3.g1, nu.3.g2)*1 u4 ~ c(0, NA)*1 + c(nu.4.g1, nu.4.g2)*1 u5 ~ c(NA, NA)*1 + c(nu.5.g1, nu.5.g2)*1 u6 ~ c(NA, NA)*1 + c(nu.6.g1, nu.6.g2)*1 u7 ~ c(NA, NA)*1 + c(nu.7.g1, nu.7.g2)*1 u8 ~ c(NA, NA)*1 + c(nu.8.g1, nu.8.g2)*1 ## UNIQUE-FACTOR VARIANCES: u1 ~~ c(1, NA)*u1 + c(theta.1_1.g1, theta.1_1.g2)*u1 u2 ~~ c(1, NA)*u2 + c(theta.2_2.g1, theta.2_2.g2)*u2 u3 ~~ c(1, NA)*u3 + c(theta.3_3.g1, theta.3_3.g2)*u3 u4 ~~ c(1, NA)*u4 + c(theta.4_4.g1, theta.4_4.g2)*u4 u5 ~~ c(NA, NA)*u5 + c(theta.5_5.g1, theta.5_5.g2)*u5 u6 ~~ c(NA, NA)*u6 + c(theta.6_6.g1, theta.6_6.g2)*u6 u7 ~~ c(NA, NA)*u7 + c(theta.7_7.g1, theta.7_7.g2)*u7 u8 ~~ c(NA, NA)*u8 + c(theta.8_8.g1, theta.8_8.g2)*u8 ## UNIQUE-FACTOR COVARIANCES: u1 ~~ c(NA, NA)*u5 + c(theta.5_1.g1, theta.5_1.g2)*u5 u2 ~~ c(NA, NA)*u6 + c(theta.6_2.g1, theta.6_2.g2)*u6 u3 ~~ c(NA, NA)*u7 + c(theta.7_3.g1, theta.7_3.g2)*u7 u4 ~~ c(NA, NA)*u8 + c(theta.8_4.g1, theta.8_4.g2)*u8 ## LATENT MEANS/INTERCEPTS: FU1 ~ c(0, 0)*1 + c(alpha.1.g1, alpha.1.g2)*1 FU2 ~ c(0, 0)*1 + c(alpha.2.g1, alpha.2.g2)*1 ## COMMON-FACTOR VARIANCES: FU1 ~~ c(1, NA)*FU1 + c(psi.1_1.g1, psi.1_1.g2)*FU1 FU2 ~~ c(NA, NA)*FU2 + c(psi.2_2.g1, psi.2_2.g2)*FU2 ## COMMON-FACTOR COVARIANCES: FU1 ~~ c(NA, NA)*FU2 + c(psi.2_1.g1, psi.2_1.g2)*FU2 > ## fit model to data > fit.metric <- cfa(mod.metric, data = datCat, group = "g", + ordered = paste0("u", 1:8), parameterization = "theta") > ## test equivalence of loadings, given equivalence of thresholds > anova(fit.thresh, fit.metric) Scaled and Shifted Chi-Squared Difference Test (method = “satorra.2000”) lavaan->lavTestLRT(): lavaan NOTE: The “Chisq” column contains standard test statistics, not the robust test that should be reported per model. A robust difference test is a function of two standard (not robust) statistics. Df AIC BIC Chisq Chisq diff RMSEA Df diff Pr(>Chisq) fit.thresh 54 28.881 fit.metric 63 36.331 7.0032 0 9 0.6368 > > ## scalar invariance > syntax.scalar <- measEq.syntax(configural.model = mod.cat, data = datCat, + ordered = paste0("u", 1:8), + parameterization = "theta", + ID.fac = "std.lv", ID.cat = "Wu.Estabrook.2016", + group = "g", longFacNames = longFacNames, + group.equal = c("thresholds","loadings", + "intercepts"), + long.equal = c("thresholds","loadings", + "intercepts")) > summary(syntax.scalar) # summarize model features This lavaan model syntax specifies a CFA with 8 manifest indicators (8 of which are ordinal) of 2 common factor(s). To identify the location and scale of each common factor, the factor means and variances were fixed to 0 and 1, respectively, unless equality constraints on measurement parameters allow them to be freed. The location and scale of each latent item-response underlying 8 ordinal indicators were identified using the "theta" parameterization, and the identification constraints recommended by Wu & Estabrook (2016). For details, read: https://doi.org/10.1007/s11336-016-9506-0 The following factors were measured on multiple occasions: "FU" was measured on 2 occasions Pattern matrix indicating num(eric), ord(ered), and lat(ent) indicators per factor: FU1 FU2 u1 ord u2 ord u3 ord u4 ord u5 ord u6 ord u7 ord u8 ord The following types of parameter were constrained to equality across groups: thresholds loadings intercepts The following types of parameter were constrained to equality across repeated measures: thresholds loadings intercepts > mod.scalar <- as.character(syntax.scalar) # save as text > cat(mod.scalar) # print/view lavaan syntax ## LOADINGS: FU1 =~ c(NA, NA)*u1 + c(lambda.1_1, lambda.1_1)*u1 FU1 =~ c(NA, NA)*u2 + c(lambda.2_1, lambda.2_1)*u2 FU1 =~ c(NA, NA)*u3 + c(lambda.3_1, lambda.3_1)*u3 FU1 =~ c(NA, NA)*u4 + c(lambda.4_1, lambda.4_1)*u4 FU2 =~ c(NA, NA)*u5 + c(lambda.1_1, lambda.1_1)*u5 FU2 =~ c(NA, NA)*u6 + c(lambda.2_1, lambda.2_1)*u6 FU2 =~ c(NA, NA)*u7 + c(lambda.3_1, lambda.3_1)*u7 FU2 =~ c(NA, NA)*u8 + c(lambda.4_1, lambda.4_1)*u8 ## THRESHOLDS: u1 | c(NA, NA)*t1 + c(u1.thr1, u1.thr1)*t1 u1 | c(NA, NA)*t2 + c(u1.thr2, u1.thr2)*t2 u1 | c(NA, NA)*t3 + c(u1.thr3, u1.thr3)*t3 u1 | c(NA, NA)*t4 + c(u1.thr4, u1.thr4)*t4 u2 | c(NA, NA)*t1 + c(u2.thr1, u2.thr1)*t1 u2 | c(NA, NA)*t2 + c(u2.thr2, u2.thr2)*t2 u2 | c(NA, NA)*t3 + c(u2.thr3, u2.thr3)*t3 u2 | c(NA, NA)*t4 + c(u2.thr4, u2.thr4)*t4 u3 | c(NA, NA)*t1 + c(u3.thr1, u3.thr1)*t1 u3 | c(NA, NA)*t2 + c(u3.thr2, u3.thr2)*t2 u3 | c(NA, NA)*t3 + c(u3.thr3, u3.thr3)*t3 u3 | c(NA, NA)*t4 + c(u3.thr4, u3.thr4)*t4 u4 | c(NA, NA)*t1 + c(u4.thr1, u4.thr1)*t1 u4 | c(NA, NA)*t2 + c(u4.thr2, u4.thr2)*t2 u4 | c(NA, NA)*t3 + c(u4.thr3, u4.thr3)*t3 u4 | c(NA, NA)*t4 + c(u4.thr4, u4.thr4)*t4 u5 | c(NA, NA)*t1 + c(u1.thr1, u1.thr1)*t1 u5 | c(NA, NA)*t2 + c(u1.thr2, u1.thr2)*t2 u5 | c(NA, NA)*t3 + c(u1.thr3, u1.thr3)*t3 u5 | c(NA, NA)*t4 + c(u1.thr4, u1.thr4)*t4 u6 | c(NA, NA)*t1 + c(u2.thr1, u2.thr1)*t1 u6 | c(NA, NA)*t2 + c(u2.thr2, u2.thr2)*t2 u6 | c(NA, NA)*t3 + c(u2.thr3, u2.thr3)*t3 u6 | c(NA, NA)*t4 + c(u2.thr4, u2.thr4)*t4 u7 | c(NA, NA)*t1 + c(u3.thr1, u3.thr1)*t1 u7 | c(NA, NA)*t2 + c(u3.thr2, u3.thr2)*t2 u7 | c(NA, NA)*t3 + c(u3.thr3, u3.thr3)*t3 u7 | c(NA, NA)*t4 + c(u3.thr4, u3.thr4)*t4 u8 | c(NA, NA)*t1 + c(u4.thr1, u4.thr1)*t1 u8 | c(NA, NA)*t2 + c(u4.thr2, u4.thr2)*t2 u8 | c(NA, NA)*t3 + c(u4.thr3, u4.thr3)*t3 u8 | c(NA, NA)*t4 + c(u4.thr4, u4.thr4)*t4 ## INTERCEPTS: u1 ~ c(0, 0)*1 + c(nu.1, nu.1)*1 u2 ~ c(0, 0)*1 + c(nu.2, nu.2)*1 u3 ~ c(0, 0)*1 + c(nu.3, nu.3)*1 u4 ~ c(0, 0)*1 + c(nu.4, nu.4)*1 u5 ~ c(0, 0)*1 + c(nu.1, nu.1)*1 u6 ~ c(0, 0)*1 + c(nu.2, nu.2)*1 u7 ~ c(0, 0)*1 + c(nu.3, nu.3)*1 u8 ~ c(0, 0)*1 + c(nu.4, nu.4)*1 ## UNIQUE-FACTOR VARIANCES: u1 ~~ c(1, NA)*u1 + c(theta.1_1.g1, theta.1_1.g2)*u1 u2 ~~ c(1, NA)*u2 + c(theta.2_2.g1, theta.2_2.g2)*u2 u3 ~~ c(1, NA)*u3 + c(theta.3_3.g1, theta.3_3.g2)*u3 u4 ~~ c(1, NA)*u4 + c(theta.4_4.g1, theta.4_4.g2)*u4 u5 ~~ c(NA, NA)*u5 + c(theta.5_5.g1, theta.5_5.g2)*u5 u6 ~~ c(NA, NA)*u6 + c(theta.6_6.g1, theta.6_6.g2)*u6 u7 ~~ c(NA, NA)*u7 + c(theta.7_7.g1, theta.7_7.g2)*u7 u8 ~~ c(NA, NA)*u8 + c(theta.8_8.g1, theta.8_8.g2)*u8 ## UNIQUE-FACTOR COVARIANCES: u1 ~~ c(NA, NA)*u5 + c(theta.5_1.g1, theta.5_1.g2)*u5 u2 ~~ c(NA, NA)*u6 + c(theta.6_2.g1, theta.6_2.g2)*u6 u3 ~~ c(NA, NA)*u7 + c(theta.7_3.g1, theta.7_3.g2)*u7 u4 ~~ c(NA, NA)*u8 + c(theta.8_4.g1, theta.8_4.g2)*u8 ## LATENT MEANS/INTERCEPTS: FU1 ~ c(0, NA)*1 + c(alpha.1.g1, alpha.1.g2)*1 FU2 ~ c(NA, NA)*1 + c(alpha.2.g1, alpha.2.g2)*1 ## COMMON-FACTOR VARIANCES: FU1 ~~ c(1, NA)*FU1 + c(psi.1_1.g1, psi.1_1.g2)*FU1 FU2 ~~ c(NA, NA)*FU2 + c(psi.2_2.g1, psi.2_2.g2)*FU2 ## COMMON-FACTOR COVARIANCES: FU1 ~~ c(NA, NA)*FU2 + c(psi.2_1.g1, psi.2_1.g2)*FU2 > ## fit model to data > fit.scalar <- cfa(mod.scalar, data = datCat, group = "g", + ordered = paste0("u", 1:8), parameterization = "theta") > ## test equivalence of intercepts, given equal thresholds & loadings > anova(fit.metric, fit.scalar) Scaled and Shifted Chi-Squared Difference Test (method = “satorra.2000”) lavaan->lavTestLRT(): lavaan NOTE: The “Chisq” column contains standard test statistics, not the robust test that should be reported per model. A robust difference test is a function of two standard (not robust) statistics. Df AIC BIC Chisq Chisq diff RMSEA Df diff Pr(>Chisq) fit.metric 63 36.331 fit.scalar 72 49.553 13.628 0.068493 9 0.1362 > > > ## For a single table with all results, you can pass the models to > ## summarize to the compareFit() function > Comparisons <- compareFit(fit.config, fit.thresh, fit.metric, fit.scalar) > summary(Comparisons) ################### Nested Model Comparison ######################### Scaled and Shifted Chi-Squared Difference Test (method = “satorra.2000”) lavaan->unknown(): lavaan NOTE: The “Chisq” column contains standard test statistics, not the robust test that should be reported per model. A robust difference test is a function of two standard (not robust) statistics. Df AIC BIC Chisq Chisq diff RMSEA Df diff Pr(>Chisq) fit.config 30 19.061 fit.thresh 54 28.881 18.5502 0.000000 24 0.7755 fit.metric 63 36.331 7.0032 0.000000 9 0.6368 fit.scalar 72 49.553 13.6276 0.068493 9 0.1362 ####################### Model Fit Indices ########################### chisq.scaled df.scaled pvalue.scaled rmsea.scaled cfi.scaled fit.config 31.718† 30 .381 .024 0.998 fit.thresh 51.037 54 .589 .000† 1.000† fit.metric 57.732 63 .664 .000† 1.000† fit.scalar 72.347 72 .466 .007 1.000 tli.scaled srmr fit.config 0.997 .045† fit.thresh 1.003 .045 fit.metric 1.005† .048 fit.scalar 1.000 .048 ################## Differences in Fit Indices ####################### df.scaled rmsea.scaled cfi.scaled tli.scaled srmr fit.thresh - fit.config 24 -0.024 0.002 0.006 0.000 fit.metric - fit.thresh 9 0.000 0.000 0.002 0.003 fit.scalar - fit.metric 9 0.007 0.000 -0.005 0.000 > > > ## ------------------------------------------------------ > ## NOT RECOMMENDED: fit several invariance models at once > ## ------------------------------------------------------ > test.seq <- c("thresholds","loadings","intercepts","means","residuals") > meq.list <- list() > for (i in 0:length(test.seq)) { + if (i == 0L) { + meq.label <- "configural" + group.equal <- "" + long.equal <- "" + } else { + meq.label <- test.seq[i] + group.equal <- test.seq[1:i] + long.equal <- test.seq[1:i] + } + meq.list[[meq.label]] <- measEq.syntax(configural.model = mod.cat, + data = datCat, + ordered = paste0("u", 1:8), + parameterization = "theta", + ID.fac = "std.lv", + ID.cat = "Wu.Estabrook.2016", + group = "g", + group.equal = group.equal, + longFacNames = longFacNames, + long.equal = long.equal, + return.fit = TRUE) + } > > evalMeasEq <- compareFit(meq.list) > summary(evalMeasEq) ################### Nested Model Comparison ######################### Scaled and Shifted Chi-Squared Difference Test (method = “satorra.2000”) lavaan->unknown(): lavaan NOTE: The “Chisq” column contains standard test statistics, not the robust test that should be reported per model. A robust difference test is a function of two standard (not robust) statistics. Df AIC BIC Chisq Chisq diff RMSEA Df diff Pr(>Chisq) meq.list.configural 30 19.061 meq.list.thresholds 54 28.881 18.5502 0.00000 24 0.7755309 meq.list.loadings 63 36.331 7.0032 0.00000 9 0.6367896 meq.list.intercepts 72 49.553 13.6276 0.06849 9 0.1362032 meq.list.means 75 125.854 18.0504 0.49430 3 0.0004294 meq.list.residuals 87 140.498 17.5661 0.04693 12 0.1295142 meq.list.configural meq.list.thresholds meq.list.loadings meq.list.intercepts meq.list.means *** meq.list.residuals --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 ####################### Model Fit Indices ########################### chisq.scaled df.scaled pvalue.scaled rmsea.scaled meq.list.configural 31.718† 30 .381 .024 meq.list.thresholds 51.037 54 .589 .000† meq.list.loadings 57.732 63 .664 .000† meq.list.intercepts 72.347 72 .466 .007 meq.list.means 127.979 75 .000 .084 meq.list.residuals 143.956 87 .000 .081 cfi.scaled tli.scaled srmr meq.list.configural 0.998 0.997 .045† meq.list.thresholds 1.000† 1.003 .045 meq.list.loadings 1.000† 1.005† .048 meq.list.intercepts 1.000 1.000 .048 meq.list.means .948 .961 .048 meq.list.residuals .944 .964 .053 ################## Differences in Fit Indices ####################### df.scaled rmsea.scaled cfi.scaled meq.list.thresholds - meq.list.configural 24 -0.024 0.002 meq.list.loadings - meq.list.thresholds 9 0.000 0.000 meq.list.intercepts - meq.list.loadings 9 0.007 0.000 meq.list.means - meq.list.intercepts 3 0.077 -0.052 meq.list.residuals - meq.list.means 12 -0.003 -0.004 tli.scaled srmr meq.list.thresholds - meq.list.configural 0.006 0.000 meq.list.loadings - meq.list.thresholds 0.002 0.003 meq.list.intercepts - meq.list.loadings -0.005 0.000 meq.list.means - meq.list.intercepts -0.039 0.000 meq.list.residuals - meq.list.means 0.003 0.005 > > > ## ----------------- > ## Binary indicators > ## ----------------- > > ## borrow example data from Mplus user guide > myData <- read.table("https://www.statmodel.com/usersguide/chap5/ex5.16.dat") > names(myData) <- c("u1","u2","u3","u4","u5","u6","x1","x2","x3","g") > bin.mod <- ' + FU1 =~ u1 + u2 + u3 + FU2 =~ u4 + u5 + u6 + ' > ## Must SIMULTANEOUSLY constrain thresholds, loadings, and intercepts > test.seq <- list(strong = c("thresholds","loadings","intercepts"), + means = "means", + strict = "residuals") > meq.list <- list() > for (i in 0:length(test.seq)) { + if (i == 0L) { + meq.label <- "configural" + group.equal <- "" + long.equal <- "" + } else { + meq.label <- names(test.seq)[i] + group.equal <- unlist(test.seq[1:i]) + # long.equal <- unlist(test.seq[1:i]) + } + meq.list[[meq.label]] <- measEq.syntax(configural.model = bin.mod, + data = myData, + ordered = paste0("u", 1:6), + parameterization = "theta", + ID.fac = "std.lv", + ID.cat = "Wu.Estabrook.2016", + group = "g", + group.equal = group.equal, + #longFacNames = longFacNames, + #long.equal = long.equal, + return.fit = TRUE) + } > > evalMeasEq <- compareFit(meq.list) > summary(evalMeasEq) ################### Nested Model Comparison ######################### Scaled and Shifted Chi-Squared Difference Test (method = “satorra.2000”) lavaan->unknown(): lavaan NOTE: The “Chisq” column contains standard test statistics, not the robust test that should be reported per model. A robust difference test is a function of two standard (not robust) statistics. Df AIC BIC Chisq Chisq diff RMSEA Df diff Pr(>Chisq) meq.list.configural 16 3.4074 meq.list.strong 18 9.3524 15.845 0.042346 2 0.0003624 meq.list.means 20 173.0376 118.508 0.271096 2 < 2.2e-16 meq.list.strict 26 189.2318 15.961 0.039301 6 0.0139672 meq.list.configural meq.list.strong *** meq.list.means *** meq.list.strict * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 ####################### Model Fit Indices ########################### chisq.scaled df.scaled pvalue.scaled rmsea.scaled meq.list.configural 8.286† 16 .940 .000† meq.list.strong 18.826 18 .403 .006 meq.list.means 246.994 20 .000 .102 meq.list.strict 220.050 26 .000 .082 cfi.scaled tli.scaled srmr meq.list.configural 1.000† 1.001† .011† meq.list.strong 1.000 1.000 .012 meq.list.means .986 .979 .015 meq.list.strict .988 .986 .029 ################## Differences in Fit Indices ####################### df.scaled rmsea.scaled cfi.scaled meq.list.strong - meq.list.configural 2 0.006 0.000 meq.list.means - meq.list.strong 2 0.095 -0.014 meq.list.strict - meq.list.means 6 -0.019 0.002 tli.scaled srmr meq.list.strong - meq.list.configural -0.001 0.000 meq.list.means - meq.list.strong -0.021 0.003 meq.list.strict - meq.list.means 0.007 0.014 > > > > ## --------------------- > ## Multilevel Invariance > ## --------------------- > > ## To test invariance across levels in a MLSEM, specify syntax as though > ## you are fitting to 2 groups instead of 2 levels. > > mlsem <- ' f1 =~ y1 + y2 + y3 + f2 =~ y4 + y5 + y6 ' > ## metric invariance > syntax.metric <- measEq.syntax(configural.model = mlsem, meanstructure = TRUE, + ID.fac = "std.lv", sample.nobs = c(1, 1), + group = "cluster", group.equal = "loadings") > ## by definition, Level-1 means must be zero, so fix them > syntax.metric <- update(syntax.metric, + change.syntax = paste0("y", 1:6, " ~ c(0, NA)*1")) Error in if (nLabels[RR] > 1L && nLabels[RR] != nBlocks) { : missing value where TRUE/FALSE needed Calls: update -> update -> .local -> char2update Execution halted * checking for unstated dependencies in vignettes ... OK * checking package vignettes ... OK * checking re-building of vignette outputs ... OK * checking PDF version of manual ... OK * checking for non-standard things in the check directory ... OK * checking for detritus in the temp directory ... OK * checking for new files in some other directories ... OK * DONE Status: 1 ERROR See ‘/data/blackswan/ripley/R/packages/tests-devel/semTools.Rcheck/00check.log’ for details. Command exited with non-zero status 1 Time 6:08.02, 337.09 + 27.19