com.axibase:math

BigDecimal implementation of Apache Commons Math Descriptive Statistics and Summary Statistics.


Keywords
atsd, axibase, descriptivestatistics, math, statistics
License
Apache-2.0

Documentation

BigDecimal Statistics

Overview

BigDecimal implementation of Apache Commons Math Descriptive Statistics and Summary Statistics.

See JavaDocs for implementation details.

The following methods from Apache DescriptiveStatistics are not implemented in this release:

  • getGeometricMean()
  • getKurtosis()
  • getQuadraticMean()
  • getSkewness()

The MathContext object should be used for rounding for the following methods since they may return an infitinite number of fractional digits:

  • getMean()
  • getVariance()
  • getStandardDeviation()

License

The project is released under version 2.0 of the Apache License.

Examples

DescriptiveStatistics

Axibase BigDecimal DescriptiveStatistics

import com.axibase.math.stat.descriptive;

BigDecimal[] numbers = {new BigDecimal("1.3"), new BigDecimal("0.3"), new BigDecimal("0.1")};

// Get a DescriptiveStatistics instance with the default precision of 16 digits
DescriptiveStatistics stats = new DescriptiveStatistics(numbers);

// Compute some statistics
long size = stats.getN();
BigDecimal max = stats.getMax();
BigDecimal median = stats.getPercentile(new BigDecimal("50"));

BigDecimal mean = stats.getMean();
BigDecimal std = stats.getStandardDeviation();
BigDecimal sum = stats.getSum();
size = 3
max = 1.3
median = 0.300
mean = 0.5666666666666667
std = 0.6429100507328637
sum = 1.7
// Compute standard deviation with 256 digit precision
MathContext context = new MathContext(256, RoundingMode.HALF_UP);
System.out.println("std256 = " stats.getStandardDeviation(context));
std256 = 0.642910050732863666384002069828844212260460246204216827153345125848752427911243
31486000364728624057273875823889386306592350052104615439306773115570612231259706223485518
46400953679001533442110739077534147619453047556859898336326044546221595799048295894202745

Apache Math double DescriptiveStatistics

import org.apache.commons.math3.stat.descriptive;

double[] numbers = {1.3, 0.3, 0.1};

// Get a DescriptiveStatistics instance
DescriptiveStatistics stats = new DescriptiveStatistics(numbers);

// Compute some statistics
long size = stats.getN();
double max = stats.getMax();
double median = stats.getPercentile(50);
double mean = stats.getMean();
double std = stats.getStandardDeviation();
double sum = stats.getSum();
size = 3
max = 1.3
median = 0.3
mean = 0.5666666666666667
std = 0.6429100507328638
sum = 1.7000000000000002

SummaryStatistics

BigDecimal SummaryStatistics has the same interface as the Apache SummaryStatistics and is used to calculate statistics for a stream of numeric data, without storing input values.

Axibase BigDecimal SummaryStatistics

import com.axibase.math.stat.descriptive;

String[] numbers = {"1.3", "0.3", "0.1"};

// Get a SummaryStatistics instance
SummaryStatistics stats = new SummaryStatistics();

//Read data as BigDecimal values
for (String v : numbers) {
        //no precision loss
        BigDecimal bd = new BigDecimal(v);
        //update statistics
        stats.addValue(bd);
}

// Get current statistics
long size = stats.getN();
BigDecimal max = stats.getMax();
BigDecimal mean = stats.getMean();
BigDecimal std = stats.getStandardDeviation();

Apache Math double SummaryStatistics

import org.apache.commons.math3.stat.descriptive;

String[] numbers = {"1.3", "0.3", "0.1"};

// Get a SummaryStatistics instance
SummaryStatistics stats = new SummaryStatistics();

// Read data as double values
for (String v : numbers) {
        //possible precision loss
        double dbl = Double.parseDouble(v);
        //update statistics
        stats.addValue(dbl);
}

// Get current statistics
long size = stats.getN();
double max = stats.getMax();
double mean = stats.getMean();
double std = stats.getStandardDeviation();