R/mfa.h.R

Defines functions MFA

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

MFAOptions <- if (requireNamespace("jmvcore", quietly=TRUE)) R6::R6Class(
    "MFAOptions",
    inherit = jmvcore::Options,
    public = list(
        initialize = function(
            quantivar = NULL,
            qualivar = NULL,
            individus = NULL,
            tuto = TRUE,
            nFactors = 2,
            groupdef = "Ex: 5,3,10,9,2,2",
            grouptype = "Ex: s,s,s,s,s,n",
            groupill = "Ex: 5,6",
            groupname = "Ex: olf,vis,olfag,gust,ens,orig",
            proba = 5,
            abs = 1,
            ord = 2,
            ncp = 5,
            graphclassif = FALSE,
            nbclust = -1, ...) {

            super$initialize(
                package="MEDA",
                name="MFA",
                requiresData=TRUE,
                ...)

            private$..quantivar <- jmvcore::OptionVariables$new(
                "quantivar",
                quantivar,
                suggested=list(
                    "continuous"),
                permitted=list(
                    "numeric"))
            private$..qualivar <- jmvcore::OptionVariables$new(
                "qualivar",
                qualivar,
                suggested=list(
                    "nominal",
                    "ordinal"),
                permitted=list(
                    "factor"))
            private$..individus <- jmvcore::OptionVariable$new(
                "individus",
                individus,
                suggested=list(
                    "nominal"),
                permitted=list(
                    "factor"))
            private$..tuto <- jmvcore::OptionBool$new(
                "tuto",
                tuto,
                default=TRUE)
            private$..nFactors <- jmvcore::OptionInteger$new(
                "nFactors",
                nFactors,
                default=2)
            private$..groupdef <- jmvcore::OptionString$new(
                "groupdef",
                groupdef,
                default="Ex: 5,3,10,9,2,2")
            private$..grouptype <- jmvcore::OptionString$new(
                "grouptype",
                grouptype,
                default="Ex: s,s,s,s,s,n")
            private$..groupill <- jmvcore::OptionString$new(
                "groupill",
                groupill,
                default="Ex: 5,6")
            private$..groupname <- jmvcore::OptionString$new(
                "groupname",
                groupname,
                default="Ex: olf,vis,olfag,gust,ens,orig")
            private$..proba <- jmvcore::OptionNumber$new(
                "proba",
                proba,
                default=5)
            private$..abs <- jmvcore::OptionInteger$new(
                "abs",
                abs,
                default=1)
            private$..ord <- jmvcore::OptionInteger$new(
                "ord",
                ord,
                default=2)
            private$..ncp <- jmvcore::OptionInteger$new(
                "ncp",
                ncp,
                default=5)
            private$..newvar <- jmvcore::OptionOutput$new(
                "newvar")
            private$..graphclassif <- jmvcore::OptionBool$new(
                "graphclassif",
                graphclassif,
                default=FALSE)
            private$..nbclust <- jmvcore::OptionInteger$new(
                "nbclust",
                nbclust,
                default=-1)
            private$..newvar2 <- jmvcore::OptionOutput$new(
                "newvar2")

            self$.addOption(private$..quantivar)
            self$.addOption(private$..qualivar)
            self$.addOption(private$..individus)
            self$.addOption(private$..tuto)
            self$.addOption(private$..nFactors)
            self$.addOption(private$..groupdef)
            self$.addOption(private$..grouptype)
            self$.addOption(private$..groupill)
            self$.addOption(private$..groupname)
            self$.addOption(private$..proba)
            self$.addOption(private$..abs)
            self$.addOption(private$..ord)
            self$.addOption(private$..ncp)
            self$.addOption(private$..newvar)
            self$.addOption(private$..graphclassif)
            self$.addOption(private$..nbclust)
            self$.addOption(private$..newvar2)
        }),
    active = list(
        quantivar = function() private$..quantivar$value,
        qualivar = function() private$..qualivar$value,
        individus = function() private$..individus$value,
        tuto = function() private$..tuto$value,
        nFactors = function() private$..nFactors$value,
        groupdef = function() private$..groupdef$value,
        grouptype = function() private$..grouptype$value,
        groupill = function() private$..groupill$value,
        groupname = function() private$..groupname$value,
        proba = function() private$..proba$value,
        abs = function() private$..abs$value,
        ord = function() private$..ord$value,
        ncp = function() private$..ncp$value,
        newvar = function() private$..newvar$value,
        graphclassif = function() private$..graphclassif$value,
        nbclust = function() private$..nbclust$value,
        newvar2 = function() private$..newvar2$value),
    private = list(
        ..quantivar = NA,
        ..qualivar = NA,
        ..individus = NA,
        ..tuto = NA,
        ..nFactors = NA,
        ..groupdef = NA,
        ..grouptype = NA,
        ..groupill = NA,
        ..groupname = NA,
        ..proba = NA,
        ..abs = NA,
        ..ord = NA,
        ..ncp = NA,
        ..newvar = NA,
        ..graphclassif = NA,
        ..nbclust = NA,
        ..newvar2 = NA)
)

