From af99149558e7e447d5caebf0f0d4e0a9fbe48737 Mon Sep 17 00:00:00 2001 From: Paul Schmidt Date: Fri, 29 Sep 2023 15:43:50 +0200 Subject: [PATCH] better get_anova(), added add_group_column() --- DESCRIPTION | 4 +- NAMESPACE | 4 +- R/add_group_column.R | 31 +++++ R/describe.R | 4 +- R/get_anova.R | 139 ++++++++++++++------ R/get_varcomp.R | 4 +- R/project_setup.R | 13 +- _pkgdown.yml | 1 + docs/404.html | 2 +- docs/authors.html | 6 +- docs/index.html | 2 +- docs/pkgdown.yml | 2 +- docs/reference/BioMathR-package.html | 2 +- docs/reference/add_group_column.html | 115 ++++++++++++++++ docs/reference/add_sheet.html | 2 +- docs/reference/cond_format.html | 2 +- docs/reference/create_wb.html | 2 +- docs/reference/desc_tabs.html | 2 +- docs/reference/describe.html | 4 +- docs/reference/desplot_across.html | 2 +- docs/reference/docx_tab.html | 8 +- docs/reference/emmeans_BM.html | 2 +- docs/reference/format_p.html | 2 +- docs/reference/get_anova.html | 66 +++++++--- docs/reference/get_d3_colourScale.html | 2 +- docs/reference/get_residual_plots.html | 2 +- docs/reference/get_unique_references.html | 2 +- docs/reference/get_varcomp.html | 8 +- docs/reference/gg_export.html | 2 +- docs/reference/grapes-not_in-grapes.html | 2 +- docs/reference/index.html | 8 +- docs/reference/palette_getset-1.png | Bin 21236 -> 21201 bytes docs/reference/palette_getset.html | 2 +- docs/reference/partial_block_pour_docx.html | 2 +- docs/reference/project_setup.html | 2 +- docs/reference/round_smart.html | 2 +- docs/reference/save_wb.html | 2 +- docs/reference/smart_fit.html | 2 +- docs/reference/str_unGer.html | 2 +- docs/reference/str_wrap_br.html | 8 +- docs/reference/theme_BioMath.html | 2 +- docs/reference/theme_UBA.html | 2 +- docs/reference/tidy_reg.html | 2 +- docs/reference/write_ascii.html | 2 +- docs/sitemap.xml | 3 + man/add_group_column.Rd | 28 ++++ man/get_anova.Rd | 75 ++++++++--- man/get_varcomp.Rd | 6 +- man/str_wrap_br.Rd | 4 +- tests/testthat/test-get_anova.R | 50 +++++++ 50 files changed, 508 insertions(+), 135 deletions(-) create mode 100644 R/add_group_column.R create mode 100644 docs/reference/add_group_column.html create mode 100644 man/add_group_column.Rd create mode 100644 tests/testthat/test-get_anova.R diff --git a/DESCRIPTION b/DESCRIPTION index d7f6639..dcd2005 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Type: Package Package: BioMathR Title: Utility functions used at BioMath -Version: 0.6.0 +Version: 0.7.0 Authors@R: c( person("Paul", "Schmidt", email = "paul.schmidt@biomath.de", role = c("aut", "cre")), person("BioMath", role = "fnd") @@ -46,6 +46,7 @@ Suggests: lme4, lmerTest, MetBrewer, + nlme, openair, pdftools, performance, @@ -59,3 +60,4 @@ Config/testthat/edition: 3 Encoding: UTF-8 LazyData: true RoxygenNote: 7.2.3 +Roxygen: list(markdown = TRUE) diff --git a/NAMESPACE b/NAMESPACE index 241e277..b65875c 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,13 +1,11 @@ # Generated by roxygen2: do not edit by hand -S3method(get_anova,glmmTMB) -S3method(get_anova,lm) -S3method(get_anova,lmerMod) S3method(get_varcomp,glmmTMB) S3method(get_varcomp,merMod) S3method(tidy_reg,lm) S3method(tidy_reg,openair) export("%not_in%") +export(add_group_column) export(add_sheet) export(cond_format) export(create_wb) diff --git a/R/add_group_column.R b/R/add_group_column.R new file mode 100644 index 0000000..71f8bf3 --- /dev/null +++ b/R/add_group_column.R @@ -0,0 +1,31 @@ +#' Add Group Column +#' +#' This function adds a new column to a data frame with a specified name. The new column indicates groups based on the grouping variables provided. When no grouping variable is provided, a default value is assigned to the new column. +#' +#' @param data A data frame. +#' @param name The name of the new column to be added. +#' @param group_by A vector of strings specifying the column names used for grouping. Default is NULL. +#' +#' @return A data frame with the new column added. +#' @examples +#' \dontrun{ +#' data <- data.frame(x = c(1,2,3,1,2,3), y = c("a","b","c","a","b","c")) +#' data %>% add_group_column(name = "group_id", group_by = c("x", "y")) +#' } +#' +#' @export +#' +add_group_column <- function(data, name, group_by = NULL) { + if (is.null(group_by)) { + data[[name]] <- as.factor("-") + return(data) + } else { + data <- data %>% + group_by(across(all_of(group_by))) %>% + mutate(temp____col = paste0(name, str_pad(cur_group_id(), width = 2, pad = "0")) %>% as.factor()) %>% + ungroup() + + names(data)[which(names(data) == "temp____col")] <- name + return(data) + } +} diff --git a/R/describe.R b/R/describe.R index 08b15cc..3cf33ab 100644 --- a/R/describe.R +++ b/R/describe.R @@ -79,14 +79,14 @@ describe <- if (is.numeric(digits)) { out <- out %>% mutate(across( - cols_to_round, + all_of(cols_to_round), ~ round(., digits = digits) )) } if (digits == "round_smart") { out <- out %>% mutate(across( - cols_to_round, + all_of(cols_to_round), ~ BioMathR::round_smart(., ...) )) } diff --git a/R/get_anova.R b/R/get_anova.R index dbb6d60..f4dbea7 100644 --- a/R/get_anova.R +++ b/R/get_anova.R @@ -2,69 +2,126 @@ #' #' @description This function obtains the ANOVA table for a model. #' -#' @param model a fitted model object. Supported classes: \code{"lm"}, \code{"lmerMod"} & \code{"glmmTMB"}. +#' @param model a fitted model object. Supported classes: \code{"lm"}, \code{"lmerModLmerTest"}, \code{"glmmTMB"}, \code{"gls"}, \code{"lme"}. #' @param type Type of ANOVA test: \code{"I"}, \code{"II"} or \code{"III"} (default). #' @param ... additional arguments to be passed to the specific anova function. +#' @param info Logical, if \code{TRUE}, information about the type of ANOVA and +#' test statistic used is printed to the console. Default is \code{FALSE}. #' -#' @details The function utilizes \code{car::Anova()} for all supported model classes. For models of class 'lm' and 'lmerMod', the F-test is employed. In contrast, for models of the 'glmmTMB' class, the Chi-Square test is used since the F-test is \href{https://github.com/glmmTMB/glmmTMB/blob/bd1932addbfb4edf2ce933675f5a8bf72abc0e7c/glmmTMB/R/Anova.R#L73C8-L73C8}{currently unavailable}. It's worth noting that only the 'lmerMod' models support (and default to) the Kenward-Roger method as a degrees of freedom method. +#' @details The function utilizes \code{car::Anova()} for all supported model +#' classes and defaults to type III of sum of squares. For models of class +#' 'lm' and 'lmerModLmerTest', the F-test is employed. In contrast, for models of the +#' 'glmmTMB', 'gls', and 'lme' class, the Chi-Square test is used since the +#' F-test is +#' \href{https://github.com/glmmTMB/glmmTMB/blob/bd1932addbfb4edf2ce933675f5a8bf72abc0e7c/glmmTMB/R/Anova.R#L73C8-L73C8}{currently +#' unavailable}. It's worth noting that only the 'lmerModLmerTest' models support (and +#' default to) the Kenward-Roger method as a degrees of freedom method. +#' +#' \itemize{ +#' \item{\code{lm} (Package: stats):} {Types I/II/III; F-Test; Standard df.} +#' \item{\code{lmer/lmerTest} (Packages: lme4/lmerTest):} {Types I/II/III; F-Test; Kenward-Roger (KR) df.} +#' \item{\code{lme} (Package: nlme):} {Types I/II/III; Chi-Square Test (Chisq*); Standard df.} +#' \item{\code{gls} (Package: nlme):} {Types I/II/III; Chi-Square Test (Chisq*); Standard df.} +#' \item{\code{glmmTMB} (Package: glmmTMB):} {Types I/II/III; Chi-Square Test; Standard df.} +#' } +#' +#' * You can obtain the F-Test only for type I/II via \code{stats::anova()} +#' +#' The \code{type} argument specifies the type of sum of squares to be used in the analysis: +#' \itemize{ +#' \item{Type I (Sequential) sum of squares:}{ +#' The order in which factors are entered into the model does matter. Each factor is adjusted for the factors listed before it. +#' } +#' \item{Type II (Marginal) sum of squares:}{ +#' The order in which factors are entered into the model does not matter. Each factor is adjusted for all of the other factors in the model. +#' } +#' \item{Type III sum of squares:}{ +#' The order in which factors are entered into the model does not matter, similar to Type II. However, each factor is adjusted for all +#' of the other factors as well as for itself, which allows for the testing of each factor in the presence of interactions. +#' } +#' } +#' +#' Kenward-Roger Degrees of Freedom: The Kenward-Roger (KR) method is +#' a sophisticated approach to approximating the degrees of freedom in mixed +#' models, particularly in the presence of small sample sizes or unbalanced +#' data. It is not applicable to non-mixed models. Unlike the classical +#' degrees of freedom methods which may overestimate the significance of +#' effects, the KR approximation tends to provide a more conservative and +#' accurate estimation. This method adjusts the degrees of freedom to account +#' for the complexity of the mixed model structure, thereby enhancing the +#' robustness of the resulting inference. The Kenward-Roger method is +#' especially beneficial when working with complex models that include +#' multiple random effects and/or nested structures, as it helps to mitigate +#' the risk of Type I errors, offering a more reliable foundation for +#' hypothesis testing. Importantly, employing the KR method is never +#' disadvantageous when compared to using the default method; it provides a +#' more accurate reflection of the model's complexity and the data structure, +#' thus leading to more reliable statistical inferences. #' #' @seealso #' [car::Anova()], #' [lmerTest::lmer()], -#' [glmmTMB::glmmTMB()] +#' [glmmTMB::glmmTMB()], +#' [nlme::gls()], +#' [nlme::lme()] #' #' @export -get_anova <- function(model, type, ...) { - assertthat::assert_that(inherits(model, c("lm", "lmerMod", "glmmTMB")), +get_anova <- function(model, type = "III", ..., info = FALSE) { + assertthat::assert_that(inherits(model, c("lm", "lmerMod", "lmerModLmerTest", "glmmTMB", "gls", "lme")), msg = "This is not a supported model class.") - if (!requireNamespace("car", quietly = TRUE)) { - stop("Package 'car' must be installed.") - } + model_class <- class(model)[1] # Extract the primary class name of the model - UseMethod("get_anova") -} - - -#' @export -#' @rdname get_anova -get_anova.lm <- function(model, - type = c("I", "II", "III")[3], - ...) { + if (model_class == "lmerMod" && !requireNamespace("lmerTest", quietly = TRUE)) { + stop("Please fit your model via lmerTest::lmer() instead of lme4::lmer().") + } - anova_table <- car::Anova(model, type, ...) - return(anova_table) -} + test_statistic <- switch( + model_class, + lm = "F", + lmerModLmerTest = "F", + glmmTMB = "Chisq", + gls = "Chisq", + lme = "Chisq", + stop("Unsupported model class") + ) + ddf <- if (model_class == "lmerModLmerTest") "Kenward-Roger" else NULL -#' @export -#' @rdname get_anova -get_anova.lmerMod <- function(model, - type = c("I", "II", "III")[3], - ...) { + necessary_package <- switch( + model_class, + lm = "stats", + lmerModLmerTest = c("lmerTest", "lme4"), + glmmTMB = "glmmTMB", + gls = "nlme", + lme = "nlme", + NULL + ) - if (!requireNamespace("lme4", quietly = TRUE)) { - stop("When model object is 'lmerMod', package 'lme4' must be installed.") + if (!is.null(necessary_package)) { + for (pkg in necessary_package) { + assertthat::assert_that(requireNamespace(pkg, quietly = TRUE), + msg = sprintf("When model object is '%s', package '%s' must be installed.", model_class, pkg)) + } } - if (!requireNamespace("lmerTest", quietly = TRUE)) { - stop("When model object is 'lmerMod', package 'lmerTest' must be installed.") - } + anova_table <- car::Anova(model, type = type, test.statistic = test_statistic, ddf = ddf, ...) - anova_table <- car::Anova(model, type = type, test.statistic = "F", ...) - return(anova_table) -} + # Get an info summary above the table + anova_summary <- sprintf( + "The ANOVA performed is of Type %s, utilizing a %s test statistic.", + type, + test_statistic + ) -#' @export -#' @rdname get_anova -get_anova.glmmTMB <- function(model, - type = c("I", "II", "III")[3], - ...) { + if (!is.null(ddf)) { + anova_summary <- paste(anova_summary, sprintf("Degrees of freedom were adjusted using the %s method.", ddf)) + } - if (!requireNamespace("glmmTMB", quietly = TRUE)) { - stop("When model object is 'glmmTMB', package 'glmmTMB' must be installed.") + # Output the summary only if info = TRUE + if (info) { + cat(paste0(anova_summary, "\n")) } - anova_table <- car::Anova(model, type = type, test.statistic = "Chisq", ...) return(anova_table) } diff --git a/R/get_varcomp.R b/R/get_varcomp.R index c6d81f2..6006e9d 100644 --- a/R/get_varcomp.R +++ b/R/get_varcomp.R @@ -12,7 +12,7 @@ #' @seealso #' [lme4::VarCorr()], #' [glmmTMB::VarCorr()], -#' [mixedup::extract_vc()] +#' [mixedup::extract_vc()](https://github.com/m-clark/mixedup) #' #' @export get_varcomp <- function(model, @@ -73,7 +73,7 @@ get_varcomp.merMod <- function(model, get_varcomp.glmmTMB <- function(model, digits = 3) { - if (!requireNamespace("glmmTMB", quietly = TRUE)) { + if (!suppressWarnings(requireNamespace("glmmTMB", quietly = TRUE))) { stop("When model object is 'glmmTMB', package 'glmmTMB' must be installed.") } diff --git a/R/project_setup.R b/R/project_setup.R index 7d81b03..8851ec0 100644 --- a/R/project_setup.R +++ b/R/project_setup.R @@ -40,9 +40,9 @@ project_setup <- function() { # Create setup file setup_file <- file.path(root_dir, "code", "00 setup.R") setup_content <- 'library(BioMathR) # remotes::install_github("SchmidtPaul/BioMathR") -library(conflicted) # install.packages("conflicted") -library(here) # install.packages("here") -library(tidyverse) # install.packages("tidyverse") +library(conflicted) +library(here) +library(tidyverse) # conflicts conflicts_prefer(dplyr::filter, .quiet = TRUE) @@ -57,6 +57,11 @@ here_out <- function(...) {here("10 RCode", "out", ...)} BMcols <- BioMathR::palette_getset("BioMath")' writeLines(setup_content, setup_file) + # Create import file + import_file <- file.path(root_dir, "code", "01 import.R") + import_content <- 'source(here::here("10 RCode", "code", "00 setup.R"), encoding = "UTF-8")' + writeLines(import_content, import_file) + # send message - message("Directories and 00 setup.R created successfully!") + message("Directories, '00 setup.R' and '01 import.R' created successfully!") } diff --git a/_pkgdown.yml b/_pkgdown.yml index deabaab..070b8a6 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -74,6 +74,7 @@ reference: - title: utility contents: + - add_group_column - project_setup - round_smart - write_ascii diff --git a/docs/404.html b/docs/404.html index 9251628..7dcdb88 100644 --- a/docs/404.html +++ b/docs/404.html @@ -40,7 +40,7 @@ BioMathR - 0.6.0 + 0.7.0 diff --git a/docs/authors.html b/docs/authors.html index 0e9f17b..1967e54 100644 --- a/docs/authors.html +++ b/docs/authors.html @@ -17,7 +17,7 @@ BioMathR - 0.6.0 + 0.7.0 @@ -70,13 +70,13 @@

Citation

Schmidt P (2023). BioMathR: Utility functions used at BioMath. -R package version 0.6.0. +R package version 0.7.0.

@Manual{,
   title = {BioMathR: Utility functions used at BioMath},
   author = {Paul Schmidt},
   year = {2023},
-  note = {R package version 0.6.0},
+  note = {R package version 0.7.0},
 }
diff --git a/docs/index.html b/docs/index.html index 9b7b1a2..05899a9 100644 --- a/docs/index.html +++ b/docs/index.html @@ -41,7 +41,7 @@ BioMathR - 0.6.0 + 0.7.0 diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index 2aba46d..ccb49b7 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -2,7 +2,7 @@ pandoc: 3.1.1 pkgdown: 2.0.7 pkgdown_sha: ~ articles: {} -last_built: 2023-09-15T10:25Z +last_built: 2023-09-29T13:40Z urls: reference: schmidtpaul.github.io/BioMathR/reference article: schmidtpaul.github.io/BioMathR/articles diff --git a/docs/reference/BioMathR-package.html b/docs/reference/BioMathR-package.html index a2c87c5..5e7be02 100644 --- a/docs/reference/BioMathR-package.html +++ b/docs/reference/BioMathR-package.html @@ -18,7 +18,7 @@ BioMathR - 0.6.0 + 0.7.0 diff --git a/docs/reference/add_group_column.html b/docs/reference/add_group_column.html new file mode 100644 index 0000000..4798aa4 --- /dev/null +++ b/docs/reference/add_group_column.html @@ -0,0 +1,115 @@ + +Add Group Column — add_group_column • BioMathR + + +
+
+ + + +
+
+ + +
+

This function adds a new column to a data frame with a specified name. The new column indicates groups based on the grouping variables provided. When no grouping variable is provided, a default value is assigned to the new column.

+
+ +
+
add_group_column(data, name, group_by = NULL)
+
+ +
+

Arguments

+
data
+

A data frame.

+ + +
name
+

The name of the new column to be added.

+ + +
group_by
+

A vector of strings specifying the column names used for grouping. Default is NULL.

+ +
+
+

Value

+ + +

A data frame with the new column added.

+
+ +
+

Examples

+
if (FALSE) {
+data <- data.frame(x = c(1,2,3,1,2,3), y = c("a","b","c","a","b","c"))
+data %>% add_group_column(name = "group_id", group_by = c("x", "y"))
+}
+
+
+
+
+ +
+ + +
+ + + + + + + + diff --git a/docs/reference/add_sheet.html b/docs/reference/add_sheet.html index c9d0039..3b45b33 100644 --- a/docs/reference/add_sheet.html +++ b/docs/reference/add_sheet.html @@ -17,7 +17,7 @@ BioMathR - 0.6.0 + 0.7.0 diff --git a/docs/reference/cond_format.html b/docs/reference/cond_format.html index 53ae213..cbb2a27 100644 --- a/docs/reference/cond_format.html +++ b/docs/reference/cond_format.html @@ -17,7 +17,7 @@ BioMathR - 0.6.0 + 0.7.0 diff --git a/docs/reference/create_wb.html b/docs/reference/create_wb.html index 6b9bea7..0962135 100644 --- a/docs/reference/create_wb.html +++ b/docs/reference/create_wb.html @@ -17,7 +17,7 @@ BioMathR - 0.6.0 + 0.7.0 diff --git a/docs/reference/desc_tabs.html b/docs/reference/desc_tabs.html index 9adc286..3f317f3 100644 --- a/docs/reference/desc_tabs.html +++ b/docs/reference/desc_tabs.html @@ -17,7 +17,7 @@ BioMathR - 0.6.0 + 0.7.0 diff --git a/docs/reference/describe.html b/docs/reference/describe.html index 523cc8a..51d4691 100644 --- a/docs/reference/describe.html +++ b/docs/reference/describe.html @@ -17,7 +17,7 @@ BioMathR - 0.6.0 + 0.7.0 @@ -127,7 +127,7 @@

Examples

group_by(group, group2) %>% describe(c("weight", "weight2", "weight3"), lang = "ger") %>% docx_tab() -

Variable

group

group2

N

Fehl

MW

StdAbw

IQA

Min

Median

Max

weight

ctrl

A

4

0

4.9

0.6

0.80

4.2

4.90

5.60

weight

ctrl

B

6

0

5.1

0.6

0.60

4.5

5.20

6.10

weight

trt1

A

4

0

4.7

1.0

1.03

3.8

4.50

6.03

weight

trt1

B

6

0

4.6

0.8

0.50

3.6

4.60

5.87

weight

trt2

A

4

0

5.4

0.6

0.50

4.9

5.20

6.30

weight

trt2

B

6

0

5.6

0.3

0.30

5.3

5.52

6.10

weight2

ctrl

A

4

0

9.8

1.2

1.50

8.3

9.80

11.20

weight2

ctrl

B

6

0

10.3

1.2

1.20

9.0

10.30

12.20

weight2

trt1

A

4

0

9.4

1.9

2.06

7.7

9.00

12.06

weight2

trt1

B

6

0

9.3

1.5

0.99

7.2

9.10

11.74

weight2

trt2

A

4

0

10.8

1.2

0.90

9.8

10.41

12.60

weight2

trt2

B

6

0

11.2

0.6

0.70

10.5

11.04

12.30

weight3

ctrl

A

2

2

3.0

0.0

0.00

3.0

3.00

3.00

weight3

ctrl

B

3

3

3.0

0.0

0.00

3.0

3.00

3.00

weight3

trt1

A

2

2

3.0

0.0

0.00

3.0

3.00

3.00

weight3

trt1

B

3

3

3.0

0.0

0.00

3.0

3.00

3.00

weight3

trt2

A

2

2

3.0

0.0

0.00

3.0

3.00

3.00

weight3

trt2

B

3

3

3.0

0.0

0.00

3.0

3.00

3.00

+

Variable

group

group2

N

Fehl

MW

StdAbw

IQA

Min

Median

Max

weight

ctrl

A

4

0

4.9

0.6

0.80

4.2

4.90

5.60

weight

ctrl

B

6

0

5.1

0.6

0.60

4.5

5.20

6.10

weight

trt1

A

4

0

4.7

1.0

1.03

3.8

4.50

6.03

weight

trt1

B

6

0

4.6

0.8

0.50

3.6

4.60

5.87

weight

trt2

A

4

0

5.4

0.6

0.50

4.9

5.20

6.30

weight

trt2

B

6

0

5.6

0.3

0.30

5.3

5.52

6.10

weight2

ctrl

A

4

0

9.8

1.2

1.50

8.3

9.80

11.20

weight2

ctrl

B

6

0

10.3

1.2

1.20

9.0

10.30

12.20

weight2

trt1

A

4

0

9.4

1.9

2.06

7.7

9.00

12.06

weight2

trt1

B

6

0

9.3

1.5

0.99

7.2

9.10

11.74

weight2

trt2

A

4

0

10.8

1.2

0.90

9.8

10.41

12.60

weight2

trt2

B

6

0

11.2

0.6

0.70

10.5

11.04

12.30

weight3

ctrl

A

2

2

3.0

0.0

0.00

3.0

3.00

3.00

weight3

ctrl

B

3

3

3.0

0.0

0.00

3.0

3.00

3.00

weight3

trt1

A

2

2

3.0

0.0

0.00

3.0

3.00

3.00

weight3

trt1

B

3

3

3.0

0.0

0.00

3.0

3.00

3.00

weight3

trt2

A

2

2

3.0

0.0

0.00

3.0

3.00

3.00

weight3

trt2

B

3

3

3.0

0.0

0.00

3.0

3.00

3.00

diff --git a/docs/reference/docx_tab.html b/docs/reference/docx_tab.html index 3410209..57281b0 100644 --- a/docs/reference/docx_tab.html +++ b/docs/reference/docx_tab.html @@ -17,7 +17,7 @@ BioMathR - 0.6.0 + 0.7.0 @@ -99,7 +99,7 @@

Examples

anova <- anova(lm(weight ~ group, data = PlantGrowth)) docx_tab(anova, lang = "ger") -

Term

FG

SQ

MQ

F-Wert

p-Wert

group

2

3,8

1,9

4,8

0,016*

Residuals

27

10,5

0,4

docx_tab(anova, lang = "eng", asft = FALSE) +

Term

FG

SQ

MQ

F-Wert

p-Wert

group

2

3,8

1,9

4,8

0,016*

Residuals

27

10,5

0,4

docx_tab(anova, lang = "eng", asft = FALSE) #> # A tibble: 2 × 6 #> Term df SS MS `F value` `p value` #> <chr> <int> <dbl> <dbl> <dbl> <chr> @@ -116,8 +116,8 @@

Examples

V7 = c(NA_real_, NA_real_) ) docx_tab(before) -

