R/mimic.R

Defines functions mimic

Documented in mimic

#' 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)
}
jsakaluk/psyscores documentation built on Dec. 16, 2021, 6:50 p.m.