#' A Function That Scripts a MIMIC-Styled RFA Model for lavaan
#'
#' This function takes the outputted df from prods and generates the lavaan script necessary to fit a RFA model of uniform and non-uniform DIF
#' @param df input data frame generated by prods
#' @param lvname input character of latent varaible name for scripting
#' @return a mimic model lavaan script
#' @export
#' @examples
#' open.script <- mimic(proddf, lvname = "openness")
mimic <- function(proddf, lvname){
#determine number of indicators
itemnum <- (length(names(proddf))-1)/2
#extract covariate names
covname <- names(proddf[1])
#indicators are between column 2 and itemcolmax
itemcolmax <- 1+itemnum
#product terms are between column prodstart and proxmax
prodstart <- itemcolmax+1
prodmax <- length(names(proddf))
#Extract indicator and product names for later scripting
indnames <- names(proddf[2:itemcolmax])
prodnames <- names(proddf[prodstart:prodmax])
#Create sub-directory called scripts if not available in working directory
dir.create("./scripts")
#Factor for lv
eta.ind <- sprintf("%s =~ ", lvname)
lambda.ind <- gsub(" ", "",paste(eta.ind,paste(indnames, collapse = "+")), fixed = T)
#Factor for cov (factor is given all caps name)
lambda.cov <- sprintf("%s =~ %s", toupper(covname), covname)
#Factor for int
eta.int <- sprintf("%sX%s =~", lvname, covname)
lambda.int <- gsub(" ", "",paste(eta.int,paste(prodnames, collapse = "+")), fixed = T)
#Covariances
cov.list <- list()
for(i in 1:itemnum){
cov.list[[i]] <- sprintf("%s ~~ %s", indnames[[i]], prodnames[[i]])
}
cov.list <- paste(cov.list, collapse = "\n")
mimic.model <- sprintf("%s\n\n%s\n\n%s\n\n%s", lambda.ind, lambda.cov, lambda.int, cov.list)
cat(mimic.model,"\n", file = sprintf("./scripts/%s_%s_mimic.txt", lvname, covname))
return(mimic.model)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.