# `statistics`

The entities in this library define some useful predicates for descriptive statistics. Data is represented as a list of numbers (integers or floats). Use the object `sample` if your data represents a sample. Use the object `population` if your data represents a population.

The `variance/2`, `standard_deviation/2`, `skewness/2`, `kurtosis/2`, `covariance/3`, `standard_error/2`, `correlation/3`, and `rank_correlation/3` predicates use different formulas depending on whether the data represents a sample (dividing by N-1) or a population (dividing by N). All other predicates share the same implementation.

## API documentation

Open the ../../apis/library_index.html#statistics link in a web browser.

## Loading

To load all entities in this library, load the `loader.lgt` file:

    | ?- logtalk_load(statistics(loader)).

## Testing

To test this library predicates, load the `tester.lgt` file:

    | ?- logtalk_load(statistics(tester)).

## API overview

### Aggregation

Predicate | Description
--- | ---
`product/2` | Product of all list numbers
`sum/2` | Sum of all list numbers

### Extremes and Range

Predicate | Description
--- | ---
`min/2` | Minimum value
`max/2` | Maximum value
`min_max/3` | Minimum and maximum values
`range/2` | Range (max - min)

### Central Tendency

Predicate | Description
--- | ---
`arithmetic_mean/2` | Arithmetic mean
`geometric_mean/2` | Geometric mean
`harmonic_mean/2` | Harmonic mean
`weighted_mean/3` | Weighted mean
`trimmed_mean/3` | Trimmed mean (removing a fraction of extreme values)
`median/2` | Median
`modes/2` | Modes (in ascending order)

### Measures of Position / Quantiles

Predicate | Description
--- | ---
`fractile/3` | Fractile (quantile given a fraction in (0.0, 1.0))
`percentile/3` | Percentile (quantile given a value in (0, 100))
`quartiles/4` | Quartiles (Q1, Q2, Q3)
`interquartile_range/2` | Interquartile range (Q3 - Q1)

### Measures of Dispersion

Predicate | Description
--- | ---
`variance/2` | Variance (sample or population)
`standard_deviation/2` | Standard deviation (sample or population)
`mean_deviation/2` | Mean absolute deviation
`median_deviation/2` | Median absolute deviation
`average_deviation/3` | Average absolute deviation from a given central tendency
`coefficient_of_variation/2` | Coefficient of variation
`relative_standard_deviation/2` | Relative standard deviation (percentage)
`sum_of_squares/2` | Sum of squared deviations from the mean
`standard_error/2` | Standard error of the mean

### Measures of Shape

Predicate | Description
--- | ---
`skewness/2` | Moment skewness (sample or population)
`kurtosis/2` | Excess kurtosis (sample or population)
`central_moment/3` | K-th central moment

### Measures of Association

Predicate | Description
--- | ---
`covariance/3` | Covariance (sample or population)
`correlation/3` | Pearson correlation coefficient
`rank_correlation/3` | Spearman rank correlation coefficient

### Error Metrics

Predicate | Description
--- | ---
`mean_squared_error/3` | Mean squared error between two lists
`root_mean_squared_error/3` | Root mean squared error between two lists

### Normalization

Predicate | Description
--- | ---
`z_normalization/2` | Z-score normalization (mean ~= 0, std ~= 1)
`min_max_normalization/2` | Min-max normalization (rescale to [0, 1])

### Frequency / Counting

Predicate | Description
--- | ---
`frequency_distribution/2` | Frequency distribution (Value-Count pairs)

### Validation

Predicate | Description
--- | ---
`valid/1` | Term is a closed list of numbers