V1

V2

V3

V4

V5

V6

V7

123,456

-123.0

1.001

1.100

1

1,234

-0.1

0.100

0.001

0

-5.002

docx_tab(before, digits = 2) -

V1

V2

V3

V4

V5

V6

V7

123,456

-123.00

1.0

1.1

1

1,234

-0.12

0.1

0.0

0

-5

+

V1

V2

V3

V4

V5

V6

V7

123,456

-123.0

1.001

1.100

1

1,234

-0.1

0.100

0.001

0

-5.002

docx_tab(before, digits = 2) +

V1

V2

V3

V4

V5

V6

V7

123,456

-123.00

1.0

1.1

1

1,234

-0.12

0.1

0.0

0

-5

diff --git a/docs/reference/format_p.html b/docs/reference/format_p.html index 0d5f123..ecddb55 100644 --- a/docs/reference/format_p.html +++ b/docs/reference/format_p.html @@ -17,7 +17,7 @@ BioMathR - 0.6.0 + 0.7.0 diff --git a/docs/reference/get_anova.html b/docs/reference/get_anova.html index 41a2f31..79fb5df 100644 --- a/docs/reference/get_anova.html +++ b/docs/reference/get_anova.html @@ -17,7 +17,7 @@ BioMathR - 0.6.0 + 0.7.0 @@ -56,22 +56,13 @@