MFAResults <- if (requireNamespace("jmvcore", quietly=TRUE)) R6::R6Class(
    "MFAResults",
    inherit = jmvcore::Group,
    active = list(
        instructions = function() private$.items[["instructions"]],
        plotgroup = function() private$.items[["plotgroup"]],
        plotaxe = function() private$.items[["plotaxe"]],
        plotind = function() private$.items[["plotind"]],
        plotcat = function() private$.items[["plotcat"]],
        plotvar = function() private$.items[["plotvar"]],
        eigengroup = function() private$.items[["eigengroup"]],
        descdesdim = function() private$.items[["descdesdim"]],
        code = function() private$.items[["code"]],
        plotclassif = function() private$.items[["plotclassif"]],
        newvar = function() private$.items[["newvar"]],
        newvar2 = function() private$.items[["newvar2"]]),
    private = list(),
    public=list(
        initialize=function(options) {
            super$initialize(
                options=options,
                name="",
                title="Results of the Multiple Factor Analysis",
                refs=list(
                    "factominer",
                    "mfa",
                    "explo"))
            self$add(jmvcore::Html$new(
                options=options,
                name="instructions",
                title="Instructions",
                visible="(tuto)"))
            self$add(jmvcore::Image$new(
                options=options,
                name="plotgroup",
                title="Representation of the Groups",
                width=600,
                height=600,
                renderFun=".plotgroups"))
            self$add(jmvcore::Image$new(
                options=options,
                name="plotaxe",
                title="Representation of the Partial Axes",
                width=600,
                height=600,
                renderFun=".plotaxes"))
            self$add(jmvcore::Image$new(
                options=options,
                name="plotind",
                title="Representation of the Individuals",
                width=800,
                height=600,
                renderFun=".plotindividus"))
            self$add(jmvcore::Image$new(
                options=options,
                name="plotcat",
                title="Representation of the Categories",
                visible=FALSE,
                width=800,
                height=600,
                renderFun=".plotcategory"))
            self$add(jmvcore::Image$new(
                options=options,
                name="plotvar",
                title="Representation of the Variables",
                visible=FALSE,
                width=700,
                height=700,
                renderFun=".plotvariables"))
            self$add(R6::R6Class(
                inherit = jmvcore::Group,
                active = list(
                    eigen = function() private$.items[["eigen"]]),
                private = list(),
                public=list(
                    initialize=function(options) {
                        super$initialize(
                            options=options,
                            name="eigengroup",
                            title="Eigenvalue Decomposition")
                        self$add(jmvcore::Table$new(
                            options=options,
                            name="eigen",
                            title="Eigenvalue and (Cumulative) Percentage of Variance",
                            columns=list(
                                list(
                                    `name`="component", 
                                    `title`="", 
                                    `type`="text"),
                                list(
                                    `name`="eigenvalue", 
                                    `title`="Eigenvalue", 
                                    `type`="number"),
                                list(
                                    `name`="purcent", 
                                    `title`="% of the variance", 
                                    `type`="number"),
                                list(
                                    `name`="purcentcum", 
                                    `title`="Cumulative %", 
                                    `type`="number"))))}))$new(options=options))
            self$add(jmvcore::Preformatted$new(
                options=options,
                name="descdesdim",
                title="Automatic Description of the Dimensions"))
            self$add(jmvcore::Preformatted$new(
                options=options,
                name="code",
                title="R code"))
            self$add(jmvcore::Image$new(
                options=options,
                name="plotclassif",
                title="Representation of the Individuals According to Clusters",
                visible="(graphclassif)",
                width=800,
                height=600,
                renderFun=".plotclassif"))
            self$add(jmvcore::Output$new(
                options=options,
                name="newvar",
                title="Coordinates",
                measureType="continuous",
                initInRun=TRUE,
                clearWith=list(
                    "actvars",
                    "quantisup",
                    "qualisup",
                    "individus",
                    "norme")))
            self$add(jmvcore::Output$new(
                options=options,
                name="newvar2",
                title="Coordinates",
                measureType="continuous",
                initInRun=TRUE,
                clearWith=list(
                    "actvars",
                    "quantisup",
                    "qualisup",
                    "individus",
                    "norme")))}))

