R/chisqposttest.h.R

Defines functions chisqposttest

Documented in chisqposttest

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

chisqposttestOptions <- if (requireNamespace("jmvcore", quietly=TRUE)) R6::R6Class(
    "chisqposttestOptions",
    inherit = jmvcore::Options,
    public = list(
        initialize = function(
            rows = NULL,
            cols = NULL,
            posthoc = "bonferroni",
            sig = 0.05,
            excl = FALSE,
            exp = FALSE,
            plot = FALSE, ...) {

            super$initialize(
                package="ClinicoPath",
                name="chisqposttest",
                requiresData=TRUE,
                ...)

            private$..rows <- jmvcore::OptionVariable$new(
                "rows",
                rows,
                suggested=list(
                    "ordinal",
                    "nominal"),
                permitted=list(
                    "factor"))
            private$..cols <- jmvcore::OptionVariable$new(
                "cols",
                cols,
                suggested=list(
                    "ordinal",
                    "nominal"),
                permitted=list(
                    "factor"))
            private$..posthoc <- jmvcore::OptionList$new(
                "posthoc",
                posthoc,
                options=list(
                    "bonferroni",
                    "holm",
                    "fdr",
                    "none"),
                default="bonferroni")
            private$..sig <- jmvcore::OptionNumber$new(
                "sig",
                sig,
                min=0.001,
                max=0.1,
                default=0.05)
            private$..excl <- jmvcore::OptionBool$new(
                "excl",
                excl,
                default=FALSE)
            private$..exp <- jmvcore::OptionBool$new(
                "exp",
                exp,
                default=FALSE)
            private$..plot <- jmvcore::OptionBool$new(
                "plot",
                plot,
                default=FALSE)

            self$.addOption(private$..rows)
            self$.addOption(private$..cols)
            self$.addOption(private$..posthoc)
            self$.addOption(private$..sig)
            self$.addOption(private$..excl)
            self$.addOption(private$..exp)
            self$.addOption(private$..plot)
        }),
    active = list(
        rows = function() private$..rows$value,
        cols = function() private$..cols$value,
        posthoc = function() private$..posthoc$value,
        sig = function() private$..sig$value,
        excl = function() private$..excl$value,
        exp = function() private$..exp$value,
        plot = function() private$..plot$value),
    private = list(
        ..rows = NA,
        ..cols = NA,
        ..posthoc = NA,
        ..sig = NA,
        ..excl = NA,
        ..exp = NA,
        ..plot = NA)
)

chisqposttestResults <- if (requireNamespace("jmvcore", quietly=TRUE)) R6::R6Class(
    "chisqposttestResults",
    inherit = jmvcore::Group,
    active = list(
        todo = function() private$.items[["todo"]],
        chisqTable = function() private$.items[["chisqTable"]],
        contingencyTable = function() private$.items[["contingencyTable"]],
        posthocTable = function() private$.items[["posthocTable"]],
        plotOutput = function() private$.items[["plotOutput"]]),
    private = list(),
    public=list(
        initialize=function(options) {
            super$initialize(
                options=options,
                name="",
                title="Chi-Square Post-Hoc Tests",
                refs=list(
                    "chisq.posthoc.test",
                    "vcd",
                    "ClinicoPathJamoviModule"))
            self$add(jmvcore::Html$new(
                options=options,
                name="todo",
                title="To Do",
                clearWith=list(
                    "rows",
                    "cols")))
            self$add(jmvcore::Table$new(
                options=options,
                name="chisqTable",
                title="Chi-Square Test Results",
                rows=1,
                columns=list(
                    list(
                        `name`="stat", 
                        `title`="Statistic", 
                        `type`="text"),
                    list(
                        `name`="value", 
                        `title`="Value", 
                        `type`="number"),
                    list(
                        `name`="df", 
                        `title`="df", 
                        `type`="integer"),
                    list(
                        `name`="p", 
                        `title`="p-value", 
                        `type`="number", 
                        `format`="zto,pvalue")),
                clearWith=list(
                    "rows",
                    "cols",
                    "excl")))
            self$add(jmvcore::Html$new(
                options=options,
                name="contingencyTable",
                title="Contingency Table",
                clearWith=list(
                    "rows",
                    "cols",
                    "excl",
                    "exp")))
            self$add(jmvcore::Table$new(
                options=options,
                name="posthocTable",
                title="Post-Hoc Test Results",
                columns=list(
                    list(
                        `name`="comparison", 
                        `title`="Comparison", 
                        `type`="text"),
                    list(
                        `name`="chi", 
                        `title`="Chi-Square", 
                        `type`="number"),
                    list(
                        `name`="p", 
                        `title`="p-value", 
                        `type`="number", 
                        `format`="zto,pvalue"),
                    list(
                        `name`="padj", 
                        `title`="Adj. p-value", 
                        `type`="number", 
                        `format`="zto,pvalue"),
                    list(
                        `name`="sig", 
                        `title`="Significant", 
                        `type`="text")),
                clearWith=list(
                    "rows",
                    "cols",
                    "posthoc",
                    "sig",
                    "excl")))
            self$add(jmvcore::Image$new(
                options=options,
                name="plotOutput",
                title="Standardized Residuals",
                width=600,
                height=400,
                renderFun=".plot",
                visible="(plot)",
                clearWith=list(
                    "rows",
                    "cols",
                    "excl")))}))

