16 normalize_weights(std::vector<double>& w)
19 double s = utils::sum(w);
20 for (
size_t i = 0; i < w.size(); i++)
29 ktau(std::vector<double> x,
30 std::vector<double> y,
31 std::vector<double> weights = std::vector<double>())
33 utils::check_sizes(x, y, weights);
36 utils::sort_all(x, y, weights);
39 double ties_x = utils::count_tied_pairs(x, weights);
40 double ties_both = utils::count_joint_ties(x, y, weights);
44 utils::merge_sort(y, weights, num_d);
47 double ties_y = utils::count_tied_pairs(y, weights);
50 if (weights.size() == 0)
51 weights = std::vector<double>(x.size(), 1.0);
52 double num_pairs = utils::perm_sum(weights, 2);
53 double num_c = num_pairs - (num_d + ties_x + ties_y - ties_both);
54 double tau = num_c - num_d;
55 tau /= std::sqrt((num_pairs - ties_x) * (num_pairs - ties_y));
62 ktau_stat_adjust(std::vector<double> x,
63 std::vector<double> y,
64 std::vector<double> weights)
66 utils::check_sizes(x, y, weights);
68 if (weights.size() == 0)
69 weights = std::vector<double>(x.size(), 1.0);
72 double effective_scale =
73 utils::sum(weights) / utils::sum(utils::pow(weights, 2));
74 for (
auto& weight : weights)
75 weight *= effective_scale;
78 utils::sort_all(x, y, weights);
81 double pair_x = utils::count_tied_pairs(x, weights);
82 double trip_x = utils::count_tied_triplets(x, weights);
83 double v_x = utils::count_ties_v(x, weights);
86 utils::sort_all(y, x, weights);
89 double pair_y = utils::count_tied_pairs(y, weights);
90 double trip_y = utils::count_tied_triplets(y, weights);
91 double v_y = utils::count_ties_v(y, weights);
94 double s = utils::sum(weights);
95 double s2 = utils::perm_sum(weights, 2);
96 double s3 = utils::perm_sum(weights, 3);
97 double v_0 = 2 * s2 * (2 * s + 5);
98 double v_1 = 2 * pair_x * 2 * pair_y / (2 * 2 * s2);
99 double v_2 = 6 * trip_x * 6 * trip_y / (9 * 6 * s3);
100 double v = (v_0 - v_x - v_y) / 18 + v_1 + v_2;
101 return std::sqrt((s2 - pair_x) * (s2 - pair_y) / v);
Weighted dependence measures.
Definition: wdm.hpp:19