From 8b5acf0e950e9fd804e32293f718c5f3a5c65e30 Mon Sep 17 00:00:00 2001 From: TomGeva <141431661+TomGeva@users.noreply.github.com> Date: Wed, 10 Apr 2024 14:50:32 +0300 Subject: [PATCH 01/33] intial changes --- R/cor_test.R | 1025 ++++++++++++++++++++++++++------ R/cor_test_bayes.R | 111 ---- R/cor_test_biserial.R | 80 --- R/cor_test_biweight.R | 41 -- R/cor_test_blomqvist.R | 26 - R/cor_test_distance.R | 144 ----- R/cor_test_freq.R | 79 --- R/cor_test_gamma.R | 29 - R/cor_test_gaussian.R | 12 - R/cor_test_hoeffding.R | 25 - R/cor_test_percentage.R | 50 -- R/cor_test_polychoric.R | 48 -- R/cor_test_shepherd.R | 35 -- R/cor_test_somers.R | 23 - R/cor_test_tetrachoric.R | 34 -- R/correlation.R | 90 --- man/cor_test.Rd | 98 +-- man/cor_to_p.Rd | 7 +- man/correlation.Rd | 125 +--- tests/testthat/test-cor_test.R | 8 +- 20 files changed, 868 insertions(+), 1222 deletions(-) delete mode 100644 R/cor_test_bayes.R delete mode 100644 R/cor_test_biserial.R delete mode 100644 R/cor_test_biweight.R delete mode 100644 R/cor_test_blomqvist.R delete mode 100644 R/cor_test_distance.R delete mode 100644 R/cor_test_freq.R delete mode 100644 R/cor_test_gamma.R delete mode 100644 R/cor_test_gaussian.R delete mode 100644 R/cor_test_hoeffding.R delete mode 100644 R/cor_test_percentage.R delete mode 100644 R/cor_test_polychoric.R delete mode 100644 R/cor_test_shepherd.R delete mode 100644 R/cor_test_somers.R delete mode 100644 R/cor_test_tetrachoric.R diff --git a/R/cor_test.R b/R/cor_test.R index cf1fa9d4..a997c66e 100644 --- a/R/cor_test.R +++ b/R/cor_test.R @@ -22,42 +22,104 @@ #' these indices. #' @param bayesian If `TRUE`, will run the correlations under a Bayesian #' framework. -#' @param partial_bayesian If partial correlations under a Bayesian framework -#' are needed, you will also need to set `partial_bayesian` to `TRUE` to -#' obtain "full" Bayesian partial correlations. Otherwise, you will obtain -#' pseudo-Bayesian partial correlations (i.e., Bayesian correlation based on -#' frequentist partialization). -#' @param include_factors If `TRUE`, the factors are kept and eventually -#' converted to numeric or used as random effects (depending of -#' `multilevel`). If `FALSE`, factors are removed upfront. -#' @param partial Can be `TRUE` or `"semi"` for partial and -#' semi-partial correlations, respectively. -#' @inheritParams datawizard::adjust -#' @param bayesian_prior For the prior argument, several named values are -#' recognized: `"medium.narrow"`, `"medium"`, `"wide"`, and -#' `"ultrawide"`. These correspond to scale values of `1/sqrt(27)`, -#' `1/3`, `1/sqrt(3)` and `1`, respectively. See the -#' `BayesFactor::correlationBF` function. -#' @param bayesian_ci_method,bayesian_test See arguments in -#' [`model_parameters()`][parameters] for `BayesFactor` tests. -#' @param ranktransform If `TRUE`, will rank-transform the variables prior to -#' estimating the correlation, which is one way of making the analysis more -#' resistant to extreme values (outliers). Note that, for instance, a Pearson's -#' correlation on rank-transformed data is equivalent to a Spearman's rank -#' correlation. Thus, using `robust=TRUE` and `method="spearman"` is -#' redundant. Nonetheless, it is an easy option to increase the robustness of the -#' correlation as well as flexible way to obtain Bayesian or multilevel -#' Spearman-like rank correlations. -#' @param winsorize Another way of making the correlation more "robust" (i.e., -#' limiting the impact of extreme values). Can be either `FALSE` or a -#' number between 0 and 1 (e.g., `0.2`) that corresponds to the desired -#' threshold. See the [`winsorize()`][winsorize] function for more details. #' @param verbose Toggle warnings. -#' @param ... Additional arguments (e.g., `alternative`) to be passed to -#' other methods. See `stats::cor.test` for further details. +#' @param ... Additional arguments depending on `method`. +#' - `"percentage"`: `beta` (default is `0.2`). +#' - `"bayes"`: `bayesian_prior` = "medium", `bayesian_ci_method` (default: "hdi"), `bayesian_test` (default: `c("pd", "rope", "bf")`) #' #' -#' @inherit correlation details +#' @details +#' +#' ## Correlation Types +#' - **Pearson's correlation**: This is the most common correlation +#' method. It corresponds to the covariance of the two variables normalized +#' (i.e., divided) by the product of their standard deviations. +#' +#' - **Spearman's rank correlation**: A non-parametric measure of rank +#' correlation (statistical dependence between the rankings of two variables). +#' The Spearman correlation between two variables is equal to the Pearson +#' correlation between the rank values of those two variables; while Pearson's +#' correlation assesses linear relationships, Spearman's correlation assesses +#' monotonic relationships (whether linear or not). Confidence Intervals (CI) +#' for Spearman's correlations are computed using the Fieller et al. (1957) +#' correction (see Bishara and Hittner, 2017). +#' +#' - **Kendall's rank correlation**: In the normal case, the Kendall correlation +#' is preferred than the Spearman correlation because of a smaller gross error +#' sensitivity (GES) and a smaller asymptotic variance (AV), making it more +#' robust and more efficient. However, the interpretation of Kendall's tau is +#' less direct than that of Spearman's rho, in the sense that it quantifies the +#' difference between the percentage of concordant and discordant pairs among +#' all possible pairwise events. Confidence Intervals (CI) for Kendall's +#' correlations are computed using the Fieller et al. (1957) correction (see +#' Bishara and Hittner, 2017). +#' +#' - **Biweight midcorrelation**: A measure of similarity that is +#' median-based, instead of the traditional mean-based, thus being less +#' sensitive to outliers. It can be used as a robust alternative to other +#' similarity metrics, such as Pearson correlation (Langfelder & Horvath, +#' 2012). +#' +#' - **Distance correlation**: Distance correlation measures both +#' linear and non-linear association between two random variables or random +#' vectors. This is in contrast to Pearson's correlation, which can only detect +#' linear association between two random variables. +#' +#' - **Percentage bend correlation**: Introduced by Wilcox (1994), it +#' is based on a down-weight of a specified percentage of marginal observations +#' deviating from the median (by default, `20%`). +#' +#' - **Shepherd's Pi correlation**: Equivalent to a Spearman's rank +#' correlation after outliers removal (by means of bootstrapped Mahalanobis +#' distance). +#' +#' - **Blomqvist’s coefficient**: The Blomqvist’s coefficient (also +#' referred to as Blomqvist's Beta or medial correlation; Blomqvist, 1950) is a +#' median-based non-parametric correlation that has some advantages over +#' measures such as Spearman's or Kendall's estimates (see Shmid & Schimdt, +#' 2006). +#' +#' - **Hoeffding’s D**: The Hoeffding’s D statistics is a +#' non-parametric rank based measure of association that detects more general +#' departures from independence (Hoeffding 1948), including non-linear +#' associations. Hoeffding’s D varies between -0.5 and 1 (if there are no tied +#' ranks, otherwise it can have lower values), with larger values indicating a +#' stronger relationship between the variables. +#' +#' - **Somers’ D**: The Somers’ D statistics is a non-parametric rank +#' based measure of association between a binary variable and a continuous +#' variable, for instance, in the context of logistic regression the binary +#' outcome and the predicted probabilities for each outcome. Usually, Somers' D +#' is a measure of ordinal association, however, this implementation it is +#' limited to the case of a binary outcome. +#' +#' - **Point-Biserial and biserial correlation**: Correlation +#' coefficient used when one variable is continuous and the other is dichotomous +#' (binary). Point-Biserial is equivalent to a Pearson's correlation, while +#' Biserial should be used when the binary variable is assumed to have an +#' underlying continuity. For example, anxiety level can be measured on a +#' continuous scale, but can be classified dichotomously as high/low. +#' +#' - **Gamma correlation**: The Goodman-Kruskal gamma statistic is +#' similar to Kendall's Tau coefficient. It is relatively robust to outliers and +#' deals well with data that have many ties. +#' +#' - **Winsorized correlation**: Correlation of variables that have +#' been formerly Winsorized, i.e., transformed by limiting extreme values to +#' reduce the effect of possibly spurious outliers. +#' +#' - **Gaussian rank Correlation**: The Gaussian rank correlation +#' estimator is a simple and well-performing alternative for robust rank +#' correlations (Boudt et al., 2012). It is based on the Gaussian quantiles of +#' the ranks. +#' +#' - **Polychoric correlation**: Correlation between two theorized +#' normally distributed continuous latent variables, from two observed ordinal +#' variables. +#' +#' - **Tetrachoric correlation**: Special case of the polychoric +#' correlation applicable when both observed variables are dichotomous. +#' #' #' @examples #' library(correlation) @@ -116,200 +178,805 @@ #' cor_test(iris, "Sepal.Length", "Sepal.Width", partial_bayesian = TRUE) #' } #' @export -cor_test <- function(data, - x, - y, +cor_test <- function(data, x, y, method = "pearson", ci = 0.95, + alternative = "two.sided", bayesian = FALSE, - bayesian_prior = "medium", - bayesian_ci_method = "hdi", - bayesian_test = c("pd", "rope", "bf"), - include_factors = FALSE, - partial = FALSE, - partial_bayesian = FALSE, - multilevel = FALSE, - ranktransform = FALSE, - winsorize = FALSE, verbose = TRUE, ...) { - # valid matrix checks - if (!all(x %in% names(data)) || !all(y %in% names(data))) { - insight::format_error("The names you entered for x and y are not available in the dataset. Make sure there are no typos!") - } + # +======+ + # checks + # +======+ + + # check value of method + method <- match.arg(tolower(method), c("pearson", "spearman", "spear", "s", + "kendall", "biserial", "pointbiserial", + "point-biserial", "rankbiserial", + "rank-biserial", "biweight", "distance", + "percentage", "percentage_bend", + "percentagebend", "pb", "blomqvist", + "median", "medial", "hoeffding", "gamma", + "gaussian", "shepherd", "sheperd", + "shepherdspi", "pi", "somers", "poly", + "polychoric", "tetra", "tetrachoric")) + methodUse <- ifelse(method %in% c("pearson", "spearman", "spear", "s"), "frequantive", method) + methodUse <- ifelse(method %in% c("pointbiserial", "point-biserial"), "point-biserial", methodUse) + methodUse <- ifelse(method %in% c("rankbiserial", "rank-biserial"), "rank-biserial", methodUse) + methodUse <- ifelse(method %in% c("percentage", "percentage_bend", "percentagebend", "pb"), "percentage", methodUse) + methodUse <- ifelse(method %in% c("blomqvist", "median", "medial"), "blomqvist", methodUse) + methodUse <- ifelse(method %in% c("shepherd", "sheperd", "shepherdspi", "pi"), "shepherd", methodUse) + methodUse <- ifelse(method %in% c("poly", "polychoric"), "polychoric", methodUse) + methodUse <- ifelse(method %in% c("tetra", "tetrachoric"), "tetrachoric", methodUse) - if (ci == "default") ci <- 0.95 - if (!partial && (partial_bayesian || multilevel)) partial <- TRUE # Make sure factor is no factor - if (!method %in% c("tetra", "tetrachoric", "poly", "polychoric")) { + if (!methodUse %in% c("tetrachoric", "polychoric")) { data[c(x, y)] <- datawizard::to_numeric(data[c(x, y)], dummy_factors = FALSE) } - # Partial - if (!isFALSE(partial)) { - # partial - if (isTRUE(partial)) { - data[[x]] <- datawizard::adjust(data[names(data) != y], multilevel = multilevel, bayesian = partial_bayesian)[[x]] - data[[y]] <- datawizard::adjust(data[names(data) != x], multilevel = multilevel, bayesian = partial_bayesian)[[y]] - } + # narrowing the data to its complete form (without missing values) + var_x <- .complete_variable_x(data, x, y) + var_y <- .complete_variable_y(data, x, y) + # check validity of the amount of observations + n_obs <- length(var_x) - # semi-partial - if (partial == "semi") { - insight::format_error("Semi-partial correlations are not supported yet. Get in touch if you want to contribute.") - } + if (n_obs < 3L) { + insight::format_alert(paste(x, "and", y, "have less than 3 complete observations.")) } - # Winsorize - if (!isFALSE(winsorize) && !is.null(winsorize)) { - # set default (if not specified) - if (isTRUE(winsorize)) { - winsorize <- 0.2 + # check value of ci (confidence level) + if (ci == "default") { + ci <- 0.95 + } else if (!is.null(ci)) { + if (length(ci) != 1L || ci <= 0 || ci >= 1) + stop("The confidence level (ci) is not between 0 and 1") + } + + # check value of alternative + alternative <- match.arg(alternative, c("two.sided", "less", "greater")) + # check value of tau_type and direction when relevant + if(method == "kendall") { + if ("tau_type" %in% names(list(...))) { + tau_type <- match.arg(tolower(tau_type), c("a", "b", "c")) + if("direction" %in% names(list(...))) direction <- match.arg(tolower(direction), c("row", "column")) + else direction <- "row" + } + else tau_type <- "b" + } + if(methodUse == "biserial") { + if("xType" %in% names(list(...))) { + xType <- match.arg(tolower(xType), c("base", "point", "rank")) + } + else xType <- "base" + } + if(methodUse == "percentage") { + if("beta" %in% names(list(...))) { + if (length(beta) != 1L || beta <= 0 || beta >= 0.5) + stop("The bend criterion (beta) is not between 0 and 0.5") } + else beta <- 0.2 + } - # winsorization would otherwise fail in case of NAs present - data <- as.data.frame( - datawizard::winsorize(stats::na.omit(data[c(x, y)]), - threshold = winsorize, - verbose = verbose - ) - ) + # +=======================+ + # calculate by the method + # +=======================+ + + # when bayesian + if(bayesian) { + if (methodUse %in% c("kendall", "biserial", "point-biserial", "rank-biserial", "biweight", "distance", "percentage", "gamma", "somers", "polychoric", "tetrachoric")) + insight::format_error(paste0("The bayesian form of ", tohigher(methodUse[1]), methodUse[-1], " correlation method is not supported yet. Get in touch if you want to contribute.")) + if (methodUse %in% c("blomqvist", "hoeffding")) + insight::format_error(paste0("Bayesian ", toupper(methodUse[1]), methodUse[-1], ifelse(methodUse == "hoeffding", "'s", ""), "correlations are not supported yet. Check-out the BBcor package (https://github.com/donaldRwilliams/BBcor).")) + out <- .cor_test_bayes(var_x, var_y, ci, method, ...) + out$Parameter1 <- x + out$Parameter2 <- y } + else { + out <- switch(methodUse, + "frequantive" = .cor_test_freq(var_x, var_y, ci, alternative, method, ...), + "kendall" = .cor_test_kendall(var_x, var_y, ci, alternative, tau_type, direction, ...), + "biserial" = .cor_test_biserial(var_x, var_y, ci, alternative, xType = "base", ...), + "point-biserial" = .cor_test_biserial(var_x, var_y, ci, alternative, xType = "point", ...), + "rank-biserial" = .cor_test_biserial(var_x, var_y, ci, alternative, xType = "rank", ...), + "biweight" = .cor_test_biweight(var_x, var_y, ci, alternative, ...), + "distance" = .cor_test_distance(var_x, var_y, ci, alternative, ...), + "percentage" = .cor_test_percentage(var_x, var_y, ci, alternative, beta, ...), + "blomqvist" = .cor_test_freq(sign(var_x - median(var_x)), sign(var_y - median(var_y)), ci, alternative, ...), + "hoeffding" = .cor_test_hoeffding(var_x, var_y, ci, ...), + "gamma" = .cor_test_gamma(var_x, var_y, ci, alternative, ...), + "gaussian" = .cor_test_freq(stats::qnorm(rank(var_x) / (length(var_x) + 1)), stats::qnorm(rank(var_y) / (length(var_y) + 1)), ci, alternative, ...), + "shepherd" = .cor_test_shepherd(var_x, var_y, ci, alternative, ...), + "somers" = .cor_test_somers(var_x, var_y, ci, alternative, ...), + "polychoric" = .cor_test_polychoric(var_x, var_y, ci, alternative, ...), + "tetrachoric" = .cor_test_tetrachoric(var_x, var_y, ci, alternative, ...)) + out$Parameter1 <- x + out$Parameter2 <- y + } + - # Rank transform (i.e., "robust") - if (ranktransform) { - data[c(x, y)] <- datawizard::ranktransform(data[c(x, y)], sign = FALSE, method = "average") + if (!"Method" %in% names(out)) out$Method <- paste0(tohigher(methodUse[1]), methodUse[-1], ifelse(bayesian, " (Bayesian)", "")) + + out +} + + +# Corr methods ------------------- + +# pearson and spearman calc function +#' @keywords internal +.cor_test_freq <- function(var_x, var_y, + ci = 0.95, + alternative = "two.sided", + method = "pearson", + ...) { + # calculating the pearson or spearman correlation coefficient + r <- cor(var_x, var_y, method = method) + # calculating the degrees of freedom, t-value and p-value + df <- length(var_x) - 2 + t_p <- .t_p_value(r, df, alternative) + # creating output dataframe + out <- data.frame("r" = r, + "df_error" = df, + "t" = t_p[1], + "p" = t_p[2], + "Method" = method) + # calculating the confidence interval + if (!is.null(ci)) { + CI <- switch(alternative, + "two.sided" = .ci_value(r, c(-1, 1), (1 + ci) / 2, df), + "less" = c(-Inf, .ci_value(r, 1, ci, df)), + "greater" = c(.ci_value(r, -1, ci, df), Inf)) + out$CI_low <- CI[1] + out$CI_high <- CI[2] } + # returning output + out +} - # check if enough no. of obs ------------------------------ +# kendall's tau calc function +#' @keywords internal +.cor_test_kendall <- function(var_x, var_y, + ci = 0.95, + alternative = "two.sided", + tau_type = "b", + direction = "row", + ...) { - # this is a trick in case the number of valid observations is lower than 3 - n_obs <- length(.complete_variable_x(data, x, y)) - invalid <- FALSE - if (n_obs < 3L) { - if (isTRUE(verbose)) { - insight::format_warning(paste(x, "and", y, "have less than 3 complete observations. Returning NA.")) - } - invalid <- TRUE - original_info <- list(data = data, x = x, y = y) - data <- datasets::mtcars # Basically use a working dataset so the correlation doesn't fail - x <- "mpg" - y <- "disp" + tab <- table(var_x, var_y) + n <- length(var_x) + # calculating the concordant and discordant pairs amounts within the data and across it + ConDisParams <- DescTools::ConDisPairs(tab)[3:4] + # calculating kendall's tau + tau <- switch(tau_type, + "a" = DescTools::KendallTauA(var_x, var_y, direction = direction, conf.level = ci, ...), + "b" = DescTools::KendallTauB(var_x, var_y, conf.level = ci, ...), + "c" = DescTools::StuartTauC(var_x, var_y, conf.level = ci, ...)) + CI <- tau[2:3] + tau <- tau[1] + # calculating the z-value according to the tau_type required + if(tau_type != "a") { + xi <- rowSums(tab) + yj <- colSums(tab) + vx <- sum(xi * (xi - 1) * (2 * xi + 5)) + vy <- sum(yj * (yj - 1) * (2 * yj + 5)) + v1 <- sum(xi * (xi - 1)) * sum(yj * (yj - 1)) / (2 * n * (n - 1)) + v2 <- sum(xi * (xi - 1) * (xi - 2)) * sum(yj * (yj - 1) * (yj - 2)) / (9 * n * (n - 1) * (n - 2)) + v <- (n * (n - 1) * (2 * n + 5) - vx - vy)/18 + v1 + v2 + z <- (ConDisParams$C- ConDisParams$D) / sqrt(v) + } + else { + z <- (ConDisParams$C - ConDisParams$D) / sqrt(n * (n - 1) * (2 * n + 5) / 18) + } + # calculating the p-value + p <- switch(alternative, + "two.sided" = 2 * stats::pnorm(abs(z), lower.tail = FALSE), + "less" = stats::pnorm(z), + "greater" = stats::pnorm(z, lower.tail = FALSE)) + # creating output dataframe + out <- data.frame("tau" = tau, + "z" = z, + "p" = p, + "df_error" = NULL) + # renaming coefficient value appropriately + names(out)[1] <- switch(tau_type, + "a" = "TauA", + "b" = "TauB", + "c" = "TauC") + # finding the standard deviation using calculus + sd <- (CI[2] - tau) / qnorm((1 + ci) / 2) + # calculating the confidence interval + if (!is.null(ci)) { + CI <- switch(alternative, + "two.sided" = CI, + "less" = c(-Inf, tau + qnorm(ci) * sd), + "greater" = c(tau - qnorm(ci) * sd, Inf)) + out$CI_low <- CI[1] + out$CI_high <- CI[2] } + # returning output + out +} +# biserial correlation calc function +#' @keywords internal +.cor_test_biserial <- function(var_x, var_y, + ci = 0.95, + alternative = "two.sided", + xType = "base", + ...) { + if(!.var_type(var_x)$is_binary && !.var_type(var_y)$is_binary) insight::format_error("Biserial correlation can only be applied atleast one of x and y is dichotomous") + else if(!.var_type(var_x)$is_binary) + { + temp <- var_x + var_x <- var_y + var_y <- temp + } - # Find method - method <- tolower(method) - if (method == "auto" && !bayesian) method <- .find_correlationtype(data, x, y) - if (method == "auto" && bayesian) method <- "pearson" - - # Frequentist - if (!bayesian) { - if (method %in% c("tetra", "tetrachoric")) { - out <- .cor_test_tetrachoric(data, x, y, ci = ci, ...) - } else if (method %in% c("poly", "polychoric")) { - out <- .cor_test_polychoric(data, x, y, ci = ci, ...) - } else if (method %in% c("biserial", "pointbiserial", "point-biserial")) { - out <- .cor_test_biserial(data, x, y, ci = ci, method = method, ...) - } else if (method == "biweight") { - out <- .cor_test_biweight(data, x, y, ci = ci, ...) - } else if (method == "distance") { - out <- .cor_test_distance(data, x, y, ci = ci, ...) - } else if (method %in% c("percentage", "percentage_bend", "percentagebend", "pb")) { - out <- .cor_test_percentage(data, x, y, ci = ci, ...) - } else if (method %in% c("blomqvist", "median", "medial")) { - out <- .cor_test_blomqvist(data, x, y, ci = ci, ...) - } else if (method == "hoeffding") { - out <- .cor_test_hoeffding(data, x, y, ci = ci, ...) - } else if (method == "somers") { - out <- .cor_test_somers(data, x, y, ci = ci, ...) - } else if (method == "gamma") { - out <- .cor_test_gamma(data, x, y, ci = ci, ...) - } else if (method == "gaussian") { - out <- .cor_test_gaussian(data, x, y, ci = ci, ...) - } else if (method %in% c("shepherd", "sheperd", "shepherdspi", "pi")) { - out <- .cor_test_shepherd(data, x, y, ci = ci, bayesian = FALSE, ...) - } else { - out <- .cor_test_freq(data, x, y, ci = ci, method = method, ...) - } + # calculating helping values + n <- length(var_x) + m0 <- mean(var_x[var_y == 0]) + m1 <- mean(var_x[var_y == 1]) + n0 <- sum(var_y == 0) + n1 <- sum(var_y == 1) + sdX <- sd(var_x) - # Bayesian - } else { - if (method %in% c("tetra", "tetrachoric")) { - insight::format_error("Tetrachoric Bayesian correlations are not supported yet. Get in touch if you want to contribute.") - } else if (method %in% c("poly", "polychoric")) { - insight::format_error("Polychoric Bayesian correlations are not supported yet. Get in touch if you want to contribute.") - } else if (method %in% c("biserial", "pointbiserial", "point-biserial")) { - insight::format_error("Biserial Bayesian correlations are not supported yet. Get in touch if you want to contribute.") - } else if (method == "biweight") { - insight::format_error("Biweight Bayesian correlations are not supported yet. Get in touch if you want to contribute.") - } else if (method == "distance") { - insight::format_error("Bayesian distance correlations are not supported yet. Get in touch if you want to contribute.") - } else if (method %in% c("percentage", "percentage_bend", "percentagebend", "pb")) { - insight::format_error("Bayesian Percentage Bend correlations are not supported yet. Get in touch if you want to contribute.") - } else if (method %in% c("blomqvist", "median", "medial")) { - insight::format_error("Bayesian Blomqvist correlations are not supported yet. Check-out the BBcor package (https://github.com/donaldRwilliams/BBcor).") - } else if (method == "hoeffding") { - insight::format_error("Bayesian Hoeffding's correlations are not supported yet. Check-out the BBcor package (https://github.com/donaldRwilliams/BBcor).") - } else if (method == "gamma") { - insight::format_error("Bayesian gamma correlations are not supported yet. Get in touch if you want to contribute.") - } else if (method %in% c("shepherd", "sheperd", "shepherdspi", "pi")) { - out <- .cor_test_shepherd(data, x, y, ci = ci, bayesian = TRUE, ...) - } else { - out <- .cor_test_bayes( - data, - x, - y, - ci = ci, - method = method, - bayesian_prior = bayesian_prior, - bayesian_ci_method = bayesian_ci_method, - bayesian_test = bayesian_test, - ... - ) - } + r <- switch(xType, + "base" = ((m1 - m0) / sdX) * sqrt(n1 * n0 / (n ^ 2 - n)), + "point" = (m1 - m0 - 1) / sqrt((n ^ 2 * sdX ^ 2) / (n1 * n0) - 2 * (m1 - m0) + 1), + "rank" = 2 * (m1 - m0) / (n1 + n0)) + # calculating the degrees of freedom, t-value and p-value + df <- n - 2 + t_p <- .t_p_value(r, df, alternative) + # creating output dataframe + out <- data.frame("r" = r, + "df_error" = df, + "t" = t_p[1], + "p" = t_p[2], + "Method" = switch(xType, + "base" = "Biserial", + "point" = "Point Biserial", + "rank" = "Rank Biserial")) + # calculating the confidence interval + if (!is.null(ci)) { + CI <- switch(alternative, + "two.sided" = .ci_value(r, c(-1, 1), (1 + ci) / 2, df), + "less" = c(-Inf, .ci_value(r, 1, ci, df)), + "greater" = c(.ci_value(r, -1, ci, df), Inf)) + out$CI_low <- CI[1] + out$CI_high <- CI[2] } + # returning output + out +} + +# biweight midcorrelation calc function +#' @keywords internal +.cor_test_biweight <- function(var_x, var_y, + ci = 0.95, + alternative = "two.sided", + ...) { + # finding helping values + xb <- (var_x - median(var_x)) / (9 * mad(var_x, constant = 1)) + yb <- (var_y - median(var_y)) / (9 * mad(var_y, constant = 1)) + wx <- (1 - xb ^ 2) ^ 2 * (1 - abs(xb) > 0) + wy <- (1 - yb ^ 2) ^ 2 * (1 - abs(yb) > 0) + xDnm <- sqrt(sum(((var_x - median(var_x)) * wx) ^ 2)) + yDnm <- sqrt(sum(((var_y - median(var_y)) * wy) ^ 2)) + + # finding x Tilda and y Tilda for use infinal calculation + xTil <- ((var_x - median(var_x)) * wx) / xDnm + yTil <- ((var_y - median(var_y)) * wy) / yDnm - # Replace by NANs if invalid - if (isTRUE(invalid)) { - data <- original_info$data - out$Parameter1 <- original_info$x - out$Parameter2 <- original_info$y - out[!names(out) %in% c("Parameter1", "Parameter2")] <- NA + # calculating the coefficient + r <- sum(xTil * yTil) + # calculating the degrees of freedom, t-value and p-value + df <- length(var_x) - 2 + t_p <- .t_p_value(r, df, alternative) + # creating output dataframe + out <- data.frame("r" = r, + "df_error" = df, + "t" = t_p[1], + "p" = t_p[2]) + # calculating the confidence interval + if (!is.null(ci)) { + CI <- switch(alternative, + "two.sided" = .ci_value(r, c(-1, 1), (1 + ci) / 2, df), + "less" = c(-Inf, .ci_value(r, 1, ci, df)), + "greater" = c(.ci_value(r, -1, ci, df), Inf)) + out$CI_low <- CI[1] + out$CI_high <- CI[2] + } + # returning output + out +} + +# distance correlation calc function (same as original, with little bit of tweaks) +#' @keywords internal +.cor_test_distance <- function(var_x, var_y, + ci = 0.95, + corrected = TRUE, + ...) { + # TODO put .cor_test_distance_corrected and .cor_test_distance_raw in here + if (!corrected) { + rez <- .cor_test_distance_raw(var_x, var_y, index = 1) + rez <- data.frame("r" = rez$r, + "df_error" = NA, + "t" = NA, + "p" = NA, + "CI" = NA, + "CI_low" = NA, + "CI_high" = NA) + } + else { + rez <- .cor_test_distance_corrected(var_x, var_y, ci = ci) + rez <- data.frame("r" = rez$r, + "df_error" = rez$df, + "t" = rez$t, + "p" = rez$p, + "CI_low" = rez$CI_low, + "CI_high" = rez$CI_high, + "Method" = "Distance (Bias Corrected)") } - # Number of observations and CI - out$n_Obs <- n_obs - out$CI <- ci + rez +} + +# percentage bend correlation calc function +#' @keywords internal +.cor_test_percentage <- function(var_x, var_y, + ci = 0.95, + alternative = "two.sided", + beta = 0.2, + ...) { + # finding helping values + ohmX <- .omhat(var_x, beta) + ohmY <- .omhat(var_y, beta) + pbosX <- .pbos(var_x, beta) + pbosY <- .pbos(var_y, beta) + + # finding a and b values + a <- (var_x - pbosX) / ohmX + b <- (var_y - pbosY) / ohmY + a <- ifelse(a < -1, -1, ifelse(a > 1, 1, a)) + b <- ifelse(b < -1, -1, ifelse(b > 1, 1, b)) + + # calculating the coefficient + r <- sum(a * b) / sqrt(sum(a ^ 2) * sum(b ^ 2)) + # calculating the degrees of freedom, t-value and p-value + df <- length(var_x) - 2 + t_p <- .t_p_value(r, df, alternative) + # creating output dataframe + out <- data.frame("r" = r, + "df_error" = df, + "t" = t_p[1], + "p" = t_p[2]) + # calculating the confidence interval + if (!is.null(ci)) { + CI <- switch(alternative, + "two.sided" = .ci_value(r, c(-1, 1), (1 + ci) / 2, df), + "less" = c(-Inf, .ci_value(r, 1, ci, df)), + "greater" = c(.ci_value(r, -1, ci, df), Inf)) + out$CI_low <- CI[1] + out$CI_high <- CI[2] + } + # returning output + out +} + +# hoeffding's D correlation calc function (same as original, with little bit of tweaks) +#' @keywords internal +.cor_test_hoeffding <- function(var_x, var_y, + ci = 0.95, + ...) { + insight::check_if_installed("Hmisc", "for 'hoeffding' correlations") + + rez <- Hmisc::hoeffd(var_x, var_y) + + data.frame("r" = rez$D[2, 1], + "df_error" = length(var_x) - 2, + "t" = NA, + "p" = rez$P[2, 1], + "CI_low" = NA, + "CI_high" = NA) +} + +# gamma correlation calc function (almost the same as original) +#' @keywords internal +.cor_test_gamma <- function(var_x, var_y, + ci = 0.95, + alternative = "two.sided", + ...) { + # using the method from the original function + ConDisField <- outer(var_x, var_x, function(x1, x2) sign(x1 - x2)) * outer(var_y, var_y, function(y1, y2) sign(y1 - y2)) + r <- sum(ConDisField) / sum(abs(ConDisField)) + # calculating the degrees of freedom, t-value and p-value + df <- length(var_x) - 2 + t_p <- .t_p_value(r, df, alternative) + # creating output dataframe + out <- data.frame("r" = r, + "df_error" = df, + "t" = t_p[1], + "p" = t_p[2]) + # calculating the confidence interval + if (!is.null(ci)) { + CI <- switch(alternative, + "two.sided" = .ci_value(r, c(-1, 1), (1 + ci) / 2, df), + "less" = c(-Inf, .ci_value(r, 1, ci, df)), + "greater" = c(.ci_value(r, -1, ci, df), Inf)) + out$CI_low <- CI[1] + out$CI_high <- CI[2] + } + # returning output + out +} + +# Shepherd's Pi calc function +#' @keywords internal +.cor_test_shepherd <- function(var_x, var_y, + ci = 0.95, + alternative = "two.sided", + bayesian = FALSE, + ...) { + # finding outliers using bootstraped mahalanobis (as done in original) + d <- .robust_bootstrap_mahalanobis(cbind(var_x, var_y)) + outliers <- d >= 6 + out <- .cor_test_freq(var_x[!outliers], var_y[!outliers], ci, alternative, "spearman") + out$Method <- "Shepherd's Pi" + + # returning output + out +} + +# somers' D correlation calc function (same as original, with little bit of tweaks) +#' @keywords internal +.cor_test_somers <- function(var_x, var_y, + ci = 0.95, + alternative = "two.sided", + ...) { + insight::check_if_installed("Hmisc", "for 'somers' correlations") + + rez <- Hmisc::somers2(var_x, var_y) + + data.frame("r" = rez["Dxy"], + "df_error" = length(var_x) - 2, + "t" = NA, + "p" = NA, + "CI_low" = NA, + "CI_high" = NA, + "Method" = "Somers' D") +} + +# polychoric correlation calc function (same as original, with little bit of tweaks) +#' @keywords internal +.cor_test_polychoric <- function(var_x, var_y, + ci = 0.95, + alternative = "two.sided", + ...) { + insight::check_if_installed("psych", "for 'tetrachronic' correlations") + + # valid matrix check + if (!is.factor(var_x) && !is.factor(var_y)) insight::format_error("Polychoric correlations can only be ran on ordinal factors.") + + if (!is.factor(var_x) || !is.factor(var_y)) { + insight::check_if_installed("polycor", "for 'polyserial' correlations") - # Reorder columns - if ("CI_low" %in% names(out)) { - order <- c("Parameter1", "Parameter2", "r", "rho", "tau", "Dxy", "CI", "CI_low", "CI_high") - out <- out[c(order[order %in% names(out)], setdiff(colnames(out), order[order %in% names(out)]))] + r <- polycor::polyserial( + x = if (is.factor(var_x)) as.numeric(var_y) else as.numeric(var_x), + y = if (is.factor(var_x)) as.numeric(var_x) else as.numeric(var_y) + ) + method <- "Polyserial" + } else { + # Reconstruct dataframe + dat <- data.frame(as.numeric(var_x), as.numeric(var_y)) + junk <- utils::capture.output({ + r <- suppressWarnings(psych::polychoric(dat)$rho[2, 1]) + }) + method <- "Polychoric" + } + + # calculating the degrees of freedom, t-value and p-value + df <- length(var_x) - 2 + t_p <- .t_p_value(r, df, alternative) + # creating output dataframe + out <- data.frame("r" = r, + "df" = df, + "t" = t_p[1], + "p" = t_p[2], + "Method" = method) + # calculating the confidence interval + if (!is.null(ci)) { + CI <- switch(alternative, + "two.sided" = .ci_value(r, c(-1, 1), (1 + ci) / 2, df), + "less" = c(-Inf, .ci_value(r, 1, ci, df)), + "greater" = c(.ci_value(r, -1, ci, df), Inf)) + out$CI_low <- CI[1] + out$CI_high <- CI[2] } + # returning output + out +} + +# tetrachoric correlation calc function (same as original, with little bit of tweaks) +#' @keywords internal +.cor_test_tetrachoric <- function(var_x, var_y, + ci = 0.95, + alternative = "two.sided", + ...) { + insight::check_if_installed("psych", "for 'tetrachronic' correlations") + + # valid matrix check + if (length(unique(var_x)) > 2 && length(unique(var_y)) > 2) insight::format_error("Tetrachoric correlations can only be ran on dichotomous data.") + + # Reconstruct dataframe + dat <- data.frame(var_x, var_y) + + junk <- utils::capture.output(r <- psych::tetrachoric(dat)$rho[2, 1]) # nolint - # Output - attr(out, "coefficient_name") <- c("rho", "r", "tau", "Dxy")[c("rho", "r", "tau", "Dxy") %in% names(out)][1] - attr(out, "ci") <- ci - attr(out, "data") <- data - class(out) <- unique(c("easycor_test", "easycorrelation", "parameters_model", class(out))) + # calculating the degrees of freedom, t-value and p-value + df <- length(var_x) - 2 + t_p <- .t_p_value(r, df, alternative) + # creating output dataframe + out <- data.frame("r" = r, + "df_error" = df, + "t" = t_p[1], + "p" = t_p[2]) + # calculating the confidence interval + if (!is.null(ci)) { + CI <- switch(alternative, + "two.sided" = .ci_value(r, c(-1, 1), (1 + ci) / 2, df), + "less" = c(-Inf, .ci_value(r, 1, ci, df)), + "greater" = c(.ci_value(r, -1, ci, df), Inf)) + out$CI_low <- CI[1] + out$CI_high <- CI[2] + } + # returning output out } +# bayesian frequentist calc function (same as original, with little bit of tweaks) +.cor_test_bayes <- function(var_x, var_y, + ci = 0.95, + method = "pearson", + bayesian_prior = "medium", + bayesian_ci_method = "hdi", + bayesian_test = c("pd", "rope", "bf"), + ...) { + insight::check_if_installed("BayesFactor") + + method_label <- "Bayesian Pearson" + method <- tolower(method) + if (method %in% c("spearman", "spear", "s")) { + var_x <- datawizard::ranktransform(var_x, method = "average") + var_y <- datawizard::ranktransform(var_y, method = "average") + metho_label <- "Bayesian Spearman" + } else if (method == "gaussian") { + var_x <- stats::qnorm(rank(var_x) / (length(var_x) + 1)) + var_y <- stats::qnorm(rank(var_y) / (length(var_y) + 1)) + method_label <- "Bayesian Gaussian" + } else if (method == "gaussian") { + d <- .robust_bootstrap_mahalanobis(cbind(var_x, var_y)) + outliers <- d >= 6 + var_x <- datawizard::ranktransform(var_x[!outliers], method = "average") + var_y <- datawizard::ranktransform(var_y[!outliers], method = "average") + method_label <- "Bayesian Shepherd's Pi" + } -# Utilities --------------------------------------------------------------- + out <- .cor_test_bayes_base( + var_x, + var_y, + ci = ci, + bayesian_prior = bayesian_prior, + bayesian_ci_method = bayesian_ci_method, + bayesian_test = bayesian_test, + ... + ) + # Add method + out$Method <- method_label + out +} +# internal helping functions -------------------- + + +# confidence interval calculation +#' @keywords internal +.ci_value <- function(r, side, ci, df) { + tanh(atanh(r) + side * stats::qnorm(ci) / sqrt(df - 1)) +} + +# getting from the data frame the values of the column x where all the pairs of x and y are complete #' @keywords internal .complete_variable_x <- function(data, x, y) { data[[x]][stats::complete.cases(data[[x]], data[[y]])] } +# getting from the data frame the values of the column y where all the pairs of x and y are complete #' @keywords internal .complete_variable_y <- function(data, x, y) { data[[y]][stats::complete.cases(data[[x]], data[[y]])] } + +# t-value & p-value calculation +#' @keywords internal +.t_p_value <- function(r, df, alternative) { + t <- r * sqrt(df / (1 - r ^ 2)) + p <- switch(alternative, + "two.sided" = 2 * stats::pt(abs(t), df, lower.tail = FALSE), + "less" = stats::pt(t, df), + "greater" = stats::pt(t, df, lower.tail = FALSE)) + c(t, p) +} + +# Specific helpers ----------------------- + +## distance============ + +#' @keywords internal +.cor_test_distance_corrected <- function(x, y, ci = 0.95) { + x <- as.matrix(stats::dist(x)) + y <- as.matrix(stats::dist(y)) + n <- nrow(x) + + A <- .A_star(x) + B <- .A_star(y) + + XY <- (sum(A * B) - (n / (n - 2)) * sum(diag(A * B))) / n^2 + XX <- (sum(A * A) - (n / (n - 2)) * sum(diag(A * A))) / n^2 + YY <- (sum(B * B) - (n / (n - 2)) * sum(diag(B * B))) / n^2 + + r <- XY / sqrt(XX * YY) + + M <- n * (n - 3) / 2 + dof <- M - 1 + + t <- sqrt(M - 1) * r / sqrt(1 - r^2) + p <- 1 - stats::pt(t, df = dof) + + ci_vals <- cor_to_ci(r, n = n, ci = ci) + + list( + r = r, + t = t, + df = dof, + p = p, + CI_low = ci_vals$CI_low, + CI_high = ci_vals$CI_high + ) +} + +#' @keywords internal +.cor_test_distance_raw <- function(x, y, index = 1) { + if (index < 0 || index > 2) { + insight::format_error("`index` must be between 0 and 2.") + index <- 1.0 + } + + x <- as.matrix(stats::dist(x)) + y <- as.matrix(stats::dist(y)) + + A <- .A_kl(x, index) + B <- .A_kl(y, index) + + cov <- sqrt(mean(A * B)) + dVarX <- sqrt(mean(A * A)) + dVarY <- sqrt(mean(B * B)) + V <- sqrt(dVarX * dVarY) + if (V > 0) { + r <- cov / V + } else { + r <- 0 + } + list(r = r, cov = cov) +} + +#' @keywords internal +.A_kl <- function(x, index) { + d <- as.matrix(x)^index + m <- rowMeans(d) + M <- mean(d) + a <- sweep(d, 1, m) + b <- sweep(a, 2, m) + (b + M) +} + +#' @keywords internal +.A_star <- function(d) { + ## d is a distance matrix or distance object + ## modified or corrected doubly centered distance matrices + ## denoted A* (or B*) in JMVA t-test paper (2013) + d <- as.matrix(d) + n <- nrow(d) + if (n != ncol(d)) stop("Argument d should be distance", call. = FALSE) + m <- rowMeans(d) + M <- mean(d) + a <- sweep(d, 1, m) + b <- sweep(a, 2, m) + A <- b + M # same as plain A + # correction to get A^* + A <- A - d / n + diag(A) <- m - M + (n / (n - 1)) * A +} + +## percentage bend============ + +# ohmhat calculation +#' @keywords internal +.ohmhat <- function(x, beta) { + sort(abs(x - median(x)))[floor(1 - beta * length(x))] +} + +# pbos calculation +#' @keywords internal +.pbos <- function(x, beta) { + omhat <- .ohmhat(x, beta) + psi <- (x - median(x)) / omhat + i1 <- length(psi[psi < -1]) + i2 <- length(psi[psi > 1]) + sx <- ifelse(psi < -1, 0, ifelse(psi > 1, 0, x)) + (sum(sx) + omhat * (i2 - i1)) / (length(x) - i1 - i2) +} + +## shepherd's D============ + +# robust bootstrap mahalanobis calculation +#' @keywords internal +.robust_bootstrap_mahalanobis <- function(data, iterations = 1000) { + Ms <- replicate(n = iterations, { + # Draw random numbers from 1:n with replacement + idx <- sample(nrow(data), replace = TRUE) + # Resample data + dat <- data[idx, ] + # Calculating the Mahalanobis distance for each actual observation using resampled data + stats::mahalanobis(data, center = colMeans(dat), cov = stats::cov(dat)) + }) + + apply(Ms, 1, stats::median) +} + +## bayes============ + +#' @keywords internal +.cor_test_bayes_base <- function(var_x, + var_y, + ci = 0.95, + bayesian_prior = "medium", + bayesian_ci_method = "hdi", + bayesian_test = c("pd", "rope", "bf"), + ...) { + insight::check_if_installed("BayesFactor") + + + rez <- BayesFactor::correlationBF(var_x, var_y, rscale = bayesian_prior) + params <- parameters::model_parameters( + rez, + dispersion = FALSE, + ci_method = bayesian_ci_method, + test = bayesian_test, + rope_range = c(-0.1, 0.1), + rope_ci = 1, + ... + ) + # validation check: do we have a BF column? + if (is.null(params$BF)) { + params$BF <- NA + } + + + # Rename coef + if (sum(names(params) %in% c("Median", "Mean", "MAP")) == 1) { + names(params)[names(params) %in% c("Median", "Mean", "MAP")] <- "rho" + } + + # Remove useless columns + params[names(params) %in% c("Effects", "Component")] <- NULL + + # returning output + params[names(params) != "Parameter"] +} diff --git a/R/cor_test_bayes.R b/R/cor_test_bayes.R deleted file mode 100644 index 288b5a2c..00000000 --- a/R/cor_test_bayes.R +++ /dev/null @@ -1,111 +0,0 @@ -#' @keywords internal -.cor_test_bayes <- function(data, - x, - y, - ci = 0.95, - method = "pearson", - bayesian_prior = "medium", - bayesian_ci_method = "hdi", - bayesian_test = c("pd", "rope", "bf"), - ...) { - insight::check_if_installed("BayesFactor") - - var_x <- .complete_variable_x(data, x, y) - var_y <- .complete_variable_y(data, x, y) - - if (tolower(method) %in% c("spearman", "spear", "s")) { - var_x <- datawizard::ranktransform(var_x, sign = TRUE, method = "average") - var_y <- datawizard::ranktransform(var_y, sign = TRUE, method = "average") - method <- "Bayesian Spearman" - } else if (tolower(method) %in% "gaussian") { - var_x <- stats::qnorm(rank(var_x) / (length(var_x) + 1)) - var_y <- stats::qnorm(rank(var_y) / (length(var_y) + 1)) - method <- "Bayesian Gaussian rank" - } else { - method <- "Bayesian Pearson" - } - - out <- .cor_test_bayes_base( - x, - y, - var_x, - var_y, - ci = ci, - bayesian_prior = bayesian_prior, - bayesian_ci_method = bayesian_ci_method, - bayesian_test = bayesian_test, - ... - ) - - # Add method - out$Method <- method - out -} - - -#' @keywords internal -.cor_test_bayes_base <- function(x, - y, - var_x, - var_y, - ci = 0.95, - bayesian_prior = "medium", - bayesian_ci_method = "hdi", - bayesian_test = c("pd", "rope", "bf"), - method = "pearson", - ...) { - insight::check_if_installed("BayesFactor") - - if (x == y) { - # Avoid error in the case of perfect correlation - rez <- BayesFactor::correlationBF(stats::rnorm(1000), stats::rnorm(1000), rscale = bayesian_prior) - params <- parameters::model_parameters( - rez, - dispersion = FALSE, - ci_method = bayesian_ci_method, - test = bayesian_test, - rope_range = c(-0.1, 0.1), - rope_ci = 1, - ... - ) - if ("Median" %in% names(params)) params$Median <- 1 - if ("Mean" %in% names(params)) params$Mean <- 1 - if ("MAP" %in% names(params)) params$MAP <- 1 - if ("SD" %in% names(params)) params$SD <- 0 - if ("MAD" %in% names(params)) params$MAD <- 0 - if ("CI_low" %in% names(params)) params$CI_low <- 1 - if ("CI_high" %in% names(params)) params$CI_high <- 1 - if ("pd" %in% names(params)) params$pd <- 1 - if ("ROPE_Percentage" %in% names(params)) params$ROPE_Percentage <- 0 - if ("BF" %in% names(params)) params$BF <- Inf - } else { - rez <- BayesFactor::correlationBF(var_x, var_y, rscale = bayesian_prior) - params <- parameters::model_parameters( - rez, - dispersion = FALSE, - ci_method = bayesian_ci_method, - test = bayesian_test, - rope_range = c(-0.1, 0.1), - rope_ci = 1, - ... - ) - # validation check: do we have a BF column? - if (is.null(params$BF)) { - params$BF <- NA - } - } - - # Rename coef - if (sum(names(params) %in% c("Median", "Mean", "MAP")) == 1) { - names(params)[names(params) %in% c("Median", "Mean", "MAP")] <- "rho" - } - - # Remove useless columns - params[names(params) %in% c("Effects", "Component")] <- NULL - - # Prepare output - params <- params[names(params) != "Parameter"] - params$Parameter1 <- x - params$Parameter2 <- y - params[unique(c("Parameter1", "Parameter2", names(params)))] -} diff --git a/R/cor_test_biserial.R b/R/cor_test_biserial.R deleted file mode 100644 index f6aea4d4..00000000 --- a/R/cor_test_biserial.R +++ /dev/null @@ -1,80 +0,0 @@ -#' @keywords internal -.cor_test_biserial <- function(data, x, y, ci = 0.95, method = "biserial", ...) { - # valid matrix - if (.vartype(data[[x]])$is_binary && !.vartype(data[[y]])$is_binary) { - binary <- x - continuous <- y - } else if (.vartype(data[[y]])$is_binary && !.vartype(data[[x]])$is_binary) { - binary <- y - continuous <- x - } else { - insight::format_error( - "Biserial and point-biserial correlations can only be applied for one dichotomous and one continuous variables." - ) - } - - # Rescale to 0-1 - if (.vartype(data[[binary]])$is_factor || .vartype(data[[binary]])$is_character) { - data[[binary]] <- as.numeric(as.factor(data[[binary]])) - } - - data[[binary]] <- as.vector( - (data[[binary]] - min(data[[binary]], na.rm = TRUE)) / - (diff(range(data[[binary]], na.rm = TRUE), na.rm = TRUE)) - ) - - # Get biserial or point-biserial correlation - if (method == "biserial") { - out <- .cor_test_biserial_biserial(data, x, y, continuous, binary, ci) - } else { - out <- .cor_test_biserial_pointbiserial(data, x, y, continuous, binary, ci, ...) - } - - out -} - - - -#' @keywords internal -.cor_test_biserial_pointbiserial <- function(data, x, y, continuous, binary, ci, ...) { - out <- .cor_test_freq(data, continuous, binary, ci = ci, method = "pearson", ...) - names(out)[names(out) == "r"] <- "rho" - out$Parameter1 <- x - out$Parameter2 <- y - out$Method <- "Point-biserial" - - out -} - - - -#' @keywords internal -.cor_test_biserial_biserial <- function(data, x, y, continuous, binary, ci) { - var_x <- .complete_variable_x(data, continuous, binary) - var_y <- .complete_variable_y(data, continuous, binary) - - - m1 <- mean(var_x[var_y == 1]) - m0 <- mean(var_x[var_y == 0]) - q <- mean(var_y) - p <- 1 - q - zp <- stats::dnorm(stats::qnorm(q)) - - r <- (((m1 - m0) * (p * q / zp)) / stats::sd(var_x)) - - p <- cor_to_p(r, n = length(var_x)) - ci_vals <- cor_to_ci(r, n = length(var_x), ci = ci) - - data.frame( - Parameter1 = x, - Parameter2 = y, - rho = r, - t = p$statistic, - df_error = length(var_y) - 2, - p = p$p, - CI_low = ci_vals$CI_low, - CI_high = ci_vals$CI_high, - Method = "Biserial", - stringsAsFactors = FALSE - ) -} diff --git a/R/cor_test_biweight.R b/R/cor_test_biweight.R deleted file mode 100644 index c2f18ef5..00000000 --- a/R/cor_test_biweight.R +++ /dev/null @@ -1,41 +0,0 @@ -#' @keywords internal -.cor_test_biweight <- function(data, x, y, ci = 0.95, ...) { - var_x <- .complete_variable_x(data, x, y) - var_y <- .complete_variable_y(data, x, y) - - - # https://github.com/easystats/correlation/issues/13 - u <- (var_x - stats::median(var_x)) / (9 * stats::mad(var_x, constant = 1)) - v <- (var_y - stats::median(var_y)) / (9 * stats::mad(var_y, constant = 1)) - - I_x <- as.numeric((1 - abs(u)) > 0) - I_y <- as.numeric((1 - abs(v)) > 0) - - w_x <- I_x * (1 - u^2)^2 - w_y <- I_y * (1 - v^2)^2 - - - denominator_x <- sqrt(sum(((var_x - stats::median(var_x)) * w_x)^2)) - x_curly <- ((var_x - stats::median(var_x)) * w_x) / denominator_x - - denominator_y <- sqrt(sum(((var_y - stats::median(var_y)) * w_y)^2)) - y_curly <- ((var_y - stats::median(var_y)) * w_y) / denominator_y - - r <- sum(x_curly * y_curly) - - p <- cor_to_p(r, n = nrow(data)) - ci_vals <- cor_to_ci(r, n = nrow(data), ci = ci) - - data.frame( - Parameter1 = x, - Parameter2 = y, - r = r, - t = p$statistic, - df_error = length(var_x) - 2L, - p = p$p, - CI_low = ci_vals$CI_low, - CI_high = ci_vals$CI_high, - Method = "Biweight", - stringsAsFactors = FALSE - ) -} diff --git a/R/cor_test_blomqvist.R b/R/cor_test_blomqvist.R deleted file mode 100644 index 27a7eab7..00000000 --- a/R/cor_test_blomqvist.R +++ /dev/null @@ -1,26 +0,0 @@ -#' @keywords internal -.cor_test_blomqvist <- function(data, x, y, ci = 0.95, ...) { - insight::check_if_installed("wdm", "for 'blomqvist' correlations") - - var_x <- .complete_variable_x(data, x, y) - var_y <- .complete_variable_y(data, x, y) - - r <- wdm::wdm(var_x, var_y, method = "blomqvist") - - # t-value approximation - p <- cor_to_p(r, n = length(var_x)) - ci_vals <- cor_to_ci(r, n = length(var_x), ci = ci) - - data.frame( - Parameter1 = x, - Parameter2 = y, - r = r, - t = p$statistic, - df_error = length(var_x) - 2, - p = p$p, - CI_low = ci_vals$CI_low, - CI_high = ci_vals$CI_high, - Method = "Blomqvist", - stringsAsFactors = FALSE - ) -} diff --git a/R/cor_test_distance.R b/R/cor_test_distance.R deleted file mode 100644 index 2eb1c863..00000000 --- a/R/cor_test_distance.R +++ /dev/null @@ -1,144 +0,0 @@ -#' @keywords internal -.cor_test_distance <- function(data, x, y, ci = 0.95, corrected = TRUE, ...) { - var_x <- .complete_variable_x(data, x, y) - var_y <- .complete_variable_y(data, x, y) - - if (!corrected) { - rez <- .cor_test_distance_raw(var_x, var_y, index = 1) - rez <- data.frame( - Parameter1 = x, - Parameter2 = y, - r = rez$r, - CI_low = NA, - CI_high = NA, - t = NA, - df_error = NA, - p = NA, - Method = "Distance", - stringsAsFactors = FALSE - ) - } else { - rez <- .cor_test_distance_corrected(var_x, var_y, ci = ci) - rez <- data.frame( - Parameter1 = x, - Parameter2 = y, - r = rez$r, - CI_low = rez$CI_low, - CI_high = rez$CI_high, - t = rez$t, - df_error = rez$df, - p = rez$p, - Method = "Distance (Bias Corrected)", - stringsAsFactors = FALSE - ) - } - - rez -} - - - - -# Basis ------------------------------------------------------------------- - - -#' @keywords internal -.cor_test_distance_corrected <- function(x, y, ci = 0.95) { - x <- as.matrix(stats::dist(x)) - y <- as.matrix(stats::dist(y)) - n <- nrow(x) - - A <- .A_star(x) - B <- .A_star(y) - - XY <- (sum(A * B) - (n / (n - 2)) * sum(diag(A * B))) / n^2 - XX <- (sum(A * A) - (n / (n - 2)) * sum(diag(A * A))) / n^2 - YY <- (sum(B * B) - (n / (n - 2)) * sum(diag(B * B))) / n^2 - - r <- XY / sqrt(XX * YY) - - M <- n * (n - 3) / 2 - dof <- M - 1 - - t <- sqrt(M - 1) * r / sqrt(1 - r^2) - p <- 1 - stats::pt(t, df = dof) - - ci_vals <- cor_to_ci(r, n = n, ci = ci) - - list( - r = r, - t = t, - df_error = dof, - p = p, - CI_low = ci_vals$CI_low, - CI_high = ci_vals$CI_high - ) -} - - - - -#' @keywords internal -.cor_test_distance_raw <- function(x, y, index = 1) { - if (index < 0 || index > 2) { - insight::format_error("`index` must be between 0 and 2.") - index <- 1.0 - } - - x <- as.matrix(stats::dist(x)) - y <- as.matrix(stats::dist(y)) - - A <- .A_kl(x, index) - B <- .A_kl(y, index) - - cov <- sqrt(mean(A * B)) - dVarX <- sqrt(mean(A * A)) - dVarY <- sqrt(mean(B * B)) - V <- sqrt(dVarX * dVarY) - if (V > 0) { - r <- cov / V - } else { - r <- 0 - } - list(r = r, cov = cov) -} - - - - - -# Utils ------------------------------------------------------------------- - - - - - -#' @keywords internal -.A_kl <- function(x, index) { - d <- as.matrix(x)^index - m <- rowMeans(d) - M <- mean(d) - a <- sweep(d, 1, m) - b <- sweep(a, 2, m) - (b + M) -} - - -#' @keywords internal -.A_star <- function(d) { - ## d is a distance matrix or distance object - ## modified or corrected doubly centered distance matrices - ## denoted A* (or B*) in JMVA t-test paper (2013) - d <- as.matrix(d) - n <- nrow(d) - if (n != ncol(d)) stop("Argument d should be distance", call. = FALSE) - m <- rowMeans(d) - M <- mean(d) - a <- sweep(d, 1, m) - b <- sweep(a, 2, m) - A <- b + M # same as plain A - # correction to get A^* - A <- A - d / n - diag(A) <- m - M - (n / (n - 1)) * A -} diff --git a/R/cor_test_freq.R b/R/cor_test_freq.R deleted file mode 100644 index 0d43056f..00000000 --- a/R/cor_test_freq.R +++ /dev/null @@ -1,79 +0,0 @@ -#' @keywords internal -.cor_test_freq <- function(data, x, y, ci = 0.95, method = "pearson", ...) { - var_x <- .complete_variable_x(data, x, y) - var_y <- .complete_variable_y(data, x, y) - - .cor_test_base(x, y, var_x, var_y, ci = ci, method = method, ...) -} - - -#' @keywords internal -.cor_test_base <- function(x, y, var_x, var_y, ci = 0.95, method = "pearson", ...) { - method <- match.arg(tolower(method), c("pearson", "kendall", "spearman", "somers"), several.ok = FALSE) - rez <- stats::cor.test(var_x, var_y, conf.level = ci, method = method, exact = FALSE, ...) - - # params <- parameters::model_parameters(rez) - # this doubles performance according to computation time - params <- .extract_corr_parameters(rez) - - params$Parameter1 <- x - params$Parameter2 <- y - - if (x == y) { - if ("t" %in% names(params)) params$t <- Inf - if ("z" %in% names(params)) params$z <- Inf - if ("S" %in% names(params)) params$S <- Inf - } - - # Add CI for non-pearson correlations - if (method %in% c("kendall", "spearman")) { - rez_ci <- cor_to_ci(rez$estimate, n = length(var_x), ci = ci, method = method, ...) - params$CI_low <- rez_ci$CI_low - params$CI_high <- rez_ci$CI_high - } - - # see ?cor.test: CI only in case of at least 4 complete pairs of observations - if (!("CI_low" %in% names(params))) params$CI_low <- NA - if (!("CI_high" %in% names(params))) params$CI_high <- NA - - params -} - - - -.extract_corr_parameters <- function(model) { - names <- unlist(strsplit(model$data.name, " and ", fixed = TRUE)) - out <- data.frame( - "Parameter1" = names[1], - "Parameter2" = names[2], - stringsAsFactors = FALSE - ) - - if (model$method == "Pearson's Chi-squared test") { - out$Chi2 <- model$statistic - out$df_error <- model$parameter - out$p <- model$p.value - out$Method <- "Pearson" - } else if (grepl("Pearson", model$method, fixed = TRUE)) { - out$r <- model$estimate - out$t <- model$statistic - out$df_error <- model$parameter - out$p <- model$p.value - out$CI_low <- model$conf.int[1] - out$CI_high <- model$conf.int[2] - out$Method <- "Pearson" - } else if (grepl("Spearman", model$method, fixed = TRUE)) { - out$rho <- model$estimate - out$S <- model$statistic - out$df_error <- model$parameter - out$p <- model$p.value - out$Method <- "Spearman" - } else { - out$tau <- model$estimate - out$z <- model$statistic - out$df_error <- model$parameter - out$p <- model$p.value - out$Method <- "Kendall" - } - out -} diff --git a/R/cor_test_gamma.R b/R/cor_test_gamma.R deleted file mode 100644 index 31273ee5..00000000 --- a/R/cor_test_gamma.R +++ /dev/null @@ -1,29 +0,0 @@ -#' @keywords internal -.cor_test_gamma <- function(data, x, y, ci = 0.95, ...) { - var_x <- .complete_variable_x(data, x, y) - var_y <- .complete_variable_y(data, x, y) - - # Get r value - Rx <- outer(var_x, var_x, function(u, v) sign(u - v)) - Ry <- outer(var_y, var_y, function(u, v) sign(u - v)) - S1 <- Rx * Ry - r <- sum(S1) / sum(abs(S1)) - - # t-value approximation - p <- cor_to_p(r, n = length(var_x)) - ci_vals <- cor_to_ci(r, n = length(var_x), ci = ci) - - - data.frame( - Parameter1 = x, - Parameter2 = y, - r = r, - t = p$statistic, - df_error = length(var_x) - 2, - p = p$p, - CI_low = ci_vals$CI_low, - CI_high = ci_vals$CI_high, - Method = "Gamma", - stringsAsFactors = FALSE - ) -} diff --git a/R/cor_test_gaussian.R b/R/cor_test_gaussian.R deleted file mode 100644 index 92bb17bf..00000000 --- a/R/cor_test_gaussian.R +++ /dev/null @@ -1,12 +0,0 @@ -#' @keywords internal -.cor_test_gaussian <- function(data, x, y, ci = 0.95, ...) { - var_x <- .complete_variable_x(data, x, y) - var_y <- .complete_variable_y(data, x, y) - - var_x <- stats::qnorm(rank(var_x) / (length(var_x) + 1)) - var_y <- stats::qnorm(rank(var_y) / (length(var_y) + 1)) - - out <- .cor_test_base(x, y, var_x, var_y, ci = ci, method = "pearson", ...) - out$Method <- "Gaussian rank" - out -} diff --git a/R/cor_test_hoeffding.R b/R/cor_test_hoeffding.R deleted file mode 100644 index 7aa38a5a..00000000 --- a/R/cor_test_hoeffding.R +++ /dev/null @@ -1,25 +0,0 @@ -#' @keywords internal -.cor_test_hoeffding <- function(data, x, y, ci = 0.95, ...) { - insight::check_if_installed("Hmisc", "for 'hoeffding' correlations") - - var_x <- .complete_variable_x(data, x, y) - var_y <- .complete_variable_y(data, x, y) - - rez <- Hmisc::hoeffd(var_x, var_y) - - r <- rez$D[2, 1] - p <- rez$P[2, 1] - - data.frame( - Parameter1 = x, - Parameter2 = y, - r = r, - t = NA, - df_error = length(var_x) - 2, - p = p, - CI_low = NA, - CI_high = NA, - Method = "Hoeffding", - stringsAsFactors = FALSE - ) -} diff --git a/R/cor_test_percentage.R b/R/cor_test_percentage.R deleted file mode 100644 index 196f0d00..00000000 --- a/R/cor_test_percentage.R +++ /dev/null @@ -1,50 +0,0 @@ -#' @keywords internal -.cor_test_percentage <- function(data, x, y, ci = 0.95, beta = 0.2, ...) { - var_x <- .complete_variable_x(data, x, y) - var_y <- .complete_variable_y(data, x, y) - - temp <- sort(abs(var_x - stats::median(var_x))) - omhatx <- temp[floor((1 - beta) * length(var_x))] - temp <- sort(abs(var_y - stats::median(var_y))) - omhaty <- temp[floor((1 - beta) * length(var_y))] - a <- (var_x - .pbos(var_x, beta)) / omhatx - b <- (var_y - .pbos(var_y, beta)) / omhaty - a <- pmax(a, -1) - a <- pmin(a, 1) - b <- pmax(b, -1) - b <- pmin(b, 1) - - # Result - r <- sum(a * b) / sqrt(sum(a^2) * sum(b^2)) - p <- cor_to_p(r, n = length(var_x)) - ci_vals <- cor_to_ci(r, n = length(var_x), ci = ci) - - data.frame( - Parameter1 = x, - Parameter2 = y, - r = r, - t = p$statistic, - df_error = length(var_x) - 2, - p = p$p, - CI_low = ci_vals$CI_low, - CI_high = ci_vals$CI_high, - Method = "Percentage Bend", - stringsAsFactors = FALSE - ) -} - - - - -#' @keywords internal -.pbos <- function(x, beta = 0.2) { - temp <- sort(abs(x - stats::median(x))) - omhatx <- temp[floor((1 - beta) * length(x))] - psi <- (x - stats::median(x)) / omhatx - i1 <- length(psi[psi < (-1)]) - i2 <- length(psi[psi > 1]) - sx <- ifelse(psi < (-1), 0, x) - sx <- ifelse(psi > 1, 0, sx) - pbos <- (sum(sx) + omhatx * (i2 - i1)) / (length(x) - i1 - i2) - pbos -} diff --git a/R/cor_test_polychoric.R b/R/cor_test_polychoric.R deleted file mode 100644 index 16411008..00000000 --- a/R/cor_test_polychoric.R +++ /dev/null @@ -1,48 +0,0 @@ -#' @keywords internal -.cor_test_polychoric <- function(data, x, y, ci = 0.95, ...) { - insight::check_if_installed("psych", "for 'tetrachronic' correlations") - - var_x <- .complete_variable_x(data, x, y) - var_y <- .complete_variable_y(data, x, y) - - # valid matrix check - if (!is.factor(var_x) && !is.factor(var_y)) { - insight::format_error("Polychoric correlations can only be ran on ordinal factors.") - } - - - if (!is.factor(var_x) || !is.factor(var_y)) { - insight::check_if_installed("polycor", "for 'polyserial' correlations") - - r <- polycor::polyserial( - x = if (is.factor(var_x)) as.numeric(var_y) else as.numeric(var_x), - y = if (is.factor(var_x)) as.numeric(var_x) else as.numeric(var_y) - ) - method <- "Polyserial" - } else { - # Reconstruct dataframe - dat <- data.frame(as.numeric(var_x), as.numeric(var_y)) - names(dat) <- c(x, y) - junk <- utils::capture.output({ - r <- suppressWarnings(psych::polychoric(dat)$rho[2, 1]) - }) - method <- "Polychoric" - } - - # t-value approximation - p <- cor_to_p(r, n = length(var_x)) - ci_vals <- cor_to_ci(r, n = length(var_x), ci = ci) - - data.frame( - Parameter1 = x, - Parameter2 = y, - rho = r, - t = p$statistic, - df_error = length(var_x) - 2, - p = p$p, - CI_low = ci_vals$CI_low, - CI_high = ci_vals$CI_high, - Method = method, - stringsAsFactors = FALSE - ) -} diff --git a/R/cor_test_shepherd.R b/R/cor_test_shepherd.R deleted file mode 100644 index 363540af..00000000 --- a/R/cor_test_shepherd.R +++ /dev/null @@ -1,35 +0,0 @@ -#' @keywords internal -.cor_test_shepherd <- function(data, x, y, ci = 0.95, bayesian = FALSE, ...) { - var_x <- .complete_variable_x(data, x, y) - var_y <- .complete_variable_y(data, x, y) - - d <- .robust_bootstrap_mahalanobis(cbind(var_x, var_y)) - not_outliers <- d < 6 - - if (bayesian) { - data <- data[not_outliers, ] - data[c(x, y)] <- datawizard::ranktransform(data[c(x, y)], sign = TRUE, method = "average") - out <- .cor_test_bayes(data, x, y, ci = ci) - } else { - out <- .cor_test_freq(data[not_outliers, ], x, y, ci = ci, method = "spearman") - } - out$Method <- "Shepherd's Pi" - out -} - - -# Utils ------------------------------------------------------------------- - -#' @keywords internal -.robust_bootstrap_mahalanobis <- function(data, iterations = 1000) { - Ms <- replicate(n = iterations, { - # Draw random numbers from 1:n with replacement - idx <- sample(nrow(data), replace = TRUE) - # Resample data - dat <- data[idx, ] - # Calculating the Mahalanobis distance for each actual observation using resampled data - stats::mahalanobis(data, center = colMeans(dat), cov = stats::cov(dat)) - }) - - apply(Ms, 1, stats::median) -} diff --git a/R/cor_test_somers.R b/R/cor_test_somers.R deleted file mode 100644 index a640bf1a..00000000 --- a/R/cor_test_somers.R +++ /dev/null @@ -1,23 +0,0 @@ -#' @keywords internal -.cor_test_somers <- function(data, x, y, ci = 0.95, ...) { - insight::check_if_installed("Hmisc", "for 'somers' correlations") - - var_x <- .complete_variable_x(data, x, y) - var_y <- .complete_variable_y(data, x, y) - - rez <- Hmisc::somers2(var_y, var_x) - r <- rez["Dxy"] - - data.frame( - Parameter1 = x, - Parameter2 = y, - Dxy = r, - t = NA, - df_error = length(var_x) - 2, - p = NA, - CI_low = NA, - CI_high = NA, - Method = "Somers", - stringsAsFactors = FALSE - ) -} diff --git a/R/cor_test_tetrachoric.R b/R/cor_test_tetrachoric.R deleted file mode 100644 index df776683..00000000 --- a/R/cor_test_tetrachoric.R +++ /dev/null @@ -1,34 +0,0 @@ -#' @keywords internal -.cor_test_tetrachoric <- function(data, x, y, ci = 0.95, ...) { - insight::check_if_installed("psych", "for 'tetrachronic' correlations") - - var_x <- .complete_variable_x(data, x, y) - var_y <- .complete_variable_y(data, x, y) - - # valid matrix check - if (length(unique(var_x)) > 2 && length(unique(var_y)) > 2) { - insight::format_error("Tetrachoric correlations can only be ran on dichotomous data.") - } - - # Reconstruct dataframe - dat <- data.frame(var_x, var_y) - names(dat) <- c(x, y) - - junk <- utils::capture.output(r <- psych::tetrachoric(dat)$rho[2, 1]) # nolint - - p <- cor_to_p(r, n = nrow(data)) - ci_vals <- cor_to_ci(r, n = nrow(data), ci = ci) - - data.frame( - Parameter1 = x, - Parameter2 = y, - rho = r, - t = p$statistic, - df_error = length(var_x) - 2, - p = p$p, - CI_low = ci_vals$CI_low, - CI_high = ci_vals$CI_high, - Method = "Tetrachoric", - stringsAsFactors = FALSE - ) -} diff --git a/R/correlation.R b/R/correlation.R index 4297cefe..5baedcee 100644 --- a/R/correlation.R +++ b/R/correlation.R @@ -37,96 +37,6 @@ #' #' @details #' -#' \subsection{Correlation Types}{ -#' - **Pearson's correlation**: This is the most common correlation -#' method. It corresponds to the covariance of the two variables normalized -#' (i.e., divided) by the product of their standard deviations. -#' -#' - **Spearman's rank correlation**: A non-parametric measure of rank -#' correlation (statistical dependence between the rankings of two variables). -#' The Spearman correlation between two variables is equal to the Pearson -#' correlation between the rank values of those two variables; while Pearson's -#' correlation assesses linear relationships, Spearman's correlation assesses -#' monotonic relationships (whether linear or not). Confidence Intervals (CI) -#' for Spearman's correlations are computed using the Fieller et al. (1957) -#' correction (see Bishara and Hittner, 2017). -#' -#' - **Kendall's rank correlation**: In the normal case, the Kendall correlation -#' is preferred than the Spearman correlation because of a smaller gross error -#' sensitivity (GES) and a smaller asymptotic variance (AV), making it more -#' robust and more efficient. However, the interpretation of Kendall's tau is -#' less direct than that of Spearman's rho, in the sense that it quantifies the -#' difference between the percentage of concordant and discordant pairs among -#' all possible pairwise events. Confidence Intervals (CI) for Kendall's -#' correlations are computed using the Fieller et al. (1957) correction (see -#' Bishara and Hittner, 2017). -#' -#' - **Biweight midcorrelation**: A measure of similarity that is -#' median-based, instead of the traditional mean-based, thus being less -#' sensitive to outliers. It can be used as a robust alternative to other -#' similarity metrics, such as Pearson correlation (Langfelder & Horvath, -#' 2012). -#' -#' - **Distance correlation**: Distance correlation measures both -#' linear and non-linear association between two random variables or random -#' vectors. This is in contrast to Pearson's correlation, which can only detect -#' linear association between two random variables. -#' -#' - **Percentage bend correlation**: Introduced by Wilcox (1994), it -#' is based on a down-weight of a specified percentage of marginal observations -#' deviating from the median (by default, `20%`). -#' -#' - **Shepherd's Pi correlation**: Equivalent to a Spearman's rank -#' correlation after outliers removal (by means of bootstrapped Mahalanobis -#' distance). -#' -#' - **Blomqvist’s coefficient**: The Blomqvist’s coefficient (also -#' referred to as Blomqvist's Beta or medial correlation; Blomqvist, 1950) is a -#' median-based non-parametric correlation that has some advantages over -#' measures such as Spearman's or Kendall's estimates (see Shmid & Schimdt, -#' 2006). -#' -#' - **Hoeffding’s D**: The Hoeffding’s D statistics is a -#' non-parametric rank based measure of association that detects more general -#' departures from independence (Hoeffding 1948), including non-linear -#' associations. Hoeffding’s D varies between -0.5 and 1 (if there are no tied -#' ranks, otherwise it can have lower values), with larger values indicating a -#' stronger relationship between the variables. -#' -#' - **Somers’ D**: The Somers’ D statistics is a non-parametric rank -#' based measure of association between a binary variable and a continuous -#' variable, for instance, in the context of logistic regression the binary -#' outcome and the predicted probabilities for each outcome. Usually, Somers' D -#' is a measure of ordinal association, however, this implementation it is -#' limited to the case of a binary outcome. -#' -#' - **Point-Biserial and biserial correlation**: Correlation -#' coefficient used when one variable is continuous and the other is dichotomous -#' (binary). Point-Biserial is equivalent to a Pearson's correlation, while -#' Biserial should be used when the binary variable is assumed to have an -#' underlying continuity. For example, anxiety level can be measured on a -#' continuous scale, but can be classified dichotomously as high/low. -#' -#' - **Gamma correlation**: The Goodman-Kruskal gamma statistic is -#' similar to Kendall's Tau coefficient. It is relatively robust to outliers and -#' deals well with data that have many ties. -#' -#' - **Winsorized correlation**: Correlation of variables that have -#' been formerly Winsorized, i.e., transformed by limiting extreme values to -#' reduce the effect of possibly spurious outliers. -#' -#' - **Gaussian rank Correlation**: The Gaussian rank correlation -#' estimator is a simple and well-performing alternative for robust rank -#' correlations (Boudt et al., 2012). It is based on the Gaussian quantiles of -#' the ranks. -#' -#' - **Polychoric correlation**: Correlation between two theorized -#' normally distributed continuous latent variables, from two observed ordinal -#' variables. -#' -#' - **Tetrachoric correlation**: Special case of the polychoric -#' correlation applicable when both observed variables are dichotomous. -#' } #' #' \subsection{Partial Correlation}{ #' **Partial correlations** are estimated as the correlation between two diff --git a/man/cor_test.Rd b/man/cor_test.Rd index faa3a768..d96697bf 100644 --- a/man/cor_test.Rd +++ b/man/cor_test.Rd @@ -10,16 +10,8 @@ cor_test( y, method = "pearson", ci = 0.95, + alternative = "two.sided", bayesian = FALSE, - bayesian_prior = "medium", - bayesian_ci_method = "hdi", - bayesian_test = c("pd", "rope", "bf"), - include_factors = FALSE, - partial = FALSE, - partial_bayesian = FALSE, - multilevel = FALSE, - ranktransform = FALSE, - winsorize = FALSE, verbose = TRUE, ... ) @@ -49,50 +41,13 @@ set to \code{0.95} (\verb{95\%} CI).} \item{bayesian}{If \code{TRUE}, will run the correlations under a Bayesian framework.} -\item{bayesian_prior}{For the prior argument, several named values are -recognized: \code{"medium.narrow"}, \code{"medium"}, \code{"wide"}, and -\code{"ultrawide"}. These correspond to scale values of \code{1/sqrt(27)}, -\code{1/3}, \code{1/sqrt(3)} and \code{1}, respectively. See the -\code{BayesFactor::correlationBF} function.} - -\item{bayesian_ci_method, bayesian_test}{See arguments in -\code{\link[=parameters]{model_parameters()}} for \code{BayesFactor} tests.} - -\item{include_factors}{If \code{TRUE}, the factors are kept and eventually -converted to numeric or used as random effects (depending of -\code{multilevel}). If \code{FALSE}, factors are removed upfront.} - -\item{partial}{Can be \code{TRUE} or \code{"semi"} for partial and -semi-partial correlations, respectively.} - -\item{partial_bayesian}{If partial correlations under a Bayesian framework -are needed, you will also need to set \code{partial_bayesian} to \code{TRUE} to -obtain "full" Bayesian partial correlations. Otherwise, you will obtain -pseudo-Bayesian partial correlations (i.e., Bayesian correlation based on -frequentist partialization).} - -\item{multilevel}{If \code{TRUE}, the factors are included as random factors. -Else, if \code{FALSE} (default), they are included as fixed effects in the -simple regression model.} - -\item{ranktransform}{If \code{TRUE}, will rank-transform the variables prior to -estimating the correlation, which is one way of making the analysis more -resistant to extreme values (outliers). Note that, for instance, a Pearson's -correlation on rank-transformed data is equivalent to a Spearman's rank -correlation. Thus, using \code{robust=TRUE} and \code{method="spearman"} is -redundant. Nonetheless, it is an easy option to increase the robustness of the -correlation as well as flexible way to obtain Bayesian or multilevel -Spearman-like rank correlations.} - -\item{winsorize}{Another way of making the correlation more "robust" (i.e., -limiting the impact of extreme values). Can be either \code{FALSE} or a -number between 0 and 1 (e.g., \code{0.2}) that corresponds to the desired -threshold. See the \code{\link[=winsorize]{winsorize()}} function for more details.} - \item{verbose}{Toggle warnings.} -\item{...}{Additional arguments (e.g., \code{alternative}) to be passed to -other methods. See \code{stats::cor.test} for further details.} +\item{...}{Additional arguments depending on \code{method}. +\itemize{ +\item \code{"percentage"}: \code{beta} (default is \code{0.2}). +\item \code{"bayes"}: \code{bayesian_prior} = "medium", \code{bayesian_ci_method} (default: "hdi"), \code{bayesian_test} (default: \code{c("pd", "rope", "bf")}) +}} } \description{ This function performs a correlation test between two variables. @@ -176,47 +131,6 @@ variables. correlation applicable when both observed variables are dichotomous. } } - -\subsection{Partial Correlation}{ -\strong{Partial correlations} are estimated as the correlation between two -variables after adjusting for the (linear) effect of one or more other -variable. The correlation test is then run after having partialized the -dataset, independently from it. In other words, it considers partialization -as an independent step generating a different dataset, rather than belonging -to the same model. This is why some discrepancies are to be expected for the -t- and p-values, CIs, BFs etc (but \emph{not} the correlation coefficient) -compared to other implementations (e.g., \code{ppcor}). (The size of these -discrepancies depends on the number of covariates partialled-out and the -strength of the linear association between all variables.) Such partial -correlations can be represented as Gaussian Graphical Models (GGM), an -increasingly popular tool in psychology. A GGM traditionally include a set of -variables depicted as circles ("nodes"), and a set of lines that visualize -relationships between them, which thickness represents the strength of -association (see Bhushan et al., 2019). - -\strong{Multilevel correlations} are a special case of partial correlations where -the variable to be adjusted for is a factor and is included as a random -effect in a mixed model (note that the remaining continuous variables of the -dataset will still be included as fixed effects, similarly to regular partial -correlations). The model is a random intercept model, i.e. the multilevel -correlation is adjusted for \code{(1 | groupfactor)}.That said, there is an -important difference between using \code{cor_test()} and \code{correlation()}: If you -set \code{multilevel=TRUE} in \code{correlation()} but \code{partial} is set to \code{FALSE} (as -per default), then a back-transformation from partial to non-partial -correlation will be attempted (through \code{\link[=pcor_to_cor]{pcor_to_cor()}}). -However, this is not possible when using \code{cor_test()} so that if you set -\code{multilevel=TRUE} in it, the resulting correlations are partial one. Note -that for Bayesian multilevel correlations, if \code{partial = FALSE}, the back -transformation will also recompute \emph{p}-values based on the new \emph{r} scores, -and will drop the Bayes factors (as they are not relevant anymore). To keep -Bayesian scores, set \code{partial = TRUE}. -} - -\subsection{Notes}{ -Kendall and Spearman correlations when \code{bayesian=TRUE}: These are technically -Pearson Bayesian correlations of rank transformed data, rather than pure -Bayesian rank correlations (which have different priors). -} } \examples{ library(correlation) diff --git a/man/cor_to_p.Rd b/man/cor_to_p.Rd index b56a2e44..ee99ec41 100644 --- a/man/cor_to_p.Rd +++ b/man/cor_to_p.Rd @@ -37,8 +37,11 @@ these indices.} better, though the Bishara and Hittner (2017) paper favours the Fieller correction. Both are generally very similar.} -\item{...}{Additional arguments (e.g., \code{alternative}) to be passed to -other methods. See \code{stats::cor.test} for further details.} +\item{...}{Additional arguments depending on \code{method}. +\itemize{ +\item \code{"percentage"}: \code{beta} (default is \code{0.2}). +\item \code{"bayes"}: \code{bayesian_prior} = "medium", \code{bayesian_ci_method} (default: "hdi"), \code{bayesian_test} (default: \code{c("pd", "rope", "bf")}) +}} } \value{ A list containing a \emph{p}-value and the statistic or the CI bounds. diff --git a/man/correlation.Rd b/man/correlation.Rd index 926c705e..21af59c6 100644 --- a/man/correlation.Rd +++ b/man/correlation.Rd @@ -77,49 +77,9 @@ set to \code{0.95} (\verb{95\%} CI).} \item{bayesian}{If \code{TRUE}, will run the correlations under a Bayesian framework.} -\item{bayesian_prior}{For the prior argument, several named values are -recognized: \code{"medium.narrow"}, \code{"medium"}, \code{"wide"}, and -\code{"ultrawide"}. These correspond to scale values of \code{1/sqrt(27)}, -\code{1/3}, \code{1/sqrt(3)} and \code{1}, respectively. See the -\code{BayesFactor::correlationBF} function.} - -\item{bayesian_ci_method, bayesian_test}{See arguments in -\code{\link[=parameters]{model_parameters()}} for \code{BayesFactor} tests.} - \item{redundant}{Should the data include redundant rows (where each given correlation is repeated two times).} -\item{include_factors}{If \code{TRUE}, the factors are kept and eventually -converted to numeric or used as random effects (depending of -\code{multilevel}). If \code{FALSE}, factors are removed upfront.} - -\item{partial}{Can be \code{TRUE} or \code{"semi"} for partial and -semi-partial correlations, respectively.} - -\item{partial_bayesian}{If partial correlations under a Bayesian framework -are needed, you will also need to set \code{partial_bayesian} to \code{TRUE} to -obtain "full" Bayesian partial correlations. Otherwise, you will obtain -pseudo-Bayesian partial correlations (i.e., Bayesian correlation based on -frequentist partialization).} - -\item{multilevel}{If \code{TRUE}, the factors are included as random factors. -Else, if \code{FALSE} (default), they are included as fixed effects in the -simple regression model.} - -\item{ranktransform}{If \code{TRUE}, will rank-transform the variables prior to -estimating the correlation, which is one way of making the analysis more -resistant to extreme values (outliers). Note that, for instance, a Pearson's -correlation on rank-transformed data is equivalent to a Spearman's rank -correlation. Thus, using \code{robust=TRUE} and \code{method="spearman"} is -redundant. Nonetheless, it is an easy option to increase the robustness of the -correlation as well as flexible way to obtain Bayesian or multilevel -Spearman-like rank correlations.} - -\item{winsorize}{Another way of making the correlation more "robust" (i.e., -limiting the impact of extreme values). Can be either \code{FALSE} or a -number between 0 and 1 (e.g., \code{0.2}) that corresponds to the desired -threshold. See the \code{\link[=winsorize]{winsorize()}} function for more details.} - \item{verbose}{Toggle warnings.} \item{standardize_names}{This option can be set to \code{TRUE} to run @@ -127,8 +87,11 @@ threshold. See the \code{\link[=winsorize]{winsorize()}} function for more detai names. This option can also be set globally by running \code{options(easystats.standardize_names = TRUE)}.} -\item{...}{Additional arguments (e.g., \code{alternative}) to be passed to -other methods. See \code{stats::cor.test} for further details.} +\item{...}{Additional arguments depending on \code{method}. +\itemize{ +\item \code{"percentage"}: \code{beta} (default is \code{0.2}). +\item \code{"bayes"}: \code{bayesian_prior} = "medium", \code{bayesian_ci_method} (default: "hdi"), \code{bayesian_test} (default: \code{c("pd", "rope", "bf")}) +}} } \value{ A correlation object that can be displayed using the \code{print}, \code{summary} or @@ -146,84 +109,6 @@ You can easily visualize the result using \code{\link[=visualisation_recipe.easy (see examples \href{https://easystats.github.io/correlation/reference/visualisation_recipe.easycormatrix.html#ref-examples}{\strong{here}}). } \details{ -\subsection{Correlation Types}{ -\itemize{ -\item \strong{Pearson's correlation}: This is the most common correlation -method. It corresponds to the covariance of the two variables normalized -(i.e., divided) by the product of their standard deviations. -\item \strong{Spearman's rank correlation}: A non-parametric measure of rank -correlation (statistical dependence between the rankings of two variables). -The Spearman correlation between two variables is equal to the Pearson -correlation between the rank values of those two variables; while Pearson's -correlation assesses linear relationships, Spearman's correlation assesses -monotonic relationships (whether linear or not). Confidence Intervals (CI) -for Spearman's correlations are computed using the Fieller et al. (1957) -correction (see Bishara and Hittner, 2017). -\item \strong{Kendall's rank correlation}: In the normal case, the Kendall correlation -is preferred than the Spearman correlation because of a smaller gross error -sensitivity (GES) and a smaller asymptotic variance (AV), making it more -robust and more efficient. However, the interpretation of Kendall's tau is -less direct than that of Spearman's rho, in the sense that it quantifies the -difference between the percentage of concordant and discordant pairs among -all possible pairwise events. Confidence Intervals (CI) for Kendall's -correlations are computed using the Fieller et al. (1957) correction (see -Bishara and Hittner, 2017). -\item \strong{Biweight midcorrelation}: A measure of similarity that is -median-based, instead of the traditional mean-based, thus being less -sensitive to outliers. It can be used as a robust alternative to other -similarity metrics, such as Pearson correlation (Langfelder & Horvath, -2012). -\item \strong{Distance correlation}: Distance correlation measures both -linear and non-linear association between two random variables or random -vectors. This is in contrast to Pearson's correlation, which can only detect -linear association between two random variables. -\item \strong{Percentage bend correlation}: Introduced by Wilcox (1994), it -is based on a down-weight of a specified percentage of marginal observations -deviating from the median (by default, \verb{20\%}). -\item \strong{Shepherd's Pi correlation}: Equivalent to a Spearman's rank -correlation after outliers removal (by means of bootstrapped Mahalanobis -distance). -\item \strong{Blomqvist’s coefficient}: The Blomqvist’s coefficient (also -referred to as Blomqvist's Beta or medial correlation; Blomqvist, 1950) is a -median-based non-parametric correlation that has some advantages over -measures such as Spearman's or Kendall's estimates (see Shmid & Schimdt, -2006). -\item \strong{Hoeffding’s D}: The Hoeffding’s D statistics is a -non-parametric rank based measure of association that detects more general -departures from independence (Hoeffding 1948), including non-linear -associations. Hoeffding’s D varies between -0.5 and 1 (if there are no tied -ranks, otherwise it can have lower values), with larger values indicating a -stronger relationship between the variables. -\item \strong{Somers’ D}: The Somers’ D statistics is a non-parametric rank -based measure of association between a binary variable and a continuous -variable, for instance, in the context of logistic regression the binary -outcome and the predicted probabilities for each outcome. Usually, Somers' D -is a measure of ordinal association, however, this implementation it is -limited to the case of a binary outcome. -\item \strong{Point-Biserial and biserial correlation}: Correlation -coefficient used when one variable is continuous and the other is dichotomous -(binary). Point-Biserial is equivalent to a Pearson's correlation, while -Biserial should be used when the binary variable is assumed to have an -underlying continuity. For example, anxiety level can be measured on a -continuous scale, but can be classified dichotomously as high/low. -\item \strong{Gamma correlation}: The Goodman-Kruskal gamma statistic is -similar to Kendall's Tau coefficient. It is relatively robust to outliers and -deals well with data that have many ties. -\item \strong{Winsorized correlation}: Correlation of variables that have -been formerly Winsorized, i.e., transformed by limiting extreme values to -reduce the effect of possibly spurious outliers. -\item \strong{Gaussian rank Correlation}: The Gaussian rank correlation -estimator is a simple and well-performing alternative for robust rank -correlations (Boudt et al., 2012). It is based on the Gaussian quantiles of -the ranks. -\item \strong{Polychoric correlation}: Correlation between two theorized -normally distributed continuous latent variables, from two observed ordinal -variables. -\item \strong{Tetrachoric correlation}: Special case of the polychoric -correlation applicable when both observed variables are dichotomous. -} -} - \subsection{Partial Correlation}{ \strong{Partial correlations} are estimated as the correlation between two variables after adjusting for the (linear) effect of one or more other diff --git a/tests/testthat/test-cor_test.R b/tests/testthat/test-cor_test.R index ef5b36a4..228dee88 100644 --- a/tests/testthat/test-cor_test.R +++ b/tests/testthat/test-cor_test.R @@ -1,8 +1,12 @@ -test_that("cor_test frequentist", { +test_that("cor_test names (x,y)", { expect_error(cor_test(iris, Petal.Length, Petal.Width)) out <- cor_test(iris, "Petal.Length", "Petal.Width") - expect_equal(out$r, 0.962, tolerance = 0.01) + out2 <- parameters::model_parameters(stats::cor.test(iris$Petal.Length, iris$Petal.Width)) + expect_equal(out$r, out2$r, tolerance = 0.01) + expect_equal(out$CI_low, out2$CI_low, tolerance = 0.01) + expect_equal(out$CI_high, out2$CI_high, tolerance = 0.01) + # TODO }) test_that("cor_test kendall", { From 67f099a3e26aae55a370bfa56f42065758f92176 Mon Sep 17 00:00:00 2001 From: TomGeva <141431661+TomGeva@users.noreply.github.com> Date: Mon, 15 Apr 2024 16:17:36 +0300 Subject: [PATCH 02/33] documentation & vector update --- R/cor_test.R | 356 ++++++++++++++++++++++++++------------------- man/cor_test.Rd | 84 ++++++----- man/cor_to_p.Rd | 39 +++-- man/correlation.Rd | 39 +++-- 4 files changed, 309 insertions(+), 209 deletions(-) diff --git a/R/cor_test.R b/R/cor_test.R index a997c66e..9f4bf3a7 100644 --- a/R/cor_test.R +++ b/R/cor_test.R @@ -3,66 +3,77 @@ #' This function performs a correlation test between two variables. #' You can easily visualize the result using [`plot()`][visualisation_recipe.easycormatrix()] (see examples [**here**](https://easystats.github.io/correlation/reference/visualisation_recipe.easycormatrix.html#ref-examples)). #' -#' @param data A data frame. -#' @param x,y Names of two variables present in the data. +#' @param x,y Vectors of the two variables the correlation test is done for. +#' \cr Alternatively, can be names of variables in `data`. #' @param ci Confidence/Credible Interval level. If `"default"`, then it is #' set to `0.95` (`95%` CI). #' @param method A character string indicating which correlation coefficient is -#' to be used for the test. One of `"pearson"` (default), -#' `"kendall"`, `"spearman"` (but see also the `robust` argument), `"biserial"`, -#' `"polychoric"`, `"tetrachoric"`, `"biweight"`, -#' `"distance"`, `"percentage"` (for percentage bend correlation), -#' `"blomqvist"` (for Blomqvist's coefficient), `"hoeffding"` (for -#' Hoeffding's D), `"gamma"`, `"gaussian"` (for Gaussian Rank -#' correlation) or `"shepherd"` (for Shepherd's Pi correlation). Setting -#' `"auto"` will attempt at selecting the most relevant method -#' (polychoric when ordinal factors involved, tetrachoric when dichotomous +#' to be used for the test. \cr Possible Values: `"pearson"` (default), +#' `"kendall"`, `"spearman"`, `"biserial"`, `"point-biserial"`, `"rankbiserial"`, +#' `"polychoric"`, `"tetrachoric"`, `"biweight"`, `"distance"`, `"percentage"` +#' (for percentage bend correlation), `"blomqvist"` (for Blomqvist's +#' coefficient), `"hoeffding"` (for Hoeffding's D), `"gamma"`, `"gaussian"` +#' (for Gaussian Rank correlation), `"shepherd"` (for Shepherd's Pi correlation). +#' \cr (polychoric when ordinal factors involved, tetrachoric when dichotomous #' factors involved, point-biserial if one dichotomous and one continuous and #' pearson otherwise). See below the **details** section for a description of #' these indices. #' @param bayesian If `TRUE`, will run the correlations under a Bayesian #' framework. #' @param verbose Toggle warnings. -#' @param ... Additional arguments depending on `method`. -#' - `"percentage"`: `beta` (default is `0.2`). -#' - `"bayes"`: `bayesian_prior` = "medium", `bayesian_ci_method` (default: "hdi"), `bayesian_test` (default: `c("pd", "rope", "bf")`) +#' @param ... Optional arguments: +#' - `data` A data frame (when `x` and/or `y` are not vectors). +#' - Arguments dependent on `method` being: +#' - `"kendall"`: +#' - `tau_type` = `"b"` +#' - `direction` = `"row"` (used when `tau_type` = `"a"`) +#' - `"percentage"`: +#' - `beta` = `0.2` +#' - `"bayes"`: +#' - `bayesian_prior` = "medium" +#' - `bayesian_ci_method` = "hdi" +#' - `bayesian_test` = `c("pd", "rope", "bf")` #' #' #' @details #' #' ## Correlation Types -#' - **Pearson's correlation**: This is the most common correlation -#' method. It corresponds to the covariance of the two variables normalized -#' (i.e., divided) by the product of their standard deviations. +#' - **Pearson's correlation**: This is the most common correlation method. It +#' corresponds to the covariance of the two variables normalized (i.e., divided) +#' by the product of their standard deviations. #' #' - **Spearman's rank correlation**: A non-parametric measure of rank #' correlation (statistical dependence between the rankings of two variables). -#' The Spearman correlation between two variables is equal to the Pearson +#' \cr The Spearman correlation between two variables is equal to the Pearson #' correlation between the rank values of those two variables; while Pearson's #' correlation assesses linear relationships, Spearman's correlation assesses -#' monotonic relationships (whether linear or not). Confidence Intervals (CI) -#' for Spearman's correlations are computed using the Fieller et al. (1957) +#' monotonic relationships (whether linear or not). \cr Confidence Intervals +#' (CI) for Spearman's correlations are computed using the Fieller et al. (1957) #' correction (see Bishara and Hittner, 2017). #' -#' - **Kendall's rank correlation**: In the normal case, the Kendall correlation -#' is preferred than the Spearman correlation because of a smaller gross error -#' sensitivity (GES) and a smaller asymptotic variance (AV), making it more -#' robust and more efficient. However, the interpretation of Kendall's tau is -#' less direct than that of Spearman's rho, in the sense that it quantifies the -#' difference between the percentage of concordant and discordant pairs among -#' all possible pairwise events. Confidence Intervals (CI) for Kendall's -#' correlations are computed using the Fieller et al. (1957) correction (see -#' Bishara and Hittner, 2017). +#' - **Kendall's rank correlation**: Is used to quantify the association between +#' two variables based on the ranks of their data points. \cr It comes in three +#' variants which provide different approaches for handling tied ranks, allowing +#' for robust assessments of association across different datasets and +#' scenarios. \cr Confidence Intervals (CI) for Kendall's correlations are +#' computed using the Fieller et al. (1957) correction (see Bishara and Hittner, +#' 2017). \cr The three variants are: tau-a, tau-b (default), and tau-c. +#' - **Tau-a** doesn't account for ties and calculates the difference between +#' the proportions of concordant and discordant pairs. +#' - **Tau-b** adjusts for ties by incorporating a correction factor, ensuring +#' a more accurate measure of association. +#' - **Tau-c**, similar to tau-b, considers ties, but it only adjusts for +#' pairs where both variables have tied ranks. #' #' - **Biweight midcorrelation**: A measure of similarity that is #' median-based, instead of the traditional mean-based, thus being less -#' sensitive to outliers. It can be used as a robust alternative to other +#' sensitive to outliers. \cr It can be used as a robust alternative to other #' similarity metrics, such as Pearson correlation (Langfelder & Horvath, #' 2012). #' #' - **Distance correlation**: Distance correlation measures both #' linear and non-linear association between two random variables or random -#' vectors. This is in contrast to Pearson's correlation, which can only detect +#' vectors. \cr This is in contrast to Pearson's correlation, which can only detect #' linear association between two random variables. #' #' - **Percentage bend correlation**: Introduced by Wilcox (1994), it @@ -79,46 +90,44 @@ #' measures such as Spearman's or Kendall's estimates (see Shmid & Schimdt, #' 2006). #' -#' - **Hoeffding’s D**: The Hoeffding’s D statistics is a -#' non-parametric rank based measure of association that detects more general -#' departures from independence (Hoeffding 1948), including non-linear -#' associations. Hoeffding’s D varies between -0.5 and 1 (if there are no tied -#' ranks, otherwise it can have lower values), with larger values indicating a -#' stronger relationship between the variables. +#' - **Hoeffding’s D**: The Hoeffding’s D statistics is a non-parametric rank +#' based measure of association that detects more general departures from +#' independence (Hoeffding 1948), including non-linear associations. \cr +#' Hoeffding’s D varies between -0.5 and 1 (if there are no tied ranks, +#' otherwise it can have lower values), with larger values indicating a stronger +#' relationship between the variables. #' #' - **Somers’ D**: The Somers’ D statistics is a non-parametric rank #' based measure of association between a binary variable and a continuous #' variable, for instance, in the context of logistic regression the binary -#' outcome and the predicted probabilities for each outcome. Usually, Somers' D -#' is a measure of ordinal association, however, this implementation it is -#' limited to the case of a binary outcome. +#' outcome and the predicted probabilities for each outcome. \cr Usually, +#' Somers' D is a measure of ordinal association, however, this implementation +#' it is limited to the case of a binary outcome. #' -#' - **Point-Biserial and biserial correlation**: Correlation +#' - **Point-Biserial, Rank-Biserial and biserial correlation**: Correlation #' coefficient used when one variable is continuous and the other is dichotomous -#' (binary). Point-Biserial is equivalent to a Pearson's correlation, while +#' (binary). \cr Point-Biserial is equivalent to a Pearson's correlation, while #' Biserial should be used when the binary variable is assumed to have an #' underlying continuity. For example, anxiety level can be measured on a -#' continuous scale, but can be classified dichotomously as high/low. +#' continuous scale, but can be classified dichotomously as high/low. \cr +#' Rank-Biserial is also equivalent to a Pearson's correlation, but it is used +#' when the continuous variable is ordinal, and the dichotomous variable is +#' assumed to have any relation to the order of the ordinal variable rather than +#' it's value. #' -#' - **Gamma correlation**: The Goodman-Kruskal gamma statistic is -#' similar to Kendall's Tau coefficient. It is relatively robust to outliers and -#' deals well with data that have many ties. +#' - **Gamma correlation**: The Goodman-Kruskal gamma statistic is similar to +#' Kendall's Tau coefficient. It is relatively robust to outliers and deals well +#' with data that have many ties. #' -#' - **Winsorized correlation**: Correlation of variables that have -#' been formerly Winsorized, i.e., transformed by limiting extreme values to -#' reduce the effect of possibly spurious outliers. +#' - **Gaussian rank Correlation**: The Gaussian rank correlation estimator is a +#' simple and well-performing alternative for robust rank correlations (Boudt et +#' al., 2012). \cr It is based on the Gaussian quantiles of the ranks. #' -#' - **Gaussian rank Correlation**: The Gaussian rank correlation -#' estimator is a simple and well-performing alternative for robust rank -#' correlations (Boudt et al., 2012). It is based on the Gaussian quantiles of -#' the ranks. +#' - **Polychoric correlation**: Correlation between two theorized normally +#' distributed continuous latent variables, from two observed ordinal variables. #' -#' - **Polychoric correlation**: Correlation between two theorized -#' normally distributed continuous latent variables, from two observed ordinal -#' variables. -#' -#' - **Tetrachoric correlation**: Special case of the polychoric -#' correlation applicable when both observed variables are dichotomous. +#' - **Tetrachoric correlation**: Special case of the polychoric correlation +#' applicable when both observed variables are dichotomous. #' #' #' @examples @@ -178,7 +187,7 @@ #' cor_test(iris, "Sepal.Length", "Sepal.Width", partial_bayesian = TRUE) #' } #' @export -cor_test <- function(data, x, y, +cor_test <- function(x, y, method = "pearson", ci = 0.95, alternative = "two.sided", @@ -189,7 +198,7 @@ cor_test <- function(data, x, y, # checks # +======+ - # check value of method + # check value of method method <- match.arg(tolower(method), c("pearson", "spearman", "spear", "s", "kendall", "biserial", "pointbiserial", "point-biserial", "rankbiserial", @@ -209,15 +218,91 @@ cor_test <- function(data, x, y, methodUse <- ifelse(method %in% c("poly", "polychoric"), "polychoric", methodUse) methodUse <- ifelse(method %in% c("tetra", "tetrachoric"), "tetrachoric", methodUse) + # vectors or names check + xIsVec <- !length(x) == 1L + yIsVec <- !length(y) == 1L # Make sure factor is no factor if (!methodUse %in% c("tetrachoric", "polychoric")) { - data[c(x, y)] <- datawizard::to_numeric(data[c(x, y)], dummy_factors = FALSE) + if (xIsVec || yIsVec) { + if (xIsVec) { + x <- datawizard::to_numeric(x, dummy_factors = FALSE) + } + else { + data[[x]] <- datawizard::to_numeric(data[[x]], dummy_factors = FALSE) + } + if (yIsVec) { + y <- datawizard::to_numeric(y, dummy_factors = FALSE) + } + else { + data[[y]] <- datawizard::to_numeric(data[[y]], dummy_factors = FALSE) + } + } + else { + data[c(x, y)] <- datawizard::to_numeric(data[c(x, y)], dummy_factors = FALSE) + } + } + + # check validity of variables as vectors and/or as names + if (!xIsVec || !yIsVec) { + if (!"data" %in% names(list(...))) { + insight::format_error("At least 1 of the variables is from a data frame but no data frame has been provided.") + } + data <- list(...)$data + if (!is.data.frame(data)) { + insight::format_error("The data provided is not a data frame.") + } + if (xIsVec) { + completeY <- stats::complete.cases(data[[y]]) + if (length(x) == nrows(data)) { + completeX <- stats::complete.cases(x) + var_x <- x[completeX * completeY == 1L] + var_y <- data[[y]][completeX * completeY == 1L] + } + else if (length(x) == sum(completeY)) { + var_y <- data[[y]][completeY] + completeX <- stats::complete.cases(x) + var_x <- x[completeX] + var_y <- var_y[completeX] + } + else { + insight::format_error("Cannot match complete cases of variable x with variable y, \n The length of x should match the length of y or the length of the whole data frame.") + } + } + else if (yIsVec) { + completeX <- stats::complete.cases(data[[x]]) + if (length(y) == nrows(data)) { + completeY <- stats::complete.cases(y) + var_x <- data[[x]][completeX * completeY == 1L] + var_y <- y[completeX * completeY == 1L] + } + else if (length(y) == sum(completeX)) { + var_x <- data[[x]][completeX] + completeY <- stats::complete.cases(y) + var_x <- var_x[completeY] + var_y <- y[completeY] + } + else { + insight::format_error("Cannot match complete cases of variable x with variable y, \n The length of y should match the length of x or the length of the whole data frame.") + } + } + else { + completeCase <- stats::complete.cases(data[[x]], data[[y]]) + var_x <- data[[x]][completeCase] + var_y <- data[[y]][completeCase] + } + } + else { + if (length(x) != length(y)) { + insight::format_error("The length of x should match the length of y.") + } + else { + completeCase <- stats::complete.cases(x, y) + var_x <- x[completeCase] + var_y <- y[completeCase] + } } - # narrowing the data to its complete form (without missing values) - var_x <- .complete_variable_x(data, x, y) - var_y <- .complete_variable_y(data, x, y) # check validity of the amount of observations n_obs <- length(var_x) @@ -244,12 +329,6 @@ cor_test <- function(data, x, y, } else tau_type <- "b" } - if(methodUse == "biserial") { - if("xType" %in% names(list(...))) { - xType <- match.arg(tolower(xType), c("base", "point", "rank")) - } - else xType <- "base" - } if(methodUse == "percentage") { if("beta" %in% names(list(...))) { if (length(beta) != 1L || beta <= 0 || beta >= 0.5) @@ -257,6 +336,18 @@ cor_test <- function(data, x, y, } else beta <- 0.2 } + if(bayesian) { + if("bayesian_prior" %in% names(list(...))) { + bayesian_prior <- match.arg(tolower(bayesian_prior), c("medium", "medium.narrow", "wide", "ultra-wide")) + } + else bayesian_prior <- "medium" + if(!"bayesian_ci_method" %in% names(list(...))) { + bayesian_ci_method <- "hdi" + } + if(!"bayesian_test" %in% names(list(...))) { + bayesian_test <- c("pd", "rope", "bf") + } + } # +=======================+ # calculate by the method @@ -497,10 +588,29 @@ cor_test <- function(data, x, y, ci = 0.95, corrected = TRUE, ...) { - # TODO put .cor_test_distance_corrected and .cor_test_distance_raw in here if (!corrected) { - rez <- .cor_test_distance_raw(var_x, var_y, index = 1) - rez <- data.frame("r" = rez$r, + if("index" %in% names(list(...))) { + if (index < 0 || index > 2) { + insight::format_error("`index` must be between 0 and 2.") + index <- 1.0 + } + } + else index <- 1.0 + + var_x <- as.matrix(stats::dist(var_x)) + var_y <- as.matrix(stats::dist(var_y)) + + A <- .A_kl(var_x, index) + B <- .A_kl(var_y, index) + + V <- sqrt(sqrt(mean(A * A)) * sqrt(mean(B * B))) + if (V > 0) { + r <- sqrt(mean(A * B)) / V + } else { + r <- 0 + } + + rez <- data.frame("r" = r, "df_error" = NA, "t" = NA, "p" = NA, @@ -509,13 +619,27 @@ cor_test <- function(data, x, y, "CI_high" = NA) } else { - rez <- .cor_test_distance_corrected(var_x, var_y, ci = ci) - rez <- data.frame("r" = rez$r, - "df_error" = rez$df, - "t" = rez$t, - "p" = rez$p, - "CI_low" = rez$CI_low, - "CI_high" = rez$CI_high, + var_x <- as.matrix(stats::dist(var_x)) + var_y <- as.matrix(stats::dist(var_y)) + n <- nrow(var_x) + + A <- .A_star(var_x) + B <- .A_star(var_y) + + XY <- (sum(A * B) - (n / (n - 2)) * sum(diag(A * B))) / n^2 + XX <- (sum(A * A) - (n / (n - 2)) * sum(diag(A * A))) / n^2 + YY <- (sum(B * B) - (n / (n - 2)) * sum(diag(B * B))) / n^2 + + r <- XY / sqrt(XX * YY) + M <- n * (n - 3) / 2 + ci_vals <- cor_to_ci(r, n = n, ci = ci) + + rez <- data.frame("r" = r, + "df_error" = M - 1, + "t" = sqrt(M - 1) * r / sqrt(1 - r^2), + "p" = 1 - stats::pt(t, df = M - 1), + "CI_low" = ci_vals$CI_low, + "CI_high" = ci_vals$CI_high, "Method" = "Distance (Bias Corrected)") } @@ -790,18 +914,6 @@ cor_test <- function(data, x, y, tanh(atanh(r) + side * stats::qnorm(ci) / sqrt(df - 1)) } -# getting from the data frame the values of the column x where all the pairs of x and y are complete -#' @keywords internal -.complete_variable_x <- function(data, x, y) { - data[[x]][stats::complete.cases(data[[x]], data[[y]])] -} - -# getting from the data frame the values of the column y where all the pairs of x and y are complete -#' @keywords internal -.complete_variable_y <- function(data, x, y) { - data[[y]][stats::complete.cases(data[[x]], data[[y]])] -} - # t-value & p-value calculation #' @keywords internal .t_p_value <- function(r, df, alternative) { @@ -817,64 +929,6 @@ cor_test <- function(data, x, y, ## distance============ -#' @keywords internal -.cor_test_distance_corrected <- function(x, y, ci = 0.95) { - x <- as.matrix(stats::dist(x)) - y <- as.matrix(stats::dist(y)) - n <- nrow(x) - - A <- .A_star(x) - B <- .A_star(y) - - XY <- (sum(A * B) - (n / (n - 2)) * sum(diag(A * B))) / n^2 - XX <- (sum(A * A) - (n / (n - 2)) * sum(diag(A * A))) / n^2 - YY <- (sum(B * B) - (n / (n - 2)) * sum(diag(B * B))) / n^2 - - r <- XY / sqrt(XX * YY) - - M <- n * (n - 3) / 2 - dof <- M - 1 - - t <- sqrt(M - 1) * r / sqrt(1 - r^2) - p <- 1 - stats::pt(t, df = dof) - - ci_vals <- cor_to_ci(r, n = n, ci = ci) - - list( - r = r, - t = t, - df = dof, - p = p, - CI_low = ci_vals$CI_low, - CI_high = ci_vals$CI_high - ) -} - -#' @keywords internal -.cor_test_distance_raw <- function(x, y, index = 1) { - if (index < 0 || index > 2) { - insight::format_error("`index` must be between 0 and 2.") - index <- 1.0 - } - - x <- as.matrix(stats::dist(x)) - y <- as.matrix(stats::dist(y)) - - A <- .A_kl(x, index) - B <- .A_kl(y, index) - - cov <- sqrt(mean(A * B)) - dVarX <- sqrt(mean(A * A)) - dVarY <- sqrt(mean(B * B)) - V <- sqrt(dVarX * dVarY) - if (V > 0) { - r <- cov / V - } else { - r <- 0 - } - list(r = r, cov = cov) -} - #' @keywords internal .A_kl <- function(x, index) { d <- as.matrix(x)^index diff --git a/man/cor_test.Rd b/man/cor_test.Rd index d96697bf..53787e9b 100644 --- a/man/cor_test.Rd +++ b/man/cor_test.Rd @@ -5,7 +5,6 @@ \title{Correlation test} \usage{ cor_test( - data, x, y, method = "pearson", @@ -17,20 +16,17 @@ cor_test( ) } \arguments{ -\item{data}{A data frame.} - -\item{x, y}{Names of two variables present in the data.} +\item{x, y}{Vectors of the two variables the correlation test is done for. +\cr Alternatively, can be names of variables in \code{data}.} \item{method}{A character string indicating which correlation coefficient is -to be used for the test. One of \code{"pearson"} (default), -\code{"kendall"}, \code{"spearman"} (but see also the \code{robust} argument), \code{"biserial"}, -\code{"polychoric"}, \code{"tetrachoric"}, \code{"biweight"}, -\code{"distance"}, \code{"percentage"} (for percentage bend correlation), -\code{"blomqvist"} (for Blomqvist's coefficient), \code{"hoeffding"} (for -Hoeffding's D), \code{"gamma"}, \code{"gaussian"} (for Gaussian Rank -correlation) or \code{"shepherd"} (for Shepherd's Pi correlation). Setting -\code{"auto"} will attempt at selecting the most relevant method -(polychoric when ordinal factors involved, tetrachoric when dichotomous +to be used for the test. \cr Possible Values: \code{"pearson"} (default), +\code{"kendall"}, \code{"spearman"}, \code{"biserial"}, \code{"point-biserial"}, \code{"rankbiserial"}, +\code{"polychoric"}, \code{"tetrachoric"}, \code{"biweight"}, \code{"distance"}, \code{"percentage"} +(for percentage bend correlation), \code{"blomqvist"} (for Blomqvist's +coefficient), \code{"hoeffding"} (for Hoeffding's D), \code{"gamma"}, \code{"gaussian"} +(for Gaussian Rank correlation), \code{"shepherd"} (for Shepherd's Pi correlation). +\cr (polychoric when ordinal factors involved, tetrachoric when dichotomous factors involved, point-biserial if one dichotomous and one continuous and pearson otherwise). See below the \strong{details} section for a description of these indices.} @@ -43,10 +39,27 @@ framework.} \item{verbose}{Toggle warnings.} -\item{...}{Additional arguments depending on \code{method}. +\item{...}{Optional arguments: +\itemize{ +\item \code{data} A data frame (when \code{x} and/or \code{y} are not vectors). +\item Arguments dependent on \code{method} being: +\itemize{ +\item \code{"kendall"}: \itemize{ -\item \code{"percentage"}: \code{beta} (default is \code{0.2}). -\item \code{"bayes"}: \code{bayesian_prior} = "medium", \code{bayesian_ci_method} (default: "hdi"), \code{bayesian_test} (default: \code{c("pd", "rope", "bf")}) +\item \code{tau_type} = \code{"b"} +\item \code{direction} = \code{"row"} (used when \code{tau_type} = \code{"a"}) +} +\item \code{"percentage"}: +\itemize{ +\item \code{beta} = \code{0.2} +} +\item \code{"bayes"}: +\itemize{ +\item \code{bayesian_prior} = "medium" +\item \code{bayesian_ci_method} = "hdi" +\item \code{bayesian_test} = \code{c("pd", "rope", "bf")} +} +} }} } \description{ @@ -56,26 +69,32 @@ You can easily visualize the result using \code{\link[=visualisation_recipe.easy \details{ \subsection{Correlation Types}{ \itemize{ -\item \strong{Pearson's correlation}: This is the most common correlation -method. It corresponds to the covariance of the two variables normalized -(i.e., divided) by the product of their standard deviations. +\item \strong{Pearson's correlation}: This is the most common correlation method. It +corresponds to the covariance of the two variables normalized (i.e., divided) +by the product of their standard deviations. \item \strong{Spearman's rank correlation}: A non-parametric measure of rank correlation (statistical dependence between the rankings of two variables). -The Spearman correlation between two variables is equal to the Pearson +\cr The Spearman correlation between two variables is equal to the Pearson correlation between the rank values of those two variables; while Pearson's correlation assesses linear relationships, Spearman's correlation assesses -monotonic relationships (whether linear or not). Confidence Intervals (CI) -for Spearman's correlations are computed using the Fieller et al. (1957) +monotonic relationships (whether linear or not). \cr Confidence Intervals +(CI) for Spearman's correlations are computed using the Fieller et al. (1957) correction (see Bishara and Hittner, 2017). -\item \strong{Kendall's rank correlation}: In the normal case, the Kendall correlation -is preferred than the Spearman correlation because of a smaller gross error -sensitivity (GES) and a smaller asymptotic variance (AV), making it more -robust and more efficient. However, the interpretation of Kendall's tau is -less direct than that of Spearman's rho, in the sense that it quantifies the -difference between the percentage of concordant and discordant pairs among -all possible pairwise events. Confidence Intervals (CI) for Kendall's -correlations are computed using the Fieller et al. (1957) correction (see -Bishara and Hittner, 2017). +\item \strong{Kendall's rank correlation}: Is used to quantify the association between +two variables based on the ranks of their data points. \cr It comes in three +variants which provide different approaches for handling tied ranks, allowing +for robust assessments of association across different datasets and +scenarios. \cr Confidence Intervals (CI) for Kendall's correlations are +computed using the Fieller et al. (1957) correction (see Bishara and Hittner, +2017). \cr The three variants are: tau-a, tau-b (default), and tau-c. +\itemize{ +\item \strong{Tau-a} doesn't account for ties and calculates the difference between +the proportions of concordant and discordant pairs. +\item \strong{Tau-b} adjusts for ties by incorporating a correction factor, ensuring +a more accurate measure of association. +\item \strong{Tau-c}, similar to tau-b, considers ties, but it only adjusts for +pairs where both variables have tied ranks. +} \item \strong{Biweight midcorrelation}: A measure of similarity that is median-based, instead of the traditional mean-based, thus being less sensitive to outliers. It can be used as a robust alternative to other @@ -117,9 +136,6 @@ continuous scale, but can be classified dichotomously as high/low. \item \strong{Gamma correlation}: The Goodman-Kruskal gamma statistic is similar to Kendall's Tau coefficient. It is relatively robust to outliers and deals well with data that have many ties. -\item \strong{Winsorized correlation}: Correlation of variables that have -been formerly Winsorized, i.e., transformed by limiting extreme values to -reduce the effect of possibly spurious outliers. \item \strong{Gaussian rank Correlation}: The Gaussian rank correlation estimator is a simple and well-performing alternative for robust rank correlations (Boudt et al., 2012). It is based on the Gaussian quantiles of diff --git a/man/cor_to_p.Rd b/man/cor_to_p.Rd index ee99ec41..7d34b370 100644 --- a/man/cor_to_p.Rd +++ b/man/cor_to_p.Rd @@ -18,15 +18,13 @@ cor_to_p(cor, n, method = "pearson") set to \code{0.95} (\verb{95\%} CI).} \item{method}{A character string indicating which correlation coefficient is -to be used for the test. One of \code{"pearson"} (default), -\code{"kendall"}, \code{"spearman"} (but see also the \code{robust} argument), \code{"biserial"}, -\code{"polychoric"}, \code{"tetrachoric"}, \code{"biweight"}, -\code{"distance"}, \code{"percentage"} (for percentage bend correlation), -\code{"blomqvist"} (for Blomqvist's coefficient), \code{"hoeffding"} (for -Hoeffding's D), \code{"gamma"}, \code{"gaussian"} (for Gaussian Rank -correlation) or \code{"shepherd"} (for Shepherd's Pi correlation). Setting -\code{"auto"} will attempt at selecting the most relevant method -(polychoric when ordinal factors involved, tetrachoric when dichotomous +to be used for the test. \cr Possible Values: \code{"pearson"} (default), +\code{"kendall"}, \code{"spearman"}, \code{"biserial"}, \code{"point-biserial"}, \code{"rankbiserial"}, +\code{"polychoric"}, \code{"tetrachoric"}, \code{"biweight"}, \code{"distance"}, \code{"percentage"} +(for percentage bend correlation), \code{"blomqvist"} (for Blomqvist's +coefficient), \code{"hoeffding"} (for Hoeffding's D), \code{"gamma"}, \code{"gaussian"} +(for Gaussian Rank correlation), \code{"shepherd"} (for Shepherd's Pi correlation). +\cr (polychoric when ordinal factors involved, tetrachoric when dichotomous factors involved, point-biserial if one dichotomous and one continuous and pearson otherwise). See below the \strong{details} section for a description of these indices.} @@ -37,10 +35,27 @@ these indices.} better, though the Bishara and Hittner (2017) paper favours the Fieller correction. Both are generally very similar.} -\item{...}{Additional arguments depending on \code{method}. +\item{...}{Optional arguments: \itemize{ -\item \code{"percentage"}: \code{beta} (default is \code{0.2}). -\item \code{"bayes"}: \code{bayesian_prior} = "medium", \code{bayesian_ci_method} (default: "hdi"), \code{bayesian_test} (default: \code{c("pd", "rope", "bf")}) +\item \code{data} A data frame (when \code{x} and/or \code{y} are not vectors). +\item Arguments dependent on \code{method} being: +\itemize{ +\item \code{"kendall"}: +\itemize{ +\item \code{tau_type} = \code{"b"} +\item \code{direction} = \code{"row"} (used when \code{tau_type} = \code{"a"}) +} +\item \code{"percentage"}: +\itemize{ +\item \code{beta} = \code{0.2} +} +\item \code{"bayes"}: +\itemize{ +\item \code{bayesian_prior} = "medium" +\item \code{bayesian_ci_method} = "hdi" +\item \code{bayesian_test} = \code{c("pd", "rope", "bf")} +} +} }} } \value{ diff --git a/man/correlation.Rd b/man/correlation.Rd index 21af59c6..af558934 100644 --- a/man/correlation.Rd +++ b/man/correlation.Rd @@ -52,15 +52,13 @@ Note that the number of names should be equal to the number of columns selected. Ignored if \code{data2} is specified.} \item{method}{A character string indicating which correlation coefficient is -to be used for the test. One of \code{"pearson"} (default), -\code{"kendall"}, \code{"spearman"} (but see also the \code{robust} argument), \code{"biserial"}, -\code{"polychoric"}, \code{"tetrachoric"}, \code{"biweight"}, -\code{"distance"}, \code{"percentage"} (for percentage bend correlation), -\code{"blomqvist"} (for Blomqvist's coefficient), \code{"hoeffding"} (for -Hoeffding's D), \code{"gamma"}, \code{"gaussian"} (for Gaussian Rank -correlation) or \code{"shepherd"} (for Shepherd's Pi correlation). Setting -\code{"auto"} will attempt at selecting the most relevant method -(polychoric when ordinal factors involved, tetrachoric when dichotomous +to be used for the test. \cr Possible Values: \code{"pearson"} (default), +\code{"kendall"}, \code{"spearman"}, \code{"biserial"}, \code{"point-biserial"}, \code{"rankbiserial"}, +\code{"polychoric"}, \code{"tetrachoric"}, \code{"biweight"}, \code{"distance"}, \code{"percentage"} +(for percentage bend correlation), \code{"blomqvist"} (for Blomqvist's +coefficient), \code{"hoeffding"} (for Hoeffding's D), \code{"gamma"}, \code{"gaussian"} +(for Gaussian Rank correlation), \code{"shepherd"} (for Shepherd's Pi correlation). +\cr (polychoric when ordinal factors involved, tetrachoric when dichotomous factors involved, point-biserial if one dichotomous and one continuous and pearson otherwise). See below the \strong{details} section for a description of these indices.} @@ -87,10 +85,27 @@ correlation is repeated two times).} names. This option can also be set globally by running \code{options(easystats.standardize_names = TRUE)}.} -\item{...}{Additional arguments depending on \code{method}. +\item{...}{Optional arguments: \itemize{ -\item \code{"percentage"}: \code{beta} (default is \code{0.2}). -\item \code{"bayes"}: \code{bayesian_prior} = "medium", \code{bayesian_ci_method} (default: "hdi"), \code{bayesian_test} (default: \code{c("pd", "rope", "bf")}) +\item \code{data} A data frame (when \code{x} and/or \code{y} are not vectors). +\item Arguments dependent on \code{method} being: +\itemize{ +\item \code{"kendall"}: +\itemize{ +\item \code{tau_type} = \code{"b"} +\item \code{direction} = \code{"row"} (used when \code{tau_type} = \code{"a"}) +} +\item \code{"percentage"}: +\itemize{ +\item \code{beta} = \code{0.2} +} +\item \code{"bayes"}: +\itemize{ +\item \code{bayesian_prior} = "medium" +\item \code{bayesian_ci_method} = "hdi" +\item \code{bayesian_test} = \code{c("pd", "rope", "bf")} +} +} }} } \value{ From a1899541b8e4457a2559960ae06416496060bcf6 Mon Sep 17 00:00:00 2001 From: TomGeva <141431661+TomGeva@users.noreply.github.com> Date: Fri, 17 May 2024 12:23:53 +0300 Subject: [PATCH 03/33] tests update --- R/cor_test.R | 123 +++++++++++++++++++++--------- tests/testthat/test-cor_test.R | 135 ++++++++++++++++++++++----------- 2 files changed, 179 insertions(+), 79 deletions(-) diff --git a/R/cor_test.R b/R/cor_test.R index 9f4bf3a7..219695ee 100644 --- a/R/cor_test.R +++ b/R/cor_test.R @@ -222,6 +222,16 @@ cor_test <- function(x, y, xIsVec <- !length(x) == 1L yIsVec <- !length(y) == 1L + if (!xIsVec || !yIsVec) { + if (!"data" %in% names(list(...))) { + insight::format_error("At least 1 of the variables is from a data frame but no data frame has been provided.") + } + data <- list(...)$data + if (!is.data.frame(data)) { + insight::format_error("The data provided is not a data frame.") + } + } + # Make sure factor is no factor if (!methodUse %in% c("tetrachoric", "polychoric")) { if (xIsVec || yIsVec) { @@ -243,18 +253,23 @@ cor_test <- function(x, y, } } + # need to fix for biserial to work + # need to check if atleast one of the variables are dichotomous + # that is for all variations of x/y is vector or not +# +# if(!.var_type(var_x)$is_binary && !.var_type(var_y)$is_binary) insight::format_error("Biserial correlation can only be applied when atleast one of x and y is dichotomous") +# else if(!.var_type(var_x)$is_binary) +# { +# temp <- var_x +# var_x <- var_y +# var_y <- temp +# } + # check validity of variables as vectors and/or as names if (!xIsVec || !yIsVec) { - if (!"data" %in% names(list(...))) { - insight::format_error("At least 1 of the variables is from a data frame but no data frame has been provided.") - } - data <- list(...)$data - if (!is.data.frame(data)) { - insight::format_error("The data provided is not a data frame.") - } if (xIsVec) { completeY <- stats::complete.cases(data[[y]]) - if (length(x) == nrows(data)) { + if (length(x) == nrow(data)) { completeX <- stats::complete.cases(x) var_x <- x[completeX * completeY == 1L] var_y <- data[[y]][completeX * completeY == 1L] @@ -271,7 +286,7 @@ cor_test <- function(x, y, } else if (yIsVec) { completeX <- stats::complete.cases(data[[x]]) - if (length(y) == nrows(data)) { + if (length(y) == nrow(data)) { completeY <- stats::complete.cases(y) var_x <- data[[x]][completeX * completeY == 1L] var_y <- y[completeX * completeY == 1L] @@ -323,30 +338,32 @@ cor_test <- function(x, y, # check value of tau_type and direction when relevant if(method == "kendall") { if ("tau_type" %in% names(list(...))) { - tau_type <- match.arg(tolower(tau_type), c("a", "b", "c")) - if("direction" %in% names(list(...))) direction <- match.arg(tolower(direction), c("row", "column")) + tau_type <- match.arg(tolower(list(...)$tau_type), c("a", "b", "c")) + if("direction" %in% names(list(...))) direction <- match.arg(tolower(list(...)$direction), c("row", "column")) else direction <- "row" } else tau_type <- "b" } if(methodUse == "percentage") { if("beta" %in% names(list(...))) { - if (length(beta) != 1L || beta <= 0 || beta >= 0.5) + if (length(list(...)$beta) != 1L || list(...)$beta <= 0 || list(...)$beta >= 0.5) stop("The bend criterion (beta) is not between 0 and 0.5") } else beta <- 0.2 } if(bayesian) { if("bayesian_prior" %in% names(list(...))) { - bayesian_prior <- match.arg(tolower(bayesian_prior), c("medium", "medium.narrow", "wide", "ultra-wide")) + bayesian_prior <- match.arg(tolower(list(...)$bayesian_prior), c("medium", "medium.narrow", "wide", "ultra-wide")) } else bayesian_prior <- "medium" - if(!"bayesian_ci_method" %in% names(list(...))) { - bayesian_ci_method <- "hdi" + if("bayesian_ci_method" %in% names(list(...))) { + bayesian_ci_method <- list(...)$bayesian_ci_method } - if(!"bayesian_test" %in% names(list(...))) { - bayesian_test <- c("pd", "rope", "bf") + else bayesian_ci_method <- "hdi" + if("bayesian_test" %in% names(list(...))) { + bayesian_test <- list(...)$bayesian_test } + else bayesian_test <- c("pd", "rope", "bf") } # +=======================+ @@ -356,7 +373,7 @@ cor_test <- function(x, y, # when bayesian if(bayesian) { if (methodUse %in% c("kendall", "biserial", "point-biserial", "rank-biserial", "biweight", "distance", "percentage", "gamma", "somers", "polychoric", "tetrachoric")) - insight::format_error(paste0("The bayesian form of ", tohigher(methodUse[1]), methodUse[-1], " correlation method is not supported yet. Get in touch if you want to contribute.")) + insight::format_error(paste0("The bayesian form of ", toupper(methodUse[1]), methodUse[-1], " correlation method is not supported yet. Get in touch if you want to contribute.")) if (methodUse %in% c("blomqvist", "hoeffding")) insight::format_error(paste0("Bayesian ", toupper(methodUse[1]), methodUse[-1], ifelse(methodUse == "hoeffding", "'s", ""), "correlations are not supported yet. Check-out the BBcor package (https://github.com/donaldRwilliams/BBcor).")) out <- .cor_test_bayes(var_x, var_y, ci, method, ...) @@ -381,12 +398,14 @@ cor_test <- function(x, y, "somers" = .cor_test_somers(var_x, var_y, ci, alternative, ...), "polychoric" = .cor_test_polychoric(var_x, var_y, ci, alternative, ...), "tetrachoric" = .cor_test_tetrachoric(var_x, var_y, ci, alternative, ...)) - out$Parameter1 <- x - out$Parameter2 <- y + out$Parameter1 <- ifelse(xIsVec, "x-Vector", x) + out$Parameter2 <- ifelse(yIsVec, "y-Vector", y) } - if (!"Method" %in% names(out)) out$Method <- paste0(tohigher(methodUse[1]), methodUse[-1], ifelse(bayesian, " (Bayesian)", "")) + + if (!"Method" %in% names(out)) out$Method <- paste0(toupper(methodUse[1]), methodUse[-1], ifelse(bayesian, " (Bayesian)", "")) + else out$Method <- paste0(out$Method, ifelse(bayesian, " (Bayesian)", "")) out } @@ -440,11 +459,11 @@ cor_test <- function(x, y, ConDisParams <- DescTools::ConDisPairs(tab)[3:4] # calculating kendall's tau tau <- switch(tau_type, - "a" = DescTools::KendallTauA(var_x, var_y, direction = direction, conf.level = ci, ...), - "b" = DescTools::KendallTauB(var_x, var_y, conf.level = ci, ...), - "c" = DescTools::StuartTauC(var_x, var_y, conf.level = ci, ...)) + "a" = DescTools::KendallTauA(var_x, var_y, direction = direction, conf.level = ci), + "b" = DescTools::KendallTauB(var_x, var_y, conf.level = ci), + "c" = DescTools::StuartTauC(var_x, var_y, conf.level = ci)) CI <- tau[2:3] - tau <- tau[1] + tau <- tau[[1]] # calculating the z-value according to the tau_type required if(tau_type != "a") { xi <- rowSums(tab) @@ -468,13 +487,7 @@ cor_test <- function(x, y, out <- data.frame("tau" = tau, "z" = z, "p" = p, - "df_error" = NULL) - # renaming coefficient value appropriately - names(out)[1] <- switch(tau_type, - "a" = "TauA", - "b" = "TauB", - "c" = "TauC") - # finding the standard deviation using calculus + "df_error" = NA) sd <- (CI[2] - tau) / qnorm((1 + ci) / 2) # calculating the confidence interval if (!is.null(ci)) { @@ -496,8 +509,8 @@ cor_test <- function(x, y, alternative = "two.sided", xType = "base", ...) { - if(!.var_type(var_x)$is_binary && !.var_type(var_y)$is_binary) insight::format_error("Biserial correlation can only be applied atleast one of x and y is dichotomous") - else if(!.var_type(var_x)$is_binary) + if(!.vartype(var_x)$is_binary && !.vartype(var_y)$is_binary) insight::format_error("Biserial correlation can only be applied atleast one of x and y is dichotomous") + else if(!.vartype(var_x)$is_binary) { temp <- var_x var_x <- var_y @@ -879,7 +892,7 @@ cor_test <- function(x, y, var_x <- stats::qnorm(rank(var_x) / (length(var_x) + 1)) var_y <- stats::qnorm(rank(var_y) / (length(var_y) + 1)) method_label <- "Bayesian Gaussian" - } else if (method == "gaussian") { + } else if (method %in% c("shepherd", "sheperd", "shepherdspi", "pi")) { d <- .robust_bootstrap_mahalanobis(cbind(var_x, var_y)) outliers <- d >= 6 @@ -994,6 +1007,46 @@ cor_test <- function(x, y, apply(Ms, 1, stats::median) } +## biserial============ + +#' @keywords internal +.vartype <- function(x) { + out <- list( + is_factor = FALSE, + is_numeric = FALSE, + is_character = FALSE, + is_binary = FALSE, + is_continuous = FALSE, + is_count = FALSE + ) + + if (is.factor(x)) { + out$is_factor <- TRUE + } + + if (is.character(x)) { + out$is_character <- TRUE + } + + if (is.numeric(x)) { + out$is_numeric <- TRUE + } + + if (length(unique(x)) == 2) { + out$is_binary <- TRUE + } + + if (out$is_numeric && !out$is_binary) { + out$is_continuous <- TRUE + } + + if (all(x %% 1 == 0)) { + out$is_count <- TRUE + } + + out +} + ## bayes============ #' @keywords internal diff --git a/tests/testthat/test-cor_test.R b/tests/testthat/test-cor_test.R index 228dee88..fadd399d 100644 --- a/tests/testthat/test-cor_test.R +++ b/tests/testthat/test-cor_test.R @@ -1,96 +1,143 @@ test_that("cor_test names (x,y)", { - expect_error(cor_test(iris, Petal.Length, Petal.Width)) + expect_error(cor_test(Petal.Length, Petal.Width, data = iris)) - out <- cor_test(iris, "Petal.Length", "Petal.Width") + out <- cor_test("Petal.Length", "Petal.Width", data = iris) out2 <- parameters::model_parameters(stats::cor.test(iris$Petal.Length, iris$Petal.Width)) + expect_equal(out$r, out2$r, tolerance = 0.01) expect_equal(out$CI_low, out2$CI_low, tolerance = 0.01) expect_equal(out$CI_high, out2$CI_high, tolerance = 0.01) - # TODO }) -test_that("cor_test kendall", { - out <- cor_test(iris, "Petal.Length", "Petal.Width", method = "kendall") +test_that("cor_test data.frame and vector", { + x <- iris$Petal.Length + y <- iris$Petal.Width + + expect_error(cor_test("Petal.Length", "Petal.Width")) + expect_error(cor_test(x, "Petal.Width")) + + out <- cor_test("Petal.Length", "Petal.Width", data = iris) + out2 <- cor_test(x, "Petal.Width", data = iris) + out3 <- cor_test("Petal.Length", y, data = iris) + out4 <- cor_test(x, y) + + expect_equal(out$r, out2$r, tolerance = 0.001) + expect_equal(out$CI_low, out2$CI_low, tolerance = 0.001) + expect_equal(out$CI_high, out2$CI_high, tolerance = 0.001) + expect_equal(out$r, out3$r, tolerance = 0.001) + expect_equal(out$CI_low, out3$CI_low, tolerance = 0.001) + expect_equal(out$CI_high, out3$CI_high, tolerance = 0.001) + expect_equal(out$r, out4$r, tolerance = 0.001) + expect_equal(out$CI_low, out4$CI_low, tolerance = 0.001) + expect_equal(out$CI_high, out4$CI_high, tolerance = 0.001) +}) + +test_that("cor_test kendall tau-a", { + out <- cor_test("Petal.Length", "Petal.Width", data = iris, method = "kendall", tau_type = "a") + completeCase <- stats::complete.cases(iris[["Petal.Length"]], iris[["Petal.Width"]]) + var_x <- iris[["Petal.Length"]][completeCase] + var_y <- iris[["Petal.Width"]][completeCase] + tab <- table(var_x, var_y) + n <- sum(tab) + ConDisParams <- DescTools::ConDisPairs(tab)[3:4] + z <- (ConDisParams$C - ConDisParams$D) / sqrt(n * (n - 1) * (2 * n + 5) / 18) + + expect_equal(out$tau, (ConDisParams$C - ConDisParams$D)/(n * (n - 1)/2), tolerance = 0.001) + expect_equal(out$p, 2 * stats::pnorm(abs(z), lower.tail = FALSE), tolerance = 0.001) +}) + +test_that("cor_test kendall tau-b", { + out <- cor_test("Petal.Length", "Petal.Width", data = iris, method = "kendall") out2 <- stats::cor.test(iris$Petal.Length, iris$Petal.Width, method = "kendall") expect_equal(out$tau, out2$estimate[[1]], tolerance = 0.001) expect_equal(out$p, out2$p.value[[1]], tolerance = 0.001) }) +test_that("cor_test kendall tau-c", { + out <- cor_test("Petal.Length", "Petal.Width", data = iris, method = "kendall", tau_type = "c") + out2 <- stats::cor.test(iris$Petal.Length, iris$Petal.Width, method = "kendall") + + completeCase <- stats::complete.cases(iris[["Petal.Length"]], iris[["Petal.Width"]]) + var_x <- iris[["Petal.Length"]][completeCase] + var_y <- iris[["Petal.Width"]][completeCase] + tab <- table(var_x, var_y) + ConDisParams <- DescTools::ConDisPairs(tab)[3:4] + + expect_equal(out$tau, (ConDisParams$C - ConDisParams$D) * 2 * min(dim(tab))/(sum(tab)^2 * (min(dim(tab)) - 1)), tolerance = 0.001) + expect_equal(out$p, out2$p.value[[1]], tolerance = 0.001) +}) test_that("cor_test bayesian", { skip_if_not_or_load_if_installed("BayesFactor") - out <- cor_test(iris, "Petal.Length", "Petal.Width", bayesian = TRUE) + out <- cor_test("Petal.Length", "Petal.Width", data = iris, bayesian = TRUE) expect_equal(out$r, 0.9591191, tolerance = 0.01) - set.seed(123) - df_1 <- cor_test(iris, "Petal.Length", "Petal.Width", bayesian = TRUE) - - set.seed(123) - df_2 <- cor_test(iris, "Petal.Length", "Petal.Width", method = "auto", bayesian = TRUE) - expect_equal(df_1, df_2, tolerance = 0.001) - - out2 <- cor_test(iris, "Petal.Length", "Petal.Width", method = "spearman", bayesian = TRUE) - expect_equal(out2$rho, 0.9323004, tolerance = 0.01) + out2 <- cor_test("Petal.Length", "Petal.Width", data = iris, method = "spearman", bayesian = TRUE) + expect_equal(out2$r, 0.9323004, tolerance = 0.01) df <- iris df$Petal.Length2 <- df$Petal.Length - out3 <- cor_test(df, "Petal.Length", "Petal.Length2", bayesian = TRUE) - expect_equal(out3$rho, 1.000, tolerance = 0.01) + out3 <- cor_test("Petal.Length", "Petal.Length2", data = df, bayesian = TRUE) + expect_equal(out3$r, 1.000, tolerance = 0.01) if (getRversion() >= "3.6") { set.seed(123) - out5 <- cor_test(mtcars, "wt", "mpg", method = "shepherd", bayesian = TRUE) - expect_equal(out5$rho, -0.7795719, tolerance = 0.01) + out4 <- cor_test("wt", "mpg", data = mtcars, method = "shepherd", bayesian = TRUE) + expect_equal(out4$r, -0.7795719, tolerance = 0.01) set.seed(123) - out6 <- cor_test(mtcars, "wt", "mpg", method = "gaussian", bayesian = TRUE) - expect_equal(out6$rho, -0.8294838, tolerance = 0.01) + out5 <- cor_test("wt", "mpg", data = mtcars, method = "gaussian", bayesian = TRUE) + expect_equal(out5$r, -0.8294838, tolerance = 0.01) } # unsupported - expect_error(cor_test(mtcars, "wt", "mpg", method = "biserial", bayesian = TRUE)) - expect_error(cor_test(mtcars, "wt", "mpg", method = "polychoric", bayesian = TRUE)) - expect_error(cor_test(mtcars, "wt", "mpg", method = "tetrachoric", bayesian = TRUE)) - expect_error(cor_test(mtcars, "wt", "mpg", method = "biweight", bayesian = TRUE)) - expect_error(cor_test(mtcars, "wt", "mpg", method = "distance", bayesian = TRUE)) - expect_error(cor_test(mtcars, "wt", "mpg", method = "percentage", bayesian = TRUE)) - expect_error(cor_test(mtcars, "wt", "mpg", method = "blomqvist", bayesian = TRUE)) - expect_error(cor_test(mtcars, "wt", "mpg", method = "hoeffding", bayesian = TRUE)) - expect_error(cor_test(mtcars, "wt", "mpg", method = "gamma", bayesian = TRUE)) + expect_error(cor_test("wt", "mpg", data = mtcars, method = "kendall", bayesian = TRUE)) + expect_error(cor_test("wt", "mpg", data = mtcars, method = "biserial", bayesian = TRUE)) + expect_error(cor_test("wt", "mpg", data = mtcars, method = "point-biserial", bayesian = TRUE)) + expect_error(cor_test("wt", "mpg", data = mtcars, method = "rank-biserial", bayesian = TRUE)) + expect_error(cor_test("wt", "mpg", data = mtcars, method = "polychoric", bayesian = TRUE)) + expect_error(cor_test("wt", "mpg", data = mtcars, method = "tetrachoric", bayesian = TRUE)) + expect_error(cor_test("wt", "mpg", data = mtcars, method = "biweight", bayesian = TRUE)) + expect_error(cor_test("wt", "mpg", data = mtcars, method = "distance", bayesian = TRUE)) + expect_error(cor_test("wt", "mpg", data = mtcars, method = "percentage", bayesian = TRUE)) + expect_error(cor_test("wt", "mpg", data = mtcars, method = "blomqvist", bayesian = TRUE)) + expect_error(cor_test("wt", "mpg", data = mtcars, method = "hoeffding", bayesian = TRUE)) + expect_error(cor_test("wt", "mpg", data = mtcars, method = "somers", bayesian = TRUE)) + expect_error(cor_test("wt", "mpg", data = mtcars, method = "gamma", bayesian = TRUE)) }) test_that("cor_test tetrachoric", { - skip_if_not_or_load_if_installed("psych") - skip_if_not_or_load_if_installed("polycor") + # skip_if_not_or_load_if_installed("psych") + # skip_if_not_or_load_if_installed("polycor") data <- iris data$Sepal.Width_binary <- ifelse(data$Sepal.Width > 3, 1, 0) data$Petal.Width_binary <- ifelse(data$Petal.Width > 1.2, 1, 0) # With Factors / Binary - out <- cor_test(data, "Sepal.Width_binary", "Petal.Width_binary", method = "tetrachoric") - expect_equal(out$rho, -0.526, tolerance = 0.01) + out <- cor_test("Sepal.Width_binary", "Petal.Width_binary", data = data, method = "tetrachoric") + expect_equal(out$r, -0.526, tolerance = 0.01) data$Petal.Width_ordinal <- as.factor(round(data$Petal.Width)) data$Sepal.Length_ordinal <- as.factor(round(data$Sepal.Length)) - out <- cor_test(data, "Petal.Width_ordinal", "Sepal.Length_ordinal", method = "polychoric") + out <- cor_test("Petal.Width_ordinal", "Sepal.Length_ordinal", data = data, method = "polychoric") # Curently CRAN checks show two possible results for this: - if (isTRUE(all.equal(out$rho, 0.7507764, tolerance = 0.1))) { - expect_equal(out$rho, 0.7507764, tolerance = 0.1) + if (isTRUE(all.equal(out$r, 0.7507764, tolerance = 0.1))) { + expect_equal(out$r, 0.7507764, tolerance = 0.1) } else { - expect_equal(out$rho, 0.528, tolerance = 0.01) + expect_equal(out$r, 0.528, tolerance = 0.01) } - out <- cor_test(data, "Sepal.Width", "Sepal.Length_ordinal", method = "polychoric") - expect_equal(out$rho, -0.144, tolerance = 0.01) + out <- cor_test("Sepal.Width", "Sepal.Length_ordinal", data = data, method = "polychoric") + expect_equal(out$r, -0.144, tolerance = 0.01) # Biserial - out <- cor_test(data, "Sepal.Width", "Petal.Width_binary", method = "pointbiserial") - expect_equal(out$rho, -0.3212561, tolerance = 0.01) + out <- cor_test("Sepal.Width", "Petal.Width_binary", data = data, method = "pointbiserial") + expect_equal(out$r, -0.3212561, tolerance = 0.01) - out <- cor_test(data, "Sepal.Width", "Petal.Width_binary", method = "biserial") - expect_equal(out$rho, -0.403, tolerance = 0.01) + out <- cor_test("Sepal.Width", "Petal.Width_binary", data = data, method = "biserial") + expect_equal(out$r, -0.403, tolerance = 0.01) out_psych <- psych::biserial(data[["Sepal.Width"]], data[["Petal.Width_binary"]])[1] }) From 95e5e7c791d38de84c4bf8648d4aa7cd0a67edb9 Mon Sep 17 00:00:00 2001 From: TomGeva <141431661+TomGeva@users.noreply.github.com> Date: Fri, 17 May 2024 17:53:44 +0300 Subject: [PATCH 04/33] finished tests for cor_test --- R/cor_test.R | 225 ++++++++++++---------- tests/testthat/test-cor_test.R | 54 +++--- tests/testthat/test-cor_test_na_present.R | 133 +++++++++---- tests/testthat/testthat-problems.rds | Bin 0 -> 81098 bytes 4 files changed, 248 insertions(+), 164 deletions(-) create mode 100644 tests/testthat/testthat-problems.rds diff --git a/R/cor_test.R b/R/cor_test.R index 219695ee..e43dcc0b 100644 --- a/R/cor_test.R +++ b/R/cor_test.R @@ -27,6 +27,8 @@ #' - `"kendall"`: #' - `tau_type` = `"b"` #' - `direction` = `"row"` (used when `tau_type` = `"a"`) +#' - `"distance"`: +#' - `corrected` = `TRUE` #' - `"percentage"`: #' - `beta` = `0.2` #' - `"bayes"`: @@ -253,18 +255,6 @@ cor_test <- function(x, y, } } - # need to fix for biserial to work - # need to check if atleast one of the variables are dichotomous - # that is for all variations of x/y is vector or not -# -# if(!.var_type(var_x)$is_binary && !.var_type(var_y)$is_binary) insight::format_error("Biserial correlation can only be applied when atleast one of x and y is dichotomous") -# else if(!.var_type(var_x)$is_binary) -# { -# temp <- var_x -# var_x <- var_y -# var_y <- temp -# } - # check validity of variables as vectors and/or as names if (!xIsVec || !yIsVec) { if (xIsVec) { @@ -344,6 +334,12 @@ cor_test <- function(x, y, } else tau_type <- "b" } + if (methodUse == "distance") { + if("corrected" %in% names(list(...))) { + corrected <- list(...)$corrected + } + else corrected <- TRUE + } if(methodUse == "percentage") { if("beta" %in% names(list(...))) { if (length(list(...)$beta) != 1L || list(...)$beta <= 0 || list(...)$beta >= 0.5) @@ -388,7 +384,7 @@ cor_test <- function(x, y, "point-biserial" = .cor_test_biserial(var_x, var_y, ci, alternative, xType = "point", ...), "rank-biserial" = .cor_test_biserial(var_x, var_y, ci, alternative, xType = "rank", ...), "biweight" = .cor_test_biweight(var_x, var_y, ci, alternative, ...), - "distance" = .cor_test_distance(var_x, var_y, ci, alternative, ...), + "distance" = .cor_test_distance(var_x, var_y, ci, alternative, corrected, ...), "percentage" = .cor_test_percentage(var_x, var_y, ci, alternative, beta, ...), "blomqvist" = .cor_test_freq(sign(var_x - median(var_x)), sign(var_y - median(var_y)), ci, alternative, ...), "hoeffding" = .cor_test_hoeffding(var_x, var_y, ci, ...), @@ -398,15 +394,21 @@ cor_test <- function(x, y, "somers" = .cor_test_somers(var_x, var_y, ci, alternative, ...), "polychoric" = .cor_test_polychoric(var_x, var_y, ci, alternative, ...), "tetrachoric" = .cor_test_tetrachoric(var_x, var_y, ci, alternative, ...)) - out$Parameter1 <- ifelse(xIsVec, "x-Vector", x) - out$Parameter2 <- ifelse(yIsVec, "y-Vector", y) + out$Parameter1 <- ifelse(xIsVec, deparse(substitute(x)), x) + out$Parameter2 <- ifelse(yIsVec, deparse(substitute(y)), y) } - - if (!"Method" %in% names(out)) out$Method <- paste0(toupper(methodUse[1]), methodUse[-1], ifelse(bayesian, " (Bayesian)", "")) else out$Method <- paste0(out$Method, ifelse(bayesian, " (Bayesian)", "")) + # Reorder columns + order <- c("Parameter1", "Parameter2", "r", "rho", "tau", "Dxy", "CI", "CI_low", "CI_high", "Method") + out <- out[c(order[order %in% names(out)], setdiff(names(out), order[order %in% names(out)]))] + + attr(out, "coefficient_name") <- c("r", "rho", "tau", "Dxy")[c("r", "rho", "tau", "Dxy") %in% names(out)][1] + attr(out, "ci") <- ci + if ("data" %in% list(...)) attr(out, "data") <- data + class(out) <- unique(c("easycor_test", "easycorrelation", "prameters_model", class(out))) out } @@ -437,6 +439,7 @@ cor_test <- function(x, y, "two.sided" = .ci_value(r, c(-1, 1), (1 + ci) / 2, df), "less" = c(-Inf, .ci_value(r, 1, ci, df)), "greater" = c(.ci_value(r, -1, ci, df), Inf)) + out$CI <- ci out$CI_low <- CI[1] out$CI_high <- CI[2] } @@ -452,7 +455,6 @@ cor_test <- function(x, y, tau_type = "b", direction = "row", ...) { - tab <- table(var_x, var_y) n <- length(var_x) # calculating the concordant and discordant pairs amounts within the data and across it @@ -495,6 +497,7 @@ cor_test <- function(x, y, "two.sided" = CI, "less" = c(-Inf, tau + qnorm(ci) * sd), "greater" = c(tau - qnorm(ci) * sd, Inf)) + out$CI <- ci out$CI_low <- CI[1] out$CI_high <- CI[2] } @@ -509,47 +512,65 @@ cor_test <- function(x, y, alternative = "two.sided", xType = "base", ...) { - if(!.vartype(var_x)$is_binary && !.vartype(var_y)$is_binary) insight::format_error("Biserial correlation can only be applied atleast one of x and y is dichotomous") - else if(!.vartype(var_x)$is_binary) + xVartype <- .vartype(var_x) + yVartype <- .vartype(var_y) + + if (!xVartype$is_binary == !yVartype$is_binary) insight::format_error("Biserial correlation can noly be applied for one dichotomous variable and one continuous variable.") + else if (xVartype$is_binary) { temp <- var_x var_x <- var_y var_y <- temp + temp <- xVartype + xVartype <- yVartype + yVartype <- temp } - # calculating helping values - n <- length(var_x) - m0 <- mean(var_x[var_y == 0]) - m1 <- mean(var_x[var_y == 1]) - n0 <- sum(var_y == 0) - n1 <- sum(var_y == 1) - sdX <- sd(var_x) - - r <- switch(xType, - "base" = ((m1 - m0) / sdX) * sqrt(n1 * n0 / (n ^ 2 - n)), - "point" = (m1 - m0 - 1) / sqrt((n ^ 2 * sdX ^ 2) / (n1 * n0) - 2 * (m1 - m0) + 1), - "rank" = 2 * (m1 - m0) / (n1 + n0)) - # calculating the degrees of freedom, t-value and p-value - df <- n - 2 - t_p <- .t_p_value(r, df, alternative) - # creating output dataframe - out <- data.frame("r" = r, - "df_error" = df, - "t" = t_p[1], - "p" = t_p[2], - "Method" = switch(xType, - "base" = "Biserial", - "point" = "Point Biserial", - "rank" = "Rank Biserial")) - # calculating the confidence interval - if (!is.null(ci)) { - CI <- switch(alternative, - "two.sided" = .ci_value(r, c(-1, 1), (1 + ci) / 2, df), - "less" = c(-Inf, .ci_value(r, 1, ci, df)), - "greater" = c(.ci_value(r, -1, ci, df), Inf)) - out$CI_low <- CI[1] - out$CI_high <- CI[2] + if (yVartype$is_factor || yVartype$is_character) var_y <- as.numeric(var_y) + var_y <- as.vector((var_y - min(var_y, na.rm = TRUE)) / (diff(range(var_y, na.rm = TRUE)))) + + if (xType == "point") { + out <- .cor_test_freq(var_x, var_y, ci, alternative) + out$Method <- "Point Biserial" } + + else { + # calculating helping values + n <- length(var_x) + m0 <- mean(var_x[var_y == 0]) + m1 <- mean(var_x[var_y == 1]) + q <- mean(var_y) + + # calculating coefficient + r <- switch(xType, + "base" = ((m1 - m0) * (1 - q) * q / stats::dnorm(stats::qnorm(q))) / stats::sd(var_x), + "rank" = 2 * (m1 - m0) / n) + + # calculating the degrees of freedom, t-value and p-value + df <- n - 2 + t_p <- .t_p_value(r, df, alternative) + + # creating output dataframe + out <- data.frame("r" = r, + "df_error" = df, + "t" = t_p[1], + "p" = t_p[2], + "Method" = switch(xType, + "base" = "Biserial", + "rank" = "Rank Biserial")) + + # calculating the confidence interval + if (!is.null(ci)) { + CI <- switch(alternative, + "two.sided" = .ci_value(r, c(-1, 1), (1 + ci) / 2, df), + "less" = c(-Inf, .ci_value(r, 1, ci, df)), + "greater" = c(.ci_value(r, -1, ci, df), Inf)) + out$CI <- ci + out$CI_low <- CI[1] + out$CI_high <- CI[2] + } + } + # returning output out } @@ -588,6 +609,7 @@ cor_test <- function(x, y, "two.sided" = .ci_value(r, c(-1, 1), (1 + ci) / 2, df), "less" = c(-Inf, .ci_value(r, 1, ci, df)), "greater" = c(.ci_value(r, -1, ci, df), Inf)) + out$CI <- ci out$CI_low <- CI[1] out$CI_high <- CI[2] } @@ -599,6 +621,7 @@ cor_test <- function(x, y, #' @keywords internal .cor_test_distance <- function(var_x, var_y, ci = 0.95, + alternative = "two.sided", corrected = TRUE, ...) { if (!corrected) { @@ -645,14 +668,25 @@ cor_test <- function(x, y, r <- XY / sqrt(XX * YY) M <- n * (n - 3) / 2 - ci_vals <- cor_to_ci(r, n = n, ci = ci) + + df <- M - 1 + t_p <- .t_p_value(r, df, alternative) + + # calculating the confidence interval + if (!is.null(ci)) { + CI <- switch(alternative, + "two.sided" = .ci_value(r, c(-1, 1), (1 + ci) / 2, df), + "less" = c(-Inf, .ci_value(r, 1, ci, df)), + "greater" = c(.ci_value(r, -1, ci, df), Inf)) + } rez <- data.frame("r" = r, - "df_error" = M - 1, - "t" = sqrt(M - 1) * r / sqrt(1 - r^2), - "p" = 1 - stats::pt(t, df = M - 1), - "CI_low" = ci_vals$CI_low, - "CI_high" = ci_vals$CI_high, + "df_error" = df, + "t" = t_p[1], + "p" = t_p[2], + "CI" = ci, + "CI_low" = CI[1], + "CI_high" = CI[2], "Method" = "Distance (Bias Corrected)") } @@ -667,17 +701,15 @@ cor_test <- function(x, y, beta = 0.2, ...) { # finding helping values - ohmX <- .omhat(var_x, beta) - ohmY <- .omhat(var_y, beta) + ohmX <- .ohmhat(var_x, beta) + ohmY <- .ohmhat(var_y, beta) pbosX <- .pbos(var_x, beta) pbosY <- .pbos(var_y, beta) - # finding a and b values a <- (var_x - pbosX) / ohmX b <- (var_y - pbosY) / ohmY a <- ifelse(a < -1, -1, ifelse(a > 1, 1, a)) b <- ifelse(b < -1, -1, ifelse(b > 1, 1, b)) - # calculating the coefficient r <- sum(a * b) / sqrt(sum(a ^ 2) * sum(b ^ 2)) # calculating the degrees of freedom, t-value and p-value @@ -694,6 +726,7 @@ cor_test <- function(x, y, "two.sided" = .ci_value(r, c(-1, 1), (1 + ci) / 2, df), "less" = c(-Inf, .ci_value(r, 1, ci, df)), "greater" = c(.ci_value(r, -1, ci, df), Inf)) + out$CI <- ci out$CI_low <- CI[1] out$CI_high <- CI[2] } @@ -714,6 +747,7 @@ cor_test <- function(x, y, "df_error" = length(var_x) - 2, "t" = NA, "p" = rez$P[2, 1], + "CI" = NA, "CI_low" = NA, "CI_high" = NA) } @@ -724,7 +758,6 @@ cor_test <- function(x, y, ci = 0.95, alternative = "two.sided", ...) { - # using the method from the original function ConDisField <- outer(var_x, var_x, function(x1, x2) sign(x1 - x2)) * outer(var_y, var_y, function(y1, y2) sign(y1 - y2)) r <- sum(ConDisField) / sum(abs(ConDisField)) # calculating the degrees of freedom, t-value and p-value @@ -741,6 +774,7 @@ cor_test <- function(x, y, "two.sided" = .ci_value(r, c(-1, 1), (1 + ci) / 2, df), "less" = c(-Inf, .ci_value(r, 1, ci, df)), "greater" = c(.ci_value(r, -1, ci, df), Inf)) + out$CI <- ci out$CI_low <- CI[1] out$CI_high <- CI[2] } @@ -755,7 +789,7 @@ cor_test <- function(x, y, alternative = "two.sided", bayesian = FALSE, ...) { - # finding outliers using bootstraped mahalanobis (as done in original) + # finding outliers using bootstraped mahalanobis d <- .robust_bootstrap_mahalanobis(cbind(var_x, var_y)) outliers <- d >= 6 out <- .cor_test_freq(var_x[!outliers], var_y[!outliers], ci, alternative, "spearman") @@ -773,12 +807,24 @@ cor_test <- function(x, y, ...) { insight::check_if_installed("Hmisc", "for 'somers' correlations") + xVartype <- .vartype(var_x) + yVartype <- .vartype(var_y) + + if (!xVartype$is_binary == !yVartype$is_binary) insight::format_error("Somers' D can noly be applied for one dichotomous variable and one continuous variable.") + else if (xVartype$is_binary) + { + temp <- var_x + var_x <- var_y + var_y <- temp + } + rez <- Hmisc::somers2(var_x, var_y) - data.frame("r" = rez["Dxy"], + data.frame("Dxy" = rez["Dxy"], "df_error" = length(var_x) - 2, "t" = NA, "p" = NA, + "CI" = NA, "CI_low" = NA, "CI_high" = NA, "Method" = "Somers' D") @@ -827,6 +873,7 @@ cor_test <- function(x, y, "two.sided" = .ci_value(r, c(-1, 1), (1 + ci) / 2, df), "less" = c(-Inf, .ci_value(r, 1, ci, df)), "greater" = c(.ci_value(r, -1, ci, df), Inf)) + out$CI <- ci out$CI_low <- CI[1] out$CI_high <- CI[2] } @@ -864,6 +911,7 @@ cor_test <- function(x, y, "two.sided" = .ci_value(r, c(-1, 1), (1 + ci) / 2, df), "less" = c(-Inf, .ci_value(r, 1, ci, df)), "greater" = c(.ci_value(r, -1, ci, df), Inf)) + out$CI <- ci out$CI_low <- CI[1] out$CI_high <- CI[2] } @@ -881,7 +929,6 @@ cor_test <- function(x, y, ...) { insight::check_if_installed("BayesFactor") - method_label <- "Bayesian Pearson" method <- tolower(method) if (method %in% c("spearman", "spear", "s")) { @@ -920,12 +967,9 @@ cor_test <- function(x, y, # internal helping functions -------------------- - # confidence interval calculation #' @keywords internal -.ci_value <- function(r, side, ci, df) { - tanh(atanh(r) + side * stats::qnorm(ci) / sqrt(df - 1)) -} +.ci_value <- function(r, side, ci, df) tanh(atanh(r) + side * stats::qnorm(ci) / sqrt(df - 1)) # t-value & p-value calculation #' @keywords internal @@ -975,19 +1019,17 @@ cor_test <- function(x, y, # ohmhat calculation #' @keywords internal -.ohmhat <- function(x, beta) { - sort(abs(x - median(x)))[floor(1 - beta * length(x))] -} +.ohmhat <- function(x, beta) sort(abs(x - median(x)))[floor((1 - beta) * length(x))] # pbos calculation #' @keywords internal .pbos <- function(x, beta) { - omhat <- .ohmhat(x, beta) - psi <- (x - median(x)) / omhat + ohmhat <- .ohmhat(x, beta) + psi <- (x - median(x)) / ohmhat i1 <- length(psi[psi < -1]) i2 <- length(psi[psi > 1]) sx <- ifelse(psi < -1, 0, ifelse(psi > 1, 0, x)) - (sum(sx) + omhat * (i2 - i1)) / (length(x) - i1 - i2) + (sum(sx) + ohmhat * (i2 - i1)) / (length(x) - i1 - i2) } ## shepherd's D============ @@ -1020,29 +1062,12 @@ cor_test <- function(x, y, is_count = FALSE ) - if (is.factor(x)) { - out$is_factor <- TRUE - } - - if (is.character(x)) { - out$is_character <- TRUE - } - - if (is.numeric(x)) { - out$is_numeric <- TRUE - } - - if (length(unique(x)) == 2) { - out$is_binary <- TRUE - } - - if (out$is_numeric && !out$is_binary) { - out$is_continuous <- TRUE - } - - if (all(x %% 1 == 0)) { - out$is_count <- TRUE - } + if (is.factor(x)) out$is_factor <- TRUE + if (is.character(x)) out$is_character <- TRUE + if (is.numeric(x)) out$is_numeric <- TRUE + if (length(unique(x)) == 2) out$is_binary <- TRUE + if (out$is_numeric && !out$is_binary) out$is_continuous <- TRUE + if (all(x %% 1 == 0)) out$is_count <- TRUE out } @@ -1059,7 +1084,6 @@ cor_test <- function(x, y, ...) { insight::check_if_installed("BayesFactor") - rez <- BayesFactor::correlationBF(var_x, var_y, rscale = bayesian_prior) params <- parameters::model_parameters( rez, @@ -1075,7 +1099,6 @@ cor_test <- function(x, y, params$BF <- NA } - # Rename coef if (sum(names(params) %in% c("Median", "Mean", "MAP")) == 1) { names(params)[names(params) %in% c("Median", "Mean", "MAP")] <- "rho" diff --git a/tests/testthat/test-cor_test.R b/tests/testthat/test-cor_test.R index fadd399d..fdf58a84 100644 --- a/tests/testthat/test-cor_test.R +++ b/tests/testthat/test-cor_test.R @@ -9,7 +9,7 @@ test_that("cor_test names (x,y)", { expect_equal(out$CI_high, out2$CI_high, tolerance = 0.01) }) -test_that("cor_test data.frame and vector", { +test_that("cor_test inputs are columns from data.frame and/or vector", { x <- iris$Petal.Length y <- iris$Petal.Width @@ -108,8 +108,9 @@ test_that("cor_test bayesian", { }) test_that("cor_test tetrachoric", { - # skip_if_not_or_load_if_installed("psych") - # skip_if_not_or_load_if_installed("polycor") + skip_if_not_or_load_if_installed("psych") + skip_if_not_or_load_if_installed("polycor") + data <- iris data$Sepal.Width_binary <- ifelse(data$Sepal.Width > 3, 1, 0) data$Petal.Width_binary <- ifelse(data$Petal.Width > 1.2, 1, 0) @@ -133,77 +134,77 @@ test_that("cor_test tetrachoric", { expect_equal(out$r, -0.144, tolerance = 0.01) # Biserial + expect_error(cor_test("Sepal.Width", "Petal.Width", data = data, method = "biserial")) + out <- cor_test("Sepal.Width", "Petal.Width_binary", data = data, method = "pointbiserial") - expect_equal(out$r, -0.3212561, tolerance = 0.01) + expect_equal(out$r, -0.3212561, tolerance = 0.0001) out <- cor_test("Sepal.Width", "Petal.Width_binary", data = data, method = "biserial") - expect_equal(out$r, -0.403, tolerance = 0.01) out_psych <- psych::biserial(data[["Sepal.Width"]], data[["Petal.Width_binary"]])[1] -}) + expect_equal(out$r, out_psych, tolerance = 0.0001) + out <- cor_test("Sepal.Width", "Petal.Width_binary", data = data, method = "rankbiserial") + expect_equal(out$r, -0.003755053, tolerance = 0.0001) +}) test_that("cor_test robust", { - out1 <- cor_test(iris, "Petal.Length", "Petal.Width", method = "pearson", ranktransform = TRUE) - out2 <- cor_test(iris, "Petal.Length", "Petal.Width", method = "spearman", ranktransform = FALSE) - expect_equal(out1$r, out2$rho, tolerance = 0.01) + out1 <- cor_test(datawizard::ranktransform(iris$Petal.Length, sign = FALSE, method = "average"), datawizard::ranktransform(iris$Petal.Width, sign = FALSE, method = "average")) + out2 <- cor_test("Petal.Length", "Petal.Width", data = iris, method = "spearman") + expect_equal(out1$r, out2$r, tolerance = 0.01) }) - test_that("cor_test distance", { skip_if(getRversion() < "4.0") skip_if_not_or_load_if_installed("energy") - out <- cor_test(iris, "Petal.Length", "Petal.Width", method = "distance") + out <- cor_test("Petal.Length", "Petal.Width", data = iris, method = "distance") comparison <- energy::dcorT.test(iris$Petal.Length, iris$Petal.Width) expect_equal(out$r, as.numeric(comparison$estimate), tolerance = 0.001) expect_identical(out$Method, "Distance (Bias Corrected)") }) - test_that("cor_test percentage", { skip_if_not_or_load_if_installed("WRS2") - out <- cor_test(iris, "Petal.Length", "Petal.Width", method = "percentage") + out <- cor_test("Petal.Length", "Petal.Width", data = iris, method = "percentage") comparison <- WRS2::pbcor(iris$Petal.Length, iris$Petal.Width) expect_equal(out$r, as.numeric(comparison$cor), tolerance = 0.01) }) - test_that("cor_test shepherd", { set.seed(333) - out <- cor_test(iris, "Petal.Length", "Petal.Width", method = "shepherd") + out <- cor_test("Petal.Length", "Petal.Width", data = iris, method = "shepherd") expect_equal(out$r, 0.94762, tolerance = 0.01) skip_if_not_or_load_if_installed("BayesFactor") set.seed(333) - out2 <- cor_test(iris, "Petal.Length", "Petal.Width", method = "shepherd", bayesian = TRUE) + out2 <- cor_test("Petal.Length", "Petal.Width", data = iris, method = "shepherd", bayesian = TRUE) expect_equal(out2$rho, 0.9429992, tolerance = 0.01) }) - test_that("cor_test blomqvist", { skip_if_not_or_load_if_installed("wdm") set.seed(333) - out <- cor_test(iris, "Petal.Length", "Petal.Width", method = "blomqvist") + out <- cor_test("Petal.Length", "Petal.Width", data = iris, method = "blomqvist") expect_equal(out$r, 0.9066667, tolerance = 0.01) }) test_that("cor_test hoeffding and somers", { skip_if_not_or_load_if_installed("Hmisc") set.seed(333) - out <- cor_test(iris, "Petal.Length", "Petal.Width", method = "hoeffding") + out <- cor_test("Petal.Length", "Petal.Width", data = iris, method = "hoeffding") expect_equal(out$r, 0.5629277, tolerance = 0.01) set.seed(333) df <- data.frame(x = 1:6, y = c(0, 0, 1, 0, 1, 1)) - out2 <- cor_test(df, "y", "x", method = "somers") + out2 <- cor_test("x", "y", data = df, method = "somers") expect_equal(out2$Dxy, 0.7777778, tolerance = 0.01) }) test_that("cor_test gamma", { set.seed(333) - out <- cor_test(iris, "Petal.Length", "Petal.Width", method = "gamma") + out <- cor_test("Petal.Length", "Petal.Width", data = iris, method = "gamma") expect_equal(out$r, 0.8453925, tolerance = 0.01) }) @@ -211,27 +212,22 @@ test_that("cor_test gaussian", { skip_if_not_or_load_if_installed("BayesFactor") set.seed(333) - out <- cor_test(iris, "Petal.Length", "Petal.Width", method = "gaussian") + out <- cor_test("Petal.Length", "Petal.Width", data = iris, method = "gaussian") expect_equal(out$r, 0.87137, tolerance = 0.01) - out <- cor_test(iris, "Petal.Length", "Petal.Width", method = "gaussian", bayesian = TRUE) + out <- cor_test("Petal.Length", "Petal.Width", data = iris, method = "gaussian", bayesian = TRUE) expect_equal(out$r, 0.8620878, tolerance = 0.01) }) - - # Additional arguments ---------------------------------------------------- - test_that("cor_test one-sided p value", { baseline <- cor.test(iris$Petal.Length, iris$Petal.Width, alternative = "greater") - out <- cor_test(iris, "Petal.Length", "Petal.Width", alternative = "greater") + out <- cor_test("Petal.Length", "Petal.Width", data = iris, alternative = "greater") expect_equal(out$p, baseline$p.value, tolerance = 0.000001) }) - - # Edge cases -------------------------------------------------------------- test_that("cor_test 2 valid observations", { diff --git a/tests/testthat/test-cor_test_na_present.R b/tests/testthat/test-cor_test_na_present.R index 8e1b0c4e..c7ca57d4 100644 --- a/tests/testthat/test-cor_test_na_present.R +++ b/tests/testthat/test-cor_test_na_present.R @@ -1,107 +1,175 @@ test_that("cor_test frequentist", { skip_if_not_or_load_if_installed("ggplot2") - expect_error(cor_test(ggplot2::msleep, brainwt, sleep_rem)) + expect_error(cor_test(brainwt, sleep_rem, data = ggplot2::msleep)) - out <- cor_test(ggplot2::msleep, "brainwt", "sleep_rem") + out <- cor_test("brainwt", "sleep_rem", data = ggplot2::msleep) expect_equal(out$r, -0.2213348, tolerance = 0.01) }) -test_that("cor_test kendall", { +test_that("cor_test inputs are columns from data.frame and/or vector", { skip_if_not_or_load_if_installed("ggplot2") + x <- ggplot2::msleep$brainwt + y <- ggplot2::msleep$sleep_rem + + expect_error(cor_test("brainwt", "sleep_rem")) + expect_error(cor_test(x, "sleep_rem")) + + out <- cor_test("brainwt", "sleep_rem", data = ggplot2::msleep) + out2 <- cor_test(x, "sleep_rem", data = ggplot2::msleep) + out3 <- cor_test("brainwt", y, data = ggplot2::msleep) + out4 <- cor_test(x, y) + + expect_equal(out$r, out2$r, tolerance = 0.001) + expect_equal(out$CI_low, out2$CI_low, tolerance = 0.001) + expect_equal(out$CI_high, out2$CI_high, tolerance = 0.001) + expect_equal(out$r, out3$r, tolerance = 0.001) + expect_equal(out$CI_low, out3$CI_low, tolerance = 0.001) + expect_equal(out$CI_high, out3$CI_high, tolerance = 0.001) + expect_equal(out$r, out4$r, tolerance = 0.001) + expect_equal(out$CI_low, out4$CI_low, tolerance = 0.001) + expect_equal(out$CI_high, out4$CI_high, tolerance = 0.001) +}) + +test_that("cor_test kendall tau-a", { + skip_if_not_or_load_if_installed("ggplot2") + out <- cor_test("brainwt", "sleep_rem", data = ggplot2::msleep, method = "kendall", tau_type = "a") + completeCase <- stats::complete.cases(ggplot2::msleep[["brainwt"]], ggplot2::msleep[["sleep_rem"]]) + var_x <- ggplot2::msleep[["brainwt"]][completeCase] + var_y <- ggplot2::msleep[["sleep_rem"]][completeCase] + tab <- table(var_x, var_y) + n <- sum(tab) + ConDisParams <- DescTools::ConDisPairs(tab)[3:4] + z <- (ConDisParams$C - ConDisParams$D) / sqrt(n * (n - 1) * (2 * n + 5) / 18) + + expect_equal(out$tau, (ConDisParams$C - ConDisParams$D)/(n * (n - 1)/2), tolerance = 0.001) + expect_equal(out$p, 2 * stats::pnorm(abs(z), lower.tail = FALSE), tolerance = 0.001) +}) - out <- cor_test(ggplot2::msleep, "brainwt", "sleep_rem", method = "kendall") +test_that("cor_test kendall tau-b", { + # error due to stats::cor.test: `Cannot compute exact p-value with ties` + skip_if_not_or_load_if_installed("ggplot2") + + out <- cor_test("brainwt", "sleep_rem", data = ggplot2::msleep, method = "kendall") out2 <- stats::cor.test(ggplot2::msleep$brainwt, ggplot2::msleep$sleep_rem, method = "kendall") expect_equal(out$tau, out2$estimate[[1]], tolerance = 0.001) expect_equal(out$p, out2$p.value[[1]], tolerance = 0.001) }) +test_that("cor_test kendall tau-c", { + # error due to stats::cor.test: `Cannot compute exact p-value with ties` + skip_if_not_or_load_if_installed("ggplot2") + out <- cor_test("brainwt", "sleep_rem", data = ggplot2::msleep, method = "kendall", tau_type = "c") + out2 <- stats::cor.test(ggplot2::msleep$brainwt, ggplot2::msleep$sleep_rem, method = "kendall") + + completeCase <- stats::complete.cases(ggplot2::msleep[["brainwt"]], ggplot2::msleep[["sleep_rem"]]) + var_x <- ggplot2::msleep[["brainwt"]][completeCase] + var_y <- ggplot2::msleep[["sleep_rem"]][completeCase] + tab <- table(var_x, var_y) + ConDisParams <- DescTools::ConDisPairs(tab)[3:4] + + expect_equal(out$tau, (ConDisParams$C - ConDisParams$D) * 2 * min(dim(tab))/(sum(tab)^2 * (min(dim(tab)) - 1)), tolerance = 0.001) + expect_equal(out$p, out2$p.value[[1]], tolerance = 0.001) +}) + test_that("cor_test bayesian", { + skip_if_not_or_load_if_installed("ggplot2") skip_if_not_or_load_if_installed("BayesFactor") set.seed(123) - out <- cor_test(ggplot2::msleep, "brainwt", "sleep_rem", bayesian = TRUE) + out <- cor_test("brainwt", "sleep_rem", data = ggplot2::msleep, bayesian = TRUE) expect_equal(out$r, -0.1947696, tolerance = 0.01) }) test_that("cor_test tetrachoric", { + # warning due to polycor::polyserial: `initial correlation inadmissable...` skip_if_not_or_load_if_installed("psych") skip_if_not_or_load_if_installed("polycor") skip_if_not_or_load_if_installed("ggplot2") data <- ggplot2::msleep - data$brainwt_binary <- ifelse(data$brainwt > 3, 1, 0) - data$sleep_rem_binary <- ifelse(data$sleep_rem > 1.2, 1, 0) + data$brainwt_binary <- ifelse(data$brainwt > 0.7, 1, 0) + data$sleep_rem_binary <- ifelse(data$sleep_rem > 1.5, 1, 0) # With Factors / Binary - expect_error(cor_test(data, "brainwt_binary", "sleep_rem_binary", method = "tetrachoric")) + out <- cor_test("brainwt_binary", "sleep_rem_binary", data = data, method = "tetrachoric") + expect_equal(out$r, 0.1599637, tolerance = 0.01) data$sleep_rem_ordinal <- as.factor(round(data$sleep_rem)) data$brainwt_ordinal <- as.factor(round(data$brainwt)) - - out <- cor_test(data, "brainwt", "brainwt_ordinal", method = "polychoric") - expect_equal(out$rho, 0.9999, tolerance = 0.01) + out <- cor_test("brainwt", "brainwt_ordinal", data = data, method = "polychoric") + expect_equal(out$r, 0.9999, tolerance = 0.01) # Biserial - expect_error(cor_test(data, "brainwt", "sleep_rem_binary", method = "pointbiserial")) + expect_error(cor_test("brainwt", "sleep_rem", data = data, method = "biserial")) - expect_error(cor_test(data, "brainwt", "sleep_rem_binary", method = "biserial")) -}) + out <- cor_test("brainwt", "sleep_rem_binary", data = data, method = "pointbiserial") + expect_equal(out$r, -0.1577557, tolerance = 0.0001) + + out <- cor_test("brainwt", "sleep_rem_binary", data = data, method = "biserial") + expect_equal(out$r, -0.1957441, tolerance = 0.0001) + out <- cor_test("brainwt", "sleep_rem_binary", data = data, method = "rankbiserial") + expect_equal(out$r, -0.002991068, tolerance = 0.0001) +}) test_that("cor_test robust", { skip_if_not_or_load_if_installed("ggplot2") - out1 <- cor_test(ggplot2::msleep, "brainwt", "sleep_rem", method = "pearson", ranktransform = TRUE) - out2 <- cor_test(ggplot2::msleep, "brainwt", "sleep_rem", method = "spearman", ranktransform = FALSE) - expect_equal(out1$r, out2$rho, tolerance = 0.01) + out1 <- cor_test(datawizard::ranktransform(ggplot2::msleep$brainwt, sign = FALSE, method = "average"), datawizard::ranktransform(ggplot2::msleep$sleep_rem, sign = FALSE, method = "average")) + out2 <- cor_test("brainwt", "sleep_rem", data = ggplot2::msleep, method = "spearman") + expect_equal(out1$r, out2$r, tolerance = 0.01) }) - test_that("cor_test distance", { skip_if_not_or_load_if_installed("ggplot2") skip_if_not_or_load_if_installed("energy") skip_if_not_or_load_if_installed("poorman") - out <- cor_test(ggplot2::msleep, "brainwt", "sleep_rem", method = "distance") + out <- cor_test("brainwt", "sleep_rem", data = ggplot2::msleep, method = "distance") df <- poorman::filter(ggplot2::msleep, !is.na(brainwt), !is.na(sleep_rem)) comparison <- energy::dcorT.test(df$brainwt, df$sleep_rem) expect_equal(out$r, as.numeric(comparison$estimate), tolerance = 0.01) }) - test_that("cor_test percentage", { skip_if_not_or_load_if_installed("ggplot2") skip_if_not_or_load_if_installed("WRS2") - out <- cor_test(ggplot2::msleep, "brainwt", "sleep_rem", method = "percentage") + out <- cor_test("brainwt", "sleep_rem", data = ggplot2::msleep, method = "percentage") comparison <- WRS2::pbcor(ggplot2::msleep$brainwt, ggplot2::msleep$sleep_rem) expect_equal(out$r, as.numeric(comparison$cor), tolerance = 0.01) }) - test_that("cor_test shepherd", { skip_if_not_or_load_if_installed("ggplot2") set.seed(333) - expect_error(cor_test(ggplot2::msleep, "brainwt", "sleep_rem", method = "shepherd")) -}) + out <- cor_test("brainwt", "sleep_rem", data = ggplot2::msleep, method = "shepherd") + expect_equal(out$r, -0.4480401, tolerance = 0.01) + skip_if_not_or_load_if_installed("BayesFactor") + set.seed(333) + out2 <- cor_test("brainwt", "sleep_rem", data = ggplot2::msleep, method = "shepherd", bayesian = TRUE) + expect_equal(out2$r, -0.3978831, tolerance = 0.01) +}) test_that("cor_test blomqvist", { + skip_if_not_or_load_if_installed("ggplot2") skip_if_not_or_load_if_installed("wdm") set.seed(333) - out <- cor_test(ggplot2::msleep, "brainwt", "sleep_rem", method = "blomqvist") - expect_equal(out$r, -0.4583333, tolerance = 0.01) + out <- cor_test("brainwt", "sleep_rem", data = ggplot2::msleep, method = "blomqvist") + expect_equal(out$r, -0.4681911, tolerance = 0.01) }) test_that("cor_test hoeffding", { + skip_if_not_or_load_if_installed("ggplot2") skip_if_not_or_load_if_installed("Hmisc") set.seed(333) - out <- cor_test(ggplot2::msleep, "brainwt", "sleep_rem", method = "hoeffding") + out <- cor_test("brainwt", "sleep_rem", data = ggplot2::msleep, method = "hoeffding") expect_equal(out$r, 0.04427718, tolerance = 0.01) }) @@ -109,7 +177,7 @@ test_that("cor_test gamma", { skip_if_not_or_load_if_installed("ggplot2") set.seed(333) - out <- cor_test(ggplot2::msleep, "brainwt", "sleep_rem", method = "gamma") + out <- cor_test("brainwt", "sleep_rem", data = ggplot2::msleep, method = "gamma") expect_equal(out$r, -0.2675799, tolerance = 0.01) }) @@ -117,24 +185,21 @@ test_that("cor_test gaussian", { skip_if_not_or_load_if_installed("ggplot2") set.seed(333) - out <- cor_test(ggplot2::msleep, "brainwt", "sleep_rem", method = "gaussian") + out <- cor_test("brainwt", "sleep_rem", data = ggplot2::msleep, method = "gaussian") expect_equal(out$r, -0.3679795, tolerance = 0.01) skip_if_not_or_load_if_installed("BayesFactor") - out <- cor_test(ggplot2::msleep, "brainwt", "sleep_rem", method = "gaussian", bayesian = TRUE) + out <- cor_test("brainwt", "sleep_rem", data = ggplot2::msleep, method = "gaussian", bayesian = TRUE) expect_equal(out$r, -0.3269572, tolerance = 0.01) }) - - # Additional arguments ---------------------------------------------------- - test_that("cor_test one-sided p value", { skip_if_not_or_load_if_installed("ggplot2") baseline <- cor.test(ggplot2::msleep$brainwt, ggplot2::msleep$sleep_rem, alternative = "greater") - out <- cor_test(ggplot2::msleep, "brainwt", "sleep_rem", alternative = "greater") + out <- cor_test("brainwt", "sleep_rem", data = ggplot2::msleep, alternative = "greater") expect_equal(out$p, baseline$p.value, tolerance = 0.000001) }) diff --git a/tests/testthat/testthat-problems.rds b/tests/testthat/testthat-problems.rds new file mode 100644 index 0000000000000000000000000000000000000000..9fa15123317ffef23a95caaf813227c8dd2eb205 GIT binary patch literal 81098 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 literal 0 HcmV?d00001 From 9a0eea20317dd9813d7dea110479e6696b06444a Mon Sep 17 00:00:00 2001 From: "Mattan S. Ben-Shachar" Date: Sun, 19 May 2024 10:38:22 +0300 Subject: [PATCH 05/33] change pkg name to correlation2 --- DESCRIPTION | 4 ++-- correlation.Rproj => correlation2.Rproj | 0 2 files changed, 2 insertions(+), 2 deletions(-) rename correlation.Rproj => correlation2.Rproj (100%) diff --git a/DESCRIPTION b/DESCRIPTION index 788ff0eb..4115da97 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Type: Package -Package: correlation +Package: correlation2 Title: Methods for Correlation Analysis -Version: 0.8.4.2 +Version: 0.1.0 Authors@R: c(person(given = "Dominique", family = "Makowski", diff --git a/correlation.Rproj b/correlation2.Rproj similarity index 100% rename from correlation.Rproj rename to correlation2.Rproj From dec3d0dfce3a4f500cef6c958adc3c3aab8e7eca Mon Sep 17 00:00:00 2001 From: "Mattan S. Ben-Shachar" Date: Sun, 19 May 2024 10:38:30 +0300 Subject: [PATCH 06/33] data is an argument --- R/cor_test.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/R/cor_test.R b/R/cor_test.R index e43dcc0b..ba6cbe72 100644 --- a/R/cor_test.R +++ b/R/cor_test.R @@ -5,6 +5,7 @@ #' #' @param x,y Vectors of the two variables the correlation test is done for. #' \cr Alternatively, can be names of variables in `data`. +#' @param data An optional data frame. #' @param ci Confidence/Credible Interval level. If `"default"`, then it is #' set to `0.95` (`95%` CI). #' @param method A character string indicating which correlation coefficient is @@ -190,6 +191,7 @@ #' } #' @export cor_test <- function(x, y, + data = NULL, method = "pearson", ci = 0.95, alternative = "two.sided", @@ -225,11 +227,9 @@ cor_test <- function(x, y, yIsVec <- !length(y) == 1L if (!xIsVec || !yIsVec) { - if (!"data" %in% names(list(...))) { + if (is.null(data)) { insight::format_error("At least 1 of the variables is from a data frame but no data frame has been provided.") - } - data <- list(...)$data - if (!is.data.frame(data)) { + } else if (!is.data.frame(data)) { insight::format_error("The data provided is not a data frame.") } } From acc94e76a2392b540bfbd3e3048052831fcb6fc4 Mon Sep 17 00:00:00 2001 From: "Mattan S. Ben-Shachar" Date: Sun, 19 May 2024 10:38:38 +0300 Subject: [PATCH 07/33] update mans --- man/cor_test.Rd | 61 ++++++++++++++++++++++---------------- man/cor_to_p.Rd | 4 +++ man/cormatrix_to_excel.Rd | 2 +- man/correlation-package.Rd | 2 ++ man/correlation.Rd | 4 +++ 5 files changed, 46 insertions(+), 27 deletions(-) diff --git a/man/cor_test.Rd b/man/cor_test.Rd index 53787e9b..6f3dfd9e 100644 --- a/man/cor_test.Rd +++ b/man/cor_test.Rd @@ -7,6 +7,7 @@ cor_test( x, y, + data = NULL, method = "pearson", ci = 0.95, alternative = "two.sided", @@ -19,6 +20,8 @@ cor_test( \item{x, y}{Vectors of the two variables the correlation test is done for. \cr Alternatively, can be names of variables in \code{data}.} +\item{data}{An optional data frame.} + \item{method}{A character string indicating which correlation coefficient is to be used for the test. \cr Possible Values: \code{"pearson"} (default), \code{"kendall"}, \code{"spearman"}, \code{"biserial"}, \code{"point-biserial"}, \code{"rankbiserial"}, @@ -49,6 +52,10 @@ framework.} \item \code{tau_type} = \code{"b"} \item \code{direction} = \code{"row"} (used when \code{tau_type} = \code{"a"}) } +\item \code{"distance"}: +\itemize{ +\item \code{corrected} = \code{TRUE} +} \item \code{"percentage"}: \itemize{ \item \code{beta} = \code{0.2} @@ -97,12 +104,12 @@ pairs where both variables have tied ranks. } \item \strong{Biweight midcorrelation}: A measure of similarity that is median-based, instead of the traditional mean-based, thus being less -sensitive to outliers. It can be used as a robust alternative to other +sensitive to outliers. \cr It can be used as a robust alternative to other similarity metrics, such as Pearson correlation (Langfelder & Horvath, 2012). \item \strong{Distance correlation}: Distance correlation measures both linear and non-linear association between two random variables or random -vectors. This is in contrast to Pearson's correlation, which can only detect +vectors. \cr This is in contrast to Pearson's correlation, which can only detect linear association between two random variables. \item \strong{Percentage bend correlation}: Introduced by Wilcox (1994), it is based on a down-weight of a specified percentage of marginal observations @@ -115,36 +122,38 @@ referred to as Blomqvist's Beta or medial correlation; Blomqvist, 1950) is a median-based non-parametric correlation that has some advantages over measures such as Spearman's or Kendall's estimates (see Shmid & Schimdt, 2006). -\item \strong{Hoeffding’s D}: The Hoeffding’s D statistics is a -non-parametric rank based measure of association that detects more general -departures from independence (Hoeffding 1948), including non-linear -associations. Hoeffding’s D varies between -0.5 and 1 (if there are no tied -ranks, otherwise it can have lower values), with larger values indicating a -stronger relationship between the variables. +\item \strong{Hoeffding’s D}: The Hoeffding’s D statistics is a non-parametric rank +based measure of association that detects more general departures from +independence (Hoeffding 1948), including non-linear associations. \cr +Hoeffding’s D varies between -0.5 and 1 (if there are no tied ranks, +otherwise it can have lower values), with larger values indicating a stronger +relationship between the variables. \item \strong{Somers’ D}: The Somers’ D statistics is a non-parametric rank based measure of association between a binary variable and a continuous variable, for instance, in the context of logistic regression the binary -outcome and the predicted probabilities for each outcome. Usually, Somers' D -is a measure of ordinal association, however, this implementation it is -limited to the case of a binary outcome. -\item \strong{Point-Biserial and biserial correlation}: Correlation +outcome and the predicted probabilities for each outcome. \cr Usually, +Somers' D is a measure of ordinal association, however, this implementation +it is limited to the case of a binary outcome. +\item \strong{Point-Biserial, Rank-Biserial and biserial correlation}: Correlation coefficient used when one variable is continuous and the other is dichotomous -(binary). Point-Biserial is equivalent to a Pearson's correlation, while +(binary). \cr Point-Biserial is equivalent to a Pearson's correlation, while Biserial should be used when the binary variable is assumed to have an underlying continuity. For example, anxiety level can be measured on a -continuous scale, but can be classified dichotomously as high/low. -\item \strong{Gamma correlation}: The Goodman-Kruskal gamma statistic is -similar to Kendall's Tau coefficient. It is relatively robust to outliers and -deals well with data that have many ties. -\item \strong{Gaussian rank Correlation}: The Gaussian rank correlation -estimator is a simple and well-performing alternative for robust rank -correlations (Boudt et al., 2012). It is based on the Gaussian quantiles of -the ranks. -\item \strong{Polychoric correlation}: Correlation between two theorized -normally distributed continuous latent variables, from two observed ordinal -variables. -\item \strong{Tetrachoric correlation}: Special case of the polychoric -correlation applicable when both observed variables are dichotomous. +continuous scale, but can be classified dichotomously as high/low. \cr +Rank-Biserial is also equivalent to a Pearson's correlation, but it is used +when the continuous variable is ordinal, and the dichotomous variable is +assumed to have any relation to the order of the ordinal variable rather than +it's value. +\item \strong{Gamma correlation}: The Goodman-Kruskal gamma statistic is similar to +Kendall's Tau coefficient. It is relatively robust to outliers and deals well +with data that have many ties. +\item \strong{Gaussian rank Correlation}: The Gaussian rank correlation estimator is a +simple and well-performing alternative for robust rank correlations (Boudt et +al., 2012). \cr It is based on the Gaussian quantiles of the ranks. +\item \strong{Polychoric correlation}: Correlation between two theorized normally +distributed continuous latent variables, from two observed ordinal variables. +\item \strong{Tetrachoric correlation}: Special case of the polychoric correlation +applicable when both observed variables are dichotomous. } } } diff --git a/man/cor_to_p.Rd b/man/cor_to_p.Rd index 7d34b370..7bc15301 100644 --- a/man/cor_to_p.Rd +++ b/man/cor_to_p.Rd @@ -45,6 +45,10 @@ correction. Both are generally very similar.} \item \code{tau_type} = \code{"b"} \item \code{direction} = \code{"row"} (used when \code{tau_type} = \code{"a"}) } +\item \code{"distance"}: +\itemize{ +\item \code{corrected} = \code{TRUE} +} \item \code{"percentage"}: \itemize{ \item \code{beta} = \code{0.2} diff --git a/man/cormatrix_to_excel.Rd b/man/cormatrix_to_excel.Rd index ca5ae021..50ba279b 100644 --- a/man/cormatrix_to_excel.Rd +++ b/man/cormatrix_to_excel.Rd @@ -17,7 +17,7 @@ but no need to specify extension).} \item{print.mat}{Logical, whether to also print the correlation matrix to console.} -\item{...}{Parameters to be passed to \code{\link[=correlation]{correlation()}}} +\item{...}{Parameters to be passed to \code{\link[correlation:correlation]{correlation::correlation()}}} } \value{ A Microsoft Excel document, containing the colour-coded diff --git a/man/correlation-package.Rd b/man/correlation-package.Rd index 8e313dd7..b73f4eae 100644 --- a/man/correlation-package.Rd +++ b/man/correlation-package.Rd @@ -2,6 +2,8 @@ % Please edit documentation in R/correlation-package.R \docType{package} \name{correlation-package} +\alias{correlation2} +\alias{correlation2-package} \alias{correlation-package} \title{correlation: Methods for correlation analysis} \description{ diff --git a/man/correlation.Rd b/man/correlation.Rd index af558934..795b0297 100644 --- a/man/correlation.Rd +++ b/man/correlation.Rd @@ -95,6 +95,10 @@ names. This option can also be set globally by running \item \code{tau_type} = \code{"b"} \item \code{direction} = \code{"row"} (used when \code{tau_type} = \code{"a"}) } +\item \code{"distance"}: +\itemize{ +\item \code{corrected} = \code{TRUE} +} \item \code{"percentage"}: \itemize{ \item \code{beta} = \code{0.2} From ad1f1fa9a88a8764293801a3b475f694aed932ac Mon Sep 17 00:00:00 2001 From: "Mattan S. Ben-Shachar" Date: Sun, 19 May 2024 10:45:52 +0300 Subject: [PATCH 08/33] use z_fisher() --- R/cor_test.R | 4 +++- R/cor_to_ci.R | 22 +++++++++++----------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/R/cor_test.R b/R/cor_test.R index ba6cbe72..32586c10 100644 --- a/R/cor_test.R +++ b/R/cor_test.R @@ -969,7 +969,9 @@ cor_test <- function(x, y, # confidence interval calculation #' @keywords internal -.ci_value <- function(r, side, ci, df) tanh(atanh(r) + side * stats::qnorm(ci) / sqrt(df - 1)) +.ci_value <- function(r, side, ci, df) { + z_fisher(z = z_fisher(r = r) + side * stats::qnorm(ci) / sqrt(df - 1)) +} # t-value & p-value calculation #' @keywords internal diff --git a/R/cor_to_ci.R b/R/cor_to_ci.R index 55d66a2d..2630134a 100644 --- a/R/cor_to_ci.R +++ b/R/cor_to_ci.R @@ -34,12 +34,12 @@ cor_to_ci <- function(cor, n, ci = 0.95, method = "pearson", correction = "fiell } moe <- stats::qnorm(1 - (1 - ci) / 2) * tau.se - zu <- atanh(cor) + moe - zl <- atanh(cor) - moe + zu <- z_fisher(r = cor) + moe + zl <- z_fisher(r = cor) - moe # Convert back to r - ci_low <- tanh(zl) - ci_high <- tanh(zu) + ci_low <- z_fisher(z = zl) + ci_high <- z_fisher(z = zu) list(CI_low = ci_low, CI_high = ci_high) } @@ -59,12 +59,12 @@ cor_to_ci <- function(cor, n, ci = 0.95, method = "pearson", correction = "fiell moe <- stats::qnorm(1 - (1 - ci) / 2) * zrs.se - zu <- atanh(cor) + moe - zl <- atanh(cor) - moe + zu <- z_fisher(r = cor) + moe + zl <- z_fisher(r = cor) - moe # Convert back to r - ci_low <- tanh(zl) - ci_high <- tanh(zu) + ci_low <- z_fisher(z = zl) + ci_high <- z_fisher(z = zu) list(CI_low = ci_low, CI_high = ci_high) } @@ -72,7 +72,7 @@ cor_to_ci <- function(cor, n, ci = 0.95, method = "pearson", correction = "fiell # Pearson ----------------------------------------------------------------- .cor_to_ci_pearson <- function(cor, n, ci = 0.95, ...) { - z <- atanh(cor) + z <- z_fisher(r = cor) se <- 1 / sqrt(n - 3) # Sample standard error # CI @@ -81,8 +81,8 @@ cor_to_ci <- function(cor, n, ci = 0.95, method = "pearson", correction = "fiell ci_high <- z + se * stats::qnorm(alpha) # Convert back to r - ci_low <- tanh(ci_low) - ci_high <- tanh(ci_high) + ci_low <- z_fisher(z = ci_low) + ci_high <- z_fisher(z = ci_high) list(CI_low = ci_low, CI_high = ci_high) } From a403e236a1cef2cc8aa4e73a64b5e856f1f8d0cb Mon Sep 17 00:00:00 2001 From: "Mattan S. Ben-Shachar" Date: Sun, 19 May 2024 10:47:33 +0300 Subject: [PATCH 09/33] Update correlation-package.R --- R/correlation-package.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/R/correlation-package.R b/R/correlation-package.R index 9642e3c5..3914e957 100644 --- a/R/correlation-package.R +++ b/R/correlation-package.R @@ -1,6 +1,6 @@ -#' \code{correlation} +#' \code{correlation2} #' -#' @title correlation: Methods for correlation analysis +#' @title correlation2: Methods for correlation analysis #' #' @description #' @@ -12,7 +12,7 @@ #' References: Makowski et al. (2020) \doi{10.21105/joss.02306}. #' #' @docType package -#' @aliases correlation-package -#' @name correlation-package +#' @aliases correlation2-package +#' @name correlation2-package #' @keywords internal "_PACKAGE" From 93cf2102035cb4fed1f413607dec1e2ef6390e9b Mon Sep 17 00:00:00 2001 From: "Mattan S. Ben-Shachar" Date: Sun, 19 May 2024 10:58:16 +0300 Subject: [PATCH 10/33] cleanup if elses --- R/cor_test.R | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/R/cor_test.R b/R/cor_test.R index 32586c10..e2970785 100644 --- a/R/cor_test.R +++ b/R/cor_test.R @@ -223,8 +223,8 @@ cor_test <- function(x, y, methodUse <- ifelse(method %in% c("tetra", "tetrachoric"), "tetrachoric", methodUse) # vectors or names check - xIsVec <- !length(x) == 1L - yIsVec <- !length(y) == 1L + xIsVec <- length(x) != 1L + yIsVec <- length(y) != 1L if (!xIsVec || !yIsVec) { if (is.null(data)) { @@ -325,41 +325,53 @@ cor_test <- function(x, y, # check value of alternative alternative <- match.arg(alternative, c("two.sided", "less", "greater")) + # check value of tau_type and direction when relevant if(method == "kendall") { + tau_type <- "b" + direction <- "row" if ("tau_type" %in% names(list(...))) { tau_type <- match.arg(tolower(list(...)$tau_type), c("a", "b", "c")) - if("direction" %in% names(list(...))) direction <- match.arg(tolower(list(...)$direction), c("row", "column")) - else direction <- "row" } - else tau_type <- "b" + if ("direction" %in% names(list(...))) { + direction <- match.arg(tolower(list(...)$direction), c("row", "column")) + } } + if (methodUse == "distance") { - if("corrected" %in% names(list(...))) { + corrected <- TRUE + if ("corrected" %in% names(list(...))) { corrected <- list(...)$corrected } - else corrected <- TRUE } + if(methodUse == "percentage") { + beta <- 0.2 if("beta" %in% names(list(...))) { - if (length(list(...)$beta) != 1L || list(...)$beta <= 0 || list(...)$beta >= 0.5) + beta <- list(...)$beta + if (length(beta) != 1L || beta <= 0 || beta >= 0.5) { stop("The bend criterion (beta) is not between 0 and 0.5") + } } - else beta <- 0.2 } + if(bayesian) { + bayesian_prior <- "medium" + bayesian_ci_method <- "hdi" + bayesian_test <- c("pd", "rope", "bf") + if("bayesian_prior" %in% names(list(...))) { - bayesian_prior <- match.arg(tolower(list(...)$bayesian_prior), c("medium", "medium.narrow", "wide", "ultra-wide")) + bayesian_prior <- match.arg(tolower(list(...)$bayesian_prior), + c("medium", "medium.narrow", "wide", "ultra-wide")) } - else bayesian_prior <- "medium" - if("bayesian_ci_method" %in% names(list(...))) { + + if ("bayesian_ci_method" %in% names(list(...))) { bayesian_ci_method <- list(...)$bayesian_ci_method } - else bayesian_ci_method <- "hdi" - if("bayesian_test" %in% names(list(...))) { + + if ("bayesian_test" %in% names(list(...))) { bayesian_test <- list(...)$bayesian_test } - else bayesian_test <- c("pd", "rope", "bf") } # +=======================+ From 987f20d0f5b64fff13cb3ce7e43a82d38bd37210 Mon Sep 17 00:00:00 2001 From: "Mattan S. Ben-Shachar" Date: Sun, 19 May 2024 11:18:41 +0300 Subject: [PATCH 11/33] cleanup some data related code --- R/cor_test.R | 118 ++++++++++++++------------------------------------- 1 file changed, 32 insertions(+), 86 deletions(-) diff --git a/R/cor_test.R b/R/cor_test.R index e2970785..99a101d8 100644 --- a/R/cor_test.R +++ b/R/cor_test.R @@ -223,98 +223,44 @@ cor_test <- function(x, y, methodUse <- ifelse(method %in% c("tetra", "tetrachoric"), "tetrachoric", methodUse) # vectors or names check - xIsVec <- length(x) != 1L - yIsVec <- length(y) != 1L - - if (!xIsVec || !yIsVec) { - if (is.null(data)) { - insight::format_error("At least 1 of the variables is from a data frame but no data frame has been provided.") + xIsName <- is.character(x) && (length(x) == 1L) + yIsName <- is.character(y) && (length(y) == 1L) + + x_name <- ifelse(xIsName, x, deparse(substitute(x))) + y_name <- ifelse(yIsName, y, deparse(substitute(y))) + + # if x,y are names, get them from data.frame + if (xIsName != yIsName) { + insight::format_error("Both x,y must be vectors or valid names on columns in data.") + } else if (xIsName) { + if (is.data.frame(data) && all(c(x, y) %in% colnames(data))) { + x <- data[[x]] + y <- data[[y]] + } else if (is.null(data)) { + insight::format_error("No data frame has been provided.") } else if (!is.data.frame(data)) { insight::format_error("The data provided is not a data frame.") + } else { + insight::format_error(paste0(x, " or ", y, "not found in data.")) } } - # Make sure factor is no factor - if (!methodUse %in% c("tetrachoric", "polychoric")) { - if (xIsVec || yIsVec) { - if (xIsVec) { - x <- datawizard::to_numeric(x, dummy_factors = FALSE) - } - else { - data[[x]] <- datawizard::to_numeric(data[[x]], dummy_factors = FALSE) - } - if (yIsVec) { - y <- datawizard::to_numeric(y, dummy_factors = FALSE) - } - else { - data[[y]] <- datawizard::to_numeric(data[[y]], dummy_factors = FALSE) - } - } - else { - data[c(x, y)] <- datawizard::to_numeric(data[c(x, y)], dummy_factors = FALSE) - } - } - - # check validity of variables as vectors and/or as names - if (!xIsVec || !yIsVec) { - if (xIsVec) { - completeY <- stats::complete.cases(data[[y]]) - if (length(x) == nrow(data)) { - completeX <- stats::complete.cases(x) - var_x <- x[completeX * completeY == 1L] - var_y <- data[[y]][completeX * completeY == 1L] - } - else if (length(x) == sum(completeY)) { - var_y <- data[[y]][completeY] - completeX <- stats::complete.cases(x) - var_x <- x[completeX] - var_y <- var_y[completeX] - } - else { - insight::format_error("Cannot match complete cases of variable x with variable y, \n The length of x should match the length of y or the length of the whole data frame.") - } - } - else if (yIsVec) { - completeX <- stats::complete.cases(data[[x]]) - if (length(y) == nrow(data)) { - completeY <- stats::complete.cases(y) - var_x <- data[[x]][completeX * completeY == 1L] - var_y <- y[completeX * completeY == 1L] - } - else if (length(y) == sum(completeX)) { - var_x <- data[[x]][completeX] - completeY <- stats::complete.cases(y) - var_x <- var_x[completeY] - var_y <- y[completeY] - } - else { - insight::format_error("Cannot match complete cases of variable x with variable y, \n The length of y should match the length of x or the length of the whole data frame.") - } - } - else { - completeCase <- stats::complete.cases(data[[x]], data[[y]]) - var_x <- data[[x]][completeCase] - var_y <- data[[y]][completeCase] - } - } - else { - if (length(x) != length(y)) { - insight::format_error("The length of x should match the length of y.") - } - else { - completeCase <- stats::complete.cases(x, y) - var_x <- x[completeCase] - var_y <- y[completeCase] - } - } + # get complete cases + oo <- stats::complete.cases(x, y) + var_x <- x[oo] + var_y <- y[oo] # check validity of the amount of observations - n_obs <- length(var_x) - - if (n_obs < 3L) { + if (length(var_x) < 3L) { insight::format_alert(paste(x, "and", y, "have less than 3 complete observations.")) } + # Make sure x,y are not factor(s) + if (!methodUse %in% c("tetrachoric", "polychoric")) { + var_x <- datawizard::to_numeric(var_x, dummy_factors = FALSE) + var_y <- datawizard::to_numeric(var_y, dummy_factors = FALSE) + } + # check value of ci (confidence level) if (ci == "default") { ci <- 0.95 @@ -385,8 +331,8 @@ cor_test <- function(x, y, if (methodUse %in% c("blomqvist", "hoeffding")) insight::format_error(paste0("Bayesian ", toupper(methodUse[1]), methodUse[-1], ifelse(methodUse == "hoeffding", "'s", ""), "correlations are not supported yet. Check-out the BBcor package (https://github.com/donaldRwilliams/BBcor).")) out <- .cor_test_bayes(var_x, var_y, ci, method, ...) - out$Parameter1 <- x - out$Parameter2 <- y + out$Parameter1 <- x_name + out$Parameter2 <- y_name } else { out <- switch(methodUse, @@ -406,8 +352,8 @@ cor_test <- function(x, y, "somers" = .cor_test_somers(var_x, var_y, ci, alternative, ...), "polychoric" = .cor_test_polychoric(var_x, var_y, ci, alternative, ...), "tetrachoric" = .cor_test_tetrachoric(var_x, var_y, ci, alternative, ...)) - out$Parameter1 <- ifelse(xIsVec, deparse(substitute(x)), x) - out$Parameter2 <- ifelse(yIsVec, deparse(substitute(y)), y) + out$Parameter1 <- x_name + out$Parameter2 <- y_name } if (!"Method" %in% names(out)) out$Method <- paste0(toupper(methodUse[1]), methodUse[-1], ifelse(bayesian, " (Bayesian)", "")) From a7d38399e530d71811ab24cccb0af62ce617f9aa Mon Sep 17 00:00:00 2001 From: "Mattan S. Ben-Shachar" Date: Sun, 19 May 2024 11:31:26 +0300 Subject: [PATCH 12/33] fix tests --- R/cor_test.R | 4 ++++ ...ion-package.Rd => correlation2-package.Rd} | 7 +++---- tests/testthat/test-cor_test.R | 20 ++----------------- 3 files changed, 9 insertions(+), 22 deletions(-) rename man/{correlation-package.Rd => correlation2-package.Rd} (93%) diff --git a/R/cor_test.R b/R/cor_test.R index 99a101d8..9e224b64 100644 --- a/R/cor_test.R +++ b/R/cor_test.R @@ -132,6 +132,10 @@ #' - **Tetrachoric correlation**: Special case of the polychoric correlation #' applicable when both observed variables are dichotomous. #' +#' ## Confidence Intervals +#' +#' For correlation methods that do not have a direct parametric method of +#' obtaining _p_-values and CIs, we use [cor_to_p] and [cor_to_ci]. #' #' @examples #' library(correlation) diff --git a/man/correlation-package.Rd b/man/correlation2-package.Rd similarity index 93% rename from man/correlation-package.Rd rename to man/correlation2-package.Rd index b73f4eae..9d43ebee 100644 --- a/man/correlation-package.Rd +++ b/man/correlation2-package.Rd @@ -1,11 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/correlation-package.R \docType{package} -\name{correlation-package} +\name{correlation2-package} \alias{correlation2} \alias{correlation2-package} -\alias{correlation-package} -\title{correlation: Methods for correlation analysis} +\title{correlation2: Methods for correlation analysis} \description{ Lightweight package for computing different kinds of correlations, such as partial correlations, Bayesian correlations, multilevel correlations, @@ -15,7 +14,7 @@ Part of the 'easystats' ecosystem. References: Makowski et al. (2020) \doi{10.21105/joss.02306}. } \details{ -\code{correlation} +\code{correlation2} } \seealso{ Useful links: diff --git a/tests/testthat/test-cor_test.R b/tests/testthat/test-cor_test.R index fdf58a84..b6b804dd 100644 --- a/tests/testthat/test-cor_test.R +++ b/tests/testthat/test-cor_test.R @@ -17,19 +17,9 @@ test_that("cor_test inputs are columns from data.frame and/or vector", { expect_error(cor_test(x, "Petal.Width")) out <- cor_test("Petal.Length", "Petal.Width", data = iris) - out2 <- cor_test(x, "Petal.Width", data = iris) - out3 <- cor_test("Petal.Length", y, data = iris) - out4 <- cor_test(x, y) + out2 <- cor_test(x, y) - expect_equal(out$r, out2$r, tolerance = 0.001) - expect_equal(out$CI_low, out2$CI_low, tolerance = 0.001) - expect_equal(out$CI_high, out2$CI_high, tolerance = 0.001) - expect_equal(out$r, out3$r, tolerance = 0.001) - expect_equal(out$CI_low, out3$CI_low, tolerance = 0.001) - expect_equal(out$CI_high, out3$CI_high, tolerance = 0.001) - expect_equal(out$r, out4$r, tolerance = 0.001) - expect_equal(out$CI_low, out4$CI_low, tolerance = 0.001) - expect_equal(out$CI_high, out4$CI_high, tolerance = 0.001) + expect_equal(out[-(1:2)], out2[-(1:2)]) }) test_that("cor_test kendall tau-a", { @@ -228,9 +218,3 @@ test_that("cor_test one-sided p value", { expect_equal(out$p, baseline$p.value, tolerance = 0.000001) }) -# Edge cases -------------------------------------------------------------- - -test_that("cor_test 2 valid observations", { - out <- correlation(data.frame(v2 = c(2, 1, 1, 2), v3 = c(1, 2, NA, NA))) - expect_true(is.na(out$r)) -}) From 3674ab8535ae913c789f32ace4a3a6c6f4c760ce Mon Sep 17 00:00:00 2001 From: "Mattan S. Ben-Shachar" Date: Sun, 19 May 2024 11:47:13 +0300 Subject: [PATCH 13/33] add method to printing --- R/cor_test.R | 25 ++++++++++++++----------- R/methods_print.R | 4 +++- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/R/cor_test.R b/R/cor_test.R index 9e224b64..d0d0b7a4 100644 --- a/R/cor_test.R +++ b/R/cor_test.R @@ -360,13 +360,16 @@ cor_test <- function(x, y, out$Parameter2 <- y_name } - if (!"Method" %in% names(out)) out$Method <- paste0(toupper(methodUse[1]), methodUse[-1], ifelse(bayesian, " (Bayesian)", "")) - else out$Method <- paste0(out$Method, ifelse(bayesian, " (Bayesian)", "")) + if (!"method" %in% names(out)) { + out$method <- methodUse + } + out$method <- paste0(out$method, ifelse(bayesian, " (Bayesian)", "")) # Reorder columns - order <- c("Parameter1", "Parameter2", "r", "rho", "tau", "Dxy", "CI", "CI_low", "CI_high", "Method") + order <- c("Parameter1", "Parameter2", "r", "rho", "tau", "Dxy", "CI", "CI_low", "CI_high", "method") out <- out[c(order[order %in% names(out)], setdiff(names(out), order[order %in% names(out)]))] + attr(out, "method") <- out$method attr(out, "coefficient_name") <- c("r", "rho", "tau", "Dxy")[c("r", "rho", "tau", "Dxy") %in% names(out)][1] attr(out, "ci") <- ci if ("data" %in% list(...)) attr(out, "data") <- data @@ -394,7 +397,7 @@ cor_test <- function(x, y, "df_error" = df, "t" = t_p[1], "p" = t_p[2], - "Method" = method) + "method" = method) # calculating the confidence interval if (!is.null(ci)) { CI <- switch(alternative, @@ -493,7 +496,7 @@ cor_test <- function(x, y, if (xType == "point") { out <- .cor_test_freq(var_x, var_y, ci, alternative) - out$Method <- "Point Biserial" + out$method <- "Point Biserial" } else { @@ -517,7 +520,7 @@ cor_test <- function(x, y, "df_error" = df, "t" = t_p[1], "p" = t_p[2], - "Method" = switch(xType, + "method" = switch(xType, "base" = "Biserial", "rank" = "Rank Biserial")) @@ -649,7 +652,7 @@ cor_test <- function(x, y, "CI" = ci, "CI_low" = CI[1], "CI_high" = CI[2], - "Method" = "Distance (Bias Corrected)") + "method" = "Distance (Bias Corrected)") } rez @@ -755,7 +758,7 @@ cor_test <- function(x, y, d <- .robust_bootstrap_mahalanobis(cbind(var_x, var_y)) outliers <- d >= 6 out <- .cor_test_freq(var_x[!outliers], var_y[!outliers], ci, alternative, "spearman") - out$Method <- "Shepherd's Pi" + out$method <- "Shepherd's Pi" # returning output out @@ -789,7 +792,7 @@ cor_test <- function(x, y, "CI" = NA, "CI_low" = NA, "CI_high" = NA, - "Method" = "Somers' D") + "method" = "Somers' D") } # polychoric correlation calc function (same as original, with little bit of tweaks) @@ -828,7 +831,7 @@ cor_test <- function(x, y, "df" = df, "t" = t_p[1], "p" = t_p[2], - "Method" = method) + "method" = method) # calculating the confidence interval if (!is.null(ci)) { CI <- switch(alternative, @@ -922,7 +925,7 @@ cor_test <- function(x, y, ) # Add method - out$Method <- method_label + out$method <- method_label out } diff --git a/R/methods_print.R b/R/methods_print.R index 6d90e881..bc3289f6 100644 --- a/R/methods_print.R +++ b/R/methods_print.R @@ -3,7 +3,9 @@ #' @export print.easycorrelation <- function(x, ...) { - cat(insight::export_table(format(x, ...), format = "text")) + x_fmt <- format(x, ...) + x_fmt$method <- NULL + cat(insight::export_table(x_fmt, format = "text")) invisible(x) } From 98baa5d0378d4b000340516128fa64390ca5e288 Mon Sep 17 00:00:00 2001 From: TomGeva <141431661+TomGeva@users.noreply.github.com> Date: Tue, 28 May 2024 18:20:38 +0300 Subject: [PATCH 14/33] some of last meeting fixes adding exception in bayesian correlation for when the variables are identical adding ci and p-value for all correlation as the conventional form of calculating them instead of missing --- R/cor_test.R | 63 ++++++++++++++++++++------- tests/testthat/test-cor_test.R | 4 +- tests/testthat/testthat-problems.rds | Bin 81098 -> 78316 bytes 3 files changed, 49 insertions(+), 18 deletions(-) diff --git a/R/cor_test.R b/R/cor_test.R index d0d0b7a4..d29faffe 100644 --- a/R/cor_test.R +++ b/R/cor_test.R @@ -349,7 +349,7 @@ cor_test <- function(x, y, "distance" = .cor_test_distance(var_x, var_y, ci, alternative, corrected, ...), "percentage" = .cor_test_percentage(var_x, var_y, ci, alternative, beta, ...), "blomqvist" = .cor_test_freq(sign(var_x - median(var_x)), sign(var_y - median(var_y)), ci, alternative, ...), - "hoeffding" = .cor_test_hoeffding(var_x, var_y, ci, ...), + "hoeffding" = .cor_test_hoeffding(var_x, var_y, ci, alternative, ...), "gamma" = .cor_test_gamma(var_x, var_y, ci, alternative, ...), "gaussian" = .cor_test_freq(stats::qnorm(rank(var_x) / (length(var_x) + 1)), stats::qnorm(rank(var_y) / (length(var_y) + 1)), ci, alternative, ...), "shepherd" = .cor_test_shepherd(var_x, var_y, ci, alternative, ...), @@ -590,6 +590,7 @@ cor_test <- function(x, y, corrected = TRUE, ...) { if (!corrected) { + n <- length(var_x) if("index" %in% names(list(...))) { if (index < 0 || index > 2) { insight::format_error("`index` must be between 0 and 2.") @@ -611,13 +612,22 @@ cor_test <- function(x, y, r <- 0 } + df = n - 2 + t_p <- .t_p_value(r, df, alternative) + if (!is.null(ci)) { + CI <- switch(alternative, + "two.sided" = .ci_value(r, c(-1, 1), (1 + ci) / 2, df), + "less" = c(-Inf, .ci_value(r, 1, ci, df)), + "greater" = c(.ci_value(r, -1, ci, df), Inf)) + } + rez <- data.frame("r" = r, - "df_error" = NA, - "t" = NA, - "p" = NA, - "CI" = NA, - "CI_low" = NA, - "CI_high" = NA) + "df_error" = df, + "t" = t_p[1], + "p" = t_p[2], + "CI" = ci, + "CI_low" = CI[1], + "CI_high" = CI[2]) } else { var_x <- as.matrix(stats::dist(var_x)) @@ -703,18 +713,28 @@ cor_test <- function(x, y, #' @keywords internal .cor_test_hoeffding <- function(var_x, var_y, ci = 0.95, + alternative = "two.sided", ...) { insight::check_if_installed("Hmisc", "for 'hoeffding' correlations") rez <- Hmisc::hoeffd(var_x, var_y) + df = length(var_x) - 2 + t_p <- .t_p_value(rez$D[2, 1], df, alternative) + if (!is.null(ci)) { + CI <- switch(alternative, + "two.sided" = .ci_value(rez$D[2, 1], c(-1, 1), (1 + ci) / 2, df), + "less" = c(-Inf, .ci_value(rez$D[2, 1], 1, ci, df)), + "greater" = c(.ci_value(rez$D[2, 1], -1, ci, df), Inf)) + } + data.frame("r" = rez$D[2, 1], "df_error" = length(var_x) - 2, - "t" = NA, + "t" = t_p[1], "p" = rez$P[2, 1], - "CI" = NA, - "CI_low" = NA, - "CI_high" = NA) + "CI" = ci, + "CI_low" = CI[1], + "CI_high" = CI[2]) } # gamma correlation calc function (almost the same as original) @@ -785,13 +805,22 @@ cor_test <- function(x, y, rez <- Hmisc::somers2(var_x, var_y) + df = length(var_x) - 2 + t_p <- .t_p_value(rez["Dxy"], df, alternative) + if (!is.null(ci)) { + CI <- switch(alternative, + "two.sided" = .ci_value(rez["Dxy"], c(-1, 1), (1 + ci) / 2, df), + "less" = c(-Inf, .ci_value(rez["Dxy"], 1, ci, df)), + "greater" = c(.ci_value(rez["Dxy"], -1, ci, df), Inf)) + } + data.frame("Dxy" = rez["Dxy"], "df_error" = length(var_x) - 2, - "t" = NA, - "p" = NA, - "CI" = NA, - "CI_low" = NA, - "CI_high" = NA, + "t" = t_p[1], + "p" = t_p[2], + "CI" = ci, + "CI_low" = CI[1], + "CI_high" = CI[2], "method" = "Somers' D") } @@ -894,6 +923,8 @@ cor_test <- function(x, y, ...) { insight::check_if_installed("BayesFactor") + if (all(var_x == var_y)) insight::format_error("The two variables must be different.") + method_label <- "Bayesian Pearson" method <- tolower(method) if (method %in% c("spearman", "spear", "s")) { diff --git a/tests/testthat/test-cor_test.R b/tests/testthat/test-cor_test.R index b6b804dd..d6c20ba4 100644 --- a/tests/testthat/test-cor_test.R +++ b/tests/testthat/test-cor_test.R @@ -68,8 +68,8 @@ test_that("cor_test bayesian", { df <- iris df$Petal.Length2 <- df$Petal.Length - out3 <- cor_test("Petal.Length", "Petal.Length2", data = df, bayesian = TRUE) - expect_equal(out3$r, 1.000, tolerance = 0.01) + expect_error(cor_test("Petal.Length", "Petal.Length2", data = df, bayesian = TRUE)) + # expect_equal(out3$r, 1.000, tolerance = 0.01) if (getRversion() >= "3.6") { set.seed(123) diff --git a/tests/testthat/testthat-problems.rds b/tests/testthat/testthat-problems.rds index 9fa15123317ffef23a95caaf813227c8dd2eb205..37523bb1a1cda7834c5a29b2e8c1482db9d3e5e6 100644 GIT binary patch literal 78316 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.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 z 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 HhgJUpLAHT? literal 81098 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 From aa831aa7a9543cfb9fbad6c2ffc58ba2d6e560df Mon Sep 17 00:00:00 2001 From: TomGeva <141431661+TomGeva@users.noreply.github.com> Date: Tue, 28 May 2024 20:42:04 +0300 Subject: [PATCH 15/33] updating examples --- R/cor_test.R | 47 +++++++++++++++++------------------------------ 1 file changed, 17 insertions(+), 30 deletions(-) diff --git a/R/cor_test.R b/R/cor_test.R index d29faffe..5a013cef 100644 --- a/R/cor_test.R +++ b/R/cor_test.R @@ -140,58 +140,45 @@ #' @examples #' library(correlation) #' -#' cor_test(iris, "Sepal.Length", "Sepal.Width") -#' cor_test(iris, "Sepal.Length", "Sepal.Width", method = "spearman") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris) +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "spearman") #' \donttest{ -#' cor_test(iris, "Sepal.Length", "Sepal.Width", method = "kendall") -#' cor_test(iris, "Sepal.Length", "Sepal.Width", method = "biweight") -#' cor_test(iris, "Sepal.Length", "Sepal.Width", method = "distance") -#' cor_test(iris, "Sepal.Length", "Sepal.Width", method = "percentage") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "kendall") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "biweight") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "distance") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "percentage") #' -#' if (require("wdm", quietly = TRUE)) { -#' cor_test(iris, "Sepal.Length", "Sepal.Width", method = "blomqvist") -#' } +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "blomqvist") #' #' if (require("Hmisc", quietly = TRUE)) { -#' cor_test(iris, "Sepal.Length", "Sepal.Width", method = "hoeffding") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "hoeffding") #' } -#' cor_test(iris, "Sepal.Length", "Sepal.Width", method = "gamma") -#' cor_test(iris, "Sepal.Length", "Sepal.Width", method = "gaussian") -#' cor_test(iris, "Sepal.Length", "Sepal.Width", method = "shepherd") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "gamma") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "gaussian") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "shepherd") + #' if (require("BayesFactor", quietly = TRUE)) { -#' cor_test(iris, "Sepal.Length", "Sepal.Width", bayesian = TRUE) +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, bayesian = TRUE) #' } #' -#' # Robust (these two are equivalent) -#' cor_test(iris, "Sepal.Length", "Sepal.Width", method = "spearman") -#' cor_test(iris, "Sepal.Length", "Sepal.Width", method = "pearson", ranktransform = TRUE) -#' -#' # Winsorized -#' cor_test(iris, "Sepal.Length", "Sepal.Width", winsorize = 0.2) -#' #' # Tetrachoric #' if (require("psych", quietly = TRUE) && require("rstanarm", quietly = TRUE)) { #' data <- iris #' data$Sepal.Width_binary <- ifelse(data$Sepal.Width > 3, 1, 0) #' data$Petal.Width_binary <- ifelse(data$Petal.Width > 1.2, 1, 0) -#' cor_test(data, "Sepal.Width_binary", "Petal.Width_binary", method = "tetrachoric") +#' cor_test("Sepal.Width_binary", "Petal.Width_binary", data = data, method = "tetrachoric") #' #' # Biserial -#' cor_test(data, "Sepal.Width", "Petal.Width_binary", method = "biserial") +#' cor_test("Sepal.Width", "Petal.Width_binary", data = data, method = "biserial") #' #' # Polychoric #' data$Petal.Width_ordinal <- as.factor(round(data$Petal.Width)) #' data$Sepal.Length_ordinal <- as.factor(round(data$Sepal.Length)) -#' cor_test(data, "Petal.Width_ordinal", "Sepal.Length_ordinal", method = "polychoric") +#' cor_test("Petal.Width_ordinal", "Sepal.Length_ordinal", data = data, method = "polychoric") #' #' # When one variable is continuous, will run 'polyserial' correlation -#' cor_test(data, "Sepal.Width", "Sepal.Length_ordinal", method = "polychoric") +#' cor_test("Sepal.Width", "Sepal.Length_ordinal", data = data, method = "polychoric") #' } -#' -#' # Partial -#' cor_test(iris, "Sepal.Length", "Sepal.Width", partial = TRUE) -#' cor_test(iris, "Sepal.Length", "Sepal.Width", multilevel = TRUE) -#' cor_test(iris, "Sepal.Length", "Sepal.Width", partial_bayesian = TRUE) #' } #' @export cor_test <- function(x, y, From 6b18b7b0ffec9b561ac171560c761d8564e56fb4 Mon Sep 17 00:00:00 2001 From: "Mattan S. Ben-Shachar" Date: Wed, 29 May 2024 08:53:07 +0300 Subject: [PATCH 16/33] update examples in docs --- R/cor_test.R | 40 +++++++++++++++------------- man/cor_test.Rd | 71 +++++++++++++++++++++++-------------------------- 2 files changed, 56 insertions(+), 55 deletions(-) diff --git a/R/cor_test.R b/R/cor_test.R index 5a013cef..6519f096 100644 --- a/R/cor_test.R +++ b/R/cor_test.R @@ -139,45 +139,49 @@ #' #' @examples #' library(correlation) +#' data("iris") #' -#' cor_test("Sepal.Length", "Sepal.Width", data = iris) +#' cor_test(iris$Sepal.Length, iris$Sepal.Width) # method = "pearson" +#' # or +#' cor_test("Sepal.Length", "Sepal.Width", data = iris) # method = "pearson" #' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "spearman") #' \donttest{ #' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "kendall") #' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "biweight") #' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "distance") #' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "percentage") -#' #' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "blomqvist") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "gamma") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "gaussian") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "shepherd") #' #' if (require("Hmisc", quietly = TRUE)) { #' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "hoeffding") #' } -#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "gamma") -#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "gaussian") -#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "shepherd") - +#' #' if (require("BayesFactor", quietly = TRUE)) { #' cor_test("Sepal.Length", "Sepal.Width", data = iris, bayesian = TRUE) #' } #' -#' # Tetrachoric +#' # Tetrachoric, Polychoric, and Biserial #' if (require("psych", quietly = TRUE) && require("rstanarm", quietly = TRUE)) { -#' data <- iris -#' data$Sepal.Width_binary <- ifelse(data$Sepal.Width > 3, 1, 0) -#' data$Petal.Width_binary <- ifelse(data$Petal.Width > 1.2, 1, 0) -#' cor_test("Sepal.Width_binary", "Petal.Width_binary", data = data, method = "tetrachoric") +#' data("mtcars") +#' mtcars$am <- factor(mtcars$am, levels = 0:1) +#' mtcars$vs <- factor(mtcars$vs, levels = 0:1) +#' mtcars$cyl <- ordered(mtcars$cyl, levels = c(4, 6, 8)) +#' mtcars$carb <- ordered(mtcars$carb, , levels = c(1:4, 6, 8)) +#' +#' # Tetrachoric +#' cor_test(mtcars$am, mtcars$vs, method = "tetrachoric") #' #' # Biserial -#' cor_test("Sepal.Width", "Petal.Width_binary", data = data, method = "biserial") +#' cor_test(mtcars$mpg, mtcars$am, method = "biserial") #' #' # Polychoric -#' data$Petal.Width_ordinal <- as.factor(round(data$Petal.Width)) -#' data$Sepal.Length_ordinal <- as.factor(round(data$Sepal.Length)) -#' cor_test("Petal.Width_ordinal", "Sepal.Length_ordinal", data = data, method = "polychoric") +#' cor_test(mtcars$cyl, mtcars$carb, method = "polychoric") #' #' # When one variable is continuous, will run 'polyserial' correlation -#' cor_test("Sepal.Width", "Sepal.Length_ordinal", data = data, method = "polychoric") +#' cor_test(mtcars$cyl, mtcars$mpg, method = "polychoric") #' } #' } #' @export @@ -817,7 +821,7 @@ cor_test <- function(x, y, ci = 0.95, alternative = "two.sided", ...) { - insight::check_if_installed("psych", "for 'tetrachronic' correlations") + insight::check_if_installed("psych", "for 'polychoric' correlations") # valid matrix check if (!is.factor(var_x) && !is.factor(var_y)) insight::format_error("Polychoric correlations can only be ran on ordinal factors.") @@ -868,7 +872,7 @@ cor_test <- function(x, y, ci = 0.95, alternative = "two.sided", ...) { - insight::check_if_installed("psych", "for 'tetrachronic' correlations") + insight::check_if_installed("psych", "for 'tetrachoric' correlations") # valid matrix check if (length(unique(var_x)) > 2 && length(unique(var_y)) > 2) insight::format_error("Tetrachoric correlations can only be ran on dichotomous data.") diff --git a/man/cor_test.Rd b/man/cor_test.Rd index 6f3dfd9e..d03adcb1 100644 --- a/man/cor_test.Rd +++ b/man/cor_test.Rd @@ -156,61 +156,58 @@ distributed continuous latent variables, from two observed ordinal variables. applicable when both observed variables are dichotomous. } } + +\subsection{Confidence Intervals}{ + +For correlation methods that do not have a direct parametric method of +obtaining \emph{p}-values and CIs, we use \link{cor_to_p} and \link{cor_to_ci}. +} } \examples{ library(correlation) +data("iris") -cor_test(iris, "Sepal.Length", "Sepal.Width") -cor_test(iris, "Sepal.Length", "Sepal.Width", method = "spearman") +cor_test(iris$Sepal.Length, iris$Sepal.Width) # method = "pearson" +# or +cor_test("Sepal.Length", "Sepal.Width", data = iris) # method = "pearson" +cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "spearman") \donttest{ -cor_test(iris, "Sepal.Length", "Sepal.Width", method = "kendall") -cor_test(iris, "Sepal.Length", "Sepal.Width", method = "biweight") -cor_test(iris, "Sepal.Length", "Sepal.Width", method = "distance") -cor_test(iris, "Sepal.Length", "Sepal.Width", method = "percentage") - -if (require("wdm", quietly = TRUE)) { - cor_test(iris, "Sepal.Length", "Sepal.Width", method = "blomqvist") -} +cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "kendall") +cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "biweight") +cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "distance") +cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "percentage") +cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "blomqvist") +cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "gamma") +cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "gaussian") +cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "shepherd") if (require("Hmisc", quietly = TRUE)) { - cor_test(iris, "Sepal.Length", "Sepal.Width", method = "hoeffding") + cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "hoeffding") } -cor_test(iris, "Sepal.Length", "Sepal.Width", method = "gamma") -cor_test(iris, "Sepal.Length", "Sepal.Width", method = "gaussian") -cor_test(iris, "Sepal.Length", "Sepal.Width", method = "shepherd") + if (require("BayesFactor", quietly = TRUE)) { - cor_test(iris, "Sepal.Length", "Sepal.Width", bayesian = TRUE) + cor_test("Sepal.Length", "Sepal.Width", data = iris, bayesian = TRUE) } -# Robust (these two are equivalent) -cor_test(iris, "Sepal.Length", "Sepal.Width", method = "spearman") -cor_test(iris, "Sepal.Length", "Sepal.Width", method = "pearson", ranktransform = TRUE) - -# Winsorized -cor_test(iris, "Sepal.Length", "Sepal.Width", winsorize = 0.2) - -# Tetrachoric +# Tetrachoric, Polychoric, and Biserial if (require("psych", quietly = TRUE) && require("rstanarm", quietly = TRUE)) { - data <- iris - data$Sepal.Width_binary <- ifelse(data$Sepal.Width > 3, 1, 0) - data$Petal.Width_binary <- ifelse(data$Petal.Width > 1.2, 1, 0) - cor_test(data, "Sepal.Width_binary", "Petal.Width_binary", method = "tetrachoric") + data("mtcars") + mtcars$am <- factor(mtcars$am, levels = 0:1) + mtcars$vs <- factor(mtcars$vs, levels = 0:1) + mtcars$cyl <- ordered(mtcars$cyl, levels = c(4, 6, 8)) + mtcars$carb <- ordered(mtcars$carb, , levels = c(1:4, 6, 8)) + + # Tetrachoric + cor_test(mtcars$am, mtcars$vs, method = "tetrachoric") # Biserial - cor_test(data, "Sepal.Width", "Petal.Width_binary", method = "biserial") + cor_test(mtcars$mpg, mtcars$am, method = "biserial") # Polychoric - data$Petal.Width_ordinal <- as.factor(round(data$Petal.Width)) - data$Sepal.Length_ordinal <- as.factor(round(data$Sepal.Length)) - cor_test(data, "Petal.Width_ordinal", "Sepal.Length_ordinal", method = "polychoric") + cor_test(mtcars$cyl, mtcars$carb, method = "polychoric") # When one variable is continuous, will run 'polyserial' correlation - cor_test(data, "Sepal.Width", "Sepal.Length_ordinal", method = "polychoric") + cor_test(mtcars$cyl, mtcars$mpg, method = "polychoric") } - -# Partial -cor_test(iris, "Sepal.Length", "Sepal.Width", partial = TRUE) -cor_test(iris, "Sepal.Length", "Sepal.Width", multilevel = TRUE) -cor_test(iris, "Sepal.Length", "Sepal.Width", partial_bayesian = TRUE) } } From cd0684399a621ecce8cd17ce098a7d94dce48da5 Mon Sep 17 00:00:00 2001 From: "Mattan S. Ben-Shachar" Date: Wed, 29 May 2024 08:53:18 +0300 Subject: [PATCH 17/33] Update testthat.R --- tests/testthat.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testthat.R b/tests/testthat.R index 082c3955..76c451b6 100644 --- a/tests/testthat.R +++ b/tests/testthat.R @@ -1,4 +1,4 @@ library(testthat) library(correlation) -test_check("correlation") +test_check("correlation2") From 3297efc078a2d45160ef05f5dcca09b9fc663ebe Mon Sep 17 00:00:00 2001 From: TomGeva <141431661+TomGeva@users.noreply.github.com> Date: Wed, 5 Jun 2024 23:41:52 +0300 Subject: [PATCH 18/33] Update testthat.R fixing the library call, following the prev fix of the test_check call --- tests/testthat.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testthat.R b/tests/testthat.R index 76c451b6..1adfa91b 100644 --- a/tests/testthat.R +++ b/tests/testthat.R @@ -1,4 +1,4 @@ library(testthat) -library(correlation) +library(correlation2) test_check("correlation2") From 8bed8f511b8df07a304a9055caa8fa9f964b5bc8 Mon Sep 17 00:00:00 2001 From: TomGeva <141431661+TomGeva@users.noreply.github.com> Date: Thu, 6 Jun 2024 00:15:01 +0300 Subject: [PATCH 19/33] semantic fix to negate failure in distance correlation test --- R/cor_test.R | 164 +++++++++++++++++++++++++-------------------------- 1 file changed, 82 insertions(+), 82 deletions(-) diff --git a/R/cor_test.R b/R/cor_test.R index 6519f096..0acdf2ac 100644 --- a/R/cor_test.R +++ b/R/cor_test.R @@ -8,7 +8,7 @@ #' @param data An optional data frame. #' @param ci Confidence/Credible Interval level. If `"default"`, then it is #' set to `0.95` (`95%` CI). -#' @param method A character string indicating which correlation coefficient is +#' @param Method A character string indicating which correlation coefficient is #' to be used for the test. \cr Possible Values: `"pearson"` (default), #' `"kendall"`, `"spearman"`, `"biserial"`, `"point-biserial"`, `"rankbiserial"`, #' `"polychoric"`, `"tetrachoric"`, `"biweight"`, `"distance"`, `"percentage"` @@ -24,7 +24,7 @@ #' @param verbose Toggle warnings. #' @param ... Optional arguments: #' - `data` A data frame (when `x` and/or `y` are not vectors). -#' - Arguments dependent on `method` being: +#' - Arguments dependent on `Method` being: #' - `"kendall"`: #' - `tau_type` = `"b"` #' - `direction` = `"row"` (used when `tau_type` = `"a"`) @@ -34,14 +34,14 @@ #' - `beta` = `0.2` #' - `"bayes"`: #' - `bayesian_prior` = "medium" -#' - `bayesian_ci_method` = "hdi" +#' - `bayesian_ci_Method` = "hdi" #' - `bayesian_test` = `c("pd", "rope", "bf")` #' #' #' @details #' #' ## Correlation Types -#' - **Pearson's correlation**: This is the most common correlation method. It +#' - **Pearson's correlation**: This is the most common correlation Method. It #' corresponds to the covariance of the two variables normalized (i.e., divided) #' by the product of their standard deviations. #' @@ -134,29 +134,29 @@ #' #' ## Confidence Intervals #' -#' For correlation methods that do not have a direct parametric method of +#' For correlation Methods that do not have a direct parametric Method of #' obtaining _p_-values and CIs, we use [cor_to_p] and [cor_to_ci]. #' #' @examples #' library(correlation) #' data("iris") #' -#' cor_test(iris$Sepal.Length, iris$Sepal.Width) # method = "pearson" +#' cor_test(iris$Sepal.Length, iris$Sepal.Width) # Method = "pearson" #' # or -#' cor_test("Sepal.Length", "Sepal.Width", data = iris) # method = "pearson" -#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "spearman") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris) # Method = "pearson" +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, Method = "spearman") #' \donttest{ -#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "kendall") -#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "biweight") -#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "distance") -#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "percentage") -#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "blomqvist") -#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "gamma") -#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "gaussian") -#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "shepherd") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, Method = "kendall") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, Method = "biweight") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, Method = "distance") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, Method = "percentage") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, Method = "blomqvist") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, Method = "gamma") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, Method = "gaussian") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, Method = "shepherd") #' #' if (require("Hmisc", quietly = TRUE)) { -#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "hoeffding") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, Method = "hoeffding") #' } #' #' if (require("BayesFactor", quietly = TRUE)) { @@ -172,22 +172,22 @@ #' mtcars$carb <- ordered(mtcars$carb, , levels = c(1:4, 6, 8)) #' #' # Tetrachoric -#' cor_test(mtcars$am, mtcars$vs, method = "tetrachoric") +#' cor_test(mtcars$am, mtcars$vs, Method = "tetrachoric") #' #' # Biserial -#' cor_test(mtcars$mpg, mtcars$am, method = "biserial") +#' cor_test(mtcars$mpg, mtcars$am, Method = "biserial") #' #' # Polychoric -#' cor_test(mtcars$cyl, mtcars$carb, method = "polychoric") +#' cor_test(mtcars$cyl, mtcars$carb, Method = "polychoric") #' #' # When one variable is continuous, will run 'polyserial' correlation -#' cor_test(mtcars$cyl, mtcars$mpg, method = "polychoric") +#' cor_test(mtcars$cyl, mtcars$mpg, Method = "polychoric") #' } #' } #' @export cor_test <- function(x, y, data = NULL, - method = "pearson", + Method = "pearson", ci = 0.95, alternative = "two.sided", bayesian = FALSE, @@ -197,8 +197,8 @@ cor_test <- function(x, y, # checks # +======+ - # check value of method - method <- match.arg(tolower(method), c("pearson", "spearman", "spear", "s", + # check value of Method + Method <- match.arg(tolower(Method), c("pearson", "spearman", "spear", "s", "kendall", "biserial", "pointbiserial", "point-biserial", "rankbiserial", "rank-biserial", "biweight", "distance", @@ -208,14 +208,14 @@ cor_test <- function(x, y, "gaussian", "shepherd", "sheperd", "shepherdspi", "pi", "somers", "poly", "polychoric", "tetra", "tetrachoric")) - methodUse <- ifelse(method %in% c("pearson", "spearman", "spear", "s"), "frequantive", method) - methodUse <- ifelse(method %in% c("pointbiserial", "point-biserial"), "point-biserial", methodUse) - methodUse <- ifelse(method %in% c("rankbiserial", "rank-biserial"), "rank-biserial", methodUse) - methodUse <- ifelse(method %in% c("percentage", "percentage_bend", "percentagebend", "pb"), "percentage", methodUse) - methodUse <- ifelse(method %in% c("blomqvist", "median", "medial"), "blomqvist", methodUse) - methodUse <- ifelse(method %in% c("shepherd", "sheperd", "shepherdspi", "pi"), "shepherd", methodUse) - methodUse <- ifelse(method %in% c("poly", "polychoric"), "polychoric", methodUse) - methodUse <- ifelse(method %in% c("tetra", "tetrachoric"), "tetrachoric", methodUse) + MethodUse <- ifelse(Method %in% c("pearson", "spearman", "spear", "s"), "frequantive", Method) + MethodUse <- ifelse(Method %in% c("pointbiserial", "point-biserial"), "point-biserial", MethodUse) + MethodUse <- ifelse(Method %in% c("rankbiserial", "rank-biserial"), "rank-biserial", MethodUse) + MethodUse <- ifelse(Method %in% c("percentage", "percentage_bend", "percentagebend", "pb"), "percentage", MethodUse) + MethodUse <- ifelse(Method %in% c("blomqvist", "median", "medial"), "blomqvist", MethodUse) + MethodUse <- ifelse(Method %in% c("shepherd", "sheperd", "shepherdspi", "pi"), "shepherd", MethodUse) + MethodUse <- ifelse(Method %in% c("poly", "polychoric"), "polychoric", MethodUse) + MethodUse <- ifelse(Method %in% c("tetra", "tetrachoric"), "tetrachoric", MethodUse) # vectors or names check xIsName <- is.character(x) && (length(x) == 1L) @@ -251,7 +251,7 @@ cor_test <- function(x, y, } # Make sure x,y are not factor(s) - if (!methodUse %in% c("tetrachoric", "polychoric")) { + if (!MethodUse %in% c("tetrachoric", "polychoric")) { var_x <- datawizard::to_numeric(var_x, dummy_factors = FALSE) var_y <- datawizard::to_numeric(var_y, dummy_factors = FALSE) } @@ -268,7 +268,7 @@ cor_test <- function(x, y, alternative <- match.arg(alternative, c("two.sided", "less", "greater")) # check value of tau_type and direction when relevant - if(method == "kendall") { + if(Method == "kendall") { tau_type <- "b" direction <- "row" if ("tau_type" %in% names(list(...))) { @@ -279,14 +279,14 @@ cor_test <- function(x, y, } } - if (methodUse == "distance") { + if (MethodUse == "distance") { corrected <- TRUE if ("corrected" %in% names(list(...))) { corrected <- list(...)$corrected } } - if(methodUse == "percentage") { + if(MethodUse == "percentage") { beta <- 0.2 if("beta" %in% names(list(...))) { beta <- list(...)$beta @@ -298,7 +298,7 @@ cor_test <- function(x, y, if(bayesian) { bayesian_prior <- "medium" - bayesian_ci_method <- "hdi" + bayesian_ci_Method <- "hdi" bayesian_test <- c("pd", "rope", "bf") if("bayesian_prior" %in% names(list(...))) { @@ -306,8 +306,8 @@ cor_test <- function(x, y, c("medium", "medium.narrow", "wide", "ultra-wide")) } - if ("bayesian_ci_method" %in% names(list(...))) { - bayesian_ci_method <- list(...)$bayesian_ci_method + if ("bayesian_ci_Method" %in% names(list(...))) { + bayesian_ci_Method <- list(...)$bayesian_ci_Method } if ("bayesian_test" %in% names(list(...))) { @@ -316,22 +316,22 @@ cor_test <- function(x, y, } # +=======================+ - # calculate by the method + # calculate by the Method # +=======================+ # when bayesian if(bayesian) { - if (methodUse %in% c("kendall", "biserial", "point-biserial", "rank-biserial", "biweight", "distance", "percentage", "gamma", "somers", "polychoric", "tetrachoric")) - insight::format_error(paste0("The bayesian form of ", toupper(methodUse[1]), methodUse[-1], " correlation method is not supported yet. Get in touch if you want to contribute.")) - if (methodUse %in% c("blomqvist", "hoeffding")) - insight::format_error(paste0("Bayesian ", toupper(methodUse[1]), methodUse[-1], ifelse(methodUse == "hoeffding", "'s", ""), "correlations are not supported yet. Check-out the BBcor package (https://github.com/donaldRwilliams/BBcor).")) - out <- .cor_test_bayes(var_x, var_y, ci, method, ...) + if (MethodUse %in% c("kendall", "biserial", "point-biserial", "rank-biserial", "biweight", "distance", "percentage", "gamma", "somers", "polychoric", "tetrachoric")) + insight::format_error(paste0("The bayesian form of ", toupper(MethodUse[1]), MethodUse[-1], " correlation Method is not supported yet. Get in touch if you want to contribute.")) + if (MethodUse %in% c("blomqvist", "hoeffding")) + insight::format_error(paste0("Bayesian ", toupper(MethodUse[1]), MethodUse[-1], ifelse(MethodUse == "hoeffding", "'s", ""), "correlations are not supported yet. Check-out the BBcor package (https://github.com/donaldRwilliams/BBcor).")) + out <- .cor_test_bayes(var_x, var_y, ci, Method, ...) out$Parameter1 <- x_name out$Parameter2 <- y_name } else { - out <- switch(methodUse, - "frequantive" = .cor_test_freq(var_x, var_y, ci, alternative, method, ...), + out <- switch(MethodUse, + "frequantive" = .cor_test_freq(var_x, var_y, ci, alternative, Method, ...), "kendall" = .cor_test_kendall(var_x, var_y, ci, alternative, tau_type, direction, ...), "biserial" = .cor_test_biserial(var_x, var_y, ci, alternative, xType = "base", ...), "point-biserial" = .cor_test_biserial(var_x, var_y, ci, alternative, xType = "point", ...), @@ -351,16 +351,16 @@ cor_test <- function(x, y, out$Parameter2 <- y_name } - if (!"method" %in% names(out)) { - out$method <- methodUse + if (!"Method" %in% names(out)) { + out$Method <- MethodUse } - out$method <- paste0(out$method, ifelse(bayesian, " (Bayesian)", "")) + out$Method <- paste0(out$Method, ifelse(bayesian, " (Bayesian)", "")) # Reorder columns - order <- c("Parameter1", "Parameter2", "r", "rho", "tau", "Dxy", "CI", "CI_low", "CI_high", "method") + order <- c("Parameter1", "Parameter2", "r", "rho", "tau", "Dxy", "CI", "CI_low", "CI_high", "Method") out <- out[c(order[order %in% names(out)], setdiff(names(out), order[order %in% names(out)]))] - attr(out, "method") <- out$method + attr(out, "Method") <- out$Method attr(out, "coefficient_name") <- c("r", "rho", "tau", "Dxy")[c("r", "rho", "tau", "Dxy") %in% names(out)][1] attr(out, "ci") <- ci if ("data" %in% list(...)) attr(out, "data") <- data @@ -369,17 +369,17 @@ cor_test <- function(x, y, } -# Corr methods ------------------- +# Corr Methods ------------------- # pearson and spearman calc function #' @keywords internal .cor_test_freq <- function(var_x, var_y, ci = 0.95, alternative = "two.sided", - method = "pearson", + Method = "pearson", ...) { # calculating the pearson or spearman correlation coefficient - r <- cor(var_x, var_y, method = method) + r <- cor(var_x, var_y, Method = Method) # calculating the degrees of freedom, t-value and p-value df <- length(var_x) - 2 t_p <- .t_p_value(r, df, alternative) @@ -388,7 +388,7 @@ cor_test <- function(x, y, "df_error" = df, "t" = t_p[1], "p" = t_p[2], - "method" = method) + "Method" = Method) # calculating the confidence interval if (!is.null(ci)) { CI <- switch(alternative, @@ -487,7 +487,7 @@ cor_test <- function(x, y, if (xType == "point") { out <- .cor_test_freq(var_x, var_y, ci, alternative) - out$method <- "Point Biserial" + out$Method <- "Point Biserial" } else { @@ -511,7 +511,7 @@ cor_test <- function(x, y, "df_error" = df, "t" = t_p[1], "p" = t_p[2], - "method" = switch(xType, + "Method" = switch(xType, "base" = "Biserial", "rank" = "Rank Biserial")) @@ -653,7 +653,7 @@ cor_test <- function(x, y, "CI" = ci, "CI_low" = CI[1], "CI_high" = CI[2], - "method" = "Distance (Bias Corrected)") + "Method" = "Distance (Bias Corrected)") } rez @@ -769,7 +769,7 @@ cor_test <- function(x, y, d <- .robust_bootstrap_mahalanobis(cbind(var_x, var_y)) outliers <- d >= 6 out <- .cor_test_freq(var_x[!outliers], var_y[!outliers], ci, alternative, "spearman") - out$method <- "Shepherd's Pi" + out$Method <- "Shepherd's Pi" # returning output out @@ -812,7 +812,7 @@ cor_test <- function(x, y, "CI" = ci, "CI_low" = CI[1], "CI_high" = CI[2], - "method" = "Somers' D") + "Method" = "Somers' D") } # polychoric correlation calc function (same as original, with little bit of tweaks) @@ -833,14 +833,14 @@ cor_test <- function(x, y, x = if (is.factor(var_x)) as.numeric(var_y) else as.numeric(var_x), y = if (is.factor(var_x)) as.numeric(var_x) else as.numeric(var_y) ) - method <- "Polyserial" + Method <- "Polyserial" } else { # Reconstruct dataframe dat <- data.frame(as.numeric(var_x), as.numeric(var_y)) junk <- utils::capture.output({ r <- suppressWarnings(psych::polychoric(dat)$rho[2, 1]) }) - method <- "Polychoric" + Method <- "Polychoric" } # calculating the degrees of freedom, t-value and p-value @@ -851,7 +851,7 @@ cor_test <- function(x, y, "df" = df, "t" = t_p[1], "p" = t_p[2], - "method" = method) + "Method" = Method) # calculating the confidence interval if (!is.null(ci)) { CI <- switch(alternative, @@ -907,33 +907,33 @@ cor_test <- function(x, y, # bayesian frequentist calc function (same as original, with little bit of tweaks) .cor_test_bayes <- function(var_x, var_y, ci = 0.95, - method = "pearson", + Method = "pearson", bayesian_prior = "medium", - bayesian_ci_method = "hdi", + bayesian_ci_Method = "hdi", bayesian_test = c("pd", "rope", "bf"), ...) { insight::check_if_installed("BayesFactor") if (all(var_x == var_y)) insight::format_error("The two variables must be different.") - method_label <- "Bayesian Pearson" - method <- tolower(method) - if (method %in% c("spearman", "spear", "s")) { - var_x <- datawizard::ranktransform(var_x, method = "average") - var_y <- datawizard::ranktransform(var_y, method = "average") + Method_label <- "Bayesian Pearson" + Method <- tolower(Method) + if (Method %in% c("spearman", "spear", "s")) { + var_x <- datawizard::ranktransform(var_x, Method = "average") + var_y <- datawizard::ranktransform(var_y, Method = "average") metho_label <- "Bayesian Spearman" - } else if (method == "gaussian") { + } else if (Method == "gaussian") { var_x <- stats::qnorm(rank(var_x) / (length(var_x) + 1)) var_y <- stats::qnorm(rank(var_y) / (length(var_y) + 1)) - method_label <- "Bayesian Gaussian" - } else if (method %in% c("shepherd", "sheperd", "shepherdspi", "pi")) { + Method_label <- "Bayesian Gaussian" + } else if (Method %in% c("shepherd", "sheperd", "shepherdspi", "pi")) { d <- .robust_bootstrap_mahalanobis(cbind(var_x, var_y)) outliers <- d >= 6 - var_x <- datawizard::ranktransform(var_x[!outliers], method = "average") - var_y <- datawizard::ranktransform(var_y[!outliers], method = "average") + var_x <- datawizard::ranktransform(var_x[!outliers], Method = "average") + var_y <- datawizard::ranktransform(var_y[!outliers], Method = "average") - method_label <- "Bayesian Shepherd's Pi" + Method_label <- "Bayesian Shepherd's Pi" } out <- .cor_test_bayes_base( @@ -941,13 +941,13 @@ cor_test <- function(x, y, var_y, ci = ci, bayesian_prior = bayesian_prior, - bayesian_ci_method = bayesian_ci_method, + bayesian_ci_Method = bayesian_ci_Method, bayesian_test = bayesian_test, ... ) - # Add method - out$method <- method_label + # Add Method + out$Method <- Method_label out } @@ -1068,7 +1068,7 @@ cor_test <- function(x, y, var_y, ci = 0.95, bayesian_prior = "medium", - bayesian_ci_method = "hdi", + bayesian_ci_Method = "hdi", bayesian_test = c("pd", "rope", "bf"), ...) { insight::check_if_installed("BayesFactor") @@ -1077,7 +1077,7 @@ cor_test <- function(x, y, params <- parameters::model_parameters( rez, dispersion = FALSE, - ci_method = bayesian_ci_method, + ci_Method = bayesian_ci_Method, test = bayesian_test, rope_range = c(-0.1, 0.1), rope_ci = 1, From 96fa4b95476f70b33b667e2f3c5c8200721434f7 Mon Sep 17 00:00:00 2001 From: TomGeva <141431661+TomGeva@users.noreply.github.com> Date: Thu, 6 Jun 2024 08:56:24 +0300 Subject: [PATCH 20/33] uploading snaps --- tests/testthat/_snaps/as.list.new.md | 201 ++++++++++++++++++ tests/testthat/_snaps/correlation.new.md | 38 ++++ tests/testthat/_snaps/methods.new.md | 51 +++++ tests/testthat/_snaps/renaming.new.md | 46 ++++ .../_snaps/selecting_variables.new.md | 46 ++++ tests/testthat/testthat-problems.rds | Bin 78316 -> 104412 bytes 6 files changed, 382 insertions(+) create mode 100644 tests/testthat/_snaps/as.list.new.md create mode 100644 tests/testthat/_snaps/correlation.new.md create mode 100644 tests/testthat/_snaps/methods.new.md create mode 100644 tests/testthat/_snaps/renaming.new.md create mode 100644 tests/testthat/_snaps/selecting_variables.new.md diff --git a/tests/testthat/_snaps/as.list.new.md b/tests/testthat/_snaps/as.list.new.md new file mode 100644 index 00000000..afdd5541 --- /dev/null +++ b/tests/testthat/_snaps/as.list.new.md @@ -0,0 +1,201 @@ +# as.list + + Code + as.list(correlation(mtcars)) + Output + r + --- + Parameter | carb | gear | am | vs | qsec | wt | drat | hp | disp | cyl + ----------------------------------------------------------------------------------------- + mpg | -0.55 | 0.48 | 0.60 | 0.66 | 0.42 | -0.87 | 0.68 | -0.78 | -0.85 | -0.85 + cyl | 0.53 | -0.49 | -0.52 | -0.81 | -0.59 | 0.78 | -0.70 | 0.83 | 0.90 | + disp | 0.39 | -0.56 | -0.59 | -0.71 | -0.43 | 0.89 | -0.71 | 0.79 | | + hp | 0.75 | -0.13 | -0.24 | -0.72 | -0.71 | 0.66 | -0.45 | | | + drat | -0.09 | 0.70 | 0.71 | 0.44 | 0.09 | -0.71 | | | | + wt | 0.43 | -0.58 | -0.69 | -0.55 | -0.17 | | | | | + qsec | -0.66 | -0.21 | -0.23 | 0.74 | | | | | | + vs | -0.57 | 0.21 | 0.17 | | | | | | | + am | 0.06 | 0.79 | | | | | | | | + gear | 0.27 | | | | | | | | | + + + p + --- + Parameter | carb | gear | am | vs | qsec | wt | drat | hp | disp | cyl + ----------------------------------------------------------------------------------------------------------------------- + mpg | 0.02 | 0.10 | 8.27e-03 | 1.09e-03 | 0.22 | 6.86e-09 | 5.86e-04 | 8.05e-06 | 4.78e-08 | 3.18e-08 + cyl | 0.04 | 0.08 | 0.04 | 9.03e-07 | 0.01 | 5.60e-06 | 2.97e-04 | 1.74e-07 | 9.92e-11 | + disp | 0.30 | 0.02 | 0.01 | 2.04e-04 | 0.20 | 6.60e-10 | 2.04e-04 | 3.36e-06 | | + hp | 3.44e-05 | 1.00 | 1.00 | 1.24e-04 | 2.13e-04 | 1.29e-03 | 0.17 | | | + drat | 1.00 | 2.97e-04 | 1.94e-04 | 0.19 | 1.00 | 1.94e-04 | | | | + wt | 0.20 | 0.01 | 3.83e-04 | 0.02 | 1.00 | | | | | + qsec | 1.36e-03 | 1.00 | 1.00 | 4.43e-05 | | | | | | + vs | 0.02 | 1.00 | 1.00 | | | | | | | + am | 1.00 | 2.80e-06 | | | | | | | | + gear | 1.00 | | | | | | | | | + + + +--- + + Code + as.list(correlation(datawizard::data_group(msleep, "vore"), method = "spearman")) + Output + ======= + carni + ======= + + r + --- + Group | Parameter | bodywt | brainwt | awake | sleep_cycle | sleep_rem + ------------------------------------------------------------------------ + carni | sleep_total | -0.48 | -0.59 | -1.00 | 0.31 | 0.95 + carni | sleep_rem | -0.72 | -0.26 | -0.95 | 0.46 | + carni | sleep_cycle | -0.56 | -0.80 | -0.31 | | + carni | awake | 0.48 | 0.59 | | | + carni | brainwt | 0.82 | | | | + + + p + --- + Group | Parameter | bodywt | brainwt | awake | sleep_cycle | sleep_rem + --------------------------------------------------------------------------- + carni | sleep_total | 0.37 | 0.73 | 0.00 | 1.00 | 3.19e-04 + carni | sleep_rem | 0.20 | 1.00 | 3.19e-04 | 1.00 | + carni | sleep_cycle | 1.00 | 1.00 | 1.00 | | + carni | awake | 0.37 | 0.73 | | | + carni | brainwt | 0.09 | | | | + + + + ======= + herbi + ======= + + r + --- + Group | Parameter | bodywt | brainwt | awake | sleep_cycle | sleep_rem + ------------------------------------------------------------------------ + herbi | sleep_total | -0.77 | -0.86 | -1.00 | -0.44 | 0.92 + herbi | sleep_rem | -0.72 | -0.75 | -0.92 | -0.48 | + herbi | sleep_cycle | 0.74 | 0.74 | 0.44 | | + herbi | awake | 0.77 | 0.86 | | | + herbi | brainwt | 0.98 | | | | + + + p + --- + Group | Parameter | bodywt | brainwt | awake | sleep_cycle | sleep_rem + ------------------------------------------------------------------------------ + herbi | sleep_total | 3.42e-06 | 8.71e-06 | 0.00 | 0.35 | 5.00e-09 + herbi | sleep_rem | 4.65e-04 | 4.43e-03 | 5.00e-09 | 0.35 | + herbi | sleep_cycle | 0.03 | 0.04 | 0.35 | | + herbi | awake | 3.42e-06 | 8.71e-06 | | | + herbi | brainwt | 5.17e-13 | | | | + + + + ========= + insecti + ========= + + r + --- + Group | Parameter | bodywt | brainwt | awake | sleep_cycle | sleep_rem + -------------------------------------------------------------------------- + insecti | sleep_total | -0.60 | -0.60 | -1.00 | 0.50 | -0.40 + insecti | sleep_rem | 0.80 | 0.80 | 0.40 | -1.00 | + insecti | sleep_cycle | -0.50 | -0.50 | -0.50 | | + insecti | awake | 0.60 | 0.60 | | | + insecti | brainwt | 1.00 | | | | + + + p + --- + Group | Parameter | bodywt | brainwt | awake | sleep_cycle | sleep_rem + ------------------------------------------------------------------------------- + insecti | sleep_total | 1.00 | 1.00 | 5.56e-23 | 1.00 | 1.00 + insecti | sleep_rem | 1.00 | 1.00 | 1.00 | 0.00 | + insecti | sleep_cycle | 1.00 | 1.00 | 1.00 | | + insecti | awake | 1.00 | 1.00 | | | + insecti | brainwt | 5.56e-23 | | | | + + + + ====== + omni + ====== + + r + --- + Group | Parameter | bodywt | brainwt | awake | sleep_cycle | sleep_rem + ------------------------------------------------------------------------ + omni | sleep_total | -0.10 | -0.28 | -1.00 | -0.24 | 0.14 + omni | sleep_rem | -0.20 | -0.39 | -0.14 | -0.46 | + omni | sleep_cycle | 0.80 | 0.92 | 0.24 | | + omni | awake | 0.10 | 0.28 | | | + omni | brainwt | 0.91 | | | | + + + p + --- + Group | Parameter | bodywt | brainwt | awake | sleep_cycle | sleep_rem + --------------------------------------------------------------------------- + omni | sleep_total | 1.00 | 1.00 | 0.00 | 1.00 | 1.00 + omni | sleep_rem | 1.00 | 1.00 | 1.00 | 1.00 | + omni | sleep_cycle | 0.04 | 7.73e-04 | 1.00 | | + omni | awake | 1.00 | 1.00 | | | + omni | brainwt | 7.64e-06 | | | | + + + + +--- + + Code + as.list(correlation(datawizard::data_group(mtcars, "am"), select = c("cyl", + "wt"), select2 = "hp", method = "percentage")) + Output + === + 0 + === + + r + --- + Group | Parameter | hp + ------------------------ + 0 | cyl | 0.87 + 0 | wt | 0.83 + + + p + --- + Group | Parameter | hp + ---------------------------- + 0 | cyl | 2.11e-06 + 0 | wt | 1.11e-05 + + + + === + 1 + === + + r + --- + Group | Parameter | hp + ------------------------ + 1 | cyl | 0.83 + 1 | wt | 0.80 + + + p + --- + Group | Parameter | hp + ---------------------------- + 1 | cyl | 9.58e-04 + 1 | wt | 1.04e-03 + + + + diff --git a/tests/testthat/_snaps/correlation.new.md b/tests/testthat/_snaps/correlation.new.md new file mode 100644 index 00000000..acaa46a4 --- /dev/null +++ b/tests/testthat/_snaps/correlation.new.md @@ -0,0 +1,38 @@ +# as.data.frame for correlation output + + Code + as.data.frame(correlation(ggplot2::msleep)) + Output + Parameter1 Parameter2 r CI CI_low CI_high method + 1 sleep_total sleep_rem 0.7517550 0.95 0.61667557 0.84383201 pearson + 2 sleep_total sleep_cycle -0.4737127 0.95 -0.70581894 -0.14975542 pearson + 3 sleep_total awake -0.9999986 0.95 -0.99999908 -0.99999779 pearson + 4 sleep_total brainwt -0.3604874 0.95 -0.56942242 -0.10780364 pearson + 5 sleep_total bodywt -0.3120106 0.95 -0.49442632 -0.10327118 pearson + 6 sleep_rem sleep_cycle -0.3381235 0.95 -0.61438094 0.01198335 pearson + 7 sleep_rem awake -0.7517713 0.95 -0.84384279 -0.61669876 pearson + 8 sleep_rem brainwt -0.2213348 0.95 -0.47556189 0.06701441 pearson + 9 sleep_rem bodywt -0.3276507 0.95 -0.53530394 -0.08264933 pearson + 10 sleep_cycle awake 0.4737127 0.95 0.14975542 0.70581894 pearson + 11 sleep_cycle brainwt 0.8516203 0.95 0.70882870 0.92736294 pearson + 12 sleep_cycle bodywt 0.4178029 0.95 0.08089399 0.66902912 pearson + 13 awake brainwt 0.3604874 0.95 0.10780364 0.56942242 pearson + 14 awake bodywt 0.3119801 0.95 0.10323781 0.49440083 pearson + 15 brainwt bodywt 0.9337822 0.95 0.88916423 0.96081138 pearson + df_error t p + 1 59 8.756396 3.783810e-11 + 2 30 -2.946170 4.934837e-02 + 3 81 -5328.711772 3.627785e-225 + 4 54 -2.839979 4.934837e-02 + 5 81 -2.955645 4.085332e-02 + 6 30 -1.967883 1.167709e-01 + 7 59 -8.756832 3.783810e-11 + 8 46 -1.539344 1.305716e-01 + 9 59 -2.663776 4.934837e-02 + 10 30 2.946170 4.934837e-02 + 11 28 8.597296 2.662362e-08 + 12 30 2.518773 5.202211e-02 + 13 54 2.839979 4.934837e-02 + 14 81 2.955326 4.085332e-02 + 15 54 19.175704 1.281756e-24 + diff --git a/tests/testthat/_snaps/methods.new.md b/tests/testthat/_snaps/methods.new.md new file mode 100644 index 00000000..035100ed --- /dev/null +++ b/tests/testthat/_snaps/methods.new.md @@ -0,0 +1,51 @@ +# summary.correlation - target column + + Code + summary(correlation(ggplot2::msleep), target = "t") + Output + # Correlation Matrix (c("sleep_total", "sleep_rem", "sleep_cycle", "awake", "brainwt")-method) + + Parameter | bodywt | brainwt | awake | sleep_cycle | sleep_rem + ------------------------------------------------------------------------ + sleep_total | -2.96* | -2.84* | -5328.71*** | -2.95* | 8.76*** + sleep_rem | -2.66* | -1.54 | -8.76*** | -1.97 | + sleep_cycle | 2.52 | 8.60*** | 2.95* | | + awake | 2.96* | 2.84* | | | + brainwt | 19.18*** | | | | + + p-value adjustment method: Holm (1979) + +--- + + Code + summary(correlation(ggplot2::msleep), target = "df_error") + Output + # Correlation Matrix (c("sleep_total", "sleep_rem", "sleep_cycle", "awake", "brainwt")-method) + + Parameter | bodywt | brainwt | awake | sleep_cycle | sleep_rem + ---------------------------------------------------------------------- + sleep_total | 81.00* | 54.00* | 81.00*** | 30.00* | 59.00*** + sleep_rem | 59.00* | 46.00 | 59.00*** | 30.00 | + sleep_cycle | 30.00 | 28.00*** | 30.00* | | + awake | 81.00* | 54.00* | | | + brainwt | 54.00*** | | | | + + p-value adjustment method: Holm (1979) + +--- + + Code + summary(correlation(ggplot2::msleep), target = "p") + Output + # Correlation Matrix (c("sleep_total", "sleep_rem", "sleep_cycle", "awake", "brainwt")-method) + + Parameter | bodywt | brainwt | awake | sleep_cycle | sleep_rem + ----------------------------------------------------------------------- + sleep_total | 0.04 | 0.05 | 3.63e-225 | 0.05 | 3.78e-11 + sleep_rem | 0.05 | 0.13 | 3.78e-11 | 0.12 | + sleep_cycle | 0.05 | 2.66e-08 | 0.05 | | + awake | 0.04 | 0.05 | | | + brainwt | 1.28e-24 | | | | + + p-value adjustment method: Holm (1979) + diff --git a/tests/testthat/_snaps/renaming.new.md b/tests/testthat/_snaps/renaming.new.md new file mode 100644 index 00000000..abe48852 --- /dev/null +++ b/tests/testthat/_snaps/renaming.new.md @@ -0,0 +1,46 @@ +# renaming columns + + Code + correlation(anscombe, select = c("x1", "x2"), rename = c("var1")) + Condition + Warning: + Mismatch between number of variables and names. + Output + # Correlation Matrix (pearson-method) + + Parameter1 | Parameter2 | r | 95% CI | t(9) | p + ---------------------------------------------------------------- + x1 | x2 | 1.00 | [1.00, 1.00] | Inf | < .001*** + + p-value adjustment method: Holm (1979) + +--- + + Code + correlation(anscombe, select = c("x1", "x2"), rename = c("var1", "var2")) + Output + # Correlation Matrix (pearson-method) + + Parameter1 | Parameter2 | r | 95% CI | t(9) | p + ---------------------------------------------------------------- + var1 | var2 | 1.00 | [1.00, 1.00] | Inf | < .001*** + + p-value adjustment method: Holm (1979) + +--- + + Code + correlation(anscombe, select = c("x1", "x2"), select2 = c("y1", "y2"), rename = c( + "var1", "var2")) + Output + # Correlation Matrix (pearson-method) + + Parameter1 | Parameter2 | r | 95% CI | t(9) | p + -------------------------------------------------------------- + var1 | y1 | 0.82 | [0.42, 0.95] | 4.24 | 0.009** + var1 | y2 | 0.82 | [0.42, 0.95] | 4.24 | 0.009** + var2 | y1 | 0.82 | [0.42, 0.95] | 4.24 | 0.009** + var2 | y2 | 0.82 | [0.42, 0.95] | 4.24 | 0.009** + + p-value adjustment method: Holm (1979) + diff --git a/tests/testthat/_snaps/selecting_variables.new.md b/tests/testthat/_snaps/selecting_variables.new.md new file mode 100644 index 00000000..8a385e66 --- /dev/null +++ b/tests/testthat/_snaps/selecting_variables.new.md @@ -0,0 +1,46 @@ +# selecting specific variables works + + Code + list(df1, df2, df3, df4) + Output + [[1]] + # Correlation Matrix (pearson-method) + + Parameter1 | Parameter2 | r | 95% CI | t(30) | p + ----------------------------------------------------------------- + cyl | hp | 0.83 | [0.68, 0.92] | 8.23 | < .001*** + wt | hp | 0.66 | [0.40, 0.82] | 4.80 | < .001*** + + p-value adjustment method: Holm (1979) + + [[2]] + # Correlation Matrix (pearson-method) + + Group | Parameter1 | Parameter2 | r | 95% CI | df | t | p + ----------------------------------------------------------------------------- + 0 | cyl | hp | 0.85 | [0.64, 0.94] | 17 | 6.53 | < .001*** + 0 | wt | hp | 0.68 | [0.33, 0.87] | 17 | 3.82 | 0.001** + 1 | cyl | hp | 0.90 | [0.69, 0.97] | 11 | 6.87 | < .001*** + 1 | wt | hp | 0.81 | [0.48, 0.94] | 11 | 4.66 | < .001*** + + p-value adjustment method: Holm (1979) + + [[3]] + # Correlation Matrix (pearson-method) + + Parameter1 | Parameter2 | r | 95% CI | t(30) | p + ----------------------------------------------------------------- + wt | hp | 0.66 | [0.40, 0.82] | 4.80 | < .001*** + + p-value adjustment method: Holm (1979) + + [[4]] + # Correlation Matrix (pearson-method) + + Parameter1 | Parameter2 | r | 95% CI | t(30) | p + ----------------------------------------------------------------- + wt | hp | 0.66 | [0.40, 0.82] | 4.80 | < .001*** + + p-value adjustment method: Holm (1979) + + diff --git a/tests/testthat/testthat-problems.rds b/tests/testthat/testthat-problems.rds index 37523bb1a1cda7834c5a29b2e8c1482db9d3e5e6..372aaf7e8374b090306ab273e8fc4b8352f115e7 100644 GIT binary patch literal 104412 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:qRsWXGr{wV}9(y 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

8@^bj3r`vEDy0o-1>fT%M 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 literal 78316 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.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 z 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 HhgJUpLAHT? From 6497bd28875a4a75e7d524c9f5fd595a47681544 Mon Sep 17 00:00:00 2001 From: "Mattan S. Ben-Shachar" Date: Thu, 6 Jun 2024 09:11:39 +0300 Subject: [PATCH 21/33] Update correlation.R --- R/correlation.R | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/R/correlation.R b/R/correlation.R index 5baedcee..40acb7c1 100644 --- a/R/correlation.R +++ b/R/correlation.R @@ -155,27 +155,36 @@ #' #' @export correlation <- function(data, - data2 = NULL, select = NULL, select2 = NULL, - rename = NULL, + method = "pearson", - p_adjust = "holm", + ci = 0.95, - bayesian = FALSE, - bayesian_prior = "medium", - bayesian_ci_method = "hdi", - bayesian_test = c("pd", "rope", "bf"), - redundant = FALSE, + p_adjust = "holm", + + use = "pairwise.complete.obs", include_factors = FALSE, - partial = FALSE, - partial_bayesian = FALSE, - multilevel = FALSE, - ranktransform = FALSE, - winsorize = FALSE, + redundant = FALSE, + verbose = TRUE, standardize_names = getOption("easystats.standardize_names", FALSE), ...) { + # TODO: support grouped_df + + # validate select/select + select <- datawizard::find_columns(data, select = select) + select2 <- datawizard::find_columns(data, select = select2) + + # if include_factors is TRUE + # convert factors to dummy vars + + # use == "pairwise.complete.obs" + # use == "complete.obs" -> na.omit(data) + + # ignore redundant if select2 is given + + # valid matrix checks if (!partial && multilevel) { partial <- TRUE From be993b3219e2b0e31b7ef02fa1901f53a799c65b Mon Sep 17 00:00:00 2001 From: TomGeva <141431661+TomGeva@users.noreply.github.com> Date: Thu, 6 Jun 2024 09:28:30 +0300 Subject: [PATCH 22/33] reverting Method to method only where it is needed --- R/cor_test.R | 148 +++++++++++++++++++++++++-------------------------- 1 file changed, 74 insertions(+), 74 deletions(-) diff --git a/R/cor_test.R b/R/cor_test.R index 0acdf2ac..358b5a48 100644 --- a/R/cor_test.R +++ b/R/cor_test.R @@ -8,7 +8,7 @@ #' @param data An optional data frame. #' @param ci Confidence/Credible Interval level. If `"default"`, then it is #' set to `0.95` (`95%` CI). -#' @param Method A character string indicating which correlation coefficient is +#' @param method A character string indicating which correlation coefficient is #' to be used for the test. \cr Possible Values: `"pearson"` (default), #' `"kendall"`, `"spearman"`, `"biserial"`, `"point-biserial"`, `"rankbiserial"`, #' `"polychoric"`, `"tetrachoric"`, `"biweight"`, `"distance"`, `"percentage"` @@ -24,7 +24,7 @@ #' @param verbose Toggle warnings. #' @param ... Optional arguments: #' - `data` A data frame (when `x` and/or `y` are not vectors). -#' - Arguments dependent on `Method` being: +#' - Arguments dependent on `method` being: #' - `"kendall"`: #' - `tau_type` = `"b"` #' - `direction` = `"row"` (used when `tau_type` = `"a"`) @@ -34,14 +34,14 @@ #' - `beta` = `0.2` #' - `"bayes"`: #' - `bayesian_prior` = "medium" -#' - `bayesian_ci_Method` = "hdi" +#' - `bayesian_ci_method` = "hdi" #' - `bayesian_test` = `c("pd", "rope", "bf")` #' #' #' @details #' #' ## Correlation Types -#' - **Pearson's correlation**: This is the most common correlation Method. It +#' - **Pearson's correlation**: This is the most common correlation method. It #' corresponds to the covariance of the two variables normalized (i.e., divided) #' by the product of their standard deviations. #' @@ -134,29 +134,29 @@ #' #' ## Confidence Intervals #' -#' For correlation Methods that do not have a direct parametric Method of +#' For correlation methods that do not have a direct parametric method of #' obtaining _p_-values and CIs, we use [cor_to_p] and [cor_to_ci]. #' #' @examples #' library(correlation) #' data("iris") #' -#' cor_test(iris$Sepal.Length, iris$Sepal.Width) # Method = "pearson" +#' cor_test(iris$Sepal.Length, iris$Sepal.Width) # method = "pearson" #' # or -#' cor_test("Sepal.Length", "Sepal.Width", data = iris) # Method = "pearson" -#' cor_test("Sepal.Length", "Sepal.Width", data = iris, Method = "spearman") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris) # method = "pearson" +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "spearman") #' \donttest{ -#' cor_test("Sepal.Length", "Sepal.Width", data = iris, Method = "kendall") -#' cor_test("Sepal.Length", "Sepal.Width", data = iris, Method = "biweight") -#' cor_test("Sepal.Length", "Sepal.Width", data = iris, Method = "distance") -#' cor_test("Sepal.Length", "Sepal.Width", data = iris, Method = "percentage") -#' cor_test("Sepal.Length", "Sepal.Width", data = iris, Method = "blomqvist") -#' cor_test("Sepal.Length", "Sepal.Width", data = iris, Method = "gamma") -#' cor_test("Sepal.Length", "Sepal.Width", data = iris, Method = "gaussian") -#' cor_test("Sepal.Length", "Sepal.Width", data = iris, Method = "shepherd") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "kendall") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "biweight") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "distance") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "percentage") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "blomqvist") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "gamma") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "gaussian") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "shepherd") #' #' if (require("Hmisc", quietly = TRUE)) { -#' cor_test("Sepal.Length", "Sepal.Width", data = iris, Method = "hoeffding") +#' cor_test("Sepal.Length", "Sepal.Width", data = iris, method = "hoeffding") #' } #' #' if (require("BayesFactor", quietly = TRUE)) { @@ -172,22 +172,22 @@ #' mtcars$carb <- ordered(mtcars$carb, , levels = c(1:4, 6, 8)) #' #' # Tetrachoric -#' cor_test(mtcars$am, mtcars$vs, Method = "tetrachoric") +#' cor_test(mtcars$am, mtcars$vs, method = "tetrachoric") #' #' # Biserial -#' cor_test(mtcars$mpg, mtcars$am, Method = "biserial") +#' cor_test(mtcars$mpg, mtcars$am, method = "biserial") #' #' # Polychoric -#' cor_test(mtcars$cyl, mtcars$carb, Method = "polychoric") +#' cor_test(mtcars$cyl, mtcars$carb, method = "polychoric") #' #' # When one variable is continuous, will run 'polyserial' correlation -#' cor_test(mtcars$cyl, mtcars$mpg, Method = "polychoric") +#' cor_test(mtcars$cyl, mtcars$mpg, method = "polychoric") #' } #' } #' @export cor_test <- function(x, y, data = NULL, - Method = "pearson", + method = "pearson", ci = 0.95, alternative = "two.sided", bayesian = FALSE, @@ -197,8 +197,8 @@ cor_test <- function(x, y, # checks # +======+ - # check value of Method - Method <- match.arg(tolower(Method), c("pearson", "spearman", "spear", "s", + # check value of method + method <- match.arg(tolower(method), c("pearson", "spearman", "spear", "s", "kendall", "biserial", "pointbiserial", "point-biserial", "rankbiserial", "rank-biserial", "biweight", "distance", @@ -208,14 +208,14 @@ cor_test <- function(x, y, "gaussian", "shepherd", "sheperd", "shepherdspi", "pi", "somers", "poly", "polychoric", "tetra", "tetrachoric")) - MethodUse <- ifelse(Method %in% c("pearson", "spearman", "spear", "s"), "frequantive", Method) - MethodUse <- ifelse(Method %in% c("pointbiserial", "point-biserial"), "point-biserial", MethodUse) - MethodUse <- ifelse(Method %in% c("rankbiserial", "rank-biserial"), "rank-biserial", MethodUse) - MethodUse <- ifelse(Method %in% c("percentage", "percentage_bend", "percentagebend", "pb"), "percentage", MethodUse) - MethodUse <- ifelse(Method %in% c("blomqvist", "median", "medial"), "blomqvist", MethodUse) - MethodUse <- ifelse(Method %in% c("shepherd", "sheperd", "shepherdspi", "pi"), "shepherd", MethodUse) - MethodUse <- ifelse(Method %in% c("poly", "polychoric"), "polychoric", MethodUse) - MethodUse <- ifelse(Method %in% c("tetra", "tetrachoric"), "tetrachoric", MethodUse) + methodUse <- ifelse(method %in% c("pearson", "spearman", "spear", "s"), "frequantive", method) + methodUse <- ifelse(method %in% c("pointbiserial", "point-biserial"), "point-biserial", methodUse) + methodUse <- ifelse(method %in% c("rankbiserial", "rank-biserial"), "rank-biserial", methodUse) + methodUse <- ifelse(method %in% c("percentage", "percentage_bend", "percentagebend", "pb"), "percentage", methodUse) + methodUse <- ifelse(method %in% c("blomqvist", "median", "medial"), "blomqvist", methodUse) + methodUse <- ifelse(method %in% c("shepherd", "sheperd", "shepherdspi", "pi"), "shepherd", methodUse) + methodUse <- ifelse(method %in% c("poly", "polychoric"), "polychoric", methodUse) + methodUse <- ifelse(method %in% c("tetra", "tetrachoric"), "tetrachoric", methodUse) # vectors or names check xIsName <- is.character(x) && (length(x) == 1L) @@ -251,7 +251,7 @@ cor_test <- function(x, y, } # Make sure x,y are not factor(s) - if (!MethodUse %in% c("tetrachoric", "polychoric")) { + if (!methodUse %in% c("tetrachoric", "polychoric")) { var_x <- datawizard::to_numeric(var_x, dummy_factors = FALSE) var_y <- datawizard::to_numeric(var_y, dummy_factors = FALSE) } @@ -268,7 +268,7 @@ cor_test <- function(x, y, alternative <- match.arg(alternative, c("two.sided", "less", "greater")) # check value of tau_type and direction when relevant - if(Method == "kendall") { + if(method == "kendall") { tau_type <- "b" direction <- "row" if ("tau_type" %in% names(list(...))) { @@ -279,14 +279,14 @@ cor_test <- function(x, y, } } - if (MethodUse == "distance") { + if (methodUse == "distance") { corrected <- TRUE if ("corrected" %in% names(list(...))) { corrected <- list(...)$corrected } } - if(MethodUse == "percentage") { + if(methodUse == "percentage") { beta <- 0.2 if("beta" %in% names(list(...))) { beta <- list(...)$beta @@ -298,7 +298,7 @@ cor_test <- function(x, y, if(bayesian) { bayesian_prior <- "medium" - bayesian_ci_Method <- "hdi" + bayesian_ci_method <- "hdi" bayesian_test <- c("pd", "rope", "bf") if("bayesian_prior" %in% names(list(...))) { @@ -306,8 +306,8 @@ cor_test <- function(x, y, c("medium", "medium.narrow", "wide", "ultra-wide")) } - if ("bayesian_ci_Method" %in% names(list(...))) { - bayesian_ci_Method <- list(...)$bayesian_ci_Method + if ("bayesian_ci_method" %in% names(list(...))) { + bayesian_ci_method <- list(...)$bayesian_ci_method } if ("bayesian_test" %in% names(list(...))) { @@ -316,22 +316,22 @@ cor_test <- function(x, y, } # +=======================+ - # calculate by the Method + # calculate by the method # +=======================+ # when bayesian if(bayesian) { - if (MethodUse %in% c("kendall", "biserial", "point-biserial", "rank-biserial", "biweight", "distance", "percentage", "gamma", "somers", "polychoric", "tetrachoric")) - insight::format_error(paste0("The bayesian form of ", toupper(MethodUse[1]), MethodUse[-1], " correlation Method is not supported yet. Get in touch if you want to contribute.")) - if (MethodUse %in% c("blomqvist", "hoeffding")) - insight::format_error(paste0("Bayesian ", toupper(MethodUse[1]), MethodUse[-1], ifelse(MethodUse == "hoeffding", "'s", ""), "correlations are not supported yet. Check-out the BBcor package (https://github.com/donaldRwilliams/BBcor).")) - out <- .cor_test_bayes(var_x, var_y, ci, Method, ...) + if (methodUse %in% c("kendall", "biserial", "point-biserial", "rank-biserial", "biweight", "distance", "percentage", "gamma", "somers", "polychoric", "tetrachoric")) + insight::format_error(paste0("The bayesian form of ", toupper(methodUse[1]), methodUse[-1], " correlation method is not supported yet. Get in touch if you want to contribute.")) + if (methodUse %in% c("blomqvist", "hoeffding")) + insight::format_error(paste0("Bayesian ", toupper(methodUse[1]), methodUse[-1], ifelse(methodUse == "hoeffding", "'s", ""), "correlations are not supported yet. Check-out the BBcor package (https://github.com/donaldRwilliams/BBcor).")) + out <- .cor_test_bayes(var_x, var_y, ci, method, ...) out$Parameter1 <- x_name out$Parameter2 <- y_name } else { - out <- switch(MethodUse, - "frequantive" = .cor_test_freq(var_x, var_y, ci, alternative, Method, ...), + out <- switch(methodUse, + "frequantive" = .cor_test_freq(var_x, var_y, ci, alternative, method, ...), "kendall" = .cor_test_kendall(var_x, var_y, ci, alternative, tau_type, direction, ...), "biserial" = .cor_test_biserial(var_x, var_y, ci, alternative, xType = "base", ...), "point-biserial" = .cor_test_biserial(var_x, var_y, ci, alternative, xType = "point", ...), @@ -352,7 +352,7 @@ cor_test <- function(x, y, } if (!"Method" %in% names(out)) { - out$Method <- MethodUse + out$Method <- methodUse } out$Method <- paste0(out$Method, ifelse(bayesian, " (Bayesian)", "")) @@ -360,7 +360,7 @@ cor_test <- function(x, y, order <- c("Parameter1", "Parameter2", "r", "rho", "tau", "Dxy", "CI", "CI_low", "CI_high", "Method") out <- out[c(order[order %in% names(out)], setdiff(names(out), order[order %in% names(out)]))] - attr(out, "Method") <- out$Method + attr(out, "method") <- out$Method attr(out, "coefficient_name") <- c("r", "rho", "tau", "Dxy")[c("r", "rho", "tau", "Dxy") %in% names(out)][1] attr(out, "ci") <- ci if ("data" %in% list(...)) attr(out, "data") <- data @@ -369,17 +369,17 @@ cor_test <- function(x, y, } -# Corr Methods ------------------- +# Corr methods ------------------- # pearson and spearman calc function #' @keywords internal .cor_test_freq <- function(var_x, var_y, ci = 0.95, alternative = "two.sided", - Method = "pearson", + method = "pearson", ...) { # calculating the pearson or spearman correlation coefficient - r <- cor(var_x, var_y, Method = Method) + r <- cor(var_x, var_y, method = method) # calculating the degrees of freedom, t-value and p-value df <- length(var_x) - 2 t_p <- .t_p_value(r, df, alternative) @@ -388,7 +388,7 @@ cor_test <- function(x, y, "df_error" = df, "t" = t_p[1], "p" = t_p[2], - "Method" = Method) + "Method" = method) # calculating the confidence interval if (!is.null(ci)) { CI <- switch(alternative, @@ -833,14 +833,14 @@ cor_test <- function(x, y, x = if (is.factor(var_x)) as.numeric(var_y) else as.numeric(var_x), y = if (is.factor(var_x)) as.numeric(var_x) else as.numeric(var_y) ) - Method <- "Polyserial" + method <- "Polyserial" } else { # Reconstruct dataframe dat <- data.frame(as.numeric(var_x), as.numeric(var_y)) junk <- utils::capture.output({ r <- suppressWarnings(psych::polychoric(dat)$rho[2, 1]) }) - Method <- "Polychoric" + method <- "Polychoric" } # calculating the degrees of freedom, t-value and p-value @@ -851,7 +851,7 @@ cor_test <- function(x, y, "df" = df, "t" = t_p[1], "p" = t_p[2], - "Method" = Method) + "Method" = method) # calculating the confidence interval if (!is.null(ci)) { CI <- switch(alternative, @@ -907,33 +907,33 @@ cor_test <- function(x, y, # bayesian frequentist calc function (same as original, with little bit of tweaks) .cor_test_bayes <- function(var_x, var_y, ci = 0.95, - Method = "pearson", + method = "pearson", bayesian_prior = "medium", - bayesian_ci_Method = "hdi", + bayesian_ci_method = "hdi", bayesian_test = c("pd", "rope", "bf"), ...) { insight::check_if_installed("BayesFactor") if (all(var_x == var_y)) insight::format_error("The two variables must be different.") - Method_label <- "Bayesian Pearson" - Method <- tolower(Method) - if (Method %in% c("spearman", "spear", "s")) { - var_x <- datawizard::ranktransform(var_x, Method = "average") - var_y <- datawizard::ranktransform(var_y, Method = "average") + method_label <- "Bayesian Pearson" + method <- tolower(method) + if (method %in% c("spearman", "spear", "s")) { + var_x <- datawizard::ranktransform(var_x, method = "average") + var_y <- datawizard::ranktransform(var_y, method = "average") metho_label <- "Bayesian Spearman" - } else if (Method == "gaussian") { + } else if (method == "gaussian") { var_x <- stats::qnorm(rank(var_x) / (length(var_x) + 1)) var_y <- stats::qnorm(rank(var_y) / (length(var_y) + 1)) - Method_label <- "Bayesian Gaussian" - } else if (Method %in% c("shepherd", "sheperd", "shepherdspi", "pi")) { + method_label <- "Bayesian Gaussian" + } else if (method %in% c("shepherd", "sheperd", "shepherdspi", "pi")) { d <- .robust_bootstrap_mahalanobis(cbind(var_x, var_y)) outliers <- d >= 6 - var_x <- datawizard::ranktransform(var_x[!outliers], Method = "average") - var_y <- datawizard::ranktransform(var_y[!outliers], Method = "average") + var_x <- datawizard::ranktransform(var_x[!outliers], method = "average") + var_y <- datawizard::ranktransform(var_y[!outliers], method = "average") - Method_label <- "Bayesian Shepherd's Pi" + method_label <- "Bayesian Shepherd's Pi" } out <- .cor_test_bayes_base( @@ -941,13 +941,13 @@ cor_test <- function(x, y, var_y, ci = ci, bayesian_prior = bayesian_prior, - bayesian_ci_Method = bayesian_ci_Method, + bayesian_ci_method = bayesian_ci_method, bayesian_test = bayesian_test, ... ) - # Add Method - out$Method <- Method_label + # Add method + out$Method <- method_label out } @@ -1068,7 +1068,7 @@ cor_test <- function(x, y, var_y, ci = 0.95, bayesian_prior = "medium", - bayesian_ci_Method = "hdi", + bayesian_ci_method = "hdi", bayesian_test = c("pd", "rope", "bf"), ...) { insight::check_if_installed("BayesFactor") @@ -1077,7 +1077,7 @@ cor_test <- function(x, y, params <- parameters::model_parameters( rez, dispersion = FALSE, - ci_Method = bayesian_ci_Method, + ci_method = bayesian_ci_method, test = bayesian_test, rope_range = c(-0.1, 0.1), rope_ci = 1, From 00408e0a66ea5518f7802875701c2fea310e5819 Mon Sep 17 00:00:00 2001 From: TomGeva <141431661+TomGeva@users.noreply.github.com> Date: Thu, 6 Jun 2024 09:39:54 +0300 Subject: [PATCH 23/33] changing the degrees of freedom of distance changing it to match its equivalences i other types of correlations, and adding a comment that explains the reason for the original way --- R/cor_test.R | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/R/cor_test.R b/R/cor_test.R index 358b5a48..36872f6b 100644 --- a/R/cor_test.R +++ b/R/cor_test.R @@ -633,9 +633,18 @@ cor_test <- function(x, y, YY <- (sum(B * B) - (n / (n - 2)) * sum(diag(B * B))) / n^2 r <- XY / sqrt(XX * YY) - M <- n * (n - 3) / 2 - df <- M - 1 + # due to the fact that the calculation of distance correlation is based on + # every pair of samples, the degrees freedom increases combinatorially, and + # it is calculated as: + # + # df <- n * (n - 3) / 2 - 1 + # + # but, for the simplicity of the function and its results across all types + # of correlations, we will keep the degrees of freedom as it is usually + # calculated. + + df <- n - 2 t_p <- .t_p_value(r, df, alternative) # calculating the confidence interval From 98b5f0c5f73e536bd134dbb7732ad6e327a321a6 Mon Sep 17 00:00:00 2001 From: TomGeva <141431661+TomGeva@users.noreply.github.com> Date: Mon, 10 Jun 2024 05:56:51 +0300 Subject: [PATCH 24/33] semantic changes --- R/cor_test.R | 7 +- R/correlation.R | 238 ++++++++++++++++++++++++++++++------------------ 2 files changed, 150 insertions(+), 95 deletions(-) diff --git a/R/cor_test.R b/R/cor_test.R index 36872f6b..52fc455b 100644 --- a/R/cor_test.R +++ b/R/cor_test.R @@ -297,22 +297,21 @@ cor_test <- function(x, y, } if(bayesian) { - bayesian_prior <- "medium" - bayesian_ci_method <- "hdi" - bayesian_test <- c("pd", "rope", "bf") - if("bayesian_prior" %in% names(list(...))) { bayesian_prior <- match.arg(tolower(list(...)$bayesian_prior), c("medium", "medium.narrow", "wide", "ultra-wide")) } + else bayesian_prior <- "medium" if ("bayesian_ci_method" %in% names(list(...))) { bayesian_ci_method <- list(...)$bayesian_ci_method } + else bayesian_ci_method <- "hdi" if ("bayesian_test" %in% names(list(...))) { bayesian_test <- list(...)$bayesian_test } + else bayesian_test <- c("pd", "rope", "bf") } # +=======================+ diff --git a/R/correlation.R b/R/correlation.R index 40acb7c1..5d16d617 100644 --- a/R/correlation.R +++ b/R/correlation.R @@ -154,19 +154,24 @@ #' ordinal variables. American Sociological Review. 27 (6). #' #' @export + +## Notes ========= + +# files utils_clean_data.R and utils_get_combinations.R are now redundant +# in LOOP can be converted to double loop one runs on the x values and the other on the y values (each time cleaned from the done x values if there is no select2) + +# actual function ---- + correlation <- function(data, select = NULL, select2 = NULL, - method = "pearson", - ci = 0.95, p_adjust = "holm", - use = "pairwise.complete.obs", + bayesian = FALSE, include_factors = FALSE, redundant = FALSE, - verbose = TRUE, standardize_names = getOption("easystats.standardize_names", FALSE), ...) { @@ -176,42 +181,11 @@ correlation <- function(data, select <- datawizard::find_columns(data, select = select) select2 <- datawizard::find_columns(data, select = select2) - # if include_factors is TRUE - # convert factors to dummy vars - - # use == "pairwise.complete.obs" - # use == "complete.obs" -> na.omit(data) - - # ignore redundant if select2 is given - - - # valid matrix checks - if (!partial && multilevel) { - partial <- TRUE - convert_back_to_r <- TRUE - } else { - convert_back_to_r <- FALSE - } - - # p-adjustment - if (bayesian) { - p_adjust <- "none" - } - - # CI - if (ci == "default") { - ci <- 0.95 - } - - if (is.null(data2) && !is.null(select)) { + if (!is.null(select)) { # check for valid names all_selected <- c(select, select2) not_in_data <- !all_selected %in% colnames(data) - if (any(not_in_data)) { - insight::format_error( - paste0("Following variables are not in the data: ", all_selected[not_in_data], collapse = ", ") - ) - } + if (any(not_in_data)) insight::format_error(paste0("Following variables are not in the data: ", all_selected[not_in_data], collapse = ", ")) # for grouped df, add group variables to both data frames if (inherits(data, "grouped_df")) { @@ -223,7 +197,6 @@ correlation <- function(data, grp_df <- NULL } - data2 <- if (!is.null(select2)) data[select2] data <- data[select] @@ -231,6 +204,28 @@ correlation <- function(data, attr(data2, "groups") <- if (!is.null(select2)) grp_df } + # if include_factors is TRUE + # convert factors to dummy vars + + # done further in the correlation function + + # use == "pairwise.complete.obs" + # use == "complete.obs" -> na.omit(data) + + # ignore redundant if select2 is given + + # adjusting variables if bayesian is TRUE + if(bayesian) { + p_adjust <- "none" + } + + # CI + if (ci == "default") { + ci <- 0.95 + } + + + # renaming the columns if so desired if (!is.null(rename)) { if (length(data) != length(rename)) { @@ -266,12 +261,10 @@ correlation <- function(data, data, data2 = data2, method = method, - p_adjust = p_adjust, ci = ci, + p_adjust = p_adjust, + use = use, bayesian = bayesian, - bayesian_prior = bayesian_prior, - bayesian_ci_method = bayesian_ci_method, - bayesian_test = bayesian_test, redundant = redundant, include_factors = include_factors, partial = partial, @@ -323,22 +316,16 @@ correlation <- function(data, #' @keywords internal .correlation_grouped_df <- function(data, - data2 = NULL, + data2 = NULL, # do i need it tho?, maybe except selects instead? method = "pearson", + ci = 0.95, p_adjust = "holm", - ci = "default", + use = "pairwise.complete.obs", bayesian = FALSE, - bayesian_prior = "medium", - bayesian_ci_method = "hdi", - bayesian_test = c("pd", "rope", "bf"), + include_factors = FALSE, redundant = FALSE, - include_factors = TRUE, - partial = FALSE, - partial_bayesian = FALSE, - multilevel = FALSE, - ranktransform = FALSE, - winsorize = FALSE, verbose = TRUE, + standardize_names = getOption("easystats.standardize_names", FALSE), ...) { groups <- setdiff(colnames(attributes(data)$groups), ".rows") ungrouped_x <- as.data.frame(data) @@ -423,34 +410,44 @@ correlation <- function(data, #' @keywords internal .correlation <- function(data, - data2 = NULL, + data2 = NULL, # do i need it tho?, maybe except selects instead? method = "pearson", + ci = 0.95, p_adjust = "holm", - ci = "default", + use = "pairwise.complete.obs", bayesian = FALSE, - bayesian_prior = "medium", - bayesian_ci_method = "hdi", - bayesian_test = c("pd", "rope", "bf"), - redundant = FALSE, include_factors = FALSE, - partial = FALSE, - partial_bayesian = FALSE, - multilevel = FALSE, - ranktransform = FALSE, - winsorize = FALSE, + redundant = FALSE, verbose = TRUE, + standardize_names = getOption("easystats.standardize_names", FALSE), ...) { - if (!is.null(data2)) { + if (!is.null(data2)) { # do not need data2 then data <- cbind(data, data2) } if (ncol(data) <= 2L && any(sapply(data, is.factor)) && !include_factors) { if (isTRUE(verbose)) { - insight::format_warning("It seems like there is not enough continuous variables in your data. Maybe you want to include the factors? We're setting `include_factors=TRUE` for you.") + insight::format_error("It seems like there is not enough continuous variables in your data. \nAdding `include_factors = TRUE` to the function should help!") } include_factors <- TRUE } + # adjusting variables if bayesian is TRUE + if(bayesian) { + if("bayesian_prior" %in% names(list(...))) { + bayesian_prior <- match.arg(tolower(list(...)$bayesian_prior), + c("medium", "medium.narrow", "wide", "ultra-wide")) + } + + if ("bayesian_ci_method" %in% names(list(...))) { + bayesian_ci_method <- list(...)$bayesian_ci_method + } + + if ("bayesian_test" %in% names(list(...))) { + bayesian_test <- list(...)$bayesian_test + } + } + # valid matrix checks ---------------- # What if only factors @@ -472,8 +469,8 @@ correlation <- function(data, ) data <- .clean_data(data, include_factors = include_factors, multilevel = multilevel) - # LOOP ---------------- - + # LOOP ---- + # running cor test for each pair for (i in seq_len(nrow(combinations))) { x <- as.character(combinations[i, "Parameter1"]) y <- as.character(combinations[i, "Parameter2"]) @@ -483,27 +480,29 @@ correlation <- function(data, verbose <- FALSE } - result <- cor_test( - data, - x = x, - y = y, - ci = ci, - method = method, - bayesian = bayesian, - bayesian_prior = bayesian_prior, - bayesian_ci_method = bayesian_ci_method, - bayesian_test = bayesian_test, - partial = partial, - multilevel = multilevel, - ranktransform = ranktransform, - winsorize = winsorize, - verbose = verbose, - ... - ) + result <- cor_test(x, y, + data = data, + ci = ci, + method = method, + bayesian = bayesian, + bayesian_prior = bayesian_prior, + bayesian_ci_method = bayesian_ci_method, + bayesian_test = bayesian_test, + partial = partial, + multilevel = multilevel, + ranktransform = ranktransform, + winsorize = winsorize, + verbose = verbose, + ... + ) + + # reseting for some reason the "rho" and "tau" names to be "r", might not work anymore due to changes in cor_test, option "Dxy" ignored, not really relevant tho + + # will be redundent because cor_test always returns "r" as the name # Merge if (i == 1) { - params <- result + params <- result # first iteration keeps the result of the first pair } else { if (!all(names(result) %in% names(params))) { if ("r" %in% names(params) && !"r" %in% names(result)) { @@ -525,24 +524,25 @@ correlation <- function(data, # Make method column more informative if ("Method" %in% names(params)) { params$Method <- paste0(params$Method, " correlation") - - # Did Winsorization happen? If yes, Method column should reflect that - if (!isFALSE(winsorize) && !is.null(winsorize)) { - params$Method <- paste0("Winsorized ", params$Method) - } } + # instead of removing the redundant rows, should not compute them at all + # Remove superfluous correlations when two variable sets provided if (!is.null(data2)) { params <- params[!params$Parameter1 %in% names(data2), ] params <- params[params$Parameter2 %in% names(data2), ] } + # there is always p, then should always do that without the id check + # P-values adjustments if ("p" %in% names(params)) { params$p <- stats::p.adjust(params$p, method = p_adjust) } + # again instead of removing the redundant rows, should not compute them at all + # Redundant if (redundant) { params <- .add_redundant(params, data) @@ -551,9 +551,62 @@ correlation <- function(data, list(params = params, data = data) } +# internal helping functions ---- +# without a change +#' @keywords internal +.clean_data <- function(data, include_factors = TRUE, multilevel = FALSE) { + if (!multilevel) { + if (include_factors) { + data <- datawizard::to_numeric(data) + } else { + data <- data[sapply(data, is.numeric)] + } + } + data +} +# to be changed +#' @keywords internal +.get_combinations <- function(data, + data2 = NULL, + redundant = TRUE, + include_factors = TRUE, + multilevel = FALSE, + method = "pearson") { + data <- .clean_data(data, include_factors = include_factors, multilevel = multilevel) + if (method == "polychoric") { + vars <- names(data) + } else if (multilevel) { + vars <- names(data[sapply(data, is.numeric)]) + } else { + vars <- names(data) + } + + + + # Find pairs + if (is.null(data2)) { + vars2 <- vars + } else { + data2 <- .clean_data(data2, include_factors = include_factors, multilevel = multilevel) + data2_nums <- data2[sapply(data2, is.numeric)] + vars2 <- names(data2_nums) + } + + combinations <- expand.grid(vars, vars2, stringsAsFactors = FALSE) + combinations <- combinations[order(match(combinations$Var1, vars), match(combinations$Var2, vars2)), ] + + row.names(combinations) <- NULL + names(combinations) <- c("Parameter1", "Parameter2") + + if (!redundant) { + combinations <- .remove_redundant(combinations) + } + + combinations +} @@ -565,3 +618,6 @@ plot.easycorrelation <- function(x, ...) { NextMethod() } + + + From 58027a8dc2d8acd9fd75aa554aba53c174fb1c7b Mon Sep 17 00:00:00 2001 From: TomGeva <141431661+TomGeva@users.noreply.github.com> Date: Mon, 10 Jun 2024 10:16:58 +0300 Subject: [PATCH 25/33] latest updates --- R/cor_test.R | 2 +- R/correlation.R | 85 ++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 74 insertions(+), 13 deletions(-) diff --git a/R/cor_test.R b/R/cor_test.R index 52fc455b..c48c314c 100644 --- a/R/cor_test.R +++ b/R/cor_test.R @@ -247,7 +247,7 @@ cor_test <- function(x, y, # check validity of the amount of observations if (length(var_x) < 3L) { - insight::format_alert(paste(x, "and", y, "have less than 3 complete observations.")) + insight::format_alert(paste(x_name, "and", y_name, "have less than 3 complete observations.")) } # Make sure x,y are not factor(s) diff --git a/R/correlation.R b/R/correlation.R index 5d16d617..8d0345c8 100644 --- a/R/correlation.R +++ b/R/correlation.R @@ -162,9 +162,7 @@ # actual function ---- -correlation <- function(data, - select = NULL, - select2 = NULL, +correlation <- function(data, select = NULL, select2 = NULL, method = "pearson", ci = 0.95, p_adjust = "holm", @@ -175,12 +173,79 @@ correlation <- function(data, verbose = TRUE, standardize_names = getOption("easystats.standardize_names", FALSE), ...) { + # algorithm ---- + + # step 1: validate input + # step 2: if needed handle grouped_df type + # step 3: clean data in accordance to use value: + # use == "pairwise.complete.obs" -> perform na.omit on each combination separately + # use == "complete.obs" -> perform na.omit on all of the data that are mentioned in the context of select and select2 if there are select and/or select2 + # step 4: splitted to 3 kinds, no select or select2 (a), select only (b) and select and select2 (c) + # no select or select2 (a) + # step 4.a.1: find all valid combinations of the columns in the data + # select only (b) + # step 4.b.1: find all valid combinations of the columns in the data that are mentioned in select + # select and select2 (c) + # step 4.c.1: find all valid combinations of the columns in the data that are mentioned in select and select2 + # step 4.2: perform correlations on combinations only + + # validate method + method <- match.arg(tolower(method), c("pearson", "spearman", "spear", "s")) + # "kendall", "biserial", "pointbiserial", + # "point-biserial", "rankbiserial", + # "rank-biserial", "biweight", "distance", + # "percentage", "percentage_bend", + # "percentagebend", "pb", "blomqvist", + # "median", "medial", "hoeffding", "gamma", + # "gaussian", "shepherd", "sheperd", + # "shepherdspi", "pi", "somers", "poly", + # "polychoric", "tetra", "tetrachoric")) + + # adjusting variables if bayesian is TRUE + if(bayesian) { + p_adjust <- "none" + } + + # validate p_adjust + p_adjust <- match.arg(p_adjust, c("holm", "hochberg", "hommel", "bonferroni", + "BH", "BY", "fdr", "somers", "none")) + + # appliance for include_factors or not + if (include_factors) data <- datawizard::to_numeric(data) else data <- data[sapply(data, is.numeric)] + + # validate ci + if (ci == "default") { + ci <- 0.95 + } else if (ci < 0 || ci > 1) { + insight::format_error("CI should be between 0 and 1.") + } + + # checking validity of select and select2 + if (is.null(select)) { + if (!is.null(select2)) { + insight::format_warning("select2 is provided but select is not, using select2 as select") + select <- select2 + select2 <- NULL + } + else { + select <- colnames(data) + } + } + if (!is.null(select2)) all_selected <- c(select, select2) else all_selected <- select + + not_in_data <- !all_selected %in% colnames(data) + + if (any(not_in_data)) { + insight::format_error(paste0("Following variables are not in the data: ", all_selected[not_in_data], collapse = ", ")) + } + # TODO: support grouped_df - # validate select/select + # validate select/select2 select <- datawizard::find_columns(data, select = select) select2 <- datawizard::find_columns(data, select = select2) + # take from it the grouped_df part when i get to it if (!is.null(select)) { # check for valid names all_selected <- c(select, select2) @@ -207,6 +272,8 @@ correlation <- function(data, # if include_factors is TRUE # convert factors to dummy vars + + # done further in the correlation function # use == "pairwise.complete.obs" @@ -214,15 +281,9 @@ correlation <- function(data, # ignore redundant if select2 is given - # adjusting variables if bayesian is TRUE - if(bayesian) { - p_adjust <- "none" - } - # CI - if (ci == "default") { - ci <- 0.95 - } + + From 2c0a17dea01b5a95dd96d50a34486b8f8d913884 Mon Sep 17 00:00:00 2001 From: TomGeva <141431661+TomGeva@users.noreply.github.com> Date: Mon, 17 Jun 2024 20:27:44 +0300 Subject: [PATCH 26/33] Correlation func rework discluding grouped_df --- R/correlation.R | 436 ++++++++++++++---------------------------------- 1 file changed, 124 insertions(+), 312 deletions(-) diff --git a/R/correlation.R b/R/correlation.R index 8d0345c8..01f03eb6 100644 --- a/R/correlation.R +++ b/R/correlation.R @@ -165,11 +165,12 @@ correlation <- function(data, select = NULL, select2 = NULL, method = "pearson", ci = 0.95, + alternative = "two.sided", p_adjust = "holm", use = "pairwise.complete.obs", bayesian = FALSE, include_factors = FALSE, - redundant = FALSE, + redundant = TRUE, verbose = TRUE, standardize_names = getOption("easystats.standardize_names", FALSE), ...) { @@ -191,15 +192,18 @@ correlation <- function(data, select = NULL, select2 = NULL, # validate method method <- match.arg(tolower(method), c("pearson", "spearman", "spear", "s")) - # "kendall", "biserial", "pointbiserial", - # "point-biserial", "rankbiserial", - # "rank-biserial", "biweight", "distance", - # "percentage", "percentage_bend", - # "percentagebend", "pb", "blomqvist", - # "median", "medial", "hoeffding", "gamma", - # "gaussian", "shepherd", "sheperd", - # "shepherdspi", "pi", "somers", "poly", - # "polychoric", "tetra", "tetrachoric")) + # "kendall", "biserial", "pointbiserial", + # "point-biserial", "rankbiserial", + # "rank-biserial", "biweight", "distance", + # "percentage", "percentage_bend", + # "percentagebend", "pb", "blomqvist", + # "median", "medial", "hoeffding", "gamma", + # "gaussian", "shepherd", "sheperd", + # "shepherdspi", "pi", "somers", "poly", + # "polychoric", "tetra", "tetrachoric")) + + # validate alternative + alternative <- match.arg(tolower(alternative), c("two.sided", "greater", "less")) # adjusting variables if bayesian is TRUE if(bayesian) { @@ -223,14 +227,19 @@ correlation <- function(data, select = NULL, select2 = NULL, # checking validity of select and select2 if (is.null(select)) { if (!is.null(select2)) { - insight::format_warning("select2 is provided but select is not, using select2 as select") - select <- select2 - select2 <- NULL + insight::format_warning("`select2` is provided but `select` is not, using `select2` as `select`") + select <- select2 + select2 <- NULL } else { select <- colnames(data) } } + + # removing values that appear multiple times + select <- unique(select) + if (!is.null(select2)) select2 <- unique(select2) + if (!is.null(select2)) all_selected <- c(select, select2) else all_selected <- select not_in_data <- !all_selected %in% colnames(data) @@ -239,125 +248,134 @@ correlation <- function(data, select = NULL, select2 = NULL, insight::format_error(paste0("Following variables are not in the data: ", all_selected[not_in_data], collapse = ", ")) } - # TODO: support grouped_df + # ignore redundant if select2 is given + if (!is.null(select2) && redundant) { + redundant <- FALSE + } # validate select/select2 select <- datawizard::find_columns(data, select = select) - select2 <- datawizard::find_columns(data, select = select2) - - # take from it the grouped_df part when i get to it - if (!is.null(select)) { - # check for valid names - all_selected <- c(select, select2) - not_in_data <- !all_selected %in% colnames(data) - if (any(not_in_data)) insight::format_error(paste0("Following variables are not in the data: ", all_selected[not_in_data], collapse = ", ")) - - # for grouped df, add group variables to both data frames - if (inherits(data, "grouped_df")) { - grp_df <- attributes(data)$groups - grp_var <- setdiff(colnames(grp_df), ".rows") - select <- unique(c(select, grp_var)) - select2 <- if (!is.null(select2)) unique(c(select2, grp_var)) - } else { - grp_df <- NULL - } + if (!is.null(select2)) select2 <- datawizard::find_columns(data, select = select2) - data2 <- if (!is.null(select2)) data[select2] - data <- data[select] + # TODO: support grouped_df - attr(data, "groups") <- grp_df - attr(data2, "groups") <- if (!is.null(select2)) grp_df - } + # # take from it the grouped_df part when i get to it + # if (!is.null(select)) { + # # for grouped df, add group variables to both data frames + # if (inherits(data, "grouped_df")) { + # grp_df <- attributes(data)$groups + # grp_var <- setdiff(colnames(grp_df), ".rows") + # select <- unique(c(select, grp_var)) + # select2 <- if (!is.null(select2)) unique(c(select2, grp_var)) + # } else { + # grp_df <- NULL + # } + # + # data2 <- if (!is.null(select2)) data[select2] + # data <- data[select] + # + # attr(data, "groups") <- grp_df + # attr(data2, "groups") <- if (!is.null(select2)) grp_df + # } # if include_factors is TRUE # convert factors to dummy vars + # if use is "complete.obs" + if (use == "complete.obs") { + data <- na.omit(data) + } + if (inherits(data, "grouped_df")) { + # handle as grouped_df + # rez <- .correlation_grouped_df( + # data, + # data2 = data2, + # method = method, + # p_adjust = p_adjust, + # ci = ci, + # bayesian = bayesian, + # bayesian_prior = bayesian_prior, + # bayesian_ci_method = bayesian_ci_method, + # bayesian_test = bayesian_test, + # redundant = redundant, + # include_factors = include_factors, + # partial = partial, + # partial_bayesian = partial_bayesian, + # multilevel = multilevel, + # ranktransform = ranktransform, + # winsorize = winsorize, + # verbose = verbose, + # ... + # ) + } else { + # handle as data frame + if (ncol(data) <= 2L && any(sapply(data, is.factor)) && !include_factors) { + if (isTRUE(verbose)) insight::format_error("It seems like there is not enough continuous variables in your data. \nAdding `include_factors = TRUE` to the function should help!") + include_factors <- TRUE + } - # done further in the correlation function - - # use == "pairwise.complete.obs" - # use == "complete.obs" -> na.omit(data) - - # ignore redundant if select2 is given - - - - - - + # cleaning the data and getting combinations + combs <- if (is.null(select2)) expand.grid(select, select) else expand.grid(select2, select) + names(combs) <- c("temp", "var1") + combs$var2 <- combs$temp + combs <- sapply(combs[,2:3], as.character) + + # handling redundant if prompted to + if (redundant) { + keptL <- NULL + removeL <- rep(FALSE, nrow(combs)) + + for (i in 1:nrow(combs)) { + if (combs[i, 1] == combs[i, 2]) { + removeL[i] <- TRUE + keptL <- c(keptL, combs[i, 1]) + } + if (combs[i, 2] %in% keptL) { + removeL[i] <- TRUE + } + } + combs <- combs[!removeL,] + } - # renaming the columns if so desired - if (!is.null(rename)) { - if (length(data) != length(rename)) { - insight::format_warning("Mismatch between number of variables and names.") - } else { - colnames(data) <- rename + # running cor test for each pair + for (i in 1:nrow(combs)) { + result <- cor_test(x = combs[i, 1], y = combs[i, 2], + data = data, + method = method, + ci = ci, + alternative = alternative, + bayesian = bayesian, + verbose = FALSE, + ...) + if (i > 1) params <- rbind(params, result) else params <- result } - } - if (inherits(data, "grouped_df")) { - rez <- .correlation_grouped_df( - data, - data2 = data2, - method = method, - p_adjust = p_adjust, - ci = ci, - bayesian = bayesian, - bayesian_prior = bayesian_prior, - bayesian_ci_method = bayesian_ci_method, - bayesian_test = bayesian_test, - redundant = redundant, - include_factors = include_factors, - partial = partial, - partial_bayesian = partial_bayesian, - multilevel = multilevel, - ranktransform = ranktransform, - winsorize = winsorize, - verbose = verbose, - ... - ) - } else { - rez <- .correlation( - data, - data2 = data2, - method = method, - ci = ci, - p_adjust = p_adjust, - use = use, - bayesian = bayesian, - redundant = redundant, - include_factors = include_factors, - partial = partial, - partial_bayesian = partial_bayesian, - multilevel = multilevel, - ranktransform = ranktransform, - winsorize = winsorize, - verbose = verbose, - ... - ) + params$p <- stats::p.adjust(params$p, method = p_adjust) } - out <- rez$params + + out <- params attributes(out) <- c( attributes(out), list( "data" = data, - "data2" = data2, - "modelframe" = rez$data, + "select" = select, "ci" = ci, - "n" = nrow(data), + "p_adjust" = p_adjust, + "use" = use, "method" = method, "bayesian" = bayesian, - "p_adjust" = p_adjust, - "partial" = partial, - "multilevel" = multilevel, - "partial_bayesian" = partial_bayesian, - "bayesian_prior" = bayesian_prior, - "include_factors" = include_factors + "include_factors" = include_factors, + "redundent" = redundant, + "n" = nrow(data) ) ) + if (!is.null(select2)) { + attributes(out)$select2 <- select2 + } + attr(out, "additional_arguments") <- list(...) if (inherits(data, "grouped_df")) { @@ -366,8 +384,6 @@ correlation <- function(data, select = NULL, select2 = NULL, class(out) <- unique(c("easycorrelation", "see_easycorrelation", "parameters_model", class(out))) } - if (convert_back_to_r) out <- pcor_to_cor(pcor = out) # Revert back to r if needed. - if (standardize_names) insight::standardize_names(out, ...) out } @@ -467,210 +483,6 @@ correlation <- function(data, select = NULL, select2 = NULL, list(params = out, data = modelframe) } - - -#' @keywords internal -.correlation <- function(data, - data2 = NULL, # do i need it tho?, maybe except selects instead? - method = "pearson", - ci = 0.95, - p_adjust = "holm", - use = "pairwise.complete.obs", - bayesian = FALSE, - include_factors = FALSE, - redundant = FALSE, - verbose = TRUE, - standardize_names = getOption("easystats.standardize_names", FALSE), - ...) { - if (!is.null(data2)) { # do not need data2 then - data <- cbind(data, data2) - } - - if (ncol(data) <= 2L && any(sapply(data, is.factor)) && !include_factors) { - if (isTRUE(verbose)) { - insight::format_error("It seems like there is not enough continuous variables in your data. \nAdding `include_factors = TRUE` to the function should help!") - } - include_factors <- TRUE - } - - # adjusting variables if bayesian is TRUE - if(bayesian) { - if("bayesian_prior" %in% names(list(...))) { - bayesian_prior <- match.arg(tolower(list(...)$bayesian_prior), - c("medium", "medium.narrow", "wide", "ultra-wide")) - } - - if ("bayesian_ci_method" %in% names(list(...))) { - bayesian_ci_method <- list(...)$bayesian_ci_method - } - - if ("bayesian_test" %in% names(list(...))) { - bayesian_test <- list(...)$bayesian_test - } - } - - # valid matrix checks ---------------- - - # What if only factors - if (sum(sapply(if (is.null(data2)) data else cbind(data, data2), is.numeric)) == 0) { - include_factors <- TRUE - } - - if (method == "polychoric") multilevel <- TRUE - - # Clean data and get combinations ------------- - - combinations <- .get_combinations( - data, - data2 = NULL, - redundant = FALSE, - include_factors = include_factors, - multilevel = multilevel, - method = method - ) - data <- .clean_data(data, include_factors = include_factors, multilevel = multilevel) - - # LOOP ---- - # running cor test for each pair - for (i in seq_len(nrow(combinations))) { - x <- as.character(combinations[i, "Parameter1"]) - y <- as.character(combinations[i, "Parameter2"]) - - # avoid repeated warnings - if (i > 1) { - verbose <- FALSE - } - - result <- cor_test(x, y, - data = data, - ci = ci, - method = method, - bayesian = bayesian, - bayesian_prior = bayesian_prior, - bayesian_ci_method = bayesian_ci_method, - bayesian_test = bayesian_test, - partial = partial, - multilevel = multilevel, - ranktransform = ranktransform, - winsorize = winsorize, - verbose = verbose, - ... - ) - - # reseting for some reason the "rho" and "tau" names to be "r", might not work anymore due to changes in cor_test, option "Dxy" ignored, not really relevant tho - - # will be redundent because cor_test always returns "r" as the name - - # Merge - if (i == 1) { - params <- result # first iteration keeps the result of the first pair - } else { - if (!all(names(result) %in% names(params))) { - if ("r" %in% names(params) && !"r" %in% names(result)) { - names(result)[names(result) %in% c("rho", "tau")] <- "r" - } - if ("r" %in% names(result) && !"r" %in% names(params)) { - names(params)[names(params) %in% c("rho", "tau")] <- "r" - } - if (!"r" %in% names(params) && any(c("rho", "tau") %in% names(result))) { - names(params)[names(params) %in% c("rho", "tau")] <- "r" - names(result)[names(result) %in% c("rho", "tau")] <- "r" - } - result[names(params)[!names(params) %in% names(result)]] <- NA - } - params <- rbind(params, result) - } - } - - # Make method column more informative - if ("Method" %in% names(params)) { - params$Method <- paste0(params$Method, " correlation") - } - - # instead of removing the redundant rows, should not compute them at all - - # Remove superfluous correlations when two variable sets provided - if (!is.null(data2)) { - params <- params[!params$Parameter1 %in% names(data2), ] - params <- params[params$Parameter2 %in% names(data2), ] - } - - # there is always p, then should always do that without the id check - - # P-values adjustments - if ("p" %in% names(params)) { - params$p <- stats::p.adjust(params$p, method = p_adjust) - } - - # again instead of removing the redundant rows, should not compute them at all - - # Redundant - if (redundant) { - params <- .add_redundant(params, data) - } - - list(params = params, data = data) -} - -# internal helping functions ---- - -# without a change -#' @keywords internal -.clean_data <- function(data, include_factors = TRUE, multilevel = FALSE) { - if (!multilevel) { - if (include_factors) { - data <- datawizard::to_numeric(data) - } else { - data <- data[sapply(data, is.numeric)] - } - } - data -} - -# to be changed -#' @keywords internal -.get_combinations <- function(data, - data2 = NULL, - redundant = TRUE, - include_factors = TRUE, - multilevel = FALSE, - method = "pearson") { - data <- .clean_data(data, include_factors = include_factors, multilevel = multilevel) - - if (method == "polychoric") { - vars <- names(data) - } else if (multilevel) { - vars <- names(data[sapply(data, is.numeric)]) - } else { - vars <- names(data) - } - - - - # Find pairs - if (is.null(data2)) { - vars2 <- vars - } else { - data2 <- .clean_data(data2, include_factors = include_factors, multilevel = multilevel) - data2_nums <- data2[sapply(data2, is.numeric)] - vars2 <- names(data2_nums) - } - - combinations <- expand.grid(vars, vars2, stringsAsFactors = FALSE) - combinations <- combinations[order(match(combinations$Var1, vars), match(combinations$Var2, vars2)), ] - - row.names(combinations) <- NULL - names(combinations) <- c("Parameter1", "Parameter2") - - if (!redundant) { - combinations <- .remove_redundant(combinations) - } - - combinations -} - - - # plot ---------------------------- #' @export From f20da4139660896f241131f9b180b7b20674817c Mon Sep 17 00:00:00 2001 From: TomGeva <141431661+TomGeva@users.noreply.github.com> Date: Tue, 18 Jun 2024 06:41:08 +0300 Subject: [PATCH 27/33] start work on tests and fixes --- R/correlation.R | 62 ++++++++---------------- tests/testthat/test-correlation.R | 80 ++++++++++++------------------- 2 files changed, 51 insertions(+), 91 deletions(-) diff --git a/R/correlation.R b/R/correlation.R index 01f03eb6..301c7d10 100644 --- a/R/correlation.R +++ b/R/correlation.R @@ -170,37 +170,12 @@ correlation <- function(data, select = NULL, select2 = NULL, use = "pairwise.complete.obs", bayesian = FALSE, include_factors = FALSE, - redundant = TRUE, + redundant = FALSE, verbose = TRUE, standardize_names = getOption("easystats.standardize_names", FALSE), ...) { - # algorithm ---- - - # step 1: validate input - # step 2: if needed handle grouped_df type - # step 3: clean data in accordance to use value: - # use == "pairwise.complete.obs" -> perform na.omit on each combination separately - # use == "complete.obs" -> perform na.omit on all of the data that are mentioned in the context of select and select2 if there are select and/or select2 - # step 4: splitted to 3 kinds, no select or select2 (a), select only (b) and select and select2 (c) - # no select or select2 (a) - # step 4.a.1: find all valid combinations of the columns in the data - # select only (b) - # step 4.b.1: find all valid combinations of the columns in the data that are mentioned in select - # select and select2 (c) - # step 4.c.1: find all valid combinations of the columns in the data that are mentioned in select and select2 - # step 4.2: perform correlations on combinations only - # validate method method <- match.arg(tolower(method), c("pearson", "spearman", "spear", "s")) - # "kendall", "biserial", "pointbiserial", - # "point-biserial", "rankbiserial", - # "rank-biserial", "biweight", "distance", - # "percentage", "percentage_bend", - # "percentagebend", "pb", "blomqvist", - # "median", "medial", "hoeffding", "gamma", - # "gaussian", "shepherd", "sheperd", - # "shepherdspi", "pi", "somers", "poly", - # "polychoric", "tetra", "tetrachoric")) # validate alternative alternative <- match.arg(tolower(alternative), c("two.sided", "greater", "less")) @@ -278,9 +253,6 @@ correlation <- function(data, select = NULL, select2 = NULL, # attr(data2, "groups") <- if (!is.null(select2)) grp_df # } - # if include_factors is TRUE - # convert factors to dummy vars - # if use is "complete.obs" if (use == "complete.obs") { data <- na.omit(data) @@ -340,14 +312,25 @@ correlation <- function(data, select = NULL, select2 = NULL, # running cor test for each pair for (i in 1:nrow(combs)) { - result <- cor_test(x = combs[i, 1], y = combs[i, 2], - data = data, - method = method, - ci = ci, - alternative = alternative, - bayesian = bayesian, - verbose = FALSE, - ...) + if (combs[i, 1] == combs[i, 2] && bayesian) + result <- cor_test(x = combs[i, 1], y = combs[i, 2], + data = data, + method = method, + ci = ci, + alternative = alternative, + bayesian = !bayesian, + verbose = FALSE, + ...) + else { + result <- cor_test(x = combs[i, 1], y = combs[i, 2], + data = data, + method = method, + ci = ci, + alternative = alternative, + bayesian = bayesian, + verbose = FALSE, + ...) + } if (i > 1) params <- rbind(params, result) else params <- result } @@ -490,7 +473,4 @@ plot.easycorrelation <- function(x, ...) { insight::check_if_installed("see", "to plot correlation graphs") NextMethod() -} - - - +} \ No newline at end of file diff --git a/tests/testthat/test-correlation.R b/tests/testthat/test-correlation.R index 8a7cce48..bc5606ec 100644 --- a/tests/testthat/test-correlation.R +++ b/tests/testthat/test-correlation.R @@ -16,6 +16,7 @@ test_that("comparison with other packages", { hmisc <- Hmisc::rcorr(as.matrix(iris[1:4]), type = c("pearson")) expect_equal(mean(r - hmisc$r), 0, tolerance = 0.0001) + # has a difference with Hmisc only p <- as.matrix(attributes(rez)$p[2:5]) expect_equal(mean(p - hmisc$P, na.rm = TRUE), 0, tolerance = 0.0001) @@ -27,6 +28,7 @@ test_that("comparison with other packages", { r <- as.matrix(rez[2:5]) expect_equal(mean(r - cor(iris[1:4], method = "spearman")), 0, tolerance = 0.0001) + # has a difference with Hmisc only hmisc <- Hmisc::rcorr(as.matrix(iris[1:4]), type = c("spearman")) expect_equal(mean(r - hmisc$r), 0, tolerance = 0.0001) @@ -34,34 +36,34 @@ test_that("comparison with other packages", { expect_equal(mean(p - hmisc$P, na.rm = TRUE), 0, tolerance = 0.0001) # Kendall - out <- correlation(iris, include_factors = FALSE, method = "kendall") - rez <- as.data.frame(summary(out, redundant = TRUE)) - - r <- as.matrix(rez[2:5]) - expect_equal(mean(r - cor(iris[1:4], method = "kendall")), 0, tolerance = 0.0001) - - # Biweight - out <- correlation(iris, include_factors = FALSE, method = "biweight") - rez <- as.data.frame(summary(out, redundant = TRUE)) - r <- as.matrix(rez[2:5]) - expect_equal(mean(r - cor(iris[1:4])), 0, tolerance = 0.01) - - # X and Y - out <- correlation(iris[1:2], iris[3:4]) - rez <- as.data.frame(summary(out, redundant = TRUE)) - r <- as.matrix(rez[2:3]) - expect_equal(mean(r - cor(iris[1:2], iris[3:4])), 0, tolerance = 0.0001) - - # Partial - out <- correlation(mtcars, include_factors = FALSE, partial = TRUE, p_adjust = "none") - rez <- as.data.frame(summary(out, redundant = TRUE)) - - r <- as.matrix(rez[2:ncol(rez)]) - ppcor <- ppcor::pcor(mtcars) - expect_equal(max(r - as.matrix(ppcor$estimate)), 0, tolerance = 0.0001) - - p <- as.matrix(attributes(rez)$p[2:ncol(rez)]) - expect_true(mean(abs(p - as.matrix(ppcor$p.value))) < 0.05) + # out <- correlation(iris, include_factors = FALSE, method = "kendall") + # rez <- as.data.frame(summary(out, redundant = TRUE)) + + # r <- as.matrix(rez[2:5]) + # expect_equal(mean(r - cor(iris[1:4], method = "kendall")), 0, tolerance = 0.0001) + # + # # Biweight + # out <- correlation(iris, include_factors = FALSE, method = "biweight") + # rez <- as.data.frame(summary(out, redundant = TRUE)) + # r <- as.matrix(rez[2:5]) + # expect_equal(mean(r - cor(iris[1:4])), 0, tolerance = 0.01) + # + # # X and Y + # out <- correlation(iris[1:2], iris[3:4]) + # rez <- as.data.frame(summary(out, redundant = TRUE)) + # r <- as.matrix(rez[2:3]) + # expect_equal(mean(r - cor(iris[1:2], iris[3:4])), 0, tolerance = 0.0001) + # + # # Partial + # out <- correlation(mtcars, include_factors = FALSE, partial = TRUE, p_adjust = "none") + # rez <- as.data.frame(summary(out, redundant = TRUE)) + # + # r <- as.matrix(rez[2:ncol(rez)]) + # ppcor <- ppcor::pcor(mtcars) + # expect_equal(max(r - as.matrix(ppcor$estimate)), 0, tolerance = 0.0001) + # + # p <- as.matrix(attributes(rez)$p[2:ncol(rez)]) + # expect_true(mean(abs(p - as.matrix(ppcor$p.value))) < 0.05) # Bayesian out <- correlation(iris, include_factors = FALSE, bayesian = TRUE) @@ -76,28 +78,6 @@ test_that("comparison with other packages", { pd <- as.matrix(attributes(rez)$pd[2:5]) p <- bayestestR::pd_to_p(pd) expect_equal(mean(p - hmisc$P, na.rm = TRUE), 0, tolerance = 0.01) - - - # Bayesian - Partial - out <- correlation(iris, include_factors = FALSE, bayesian = TRUE, partial = TRUE) - rez <- as.data.frame(summary(out, redundant = TRUE)) - - r <- as.matrix(rez[2:5]) - ppcor <- ppcor::pcor(iris[1:4]) - expect_equal(max(r - as.matrix(ppcor$estimate)), 0, tolerance = 0.02) - - pd <- as.matrix(attributes(rez)$pd[2:ncol(rez)]) - p <- bayestestR::pd_to_p(pd) - expect_equal(mean(abs(p - as.matrix(ppcor$p.value))), 0, tolerance = 0.001) - - - # Bayesian (Full) - Partial - out <- correlation(iris, include_factors = FALSE, bayesian = TRUE, partial = TRUE, partial_bayesian = TRUE) - rez <- as.data.frame(summary(out, redundant = TRUE)) - - r <- as.matrix(rez[2:5]) - ppcor <- ppcor::pcor(iris[1:4]) - expect_equal(max(r - as.matrix(ppcor$estimate)), 0, tolerance = 0.02) }) From e64119f2fcd6adba3fe6fe1d905676295e195454 Mon Sep 17 00:00:00 2001 From: TomGeva <141431661+TomGeva@users.noreply.github.com> Date: Wed, 19 Jun 2024 16:25:49 +0300 Subject: [PATCH 28/33] autoCommit-TeraPC 20240619.162549 --- tests/testthat/test-correlation.R | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/testthat/test-correlation.R b/tests/testthat/test-correlation.R index bc5606ec..8f6b9369 100644 --- a/tests/testthat/test-correlation.R +++ b/tests/testthat/test-correlation.R @@ -39,6 +39,7 @@ test_that("comparison with other packages", { # out <- correlation(iris, include_factors = FALSE, method = "kendall") # rez <- as.data.frame(summary(out, redundant = TRUE)) + # r <- as.matrix(rez[2:5]) # expect_equal(mean(r - cor(iris[1:4], method = "kendall")), 0, tolerance = 0.0001) # From 29f1dc0c9705f8e8f4307d010e8f7b7883c5b17f Mon Sep 17 00:00:00 2001 From: TomGeva <141431661+TomGeva@users.noreply.github.com> Date: Wed, 19 Jun 2024 16:28:16 +0300 Subject: [PATCH 29/33] autoCommit-TeraPC 20240619.162816 --- tests/testthat/test-correlation.R | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/testthat/test-correlation.R b/tests/testthat/test-correlation.R index 8f6b9369..bc5606ec 100644 --- a/tests/testthat/test-correlation.R +++ b/tests/testthat/test-correlation.R @@ -39,7 +39,6 @@ test_that("comparison with other packages", { # out <- correlation(iris, include_factors = FALSE, method = "kendall") # rez <- as.data.frame(summary(out, redundant = TRUE)) - # r <- as.matrix(rez[2:5]) # expect_equal(mean(r - cor(iris[1:4], method = "kendall")), 0, tolerance = 0.0001) # From 933bae804a20f30365242aa5d5c78abf764b69ca Mon Sep 17 00:00:00 2001 From: TomGeva <141431661+TomGeva@users.noreply.github.com> Date: Thu, 20 Jun 2024 12:19:21 +0300 Subject: [PATCH 30/33] tests updated --- R/correlation.R | 7 +++++-- tests/testthat/test-correlation.R | 31 +++++++++++++++++++++++-------- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/R/correlation.R b/R/correlation.R index 301c7d10..9ca5f317 100644 --- a/R/correlation.R +++ b/R/correlation.R @@ -293,6 +293,9 @@ correlation <- function(data, select = NULL, select2 = NULL, combs$var2 <- combs$temp combs <- sapply(combs[,2:3], as.character) + # remove combinations of a variable to itself + combs <- combs[combs[,1] != combs[,2],] + # handling redundant if prompted to if (redundant) { keptL <- NULL @@ -315,7 +318,7 @@ correlation <- function(data, select = NULL, select2 = NULL, if (combs[i, 1] == combs[i, 2] && bayesian) result <- cor_test(x = combs[i, 1], y = combs[i, 2], data = data, - method = method, + method = paste0(toupper(substr(method, 1, 1)), substr(method, 2, nchar(method))), ci = ci, alternative = alternative, bayesian = !bayesian, @@ -324,7 +327,7 @@ correlation <- function(data, select = NULL, select2 = NULL, else { result <- cor_test(x = combs[i, 1], y = combs[i, 2], data = data, - method = method, + method = paste0(toupper(substr(method, 1, 1)), substr(method, 2, nchar(method))), ci = ci, alternative = alternative, bayesian = bayesian, diff --git a/tests/testthat/test-correlation.R b/tests/testthat/test-correlation.R index bc5606ec..7763ae7a 100644 --- a/tests/testthat/test-correlation.R +++ b/tests/testthat/test-correlation.R @@ -20,6 +20,10 @@ test_that("comparison with other packages", { p <- as.matrix(attributes(rez)$p[2:5]) expect_equal(mean(p - hmisc$P, na.rm = TRUE), 0, tolerance = 0.0001) + # at the time of writing these tests, the results of the line: + # mean(cor(iris[1:4]) - Hmisc::rcorr(as.matrix(iris[1:4]), type = c("pearson"))$P, na.rm = TRUE) + # which compares between the calculations of cor from stats package and rcorr from Hmisc package + # does not equal to 0, but to 0.2647537 # Spearman out <- correlation(iris, include_factors = FALSE, method = "spearman") @@ -35,7 +39,12 @@ test_that("comparison with other packages", { p <- as.matrix(attributes(rez)$p[2:5]) expect_equal(mean(p - hmisc$P, na.rm = TRUE), 0, tolerance = 0.0001) - # Kendall + # at the time of writing these tests, the results of the line: + # mean(cor(iris[1:4]) - Hmisc::rcorr(as.matrix(iris[1:4]), type = c("pearson"))$P, na.rm = TRUE) + # which compares between the calculations of cor from stats package and rcorr from Hmisc package + # does not equal to 0, but to 0.3077653 + + # # Kendall # out <- correlation(iris, include_factors = FALSE, method = "kendall") # rez <- as.data.frame(summary(out, redundant = TRUE)) @@ -72,6 +81,8 @@ test_that("comparison with other packages", { r <- as.matrix(rez[2:5]) expect_equal(mean(r - cor(iris[1:4])), 0, tolerance = 0.01) + # even though the previous tests compared to Hmisc failed, the following two passed, curious... + hmisc <- Hmisc::rcorr(as.matrix(iris[1:4]), type = c("pearson")) expect_equal(mean(r - hmisc$r), 0, tolerance = 0.01) @@ -80,24 +91,28 @@ test_that("comparison with other packages", { expect_equal(mean(p - hmisc$P, na.rm = TRUE), 0, tolerance = 0.01) }) - - # Size test_that("format checks", { skip_if_not_or_load_if_installed("psych") out <- correlation(iris, include_factors = TRUE) expect_identical(c(nrow(summary(out, redundant = TRUE)), ncol(summary(out, redundant = TRUE))), c(7L, 8L)) + + # for odd reasons summary(out) returns a matrix with all variables in the rows and in the columns, + # even though the cells in 1 row and 1 column are empty in that matrix... + # therefore, the following test fails + expect_identical(c(nrow(summary(out)), ncol(summary(out))), c(6L, 7L)) - expect_message( - out <- correlation(iris, method = "auto", include_factors = TRUE), - "Check your data" - ) + # # method = "auto" has been deprecated + # expect_message( + # out <- correlation(iris, method = "auto", include_factors = TRUE), + # "Check your data" + # ) expect_identical(c(nrow(summary(out, redundant = TRUE)), ncol(summary(out, redundant = TRUE))), c(7L, 8L)) expect_identical(c(nrow(summary(out)), ncol(summary(out))), c(6L, 7L)) - expect_true(all(c("Pearson correlation", "Point-biserial correlation", "Tetrachoric correlation") %in% out$Method)) + expect_true(all(c("Pearson", "Point-biserial", "Tetrachoric") %in% out$Method)) # X and Y out <- correlation(iris[1:2], iris[3:4]) From bbe49972387732e300263ece9a784577e9bc36d1 Mon Sep 17 00:00:00 2001 From: TomGeva <141431661+TomGeva@users.noreply.github.com> Date: Sat, 22 Jun 2024 22:03:36 +0300 Subject: [PATCH 31/33] tests complete --- tests/testthat/test-correlation.R | 108 ++++++++++++++---------------- 1 file changed, 50 insertions(+), 58 deletions(-) diff --git a/tests/testthat/test-correlation.R b/tests/testthat/test-correlation.R index 7763ae7a..350b9f9b 100644 --- a/tests/testthat/test-correlation.R +++ b/tests/testthat/test-correlation.R @@ -23,7 +23,7 @@ test_that("comparison with other packages", { # at the time of writing these tests, the results of the line: # mean(cor(iris[1:4]) - Hmisc::rcorr(as.matrix(iris[1:4]), type = c("pearson"))$P, na.rm = TRUE) # which compares between the calculations of cor from stats package and rcorr from Hmisc package - # does not equal to 0, but to 0.2647537 + # does not equal to 0, but to 0.3 when rounded # Spearman out <- correlation(iris, include_factors = FALSE, method = "spearman") @@ -40,14 +40,15 @@ test_that("comparison with other packages", { expect_equal(mean(p - hmisc$P, na.rm = TRUE), 0, tolerance = 0.0001) # at the time of writing these tests, the results of the line: - # mean(cor(iris[1:4]) - Hmisc::rcorr(as.matrix(iris[1:4]), type = c("pearson"))$P, na.rm = TRUE) + # mean(cor(iris[1:4]) - Hmisc::rcorr(as.matrix(iris[1:4]), type = c("spearman"))$P, na.rm = TRUE) # which compares between the calculations of cor from stats package and rcorr from Hmisc package - # does not equal to 0, but to 0.3077653 + # does not equal to 0, but to 0.3 when rounded (not the same exact value in every computer but still when rounded 0.3) + # # not relevant for the current version of the package # # Kendall # out <- correlation(iris, include_factors = FALSE, method = "kendall") # rez <- as.data.frame(summary(out, redundant = TRUE)) - + # # r <- as.matrix(rez[2:5]) # expect_equal(mean(r - cor(iris[1:4], method = "kendall")), 0, tolerance = 0.0001) # @@ -76,6 +77,9 @@ test_that("comparison with other packages", { # Bayesian out <- correlation(iris, include_factors = FALSE, bayesian = TRUE) + # on my laptop no error occurs, but on my PC there is an error with rbind(deparse.level, ...) + # which is not anywhere in the cor_test or the correlation functions + # both devices were using the same versions of R, Rstudio, and of the packages on the device rez <- as.data.frame(summary(out, redundant = TRUE)) r <- as.matrix(rez[2:5]) @@ -115,21 +119,22 @@ test_that("format checks", { expect_true(all(c("Pearson", "Point-biserial", "Tetrachoric") %in% out$Method)) # X and Y - out <- correlation(iris[1:2], iris[3:4]) - expect_identical(c(nrow(out), ncol(out)), c(4L, 11L)) - expect_identical(c(nrow(summary(out, redundant = TRUE)), ncol(summary(out, redundant = TRUE))), c(2L, 3L)) + out <- correlation(iris, select = colnames(iris)[1:2], select2 = colnames(iris)[3:4]) + expect_identical(c(nrow(out), ncol(out)), c(4L, 10L)) + # something broke with the print format, which i havent touched even... + expect_identical(c(nrow(summary(out, redundant = FALSE)), ncol(summary(out, redundant = FALSE))), c(2L, 3L)) expect_identical(c(nrow(summary(out)), ncol(summary(out))), c(2L, 3L)) # Grouped skip_if_not_or_load_if_installed("poorman") library(poorman) # loading the library is necessary to use the pipe operator - out <- iris %>% - group_by(Species) %>% - correlation(include_factors = TRUE) - expect_identical(c(nrow(out), ncol(out)), c(18L, 12L)) - expect_identical(c(nrow(summary(out, redundant = TRUE)), ncol(summary(out, redundant = TRUE))), c(12L, 6L)) - expect_identical(c(nrow(summary(out)), ncol(summary(out))), c(9L, 5L)) + # out <- iris %>% + # group_by(Species) %>% + # correlation(include_factors = TRUE) + # expect_identical(c(nrow(out), ncol(out)), c(18L, 12L)) + # expect_identical(c(nrow(summary(out, redundant = TRUE)), ncol(summary(out, redundant = TRUE))), c(12L, 6L)) + # expect_identical(c(nrow(summary(out)), ncol(summary(out))), c(9L, 5L)) # pipe and select out <- iris %>% @@ -137,8 +142,8 @@ test_that("format checks", { select = "Petal.Width", select2 = c("Sepal.Length", "Sepal.Width") ) - expect_identical(c(nrow(out), ncol(out)), c(2L, 11L)) - expect_identical(c(nrow(summary(out, redundant = TRUE)), ncol(summary(out, redundant = TRUE))), c(1L, 3L)) + expect_identical(c(nrow(out), ncol(out)), c(2L, 10L)) + expect_identical(c(nrow(summary(out, redundant = FALSE)), ncol(summary(out, redundant = FALSE))), c(1L, 3L)) expect_identical(c(nrow(summary(out)), ncol(summary(out))), c(1L, 3L)) expect_equal(out[["r"]], c(0.8179, -0.3661), tolerance = 1e-2) expect_identical(out$Parameter1, c("Petal.Width", "Petal.Width")) @@ -147,49 +152,36 @@ test_that("format checks", { # Bayesian full partial skip_if_not_or_load_if_installed("BayesFactor") skip_if_not_or_load_if_installed("lme4") - - - out <- correlation( - iris, - include_factors = TRUE, - multilevel = TRUE, - bayesian = TRUE, - partial = TRUE, - partial_bayesian = TRUE - ) - expect_identical(c(nrow(out), ncol(out)), c(6L, 14L)) - expect_identical(c(nrow(summary(out, redundant = TRUE)), ncol(summary(out, redundant = TRUE))), c(4L, 5L)) - expect_identical(c(nrow(summary(out)), ncol(summary(out))), c(3L, 4L)) -}) - - -test_that("specific types", { - skip_on_cran() - skip_if_not_or_load_if_installed("psych") - - data <- data.frame( - x = as.ordered(sample(1:5, 20, TRUE)), - y = as.ordered(sample(letters[1:5], 20, TRUE)) - ) - - correlation(data, method = "polychoric") }) -test_that("correlation doesn't fail when BFs are NA", { - skip_if_not_or_load_if_installed("ggplot2") - skip_if_not_or_load_if_installed("BayesFactor") - - df <- ggplot2::msleep - set.seed(123) - df_corr <- correlation(subset(df, vore == "carni"), bayesian = TRUE) - expect_identical(nrow(df_corr), 15L) -}) - -test_that("as.data.frame for correlation output", { - skip_on_cran() - skip_if_not_or_load_if_installed("ggplot2") - - set.seed(123) - expect_snapshot(as.data.frame(correlation(ggplot2::msleep))) -}) +# test_that("specific types", { +# skip_on_cran() +# skip_if_not_or_load_if_installed("psych") +# +# data <- data.frame( +# x = as.ordered(sample(1:5, 20, TRUE)), +# y = as.ordered(sample(letters[1:5], 20, TRUE)) +# ) +# +# correlation(data, method = "polychoric") +# }) + +# test_that("correlation doesn't fail when BFs are NA", { +# skip_if_not_or_load_if_installed("ggplot2") +# skip_if_not_or_load_if_installed("BayesFactor") +# +# df <- ggplot2::msleep +# +# set.seed(123) +# df_corr <- correlation(subset(df, vore == "carni"), bayesian = TRUE) +# expect_identical(nrow(df_corr), 15L) +# }) + +# test_that("as.data.frame for correlation output", { +# skip_on_cran() +# skip_if_not_or_load_if_installed("ggplot2") +# +# set.seed(123) +# expect_snapshot(as.data.frame(correlation(ggplot2::msleep))) +# }) From c58decb01571574ab1384c272b17391c6eb0698f Mon Sep 17 00:00:00 2001 From: TomGeva <141431661+TomGeva@users.noreply.github.com> Date: Mon, 24 Jun 2024 17:40:53 +0300 Subject: [PATCH 32/33] pics --- Graph.png | Bin 0 -> 10856 bytes Rplot.png | Bin 0 -> 5743 bytes codeSnippet cor_test.png | Bin 0 -> 19573 bytes resultSnippet cor_test.png | Bin 0 -> 17696 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Graph.png create mode 100644 Rplot.png create mode 100644 codeSnippet cor_test.png create mode 100644 resultSnippet cor_test.png diff --git a/Graph.png b/Graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a606c465ab3cbfda0b9296735c958263ddb094b4 GIT binary patch literal 10856 zcmch7XH=6-yDkdCiwOAA6cCV?P?U}&C{;i}B2{T2AXVB!MCm<JU~NpPUbIK>Nm5uI+4^b*p2i|wCp)0?KvU#oND%*n)aO9_DUdoB}scF zh`olUy@s~E2GkzTZSSIwsCZe$<`83#qi=_BKeQJiWhB?wAM4W&VaCJGKh!67KP8p?$VO_U21707}L z#iH)*G-lJAxm+ZOKG5`G|8nh?WHp4QWeco757pV zXbDfVglAbIK$i&mO9Ydpb>pRVlS6FoAr^Z$i9Vd9rmcq*>>-7k_K_1($qBjS1T-0& zOU9zflT={Ilda^*J~E}1OzAsvjy-ZtJxZV=_b3556g&+D&qBd-QwUHBL7ze}rmX8z)~Trpg+fUN-Ud*;gz?#Z zm=_HVH}TKs+|{ApH5!`hG`jcHP5d+0vSM={YXx*wJ8MdT%IU(RMOvN4=sXtKJa2rK zbaAnp<>=u3Co!ZaLLPFpIMoFhz35hGSz_dXxqD$>-#2Y~-kQ>mKi%%{zjMoZv9TdT znXoi+gwMRQ6O^64k$&rzGsOLformP_K4Pg9=G%9*Dgq*-=>8`%UIAd^iZGH2vPURJB4*2EoU<($1a3*C{c^|1bdJ|z&O zZ9>T(*>JVUQ%%pcNNtqK?wXAco@Z~N(9fnJn9R`ZZm!Nm{Iuw2nv6+w_cG5v-P#ja zma<6OFzO`{Li=R{qXWA`HvzWtG@Fn<6Y*&~kqBpjfAV7JPfc%pF zUT|}(&U=OabLBxq(i>N+dOpBy-cVq?-gZrY;?l<1314-m2;VNlj={W<2ig7A zK=V0ZHL^RGA{4^iebff&5I&XE#*#OmDPwvkJOSabANv^6oB1*?{fmR+?556+Z z*|Rm)vlTzyH(*@zJ|2l&a;A`paL>b|{6185b0=i26WfdxL0g~AaB@A4)q3W949t#L zSF~C<fgm4x+g(4*G|;2sZ�@`M#TJA-as1ZTbM~|EXPK(FPWX@3W~U0! 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 LY>ro&ddB`2Od%kv literal 0 HcmV?d00001 diff --git a/codeSnippet cor_test.png b/codeSnippet cor_test.png new file mode 100644 index 0000000000000000000000000000000000000000..3feaebd88ea368e515729ac92468a748b36f876e GIT binary patch literal 19573 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 b{xf Date: Mon, 24 Jun 2024 18:23:22 +0300 Subject: [PATCH 33/33] filth of pics --- cor_test example code.png | Bin 0 -> 53172 bytes correlation example code.png | Bin 0 -> 24428 bytes correlation example result.png | Bin 0 -> 92358 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 cor_test example code.png create mode 100644 correlation example code.png create mode 100644 correlation example result.png diff --git a/cor_test example code.png b/cor_test example code.png new file mode 100644 index 0000000000000000000000000000000000000000..ab75fe467f251a093ad426ea0c2b1a589ce17549 GIT binary patch literal 53172 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 R*^vK8ML|=(T-GG;e*l)5sS*GH literal 0 HcmV?d00001 diff --git a/correlation example result.png b/correlation example result.png new file mode 100644 index 0000000000000000000000000000000000000000..38227b11c98ad3e774d75e9843abd43576d34103 GIT binary patch literal 92358 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¬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