Giter VIP home page Giter VIP logo

chanukyasds / pg_math Goto Github PK

View Code? Open in Web Editor NEW
14.0 2.0 1.0 28 KB

pg_math extension to support statistical distribution functions for PostgreSQL

Makefile 0.24% C 99.76%
c distribution-function gsl-library postgresql postgresql-database postgresql-extension statistics probability-distributions probability-statistics plpgsql sql probability statistical-models statistical-tests critical-values math fdist tdist bionomial-distribution gaussian-distribution

pg_math's Introduction

pg_math -- compute statistical distribution functions in PostgreSQL

pg_math is a C extension that utilises the GSL (GNU Scientific Library) to support Postgresql for various types of statistical distribution functions.

Available Distributions

  1. F-Distribution
  2. Gaussian Distribution
  3. Unit Gaussian Distribution
  4. Gaussian Tail Distribution
  5. Bivariate Gaussian Distribution
  6. Exponential Distribution
  7. Laplace Distribution
  8. Exponential Power Distribution
  9. Cauchy Distribution
  10. Rayleigh Distribution
  11. Rayleigh Tail Distribution
  12. Landau Distribution
  13. Gamma Distribution
  14. Flat (Uniform) Distribution
  15. Lognormal Distribution
  16. Chi-squared Distribution
  17. T-Distribution
  18. Beta Distribution
  19. Logistic Distribution
  20. Pareto Distribution
  21. Weibull Distribution
  22. Type-1 Gumbel Distribution
  23. Type-2 Gumbel Distribution
  24. Poisson Distribution
  25. Bernoulli Distribution
  26. Binomial Distribution
  27. Negative Binomial Distribution
  28. Pascal Distribution
  29. Geometric Distribution
  30. Hypergeometric Distribution
  31. Logarithmic Distribution

List of Functions

Note

Functions with prefix "cdf" computes cumulative distribution value

Functions with prefix "rdf" computes random distribution value