MFABase <- if (requireNamespace("jmvcore", quietly=TRUE)) R6::R6Class(
    "MFABase",
    inherit = jmvcore::Analysis,
    public = list(
        initialize = function(options, data=NULL, datasetId="", analysisId="", revision=0) {
            super$initialize(
                package = "MEDA",
                name = "MFA",
                version = c(1,0,0),
                options = options,
                results = MFAResults$new(options=options),
                data = data,
                datasetId = datasetId,
                analysisId = analysisId,
                revision = revision,
                pause = NULL,
                completeWhenFilled = FALSE,
                requiresMissings = FALSE,
                weightsSupport = 'none')
        }))

#' Multiple Factor Analysis
#'
#' 
#' @param data .
#' @param quantivar .
#' @param qualivar .
#' @param individus .
#' @param tuto .
#' @param nFactors .
#' @param groupdef .
#' @param grouptype .
#' @param groupill .
#' @param groupname .
#' @param proba .
#' @param abs .
#' @param ord .
#' @param ncp .
#' @param graphclassif .
#' @param nbclust .
#' @return A results object containing:
#' \tabular{llllll}{
#'   \code{results$instructions} \tab \tab \tab \tab \tab a html \cr
#'   \code{results$plotgroup} \tab \tab \tab \tab \tab an image \cr
#'   \code{results$plotaxe} \tab \tab \tab \tab \tab an image \cr
#'   \code{results$plotind} \tab \tab \tab \tab \tab an image \cr
#'   \code{results$plotcat} \tab \tab \tab \tab \tab an image \cr
#'   \code{results$plotvar} \tab \tab \tab \tab \tab an image \cr
#'   \code{results$eigengroup$eigen} \tab \tab \tab \tab \tab a table \cr
#'   \code{results$descdesdim} \tab \tab \tab \tab \tab a preformatted \cr
#'   \code{results$code} \tab \tab \tab \tab \tab a preformatted \cr
#'   \code{results$plotclassif} \tab \tab \tab \tab \tab an image \cr
#'   \code{results$newvar} \tab \tab \tab \tab \tab an output \cr
#'   \code{results$newvar2} \tab \tab \tab \tab \tab an output \cr
#' }
#'
#' @export
MFA <- function(
    data,
    quantivar,
    qualivar,
    individus,
    tuto = TRUE,
    nFactors = 2,
    groupdef = "Ex: 5,3,10,9,2,2",
    grouptype = "Ex: s,s,s,s,s,n",
    groupill = "Ex: 5,6",
    groupname = "Ex: olf,vis,olfag,gust,ens,orig",
    proba = 5,
    abs = 1,
    ord = 2,
    ncp = 5,
    graphclassif = FALSE,
    nbclust = -1) {

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

    if ( ! missing(quantivar)) quantivar <- jmvcore::resolveQuo(jmvcore::enquo(quantivar))
    if ( ! missing(qualivar)) qualivar <- jmvcore::resolveQuo(jmvcore::enquo(qualivar))
    if ( ! missing(individus)) individus <- jmvcore::resolveQuo(jmvcore::enquo(individus))
    if (missing(data))
        data <- jmvcore::marshalData(
            parent.frame(),
            `if`( ! missing(quantivar), quantivar, NULL),
            `if`( ! missing(qualivar), qualivar, NULL),
            `if`( ! missing(individus), individus, NULL))

    for (v in qualivar) if (v %in% names(data)) data[[v]] <- as.factor(data[[v]])
    for (v in individus) if (v %in% names(data)) data[[v]] <- as.factor(data[[v]])

    options <- MFAOptions$new(
        quantivar = quantivar,
        qualivar = qualivar,
        individus = individus,
        tuto = tuto,
        nFactors = nFactors,
        groupdef = groupdef,
        grouptype = grouptype,
        groupill = groupill,
        groupname = groupname,
        proba = proba,
        abs = abs,
        ord = ord,
        ncp = ncp,
        graphclassif = graphclassif,
        nbclust = nbclust)

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

    analysis$run()

    analysis$results
}
Sebastien-Le/MEDA documentation built on Dec. 15, 2024, 12:58 a.m.