Obtain analysis of variance table

-
get_anova(model, type, ...)
-
-# S3 method for lm
-get_anova(model, type = c("I", "II", "III")[3], ...)
-
-# S3 method for lmerMod
-get_anova(model, type = c("I", "II", "III")[3], ...)
-
-# S3 method for glmmTMB
-get_anova(model, type = c("I", "II", "III")[3], ...)
+
get_anova(model, type = "III", ..., info = FALSE)

Arguments

model
-

a fitted model object. Supported classes: "lm", "lmerMod" & "glmmTMB".

+

a fitted model object. Supported classes: "lm", "lmerModLmerTest", "glmmTMB", "gls", "lme".

type
@@ -81,16 +72,59 @@

Arguments

...

additional arguments to be passed to the specific anova function.

+ +
info
+

Logical, if TRUE, information about the type of ANOVA and +test statistic used is printed to the console. Default is FALSE.

+

Details

-

The function utilizes car::Anova() for all supported model classes. For models of class 'lm' and 'lmerMod', the F-test is employed. In contrast, for models of the 'glmmTMB' class, the Chi-Square test is used since the F-test is currently unavailable. It's worth noting that only the 'lmerMod' models support (and default to) the Kenward-Roger method as a degrees of freedom method.

+

The function utilizes car::Anova() for all supported model +classes and defaults to type III of sum of squares. For models of class +'lm' and 'lmerModLmerTest', the F-test is employed. In contrast, for models of the +'glmmTMB', 'gls', and 'lme' class, the Chi-Square test is used since the +F-test is +currently +unavailable. It's worth noting that only the 'lmerModLmerTest' models support (and +default to) the Kenward-Roger method as a degrees of freedom method.