Distribution Type Function Name Return Type
F-Distribution rdf_fdist(double precision,double precision,double precision) double precision
F-Distribution cdf_fdist_p(double precision,double precision,double precision) double precision
F-Distribution cdf_fdist_q(double precision,double precision,double precision) double precision
F-Distribution cdf_fdist_pinv(double precision,double precision,double precision) double precision
F-Distribution cdf_fdist_qinv(double precision,double precision,double precision) double precision
Gaussian Distribution rdf_gaussian(double precision,double precision) double precision
Gaussian Distribution cdf_gaussian_p(double precision,double precision) double precision
Gaussian Distribution cdf_gaussian_q(double precision,double precision) double precision
Gaussian Distribution cdf_gaussian_pinv(double precision,double precision) double precision
Gaussian Distribution cdf_gaussian_qinv(double precision,double precision) double precision
Unit Gaussian Distribution rdf_unit_gaussian(double precision) double precision
Unit Gaussian Distribution cdf_unit_gaussian_p(double precision) double precision
Unit Gaussian Distribution cdf_unit_gaussian_q(double precision) double precision
Unit Gaussian Distribution cdf_unit_gaussian_pinv(double precision) double precision
Unit Gaussian Distribution cdf_unit_gaussian_qinv(double precision) double precision
Gaussian Tail Distribution rdf_gaussian_tail(double precision,double precision,double precision) double precision
Unit Gaussian Tail Distribution rdf_unit_gaussian_tail(double precision,double precision) double precision
Bivariate Gaussian Distribution rdf_bivariate_gaussian(double precision,double precision,double precision,double precision,double precision) double precision
Exponential Distribution rdf_exponential(double precision,double precision) double precision
Exponential Distribution cdf_exponential_p(double precision,double precision) double precision
Exponential Distribution cdf_exponential_q(double precision,double precision) double precision
Exponential Distribution cdf_exponential_pinv(double precision,double precision) double precision
Exponential Distribution cdf_exponential_qinv(double precision,double precision) double precision
Laplace Distribution rdf_laplace(double precision,double precision) double precision
Laplace Distribution cdf_laplace_p(double precision,double precision) double precision
Laplace Distribution cdf_laplace_q(double precision,double precision) double precision
Laplace Distribution cdf_laplace_pinv(double precision,double precision) double precision
Laplace Distribution cdf_laplace_qinv(double precision,double precision) double precision
Exponential Power Distribution rdf_exppow(double precision,double precision,double precision) double precision
Exponential Power Distribution cdf_exppow_p(double precision,double precision,double precision) double precision
Exponential Power Distribution cdf_exppow_q(double precision,double precision,double precision) double precision
Cauchy Distribution rdf_cauchy(double precision,double precision) double precision
Cauchy Distribution cdf_cauchy_p(double precision,double precision) double precision
Cauchy Distribution cdf_cauchy_q(double precision,double precision) double precision
Cauchy Distribution cdf_cauchy_pinv(double precision,double precision) double precision
Cauchy Distribution cdf_cauchy_qinv(double precision,double precision) double precision
Rayleigh Distribution rdf_rayleigh(double precision,double precision) double precision
Rayleigh Distribution cdf_rayleigh_p(double precision,double precision) double precision
Rayleigh Distribution cdf_rayleigh_q(double precision,double precision) double precision
Rayleigh Distribution cdf_rayleigh_pinv(double precision,double precision) double precision
Rayleigh Distribution cdf_rayleigh_qinv(double precision,double precision) double precision
Rayleigh Tail Distribution rdf_rayleigh_tail(double precision,double precision,double precision) double precision
Landau Distribution rdf_landau(double precision) double precision
Gamma Distribution rdf_gamma(double precision,double precision,double precision) double precision
Gamma Distribution cdf_gamma_p(double precision,double precision,double precision) double precision
Gamma Distribution cdf_gamma_q(double precision,double precision,double precision) double precision
Gamma Distribution cdf_gamma_pinv(double precision,double precision,double precision) double precision
Gamma Distribution cdf_gamma_qinv(double precision,double precision,double precision) double precision
Flat (Uniform) Distribution rdf_flat_unif(double precision,double precision,double precision) double precision
Flat (Uniform) Distribution cdf_flat_unif_p(double precision,double precision,double precision) double precision
Flat (Uniform) Distribution cdf_flat_unif_q(double precision,double precision,double precision) double precision
Flat (Uniform) Distribution cdf_flat_unif_pinv(double precision,double precision,double precision) double precision
Flat (Uniform) Distribution cdf_flat_unif_qinv(double precision,double precision,double precision) double precision
Lognormal Distribution rdf_lognormal(double precision,double precision,double precision) double precision
Lognormal Distribution cdf_lognormal_p(double precision,double precision,double precision) double precision
Lognormal Distribution cdf_lognormal_q(double precision,double precision,double precision) double precision
Lognormal Distribution cdf_lognormal_pinv(double precision,double precision,double precision) double precision
Lognormal Distribution cdf_lognormal_qinv(double precision,double precision,double precision) double precision
Chi-squared Distribution rdf_chisq(double precision,double precision) double precision
Chi-squared Distribution cdf_chisq_p(double precision,double precision) double precision
Chi-squared Distribution cdf_chisq_q(double precision,double precision) double precision
Chi-squared Distribution cdf_chisq_pinv(double precision,double precision) double precision
Chi-squared Distribution cdf_chisq_qinv(double precision,double precision) double precision
T-Distribution rdf_tdist(double precision,double precision) double precision
T-Distribution cdf_tdist_p(double precision,double precision) double precision
T-Distribution cdf_tdist_q(double precision,double precision) double precision
T-Distribution cdf_tdist_pinv(double precision,double precision) double precision
T-Distribution cdf_tdist_qinv(double precision,double precision) double precision
Beta Distribution rdf_beta(double precision,double precision,double precision) double precision
Beta Distribution cdf_beta_p(double precision,double precision,double precision) double precision
Beta Distribution cdf_beta_q(double precision,double precision,double precision) double precision
Beta Distribution cdf_beta_pinv(double precision,double precision,double precision) double precision
Beta Distribution cdf_beta_qinv(double precision,double precision,double precision) double precision
Logistic Distribution rdf_logistic(double precision,double precision) double precision
Logistic Distribution cdf_logistic_p(double precision,double precision) double precision
Logistic Distribution cdf_logistic_q(double precision,double precision) double precision
Logistic Distribution cdf_logistic_pinv(double precision,double precision) double precision
Logistic Distribution cdf_logistic_qinv(double precision,double precision) double precision
Pareto Distribution rdf_pareto(double precision,double precision,double precision) double precision
Pareto Distribution cdf_pareto_p(double precision,double precision,double precision) double precision
Pareto Distribution cdf_pareto_q(double precision,double precision,double precision) double precision
Pareto Distribution cdf_pareto_pinv(double precision,double precision,double precision) double precision
Pareto Distribution cdf_pareto_qinv(double precision,double precision,double precision) double precision
Weibull Distribution rdf_weibull(double precision,double precision,double precision) double precision
Weibull Distribution cdf_weibull_p(double precision,double precision,double precision) double precision
Weibull Distribution cdf_weibull_q(double precision,double precision,double precision) double precision
Weibull Distribution cdf_weibull_pinv(double precision,double precision,double precision) double precision
Weibull Distribution cdf_weibull_qinv(double precision,double precision,double precision) double precision
Type-1 Gumbel Distribution rdf_gumbel1(double precision,double precision,double precision) double precision
Type-1 Gumbel Distribution cdf_gumbel1_p(double precision,double precision,double precision) double precision
Type-1 Gumbel Distribution cdf_gumbel1_q(double precision,double precision,double precision) double precision
Type-1 Gumbel Distribution cdf_gumbel1_pinv(double precision,double precision,double precision) double precision
Type-1 Gumbel Distribution cdf_gumbel1_qinv(double precision,double precision,double precision) double precision
Type-2 Gumbel Distribution rdf_gumbel2(double precision,double precision,double precision) double precision
Type-2 Gumbel Distribution cdf_gumbel2_p(double precision,double precision,double precision) double precision
Type-2 Gumbel Distribution cdf_gumbel2_q(double precision,double precision,double precision) double precision
Type-2 Gumbel Distribution cdf_gumbel2_pinv(double precision,double precision,double precision) double precision
Type-2 Gumbel Distribution cdf_gumbel2_qinv(double precision,double precision,double precision) double precision
Poisson Distribution rdf_poisson(integer,double precision) double precision
Poisson Distribution cdf_poisson_p(integer,double precision) double precision
Poisson Distribution cdf_poisson_q(integer,double precision) double precision
Bernoulli Distribution rdf_bernoulli(integer,double precision) double precision
Binomial Distribution rdf_binomial(integer,double precision,integer) double precision
Binomial Distribution cdf_binomial_p(integer,double precision,integer) double precision
Binomial Distribution cdf_binomial_q(integer,double precision,integer) double precision
Negative Binomial Distribution rdf_negative_binomial(integer,double precision,double precision) double precision
Negative Binomial Distribution cdf_negative_binomial_p(integer,double precision,double precision) double precision
Negative Binomial Distribution cdf_negative_binomial_q(integer,double precision,double precision) double precision
Pascal Distribution rdf_pascal(integer,double precision,integer) double precision
Pascal Distribution cdf_pascal_p(integer,double precision,integer) double precision
Pascal Distribution cdf_pascal_q(integer,double precision,integer) double precision
Geometric Distribution rdf_geometric(integer,double precision) double precision
Geometric Distribution cdf_geometric_p(integer,double precision) double precision
Geometric Distribution cdf_geometric_q(integer,double precision) double precision
Hypergeometric Distribution rdf_hypergeometric(integer,integer,integer,integer) double precision
Hypergeometric Distribution cdf_hypergeometric_p(integer,integer,integer,integer) double precision
Hypergeometric Distribution cdf_hypergeometric_q(integer,integer,integer,integer) double precision
Logarithmic Distribution rdf_logarithmic(integer,double precision) double precision

