R/clpm.h.R

Defines functions clpm

Documented in clpm

# This file is automatically generated, you probably don't want to edit this

clpmOptions <- if (requireNamespace("jmvcore", quietly=TRUE)) R6::R6Class(
    "clpmOptions",
    inherit = jmvcore::Options,
    public = list(
        initialize = function(
            factors = list(
                list(label="X", vars=list()),
                list(label="Y", vars=list())),
            show_schematic_plot = TRUE,
            constrain_crosslagged = FALSE,
            constrain_autoregressions = FALSE,
            constrain_residual_variances = FALSE,
            constrain_observed_errors = FALSE,
            constrain_covariances = FALSE,
            estimate_observed_intercepts = TRUE,
            estimate_observed_errors = FALSE,
            estimate_latent_intercepts = FALSE,
            show_lavaan_syntax = FALSE,
            missing_data_treatment = "listwise", ...) {

            super$initialize(
                package="longsem",
                name="clpm",
                requiresData=TRUE,
                ...)

            private$..factors <- jmvcore::OptionArray$new(
                "factors",
                factors,
                default=list(
                    list(label="X", vars=list()),
                    list(label="Y", vars=list())),
                template=jmvcore::OptionGroup$new(
                    "factors",
                    NULL,
                    elements=list(
                        jmvcore::OptionString$new(
                            "label",
                            NULL),
                        jmvcore::OptionVariables$new(
                            "vars",
                            NULL,
                            suggested=list(
                                "continuous"),
                            permitted=list(
                                "numeric")))))
            private$..show_schematic_plot <- jmvcore::OptionBool$new(
                "show_schematic_plot",
                show_schematic_plot,
                default=TRUE)
            private$..constrain_crosslagged <- jmvcore::OptionBool$new(
                "constrain_crosslagged",
                constrain_crosslagged,
                default=FALSE)
            private$..constrain_autoregressions <- jmvcore::OptionBool$new(
                "constrain_autoregressions",
                constrain_autoregressions,
                default=FALSE)
            private$..constrain_residual_variances <- jmvcore::OptionBool$new(
                "constrain_residual_variances",
                constrain_residual_variances,
                default=FALSE)
            private$..constrain_observed_errors <- jmvcore::OptionBool$new(
                "constrain_observed_errors",
                constrain_observed_errors,
                default=FALSE)
            private$..constrain_covariances <- jmvcore::OptionBool$new(
                "constrain_covariances",
                constrain_covariances,
                default=FALSE)
            private$..estimate_observed_intercepts <- jmvcore::OptionBool$new(
                "estimate_observed_intercepts",
                estimate_observed_intercepts,
                default=TRUE)
            private$..estimate_observed_errors <- jmvcore::OptionBool$new(
                "estimate_observed_errors",
                estimate_observed_errors,
                default=FALSE)
            private$..estimate_latent_intercepts <- jmvcore::OptionBool$new(
                "estimate_latent_intercepts",
                estimate_latent_intercepts,
                default=FALSE)
            private$..show_lavaan_syntax <- jmvcore::OptionBool$new(
                "show_lavaan_syntax",
                show_lavaan_syntax,
                default=FALSE)
            private$..missing_data_treatment <- jmvcore::OptionList$new(
                "missing_data_treatment",
                missing_data_treatment,
                options=list(
                    "ml",
                    "listwise"),
                default="listwise")

            self$.addOption(private$..factors)
            self$.addOption(private$..show_schematic_plot)
            self$.addOption(private$..constrain_crosslagged)
            self$.addOption(private$..constrain_autoregressions)
            self$.addOption(private$..constrain_residual_variances)
            self$.addOption(private$..constrain_observed_errors)
            self$.addOption(private$..constrain_covariances)
            self$.addOption(private$..estimate_observed_intercepts)
            self$.addOption(private$..estimate_observed_errors)
            self$.addOption(private$..estimate_latent_intercepts)
            self$.addOption(private$..show_lavaan_syntax)
            self$.addOption(private$..missing_data_treatment)
        }),
    active = list(
        factors = function() private$..factors$value,
        show_schematic_plot = function() private$..show_schematic_plot$value,
        constrain_crosslagged = function() private$..constrain_crosslagged$value,
        constrain_autoregressions = function() private$..constrain_autoregressions$value,
        constrain_residual_variances = function() private$..constrain_residual_variances$value,
        constrain_observed_errors = function() private$..constrain_observed_errors$value,
        constrain_covariances = function() private$..constrain_covariances$value,
        estimate_observed_intercepts = function() private$..estimate_observed_intercepts$value,
        estimate_observed_errors = function() private$..estimate_observed_errors$value,
        estimate_latent_intercepts = function() private$..estimate_latent_intercepts$value,
        show_lavaan_syntax = function() private$..show_lavaan_syntax$value,
        missing_data_treatment = function() private$..missing_data_treatment$value),
    private = list(
        ..factors = NA,
        ..show_schematic_plot = NA,
        ..constrain_crosslagged = NA,
        ..constrain_autoregressions = NA,
        ..constrain_residual_variances = NA,
        ..constrain_observed_errors = NA,
        ..constrain_covariances = NA,
        ..estimate_observed_intercepts = NA,
        ..estimate_observed_errors = NA,
        ..estimate_latent_intercepts = NA,
        ..show_lavaan_syntax = NA,
        ..missing_data_treatment = NA)
)

