# generate syntax for an independence model
lav_syntax_independence <- function(ov.names=character(0),
ov.names.x=character(0),
sample.cov=NULL) {
ov.names.nox <- ov.names[!ov.names %in% ov.names.x]
nvar <- length(ov.names.nox)
lv.names <- paste("f", 1:nvar, sep="")
# check sample.cov
if(!is.null(sample.cov)) {
if(is.list(sample.cov)) {
ngroups <- length(sample.cov)
} else {
ngroups <- 1L
sample.cov <- list(sample.cov)
}
stopifnot(is.matrix(sample.cov[[1]]))
#stopifnot(length(ov.names) == nrow(sample.cov[[1]]))
# FIXME: check rownames and reorder...
}
# construct psindex syntax for an independence model
txt <- "# independence model\n"
# =~ lines (each observed variables has its own latent variable)
# excepct for ov's that are in ov.names.x
txt <- paste(txt, paste(lv.names, " =~ 1*", ov.names.nox,
"\n", sep="", collapse=""), sep="")
# residual ov variances fixed to zero
txt <- paste(txt, paste(ov.names.nox, " ~~ 0*", ov.names.nox,
"\n", sep="", collapse=""), sep="")
# latent variances
if(is.null(sample.cov)) {
txt <- paste(txt, paste(lv.names, " ~~ ", lv.names,
"\n", sep="", collapse=""), sep="")
} else {
# fill in sample values
ov.idx <- match(ov.names.nox, ov.names)
start.txt <- paste("start(c(",
apply(matrix(unlist(lapply(sample.cov, function(x) {
diag(x)[ov.idx] })),
ncol=ngroups), 1,paste,collapse=","), "))", sep="")
txt <- paste(txt, paste(lv.names, " ~~ ", start.txt, " * ",
lv.names,
"\n", sep="", collapse=""), sep="")
}
# latent *covariances* fixed to zero (= independence!)
if(length(lv.names) > 1L) {
tmp <- utils::combn(lv.names, 2)
txt <- paste(txt, paste(tmp[1,], " ~~ 0*", tmp[2,], "\n", sep="",
collapse=""), sep="")
}
# if 'independent x' variables, add an 'empty' regression
if((nx <- length(ov.names.x)) > 0) {
# dummy regression line
txt <- paste(txt, paste("f1 ~ 0*", ov.names.x,
"\n", sep="", collapse=""), sep="")
}
# Note: no need to pass starting values here, psindexStart will
# use the sample statistics anyway....
txt
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.