File indexing completed on 2024-05-12 03:47:54

0001 /*
0002     File                 : nsl_stats.h
0003     Project              : LabPlot
0004     Description          : NSL statistics functions
0005     --------------------------------------------------------------------
0006     SPDX-FileCopyrightText: 2016-2017 Stefan Gerlach <stefan.gerlach@uni.kn>
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 
0010 #ifndef NSL_STATS_H
0011 #define NSL_STATS_H
0012 
0013 #undef __BEGIN_DECLS
0014 #undef __END_DECLS
0015 #ifdef __cplusplus
0016 #define __BEGIN_DECLS extern "C" {
0017 #define __END_DECLS }
0018 #else
0019 #define __BEGIN_DECLS /* empty */
0020 #define __END_DECLS /* empty */
0021 #endif
0022 __BEGIN_DECLS
0023 
0024 #include <stdlib.h>
0025 
0026 /* estimation types of quantile (see https://en.wikipedia.org/wiki/Quantile,
0027  * https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mstats.mquantiles.html) */
0028 #define NSL_STATS_QUANTILE_TYPE_COUNT 9
0029 typedef enum {
0030     nsl_stats_quantile_type1 = 1,
0031     nsl_stats_quantile_type2,
0032     nsl_stats_quantile_type3,
0033     nsl_stats_quantile_type4,
0034     nsl_stats_quantile_type5,
0035     nsl_stats_quantile_type6,
0036     nsl_stats_quantile_type7,
0037     nsl_stats_quantile_type8,
0038     nsl_stats_quantile_type9
0039 } nsl_stats_quantile_type;
0040 
0041 /* minimum value of data array
0042     data - data array
0043     n - size of data array
0044     index - index of minimum value  (not used if NULL)
0045 */
0046 double nsl_stats_minimum(const double data[], const size_t n, size_t* index);
0047 /* maximum value of data array
0048     data - data array
0049     n - size of data array
0050     index - index of maximum value (not used if NULL)
0051 */
0052 double nsl_stats_maximum(const double data[], const size_t n, size_t* index);
0053 
0054 /* median from unsorted data. data will be sorted! */
0055 double nsl_stats_median(double data[], size_t stride, size_t n, nsl_stats_quantile_type type);
0056 /* median from sorted data */
0057 double nsl_stats_median_sorted(const double sorted_data[], size_t stride, size_t n, nsl_stats_quantile_type type);
0058 /* GSL legacy function */
0059 double nsl_stats_median_from_sorted_data(const double sorted_data[], size_t stride, size_t n);
0060 
0061 /* quantile from unsorted data. data will be sorted! */
0062 double nsl_stats_quantile(double data[], size_t stride, size_t n, double p, nsl_stats_quantile_type type);
0063 /* quantile from sorted data */
0064 double nsl_stats_quantile_sorted(const double sorted_data[], size_t stride, size_t n, double p, nsl_stats_quantile_type type);
0065 /* GSL legacy function */
0066 double nsl_stats_quantile_from_sorted_data(const double sorted_data[], size_t stride, size_t n, double p);
0067 
0068 /* R^2 */
0069 double nsl_stats_rsquare(double sse, double sst);
0070 /* adj. R^2 default version=1 */
0071 double nsl_stats_rsquareAdj(double rsquare, size_t np, size_t dof, int version);
0072 
0073 /* t distribution */
0074 double nsl_stats_tdist_t(double parameter, double error);
0075 /* p value */
0076 double nsl_stats_tdist_p(double t, double dof);
0077 /* margin (half of confidence interval) using z value */
0078 double nsl_stats_tdist_z(double alpha, double dof);
0079 double nsl_stats_tdist_margin(double alpha, double dof, double error);
0080 
0081 /* chi^2 distribution */
0082 double nsl_stats_chisq_p(double t, double dof);
0083 double nsl_stats_chisq_low(double alpha, double n);
0084 double nsl_stats_chisq_high(double alpha, double n);
0085 
0086 /* F distribution */
0087 double nsl_stats_fdist_F(double rsquare, size_t np, size_t dof);
0088 /* p value */
0089 double nsl_stats_fdist_p(double F, size_t np, double dof);
0090 
0091 /* log-likelihood */
0092 double nsl_stats_logLik(double sse, size_t n);
0093 
0094 /* Akaike information criterion (AIC) */
0095 double nsl_stats_aic(double sse, size_t n, size_t np, int version);
0096 /* bias-corrected version */
0097 double nsl_stats_aicc(double sse, size_t n, size_t np, int version);
0098 
0099 /* Schwarz Bayesian information criterion (BIC, SBC, SBIC) */
0100 double nsl_stats_bic(double sse, size_t n, size_t np, int version);
0101 
0102 __END_DECLS
0103 
0104 #endif /* NSL_STATS_H */