Dependencies

libgsl (GSL - GNU Scientific Library) package is required to compile this extension.

For Ubuntu:

sudo apt-get install libgsl-dev

For Fedora:

sudo dnf -y install gsl

or

sudo yum -y install gsl

For Mac:

brew install gsl

Installation

1.Clone the repo

git clone https://github.com/chanukyasds/pg_math.git

2.Compile and install

cd pg_math
make
make install

3.Create extension on database

CREATE EXTENSION pg_math;

Usage

select cdf_gaussian_qinv(0.05,5);

Future development

  1. Regression tests

  2. Multi-column aggregates to perform statistics

pg_math's People

Contributors

chanukyasds avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

jreidthompson

pg_math's Issues

Name could be more informative.

Given that this doesn't wrap all or even a large fraction of libgsl, it seems odd to name the whole thing pg_math. Things like pg_cdf_rdf or maybe pg_gsl_cdf would be more descriptive. The latter would open the door to wrapping other parts of libgsl.

Compile and launch in MacOS

I tried to use the extension in the MacOS Ventura 13.5 and found some issues:

  1. User can't compile it as a part of the contrib - you provide the only PGXS make option.
  2. LDFLAGS is overrided
  3. Extension library couldn't be loaded because of the error:
CREATE EXTENSION pg_math;
ERROR:  could not load library "/Users/danolivo/PostgresPro/postgres/tmp_install/lib/pg_math.dylib": dlopen(/Users/danolivo/PostgresPro/postgres/tmp_install/lib/pg_math.dylib, 0x000A): symbol not found in flat namespace '_cblas_caxpy'

The first couple of issues I resolved by this changes of the makefile:
makefile.diff.zip
But the last one I still can't resolve. Maybe you already have experience with resolving it?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.