+

The type argument specifies the type of sum of squares to be used in the analysis:

Kenward-Roger Degrees of Freedom: The Kenward-Roger (KR) method is +a sophisticated approach to approximating the degrees of freedom in mixed +models, particularly in the presence of small sample sizes or unbalanced +data. It is not applicable to non-mixed models. Unlike the classical +degrees of freedom methods which may overestimate the significance of +effects, the KR approximation tends to provide a more conservative and +accurate estimation. This method adjusts the degrees of freedom to account +for the complexity of the mixed model structure, thereby enhancing the +robustness of the resulting inference. The Kenward-Roger method is +especially beneficial when working with complex models that include +multiple random effects and/or nested structures, as it helps to mitigate +the risk of Type I errors, offering a more reliable foundation for +hypothesis testing. Importantly, employing the KR method is never +disadvantageous when compared to using the default method; it provides a +more accurate reflection of the model's complexity and the data structure, +thus leading to more reliable statistical inferences.

See also

-

[car::Anova()], - [lmerTest::lmer()], - [glmmTMB::glmmTMB()]

+
diff --git a/docs/reference/get_d3_colourScale.html b/docs/reference/get_d3_colourScale.html index 1506fb6..f9f4a20 100644 --- a/docs/reference/get_d3_colourScale.html +++ b/docs/reference/get_d3_colourScale.html @@ -17,7 +17,7 @@ BioMathR - 0.6.0 + 0.7.0 diff --git a/docs/reference/get_residual_plots.html b/docs/reference/get_residual_plots.html index b8b984f..2358b10 100644 --- a/docs/reference/get_residual_plots.html +++ b/docs/reference/get_residual_plots.html @@ -17,7 +17,7 @@ BioMathR - 0.6.0 + 0.7.0 diff --git a/docs/reference/get_unique_references.html b/docs/reference/get_unique_references.html index e1768b2..8b050a6 100644 --- a/docs/reference/get_unique_references.html +++ b/docs/reference/get_unique_references.html @@ -17,7 +17,7 @@ BioMathR - 0.6.0 + 0.7.0 diff --git a/docs/reference/get_varcomp.html b/docs/reference/get_varcomp.html index 6c5e9cb..3f497e5 100644 --- a/docs/reference/get_varcomp.html +++ b/docs/reference/get_varcomp.html @@ -17,7 +17,7 @@ BioMathR - 0.6.0 + 0.7.0 @@ -77,9 +77,9 @@

