wdm

R-CMD-check CRAN status CRAN downloads

R interface to the wdm C++ library, which provides efficient implementations of weighted dependence measures and related independence tests:

All measures are computed in O(n log n) time, where n is the number of observations.

For a detailed description of the functionality, see the API documentation.

Installation

install.packages("wdm")
# install.packages("devtools")
install_submodule_git <- function(x, ...) {
  install_dir <- tempfile()
  system(paste("git clone --recursive", shQuote(x), shQuote(install_dir)))
  devtools::install(install_dir, ...)
}
install_submodule_git("https://github.com/tnagler/wdm-r")

Cloning

This repo contains wdm as a submodule. For a full clone use

git clone --recurse-submodules <repo-address>

Examples

library(wdm)
Dependence between two vectors
x <- rnorm(100)
y <- rpois(100, 1)
w <- runif(100)
wdm(x, y, method = "kendall")               # unweighted
#> [1] 0.04547414
wdm(x, y, method = "kendall", weights = w)  # weighted
#> [1] 0.07764891
Dependence in a matrix
x <- matrix(rnorm(100 * 3), 100, 3)
wdm(x, method = "spearman")               # unweighted
#>             [,1]        [,2]        [,3]
#> [1,]  1.00000000  0.10045005 -0.03279928
#> [2,]  0.10045005  1.00000000 -0.02744674
#> [3,] -0.03279928 -0.02744674  1.00000000
wdm(x, method = "spearman", weights = w)  # weighted
#>             [,1]       [,2]        [,3]
#> [1,]  1.00000000 0.22080359 -0.05369922
#> [2,]  0.22080359 1.00000000  0.01192067
#> [3,] -0.05369922 0.01192067  1.00000000

Chatterjee’s xi measures the dependence of the second argument on the first, so reversing the arguments can change the result:

wdm(x[, 1], x[, 2], method = "chatterjee")
#> [1] 0.01740174
wdm(x[, 2], x[, 1], method = "chatterjee")
#> [1] 0.03510351
Independence test
x <- rnorm(100)
y <- rpois(100, 1)
w <- runif(100)
indep_test(x, y, method = "kendall")               # unweighted
#>     estimate statistic   p_value n_eff  method alternative
#> 1 0.02140979 0.2799245 0.7795354   100 kendall   two-sided
indep_test(x, y, method = "kendall", weights = w)  # weighted
#>     estimate statistic   p_value   n_eff  method alternative
#> 1 0.04616801 0.5015067 0.6160145 71.2503 kendall   two-sided

For Chatterjee’s xi, x is the predictor and y is the response. Its natural one-sided alternative is "greater":

indep_test(x, y, method = "chatterjee", alternative = "greater")
#>      estimate statistic   p_value n_eff     method alternative
#> 1 -0.04496517 -0.576012 0.7176965   100 chatterjee     greater