chisqposttestBase <- if (requireNamespace("jmvcore", quietly=TRUE)) R6::R6Class(
    "chisqposttestBase",
    inherit = jmvcore::Analysis,
    public = list(
        initialize = function(options, data=NULL, datasetId="", analysisId="", revision=0) {
            super$initialize(
                package = "ClinicoPath",
                name = "chisqposttest",
                version = c(0,0,3),
                options = options,
                results = chisqposttestResults$new(options=options),
                data = data,
                datasetId = datasetId,
                analysisId = analysisId,
                revision = revision,
                pause = NULL,
                completeWhenFilled = FALSE,
                requiresMissings = FALSE,
                weightsSupport = 'auto')
        }))

#' Chi-Square Post-Hoc Tests
#'
#' Performs Chi-Square test and post-hoc pairwise comparisons.
#'
#' @examples
#' \donttest{
#' # example will be added
#'}
#' @param data The data as a data frame.
#' @param rows variable in the rows
#' @param cols variable in the columns
#' @param posthoc Method for p-value adjustment in post-hoc tests
#' @param sig alpha level for significance testing
#' @param excl exclude missing values from analysis
#' @param exp show expected values in the table
#' @param plot display plot of standardized residuals
#' @return A results object containing:
#' \tabular{llllll}{
#'   \code{results$todo} \tab \tab \tab \tab \tab a html \cr
#'   \code{results$chisqTable} \tab \tab \tab \tab \tab a table \cr
#'   \code{results$contingencyTable} \tab \tab \tab \tab \tab a html \cr
#'   \code{results$posthocTable} \tab \tab \tab \tab \tab a table \cr
#'   \code{results$plotOutput} \tab \tab \tab \tab \tab an image \cr
#' }
#'
#' Tables can be converted to data frames with \code{asDF} or \code{\link{as.data.frame}}. For example:
#'
#' \code{results$chisqTable$asDF}
#'
#' \code{as.data.frame(results$chisqTable)}
#'
#' @export
chisqposttest <- function(
    data,
    rows,
    cols,
    posthoc = "bonferroni",
    sig = 0.05,
    excl = FALSE,
    exp = FALSE,
    plot = FALSE) {

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

    if ( ! missing(rows)) rows <- jmvcore::resolveQuo(jmvcore::enquo(rows))
    if ( ! missing(cols)) cols <- jmvcore::resolveQuo(jmvcore::enquo(cols))
    if (missing(data))
        data <- jmvcore::marshalData(
            parent.frame(),
            `if`( ! missing(rows), rows, NULL),
            `if`( ! missing(cols), cols, NULL))

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

    options <- chisqposttestOptions$new(
        rows = rows,
        cols = cols,
        posthoc = posthoc,
        sig = sig,
        excl = excl,
        exp = exp,
        plot = plot)

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

    analysis$run()

    analysis$results
}
sbalci/ClinicoPathJamoviModule documentation built on June 13, 2025, 9:34 a.m.