22 #ifndef CRNOutliers_HEADER
23 #define CRNOutliers_HEADER
34 class SquareMatrixDouble;
37 std::vector<double>
ComputeLOF(
const SquareMatrixDouble &distmat,
size_t k);
39 std::vector<double>
ComputeLOF(
const std::vector<std::vector<double>> &distmat,
size_t k);
42 std::vector<double>
ComputeLoOP(
const SquareMatrixDouble &distmat,
size_t k,
double lambda);
44 std::vector<double>
ComputeLoOP(
const std::vector<std::vector<double>> &distmat,
size_t k,
double lambda);
59 auto c = 0.0, s = 0.0;
60 for (
auto it = beg; it != en; ++it)
65 auto e = std::vector<double>(std::distance(beg, en));
66 const auto n = double(e.size());
67 const auto cr = 1.0 - sqrt(
Sqr(c / n) +
Sqr(s / n));
69 for (
auto it = beg; it != en; ++it, ++cnt)
70 e[cnt] = (1.0 - sqrt(
Sqr((c -
Cos(*it)) / (n - 1)) +
Sqr((s -
Sin(*it)) / (n - 1)))) / (cr);
87 auto c = 0.0, s = 0.0;
88 for (
auto it = beg; it != en; ++it)
93 auto C = std::vector<double>(std::distance(beg, en));
94 const auto n = double(C.size());
95 const auto r = sqrt(
Sqr(c / n) +
Sqr(s / n));
97 for (
auto it = beg; it != en; ++it, ++cnt)
98 C[cnt] = sqrt(
Sqr((c -
Cos(*it)) / (n - 1)) +
Sqr((s -
Sin(*it)) / (n - 1))) / r;
std::vector< double > ComputeLOF(const SquareMatrixDouble &distmat, size_t k)
Compute the Local Outlier Factor for each element from the distance matrix.
double Cos(const A &a) noexcept
std::vector< double > ComputeLoOP(const SquareMatrixDouble &distmat, size_t k, double lambda)
compute the local outlier probability for each element from the distance matrix
std::vector< double > AngularOutliersC(ITER beg, ITER en)
Outlier C statistics of a set of angles (Collett, Outliers in circular data. Appl. Statist., 29, 50-57., 1980)
constexpr SumType< T > Sqr(const T &v) noexcept(noexcept(v *v))
Returns the square of a value.
double Sin(const A &a) noexcept
std::vector< double > AngularOutliersE(ITER beg, ITER en)
Outlier E statistics of a set of angles (Mardia, Statistics of directional data (with discussion)...