Arguments

See also

-

[lme4::VarCorr()], - [glmmTMB::VarCorr()], - [mixedup::extract_vc()]

+
diff --git a/docs/reference/gg_export.html b/docs/reference/gg_export.html index 78a400e..222a9dc 100644 --- a/docs/reference/gg_export.html +++ b/docs/reference/gg_export.html @@ -20,7 +20,7 @@ BioMathR - 0.6.0 + 0.7.0 diff --git a/docs/reference/grapes-not_in-grapes.html b/docs/reference/grapes-not_in-grapes.html index 9153c79..8e1afc2 100644 --- a/docs/reference/grapes-not_in-grapes.html +++ b/docs/reference/grapes-not_in-grapes.html @@ -18,7 +18,7 @@ BioMathR - 0.6.0 + 0.7.0 diff --git a/docs/reference/index.html b/docs/reference/index.html index 1db82a7..3ba2543 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -17,7 +17,7 @@ BioMathR - 0.6.0 + 0.7.0 @@ -168,12 +168,16 @@

string manipulation

str_wrap_br()

-

str_wrap() with <br> instead

+

str_wrap() with
instead

utility

+

add_group_column()

+ +

Add Group Column

+

project_setup()

Intitiate an R-project

diff --git a/docs/reference/palette_getset-1.png b/docs/reference/palette_getset-1.png index 94eda62f756826ea47045ec572489c7e699a3072..609d71fa2b2ff2136fbdfd4ef8408b899e2c1ea5 100644 GIT binary patch literal 21201 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 BioMathR - 0.6.0 + 0.7.0 diff --git a/docs/reference/partial_block_pour_docx.html b/docs/reference/partial_block_pour_docx.html index 34d2511..1d231ea 100644 --- a/docs/reference/partial_block_pour_docx.html +++ b/docs/reference/partial_block_pour_docx.html @@ -17,7 +17,7 @@ BioMathR - 0.6.0 + 0.7.0 diff --git a/docs/reference/project_setup.html b/docs/reference/project_setup.html index a7d742e..8f34002 100644 --- a/docs/reference/project_setup.html +++ b/docs/reference/project_setup.html @@ -18,7 +18,7 @@ BioMathR - 0.6.0 + 0.7.0 diff --git a/docs/reference/round_smart.html b/docs/reference/round_smart.html index bd83096..24bb3f3 100644 --- a/docs/reference/round_smart.html +++ b/docs/reference/round_smart.html @@ -17,7 +17,7 @@ BioMathR - 0.6.0 + 0.7.0 diff --git a/docs/reference/save_wb.html b/docs/reference/save_wb.html index 6bf41f3..09454d1 100644 --- a/docs/reference/save_wb.html +++ b/docs/reference/save_wb.html @@ -17,7 +17,7 @@ BioMathR - 0.6.0 + 0.7.0 diff --git a/docs/reference/smart_fit.html b/docs/reference/smart_fit.html index 57069c3..880251b 100644 --- a/docs/reference/smart_fit.html +++ b/docs/reference/smart_fit.html @@ -17,7 +17,7 @@ BioMathR - 0.6.0 + 0.7.0 diff --git a/docs/reference/str_unGer.html b/docs/reference/str_unGer.html index c06b54a..10cbb34 100644 --- a/docs/reference/str_unGer.html +++ b/docs/reference/str_unGer.html @@ -17,7 +17,7 @@ BioMathR - 0.6.0 + 0.7.0 diff --git a/docs/reference/str_wrap_br.html b/docs/reference/str_wrap_br.html index ed6f5c5..76576ef 100644 --- a/docs/reference/str_wrap_br.html +++ b/docs/reference/str_wrap_br.html @@ -1,5 +1,5 @@ -str_wrap() with <br> instead — str_wrap_br • BioMathRstr_wrap() with instead — str_wrap_br • BioMathR @@ -17,7 +17,7 @@ BioMathR - 0.6.0 + 0.7.0 @@ -46,13 +46,13 @@
-