clpmResults <- if (requireNamespace("jmvcore", quietly=TRUE)) R6::R6Class(
    "clpmResults",
    inherit = jmvcore::Group,
    active = list(
        lavaan_warnings = function() private$.items[["lavaan_warnings"]],
        schematic_plot = function() private$.items[["schematic_plot"]],
        text = function() private$.items[["text"]],
        lavaan_syntax = function() private$.items[["lavaan_syntax"]]),
    private = list(),
    public=list(
        initialize=function(options) {
            super$initialize(
                options=options,
                name="",
                title="Cross lagged panel model")
            self$add(jmvcore::Table$new(
                options=options,
                name="lavaan_warnings",
                title="Lavaan warnings",
                rows=1,
                columns=list(
                    list(
                        `name`="warning_text", 
                        `title`="Warnings", 
                        `type`="text", 
                        `content`="No warnings from lavaan!"))))
            self$add(jmvcore::Image$new(
                options=options,
                name="schematic_plot",
                title="Schematic",
                visible="(show_schematic_plot)",
                renderFun=".plotSchematic"))
            self$add(jmvcore::Preformatted$new(
                options=options,
                name="text",
                title="Cross lagged panel model"))
            self$add(jmvcore::Preformatted$new(
                options=options,
                name="lavaan_syntax",
                title="Syntax",
                visible="(show_lavaan_syntax)"))}))

clpmBase <- if (requireNamespace("jmvcore", quietly=TRUE)) R6::R6Class(
    "clpmBase",
    inherit = jmvcore::Analysis,
    public = list(
        initialize = function(options, data=NULL, datasetId="", analysisId="", revision=0) {
            super$initialize(
                package = "longsem",
                name = "clpm",
                version = c(1,0,0),
                options = options,
                results = clpmResults$new(options=options),
                data = data,
                datasetId = datasetId,
                analysisId = analysisId,
                revision = revision,
                pause = NULL,
                completeWhenFilled = FALSE,
                requiresMissings = FALSE)
        }))

#' Cross lagged panel model
#'
#' 
#' @param data the data as a data frame
#' @param factors a list containing named lists that define the \code{label}
#'   of the factor and the \code{vars} that belong to that factor
#' @param show_schematic_plot .
#' @param constrain_crosslagged .
#' @param constrain_autoregressions .
#' @param constrain_residual_variances .
#' @param constrain_observed_errors .
#' @param constrain_covariances .
#' @param estimate_observed_intercepts .
#' @param estimate_observed_errors .
#' @param estimate_latent_intercepts .
#' @param show_lavaan_syntax .
#' @param missing_data_treatment .
#' @return A results object containing:
#' \tabular{llllll}{
#'   \code{results$lavaan_warnings} \tab \tab \tab \tab \tab a table \cr
#'   \code{results$schematic_plot} \tab \tab \tab \tab \tab an image \cr
#'   \code{results$text} \tab \tab \tab \tab \tab a preformatted \cr
#'   \code{results$lavaan_syntax} \tab \tab \tab \tab \tab a preformatted \cr
#' }
#'
#' Tables can be converted to data frames with \code{asDF} or \code{\link{as.data.frame}}. For example:
#'
#' \code{results$lavaan_warnings$asDF}
#'
#' \code{as.data.frame(results$lavaan_warnings)}
#'
#' @export
clpm <- function(
    data,
    factors = list(
                list(label="X", vars=list()),
                list(label="Y", vars=list())),
    show_schematic_plot = TRUE,
    constrain_crosslagged = FALSE,
    constrain_autoregressions = FALSE,
    constrain_residual_variances = FALSE,
    constrain_observed_errors = FALSE,
    constrain_covariances = FALSE,
    estimate_observed_intercepts = TRUE,
    estimate_observed_errors = FALSE,
    estimate_latent_intercepts = FALSE,
    show_lavaan_syntax = FALSE,
    missing_data_treatment = "listwise") {

    if ( ! requireNamespace("jmvcore", quietly=TRUE))
        stop("clpm requires jmvcore to be installed (restart may be required)")

    if (missing(data))
        data <- jmvcore::marshalData(
            parent.frame())


    options <- clpmOptions$new(
        factors = factors,
        show_schematic_plot = show_schematic_plot,
        constrain_crosslagged = constrain_crosslagged,
        constrain_autoregressions = constrain_autoregressions,
        constrain_residual_variances = constrain_residual_variances,
        constrain_observed_errors = constrain_observed_errors,
        constrain_covariances = constrain_covariances,
        estimate_observed_intercepts = estimate_observed_intercepts,
        estimate_observed_errors = estimate_observed_errors,
        estimate_latent_intercepts = estimate_latent_intercepts,
        show_lavaan_syntax = show_lavaan_syntax,
        missing_data_treatment = missing_data_treatment)

    analysis <- clpmClass$new(
        options = options,
        data = data)

    analysis$run()

    analysis$results
}
Gootjes/longsem documentation built on Dec. 17, 2021, 10:22 p.m.