A header-only C++ library for weighted dependence measures
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.
The library provides:
- a function
wdm()
to compute the weighted dependence measures, - a class
Indep_test
to perform a test for independence based on asymptotic p-values.
For details, see the API documentation and the example below.
The library only requires C++11.
For projects already using the Eigen linear algebra library, there are convenience wrappers that can be made available via
#include <wdm/eigen.hpp>
There are two options:
- Either copy the header files in
include/
to your project. - Install the headers globally using the CMake project. To do that go to the
root repository of this repo and run:
To use the library in your project, just add
mkdir build && cd build # open build folder cmake .. && sudo make install # install library cd .. && rm -rf build # leave and remove build folder
target_link_libraries(your_proj_name wdm)
toyour_proj_name/CMakeLists.txt
.
You can then include the main header in your source code:
#include <wdm.hpp>
#include "wdm.hpp"
// input vectors
std::vector<double> x{1, 3, 2, 5, 3, 2, 20, 15};
std::vector<double> y{2, 12, 4, 7, 8, 14, 17, 6};
// weights
std::vector<double> w{1, 1, 2, 2, 1, 0, 0.5, 0.3};
std::cout <<
"unweighted Kendall's tau: " << wdm::wdm(x, y, "kendall") << std::endl;
std::cout <<
"weighted Kendall's tau: " << wdm::wdm(x, y, "kendall", w) << std::endl;
// weighted independence test
wdm::Indep_test test(x, y, "kendall", w);
std::cout << "statistic: " << test.statistic() << std::endl;
std::cout << "p-value: " << test.p_value() << std::endl;
unweighted Kendall's tau: 0.2965
weighted Kendall's tau: 0.550633
statistic: 1.71047
p-value: 0.0871793