str_wrap() with <br> instead

+

str_wrap() with
instead

diff --git a/docs/reference/theme_BioMath.html b/docs/reference/theme_BioMath.html index ce365d7..6292938 100644 --- a/docs/reference/theme_BioMath.html +++ b/docs/reference/theme_BioMath.html @@ -17,7 +17,7 @@ BioMathR - 0.6.0 + 0.7.0
diff --git a/docs/reference/theme_UBA.html b/docs/reference/theme_UBA.html index 94ca723..04c7c4d 100644 --- a/docs/reference/theme_UBA.html +++ b/docs/reference/theme_UBA.html @@ -17,7 +17,7 @@ BioMathR - 0.6.0 + 0.7.0
diff --git a/docs/reference/tidy_reg.html b/docs/reference/tidy_reg.html index 0af0bbf..2cf5fc3 100644 --- a/docs/reference/tidy_reg.html +++ b/docs/reference/tidy_reg.html @@ -17,7 +17,7 @@ BioMathR - 0.6.0 + 0.7.0
diff --git a/docs/reference/write_ascii.html b/docs/reference/write_ascii.html index 5f5aa85..b76e95f 100644 --- a/docs/reference/write_ascii.html +++ b/docs/reference/write_ascii.html @@ -20,7 +20,7 @@ BioMathR - 0.6.0 + 0.7.0 diff --git a/docs/sitemap.xml b/docs/sitemap.xml index 67321fb..09b0680 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -9,6 +9,9 @@ schmidtpaul.github.io/BioMathR/index.html + + schmidtpaul.github.io/BioMathR/reference/add_group_column.html + schmidtpaul.github.io/BioMathR/reference/add_sheet.html diff --git a/man/add_group_column.Rd b/man/add_group_column.Rd new file mode 100644 index 0000000..ad0da58 --- /dev/null +++ b/man/add_group_column.Rd @@ -0,0 +1,28 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/add_group_column.R +\name{add_group_column} +\alias{add_group_column} +\title{Add Group Column} +\usage{ +add_group_column(data, name, group_by = NULL) +} +\arguments{ +\item{data}{A data frame.} + +\item{name}{The name of the new column to be added.} + +\item{group_by}{A vector of strings specifying the column names used for grouping. Default is NULL.} +} +\value{ +A data frame with the new column added. +} +\description{ +This function adds a new column to a data frame with a specified name. The new column indicates groups based on the grouping variables provided. When no grouping variable is provided, a default value is assigned to the new column. +} +\examples{ +\dontrun{ +data <- data.frame(x = c(1,2,3,1,2,3), y = c("a","b","c","a","b","c")) +data \%>\% add_group_column(name = "group_id", group_by = c("x", "y")) +} + +} diff --git a/man/get_anova.Rd b/man/get_anova.Rd index 45a18ae..aa88728 100644 --- a/man/get_anova.Rd +++ b/man/get_anova.Rd @@ -2,34 +2,79 @@ % Please edit documentation in R/get_anova.R \name{get_anova} \alias{get_anova} -\alias{get_anova.lm} -\alias{get_anova.lmerMod} -\alias{get_anova.glmmTMB} \title{Obtain analysis of variance table} \usage{ -get_anova(model, type, ...) - -\method{get_anova}{lm}(model, type = c("I", "II", "III")[3], ...) - -\method{get_anova}{lmerMod}(model, type = c("I", "II", "III")[3], ...) - -\method{get_anova}{glmmTMB}(model, type = c("I", "II", "III")[3], ...) +get_anova(model, type = "III", ..., info = FALSE) } \arguments{ -\item{model}{a fitted model object. Supported classes: \code{"lm"}, \code{"lmerMod"} & \code{"glmmTMB"}.} +\item{model}{a fitted model object. Supported classes: \code{"lm"}, \code{"lmerModLmerTest"}, \code{"glmmTMB"}, \code{"gls"}, \code{"lme"}.} \item{type}{Type of ANOVA test: \code{"I"}, \code{"II"} or \code{"III"} (default).} \item{...}{additional arguments to be passed to the specific anova function.} + +\item{info}{Logical, if \code{TRUE}, information about the type of ANOVA and +test statistic used is printed to the console. Default is \code{FALSE}.} } \description{ This function obtains the ANOVA table for a model. } \details{ -The function utilizes \code{car::Anova()} for all supported model classes. For models of class 'lm' and 'lmerMod', the F-test is employed. In contrast, for models of the 'glmmTMB' class, the Chi-Square test is used since the F-test is \href{https://github.com/glmmTMB/glmmTMB/blob/bd1932addbfb4edf2ce933675f5a8bf72abc0e7c/glmmTMB/R/Anova.R#L73C8-L73C8}{currently unavailable}. It's worth noting that only the 'lmerMod' models support (and default to) the Kenward-Roger method as a degrees of freedom method. +The function utilizes \code{car::Anova()} for all supported model +classes and defaults to type III of sum of squares. For models of class +'lm' and 'lmerModLmerTest', the F-test is employed. In contrast, for models of the +'glmmTMB', 'gls', and 'lme' class, the Chi-Square test is used since the +F-test is +\href{https://github.com/glmmTMB/glmmTMB/blob/bd1932addbfb4edf2ce933675f5a8bf72abc0e7c/glmmTMB/R/Anova.R#L73C8-L73C8}{currently +unavailable}. It's worth noting that only the 'lmerModLmerTest' models support (and +default to) the Kenward-Roger method as a degrees of freedom method. + +\itemize{ +\item{\code{lm} (Package: stats):} {Types I/II/III; F-Test; Standard df.} +\item{\code{lmer/lmerTest} (Packages: lme4/lmerTest):} {Types I/II/III; F-Test; Kenward-Roger (KR) df.} +\item{\code{lme} (Package: nlme):} {Types I/II/III; Chi-Square Test (Chisq*); Standard df.} +\item{\code{gls} (Package: nlme):} {Types I/II/III; Chi-Square Test (Chisq*); Standard df.} +\item{\code{glmmTMB} (Package: glmmTMB):} {Types I/II/III; Chi-Square Test; Standard df.} +} +\itemize{ +\item You can obtain the F-Test only for type I/II via \code{stats::anova()} +} + +The \code{type} argument specifies the type of sum of squares to be used in the analysis: +\itemize{ +\item{Type I (Sequential) sum of squares:}{ +The order in which factors are entered into the model does matter. Each factor is adjusted for the factors listed before it. +} +\item{Type II (Marginal) sum of squares:}{ +The order in which factors are entered into the model does not matter. Each factor is adjusted for all of the other factors in the model. +} +\item{Type III sum of squares:}{ +The order in which factors are entered into the model does not matter, similar to Type II. However, each factor is adjusted for all +of the other factors as well as for itself, which allows for the testing of each factor in the presence of interactions. +} +} + +Kenward-Roger Degrees of Freedom: The Kenward-Roger (KR) method is +a sophisticated approach to approximating the degrees of freedom in mixed +models, particularly in the presence of small sample sizes or unbalanced +data. It is not applicable to non-mixed models. Unlike the classical +degrees of freedom methods which may overestimate the significance of +effects, the KR approximation tends to provide a more conservative and +accurate estimation. This method adjusts the degrees of freedom to account +for the complexity of the mixed model structure, thereby enhancing the +robustness of the resulting inference. The Kenward-Roger method is +especially beneficial when working with complex models that include +multiple random effects and/or nested structures, as it helps to mitigate +the risk of Type I errors, offering a more reliable foundation for +hypothesis testing. Importantly, employing the KR method is never +disadvantageous when compared to using the default method; it provides a +more accurate reflection of the model's complexity and the data structure, +thus leading to more reliable statistical inferences. } \seealso{ -[car::Anova()], - [lmerTest::lmer()], - [glmmTMB::glmmTMB()] +\code{\link[car:Anova]{car::Anova()}}, +\code{\link[lmerTest:lmer]{lmerTest::lmer()}}, +\code{\link[glmmTMB:glmmTMB]{glmmTMB::glmmTMB()}}, +\code{\link[nlme:gls]{nlme::gls()}}, +\code{\link[nlme:lme]{nlme::lme()}} } diff --git a/man/get_varcomp.Rd b/man/get_varcomp.Rd index 8e0c24e..d409401 100644 --- a/man/get_varcomp.Rd +++ b/man/get_varcomp.Rd @@ -21,7 +21,7 @@ get_varcomp(model, digits = 3) This function extracts the estimated variance components of the random-effects terms in a linear mixed model. It is very heavily based on \href{https://m-clark.github.io/mixedup/reference/extract_vc.html}{\code{mixedup::extract_vc()}}. } \seealso{ -[lme4::VarCorr()], - [glmmTMB::VarCorr()], - [mixedup::extract_vc()] +\code{\link[lme4:VarCorr]{lme4::VarCorr()}}, +\code{\link[glmmTMB:VarCorr.glmmTMB]{glmmTMB::VarCorr()}}, +\href{https://github.com/m-clark/mixedup}{mixedup::extract_vc()} } diff --git a/man/str_wrap_br.Rd b/man/str_wrap_br.Rd index 626dfd8..91b7367 100644 --- a/man/str_wrap_br.Rd +++ b/man/str_wrap_br.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/str_wrap_br.R \name{str_wrap_br} \alias{str_wrap_br} -\title{\code{str_wrap()} with
instead} +\title{\code{str_wrap()} with \if{html}{\out{
}} instead} \usage{ str_wrap_br(string, whitespace_only = FALSE, ...) } @@ -14,5 +14,5 @@ str_wrap_br(string, whitespace_only = FALSE, ...) \item{...}{other arguments passed to \code{stringr::str_wrap()}} } \description{ -\code{str_wrap()} with
instead +\code{str_wrap()} with \if{html}{\out{
}} instead } diff --git a/tests/testthat/test-get_anova.R b/tests/testthat/test-get_anova.R new file mode 100644 index 0000000..165b4af --- /dev/null +++ b/tests/testthat/test-get_anova.R @@ -0,0 +1,50 @@ +# Load necessary libraries +library(testthat) + +# lm test +test_that("get_anova does not throw an error for lm class", { + lm_model <- lm(mpg ~ wt + hp, data = mtcars) + expect_error(get_anova(lm_model), NA) +}) + +# lmerTest test +test_that("get_anova does not throw an error for lmerTest class", { + if (requireNamespace("lmerTest", quietly = TRUE)) { + lmerTest_model <- lmerTest::lmer(mpg ~ wt + hp + (1 | cyl), data = mtcars) + expect_error(get_anova(lmerTest_model), NA) + } else { + skip() + } +}) + +# glmmTMB test +test_that("get_anova does not throw an error for glmmTMB class", { + if (suppressWarnings(requireNamespace("glmmTMB", quietly = TRUE))) { + fabricated_data <- mtcars + fabricated_data$Response <- ifelse(fabricated_data$mpg > 20, 1, 0) + glmmTMB_model <- suppressWarnings(glmmTMB::glmmTMB(Response ~ wt + hp + (1 | cyl), data = fabricated_data, family = binomial())) + expect_error(get_anova(glmmTMB_model), NA) + } else { + skip() + } +}) + +# gls test +test_that("get_anova does not throw an error for gls class", { + if (requireNamespace("nlme", quietly = TRUE)) { + gls_model <- nlme::gls(mpg ~ wt + hp, data = mtcars) + expect_error(get_anova(gls_model), NA) + } else { + skip() + } +}) + +# lme test +test_that("get_anova does not throw an error for lme class", { + if (requireNamespace("nlme", quietly = TRUE)) { + lme_model <- nlme::lme(mpg ~ wt + hp, random = ~ 1 | cyl, data = mtcars) + expect_error(get_anova(lme_model), NA) + } else { + skip() + } +})