nk 1.0.0
C++ Numerical Computing Runtime
Loading...
Searching...
No Matches
descriptive.hpp
Go to the documentation of this file.
1// toolboxes/stats/include/nk/stats/descriptive/descriptive.hpp
2//
3// Descriptive statistics — Phase 1 of the parity expansion plan.
4
5#pragma once
6
7#include <memory_resource>
8#include <nk/value/value.hpp>
9
10#include <limits>
11#include <string>
12#include <tuple>
13#include <utility>
14#include <vector>
15
16namespace nk::stats {
17
20
21
34
44Value var(const Value &x, int normFlag = 0, int dim = 0, std::pmr::memory_resource *mr = nullptr);
45
56Value stdev(const Value &x, int normFlag = 0, int dim = 0, std::pmr::memory_resource *mr = nullptr);
57
68Value median(const Value &x, int dim = 0, std::pmr::memory_resource *mr = nullptr);
69
82Value quantile(const Value &x, const Value &p, int dim = 0, std::pmr::memory_resource *mr = nullptr);
83
94Value prctile(const Value &x, const Value &p, int dim = 0, std::pmr::memory_resource *mr = nullptr);
95
105std::tuple<Value, Value>
106mode(const Value &x, int dim = 0, std::pmr::memory_resource *mr = nullptr);
107
108// nan-aware reductions and higher moments moved to companion headers:
109// <nk/stats/nan_aware/nan_aware.hpp>
110// <nk/stats/moments/moments.hpp>
111
123Value cov(const Value &x, int normFlag = 0, std::pmr::memory_resource *mr = nullptr);
124
135Value cov(const Value &x, const Value &y, int normFlag = 0, std::pmr::memory_resource *mr = nullptr);
136
145Value corrcoef(const Value &x, std::pmr::memory_resource *mr = nullptr);
146
154Value corrcoef(const Value &x, const Value &y, std::pmr::memory_resource *mr = nullptr);
155
162std::tuple<Value, Value>
163bounds(const Value &x, int dim = 0, std::pmr::memory_resource *mr = nullptr);
164
174Value iqr(const Value &x, int dim = 0, std::pmr::memory_resource *mr = nullptr);
175
186Value maxk(const Value &x, int k, int dim = 0, std::pmr::memory_resource *mr = nullptr);
187
198Value mink(const Value &x, int k, int dim = 0, std::pmr::memory_resource *mr = nullptr);
199
210Value rmse(const Value &f, const Value &a, int dim = 0, std::pmr::memory_resource *mr = nullptr);
211
223Value mape(const Value &f, const Value &a, int dim = 0, std::pmr::memory_resource *mr = nullptr);
224
237Value partialcorr_of(const Value &X, const Value &Y, const Value &Z, std::pmr::memory_resource *mr = nullptr);
238
251Value partialcorr_xx(const Value &X, std::pmr::memory_resource *mr = nullptr);
252
264Value partialcorr_xz(const Value &X, const Value &Z, std::pmr::memory_resource *mr = nullptr);
265
285Value partialcorri(const Value &Y, const Value &X, const Value &Z = {},
286 std::pmr::memory_resource *mr = nullptr);
287
296
314 std::pmr::memory_resource *mr = nullptr);
315
325Value corr_xx(const Value &X, std::pmr::memory_resource *mr = nullptr);
326
334Value corr_xy(const Value &X, const Value &Y, std::pmr::memory_resource *mr = nullptr);
335
345Value detrend_of(const Value &x, int order = 1, std::pmr::memory_resource *mr = nullptr);
346
355Value isoutlier_of(const Value &x, std::pmr::memory_resource *mr = nullptr);
356
366Value rmoutliers_of(const Value &x, std::pmr::memory_resource *mr = nullptr);
367
381Value fillmissing_of(const Value &x, const std::string &method, double constVal = 0.0, std::pmr::memory_resource *mr = nullptr);
382
390Value rmmissing_of(const Value &x, std::pmr::memory_resource *mr = nullptr);
391
400Value standardizeMissing_of(const Value &x, double sentinel, std::pmr::memory_resource *mr = nullptr);
401
408Value range_of(const Value &x, int dim = 0, std::pmr::memory_resource *mr = nullptr);
409
421Value mad_of(const Value &x, int flag = 0, int dim = 0, std::pmr::memory_resource *mr = nullptr);
422
432Value geomean_of(const Value &x, int dim = 0, std::pmr::memory_resource *mr = nullptr);
433
443Value harmmean_of(const Value &x, int dim = 0, std::pmr::memory_resource *mr = nullptr);
444
455Value moment_of(const Value &x, int order, int dim = 0, std::pmr::memory_resource *mr = nullptr);
456
469Value trimmean_of(const Value &x, double pct, int dim = 0, bool useFloor = false,
470 std::pmr::memory_resource *mr = nullptr);
471
483std::tuple<Value, Value, Value>
484prepareCurveData(const Value &x, const Value &y, const Value &w, std::pmr::memory_resource *mr = nullptr);
485
496std::tuple<Value, Value, Value>
497prepareSurfaceData(const Value &x, const Value &y, const Value &z, std::pmr::memory_resource *mr = nullptr);
498
507std::tuple<Value, Value, Value, Value, Value, Value, Value>
508datastats(const Value &x, std::pmr::memory_resource *mr = nullptr);
509
520std::tuple<Value, Value>
521ecdf(const Value &y, std::pmr::memory_resource *mr = nullptr);
522
535std::tuple<Value, Value, Value>
536ksdensity(const Value &x, const Value &pts, double bw_user, std::pmr::memory_resource *mr = nullptr);
537
550std::tuple<Value, Value>
551ecdfhist(const Value &f, const Value &x, int m = 10, std::pmr::memory_resource *mr = nullptr);
552
582
590NormalizeResult normalize(const Value &A, const std::string &method,
591 const Value &param = Value::Empty,
592 std::pmr::memory_resource *mr = nullptr);
593
608Value rescale(const Value &A, double lo, double hi, std::pmr::memory_resource *mr = nullptr,
609 double inputMin = std::numeric_limits<double>::quiet_NaN(),
610 double inputMax = std::numeric_limits<double>::quiet_NaN());
611
620Value zscore(const Value &A, std::pmr::memory_resource *mr = nullptr);
621
631std::pair<Value, Value>
632tiedrank(const Value &x, std::pmr::memory_resource *mr = nullptr);
633
647std::tuple<Value, Value, Value>
648autocorr(const Value &y, int numLags = -1, double numSTD = 2.0,
649 std::pmr::memory_resource *mr = nullptr);
650
665std::tuple<Value, Value, Value>
666crosscorr(const Value &y1, const Value &y2, int numLags = -1, double numSTD = 2.0,
667 std::pmr::memory_resource *mr = nullptr);
668
684std::tuple<Value, Value, Value>
685parcorr(const Value &y, int numLags = -1, double numSTD = 2.0,
686 std::pmr::memory_resource *mr = nullptr);
687
698std::pair<Value, Value>
699corrcov(const Value &C, std::pmr::memory_resource *mr = nullptr);
700
711Value tabulate(const Value &x, std::pmr::memory_resource *mr = nullptr);
712
724std::pair<Value, Value>
725cholcov(const Value &SIGMA, std::pmr::memory_resource *mr = nullptr);
726
739std::tuple<Value, double, double>
740crosstab(const Value &x, const Value &y_opt = Value::Empty,
741 std::pmr::memory_resource *mr = nullptr);
742
755std::vector<Value>
756grpstats(const Value &X, const Value &group, const std::vector<std::string> &fn_names, std::pmr::memory_resource *mr = nullptr);
757
768Value nearcorr(const Value &A, std::pmr::memory_resource *mr = nullptr);
769
776
793Grp2idxResult grp2idx(const Value &s, std::pmr::memory_resource *mr = nullptr);
794
816Value filloutliers(const Value &A, const Value &fillMethod,
817 const std::string &findMethod = "median",
818 double thresholdFactor = std::numeric_limits<double>::quiet_NaN(),
819 std::pmr::memory_resource *mr = nullptr);
820
821
823} // namespace nk::stats
Core MATLAB-compatible multidimensional array and scalar value type.
Definition value.hpp:61
static const Value Empty
MATLAB-style empty matrix sentinel — a 0×0 DOUBLE value.
Definition value.hpp:136
NormalizeResult normalize(const Value &A, const std::string &method, const Value &param=Value::Empty, std::pmr::memory_resource *mr=nullptr)
Normalizes data using z-score, min-max, scale, or center methods ([N, C, S] = normalize(....
Value cov(const Value &x, int normFlag=0, std::pmr::memory_resource *mr=nullptr)
Sample / population covariance (C = cov(X, normFlag)).
Value moment_of(const Value &x, int order, int dim=0, std::pmr::memory_resource *mr=nullptr)
k-th central moment (m = moment(x, k, dim)).
Value isoutlier_of(const Value &x, std::pmr::memory_resource *mr=nullptr)
Outlier mask (tf = isoutlier(x)).
Value iqr(const Value &x, int dim=0, std::pmr::memory_resource *mr=nullptr)
Interquartile range (r = iqr(X, dim)).
std::pair< Value, Value > corrcov(const Value &C, std::pmr::memory_resource *mr=nullptr)
Correlation matrix from covariance ([R, sigma] = corrcov(C)).
Value harmmean_of(const Value &x, int dim=0, std::pmr::memory_resource *mr=nullptr)
Harmonic mean (h = harmmean(x, dim)).
Value range_of(const Value &x, int dim=0, std::pmr::memory_resource *mr=nullptr)
Range = max - min along dim (r = range(x, dim)).
Value corr_xx(const Value &X, std::pmr::memory_resource *mr=nullptr)
Auto-correlation across columns of X (R = corr(X)).
Value zscore(const Value &A, std::pmr::memory_resource *mr=nullptr)
Z-score normalisation (Y = zscore(A)).
Value rmoutliers_of(const Value &x, std::pmr::memory_resource *mr=nullptr)
Remove outliers (y = rmoutliers(x)).
Grp2idxResult grp2idx(const Value &s, std::pmr::memory_resource *mr=nullptr)
Grouping variable → index vector ([G, GN, GL] = grp2idx(s)).
CanoncorrResult canoncorr(const Value &X, const Value &Y, std::pmr::memory_resource *mr=nullptr)
Canonical correlation analysis ([A, B, r] = canoncorr(X, Y)).
Value fillmissing_of(const Value &x, const std::string &method, double constVal=0.0, std::pmr::memory_resource *mr=nullptr)
Fill missing values (y = fillmissing(x, method, constVal)).
Value maxk(const Value &x, int k, int dim=0, std::pmr::memory_resource *mr=nullptr)
k largest values along dim (y = maxk(X, k, dim)).
Value trimmean_of(const Value &x, double pct, int dim=0, bool useFloor=false, std::pmr::memory_resource *mr=nullptr)
Trimmed mean (m = trimmean(x, pct, dim)).
std::tuple< Value, double, double > crosstab(const Value &x, const Value &y_opt=Value::Empty, std::pmr::memory_resource *mr=nullptr)
Contingency table ([T, chi2, p] = crosstab(x, y_opt)).
Value rescale(const Value &A, double lo, double hi, std::pmr::memory_resource *mr=nullptr, double inputMin=std::numeric_limits< double >::quiet_NaN(), double inputMax=std::numeric_limits< double >::quiet_NaN())
Linear range remap (Y = rescale(A, lo, hi)).
Value stdev(const Value &x, int normFlag=0, int dim=0, std::pmr::memory_resource *mr=nullptr)
Sample / population standard deviation (y = std(X, normFlag, dim)).
std::tuple< Value, Value, Value > prepareCurveData(const Value &x, const Value &y, const Value &w, std::pmr::memory_resource *mr=nullptr)
Curve-data cleanup ([xo, yo, wo] = prepareCurveData(x, y, w)).
std::tuple< Value, Value > ecdfhist(const Value &f, const Value &x, int m=10, std::pmr::memory_resource *mr=nullptr)
Histogram from empirical CDF ([n, c] = ecdfhist(f, x, m)).
Value filloutliers(const Value &A, const Value &fillMethod, const std::string &findMethod="median", double thresholdFactor=std::numeric_limits< double >::quiet_NaN(), std::pmr::memory_resource *mr=nullptr)
Replace outliers (B = filloutliers(A, fillMethod, findMethod, tf)).
std::tuple< Value, Value, Value, Value, Value, Value, Value > datastats(const Value &x, std::pmr::memory_resource *mr=nullptr)
Dataset descriptive summary (datastats(x)).
Value partialcorr_xx(const Value &X, std::pmr::memory_resource *mr=nullptr)
One-argument partial correlation: pairwise partial correlation between columns of X,...
Value rmse(const Value &f, const Value &a, int dim=0, std::pmr::memory_resource *mr=nullptr)
Root-mean-square error (e = rmse(F, A, dim)).
Value corr_xy(const Value &X, const Value &Y, std::pmr::memory_resource *mr=nullptr)
Cross-correlation between columns of X and Y (R = corr(X, Y)).
Value partialcorr_of(const Value &X, const Value &Y, const Value &Z, std::pmr::memory_resource *mr=nullptr)
Partial correlation controlling for Z (R = partialcorr(X, Y, Z)).
std::tuple< Value, Value, Value > crosscorr(const Value &y1, const Value &y2, int numLags=-1, double numSTD=2.0, std::pmr::memory_resource *mr=nullptr)
Sample cross-correlation function ([xcf, lags, bounds] = crosscorr(y1, y2)).
Value mink(const Value &x, int k, int dim=0, std::pmr::memory_resource *mr=nullptr)
k smallest values along dim (y = mink(X, k, dim)).
std::tuple< Value, Value > ecdf(const Value &y, std::pmr::memory_resource *mr=nullptr)
Empirical cumulative distribution function ([f, x] = ecdf(y)).
std::pair< Value, Value > cholcov(const Value &SIGMA, std::pmr::memory_resource *mr=nullptr)
Cholesky-like factor of a covariance matrix ([T, p] = cholcov(SIGMA)).
std::tuple< Value, Value > bounds(const Value &x, int dim=0, std::pmr::memory_resource *mr=nullptr)
Min and max along dim ([lo, hi] = bounds(X, dim)).
Value corrcoef(const Value &x, std::pmr::memory_resource *mr=nullptr)
Pearson correlation matrix (R = corrcoef(X)).
Value mape(const Value &f, const Value &a, int dim=0, std::pmr::memory_resource *mr=nullptr)
Mean absolute percentage error (e = mape(F, A, dim)).
Value geomean_of(const Value &x, int dim=0, std::pmr::memory_resource *mr=nullptr)
Geometric mean (g = geomean(x, dim)).
Value partialcorr_xz(const Value &X, const Value &Z, std::pmr::memory_resource *mr=nullptr)
Two-argument partial correlation (R = partialcorr(X, Z)).
Value var(const Value &x, int normFlag=0, int dim=0, std::pmr::memory_resource *mr=nullptr)
Sample / population variance along dim (y = var(X, normFlag, dim)).
std::tuple< Value, Value > mode(const Value &x, int dim=0, std::pmr::memory_resource *mr=nullptr)
Mode and frequency ([m, f] = mode(X, dim)).
std::pair< Value, Value > tiedrank(const Value &x, std::pmr::memory_resource *mr=nullptr)
Tie-corrected ranks ([r, tieadj] = tiedrank(x)).
Value nearcorr(const Value &A, std::pmr::memory_resource *mr=nullptr)
Nearest correlation matrix (Y = nearcorr(A)).
Value detrend_of(const Value &x, int order=1, std::pmr::memory_resource *mr=nullptr)
Remove polynomial trend (y = detrend(x, order)).
std::tuple< Value, Value, Value > prepareSurfaceData(const Value &x, const Value &y, const Value &z, std::pmr::memory_resource *mr=nullptr)
Surface-data cleanup ([xo, yo, zo] = prepareSurfaceData(x, y, z)).
Value quantile(const Value &x, const Value &p, int dim=0, std::pmr::memory_resource *mr=nullptr)
Empirical quantile (q = quantile(X, p, dim)).
Value partialcorri(const Value &Y, const Value &X, const Value &Z={}, std::pmr::memory_resource *mr=nullptr)
Partial correlation between each column of Y and each column of X, controlling for the remaining colu...
std::tuple< Value, Value, Value > ksdensity(const Value &x, const Value &pts, double bw_user, std::pmr::memory_resource *mr=nullptr)
Kernel density estimate ([f, xi, bw] = ksdensity(x, pts, bw_user)).
Value standardizeMissing_of(const Value &x, double sentinel, std::pmr::memory_resource *mr=nullptr)
Convert sentinel value to missing (y = standardizeMissing(x, sentinel)).
std::tuple< Value, Value, Value > parcorr(const Value &y, int numLags=-1, double numSTD=2.0, std::pmr::memory_resource *mr=nullptr)
Sample partial autocorrelation function ([pacf, lags, bounds] = parcorr(y)).
Value prctile(const Value &x, const Value &p, int dim=0, std::pmr::memory_resource *mr=nullptr)
Empirical percentile (q = prctile(X, p, dim)).
std::vector< Value > grpstats(const Value &X, const Value &group, const std::vector< std::string > &fn_names, std::pmr::memory_resource *mr=nullptr)
Per-group statistics (grpstats(X, group, fn_names)).
Value tabulate(const Value &x, std::pmr::memory_resource *mr=nullptr)
Frequency table (T = tabulate(x)).
Value mad_of(const Value &x, int flag=0, int dim=0, std::pmr::memory_resource *mr=nullptr)
Mean absolute deviation (y = mad(x, flag, dim)).
std::tuple< Value, Value, Value > autocorr(const Value &y, int numLags=-1, double numSTD=2.0, std::pmr::memory_resource *mr=nullptr)
Sample autocorrelation function ([acf, lags, bounds] = autocorr(y)).
Value median(const Value &x, int dim=0, std::pmr::memory_resource *mr=nullptr)
Median along dim (y = median(X, dim)).
Value rmmissing_of(const Value &x, std::pmr::memory_resource *mr=nullptr)
Remove rows / cols containing missing values (y = rmmissing(x)).
Canonical correlation analysis ([A, B, r] = canoncorr(X, Y)).
Value r
Length-k canonical correlations (in [0, 1], non-increasing).
Value B
q × k canonical coefficients for Y.
Value A
p × k canonical coefficients for X.
Result of grp2idx — [G, GN, GL].
Value GL
Group levels — equals GN for the non-categorical inputs.
Value GN
Column cell of group names (char rows), in group order.
Value G
Column vector of 1-based group indices (NaN for NaN input).
Column-wise normalisation (Y = normalize(A, method)).
Value n
Normalized array ((A - c) ./ s).
Value s
Scaling values S.
Value c
Centering values C.