GithubHelp home page GithubHelp logo

wdm-r's Introduction

wdm

R-CMD-check Coverage status CRAN status CRAN downloads

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

  • Pearsons’s rho
  • Spearmans’s rho
  • Kendall’s tau
  • Blomqvist’s beta
  • Hoeffding’s D

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

  • the stable release from CRAN:
install.packages("wdm")
  • the development version from GitHub with:
# 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)  # all but Hoeffding's D can handle ties
w <- runif(100)
wdm(x, y, method = "kendall")               # unweighted
#> [1] -0.1206219
wdm(x, y, method = "kendall", weights = w)  # weighted
#> [1] -0.01751542
Dependence in a matrix
x <- matrix(rnorm(100 * 3), 100, 3)
wdm(x, method = "spearman")               # unweighted
#>            [,1]       [,2]       [,3]
#> [1,]  1.0000000 -0.1842904 -0.0060006
#> [2,] -0.1842904  1.0000000  0.1281728
#> [3,] -0.0060006  0.1281728  1.0000000
wdm(x, method = "spearman", weights = w)  # weighted
#>             [,1]       [,2]       [,3]
#> [1,]  1.00000000 -0.1435049 0.03738866
#> [2,] -0.14350490  1.0000000 0.23603074
#> [3,]  0.03738866  0.2360307 1.00000000
Independence test
x <- rnorm(100)
y <- rpois(100, 1)  # all but Hoeffding's D can handle ties
w <- runif(100)
indep_test(x, y, method = "kendall")               # unweighted
#>     estimate statistic   p_value n_eff  method alternative
#> 1 0.05391935 0.6092239 0.5423761   100 kendall   two-sided
indep_test(x, y, method = "kendall", weights = w)  # weighted
#>     estimate statistic   p_value    n_eff  method alternative
#> 1 0.01193407  0.115073 0.9083872 75.82538 kendall   two-sided

wdm-r's People

Contributors

tnagler avatar tvatter avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

guhjy

wdm-r's Issues

wrappers.cpp: fatal error: wdm.hpp: No such file or directory

Apparently it does not pass correct flags.

* installing *source* package ‘wdm’ ...
** using staged installation
** libs
/opt/local/bin/g++-mp-12 -std=gnu++11 -I"/opt/local/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I../inst/include -I'/opt/local/Library/Frameworks/R.framework/Versions/4.2/Resources/library/Rcpp/include' -isystem/opt/local/include/LegacySupport -I/opt/local/include   -fPIC  -pipe -Os -arch ppc  -c RcppExports.cpp -o RcppExports.o
/opt/local/bin/g++-mp-12 -std=gnu++11 -I"/opt/local/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I../inst/include -I'/opt/local/Library/Frameworks/R.framework/Versions/4.2/Resources/library/Rcpp/include' -isystem/opt/local/include/LegacySupport -I/opt/local/include   -fPIC  -pipe -Os -arch ppc  -c wrappers.cpp -o wrappers.o
wrappers.cpp:3:10: fatal error: wdm.hpp: No such file or directory
    3 | #include "wdm.hpp"
      |          ^~~~~~~~~
compilation terminated.
make: *** [wrappers.o] Error 1
ERROR: compilation failed for package ‘wdm’
* removing ‘/opt/local/var/macports/build/_opt_PPCRosettaPorts_R_R-wdm/R-wdm/work/.tmp/RtmpSgYHLt/Rinst8a3d603ff8f1/wdm’
      -----------------------------------
ERROR: package installation failed
Command failed:  cd "/opt/local/var/macports/build/_opt_PPCRosettaPorts_R_R-wdm/R-wdm/work/wdm-r-0.2.3" && /opt/local/bin/R CMD build . --no-manual --no-build-vignettes 
Exit code: 1

Spearman bug with weights?

Hi Thomas
I suppose there's a bug in your spearman code when using weights. From my understanding the following should hold:

# Example taken from: http://www.math.wpi.edu/saspdf/stat/chap28.pdf
# pp. 1349

library(DescTools)

Pain <- as.table(matrix(c(26, 26, 23, 18, 9, 6, 7, 9, 14, 23), 
                        nrow=5, 
                        dimnames = list(Dose = c("0", "1", "2", "3", "4"), 
                                        Adverse = c("No", "Yes")))) 

Desc(Pain, verb=3)

# consistent with the SAS results
with(Untable(Pain), cor(N(Adverse), N(Dose), method = "spearman"))
DescTools:::SpearmanRho(Pain)

# correct:
with(Untable(Pain),
     wdm::indep_test(as.numeric(Adverse), as.numeric(Dose), 
                     method = "spearman"))

# ******************************
# wrong:
with(as.data.frame(Pain),
     wdm::indep_test(as.numeric(Adverse), as.numeric(Dose), 
                     method = "spearman", weights = Freq))
# ***********************

# all correct (and consistent with SAS):
with(Untable(Pain),
     wdm::indep_test(as.numeric(Adverse), as.numeric(Dose), 
                     method = "pearson"))
with(as.data.frame(Pain),
     wdm::indep_test(as.numeric(Adverse), as.numeric(Dose), 
                     method = "pearson", weights = Freq))

with(Untable(Pain),
     wdm::indep_test(as.numeric(Adverse), as.numeric(Dose), 
                     method = "kendall"))
with(as.data.frame(Pain),
     wdm::indep_test(as.numeric(Adverse), as.numeric(Dose), 
                     method = "kendall", weights = Freq))

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.