From 09a5837d2f442e2292d497c7b1bdd13cd4f66bea Mon Sep 17 00:00:00 2001 From: lbarasti Date: Fri, 10 Apr 2020 19:01:38 +0100 Subject: [PATCH] Update documentation --- docs/Statistics.html | 73 ++++++++++++++----- docs/Statistics/Distributions.html | 4 +- docs/Statistics/Distributions/Constant.html | 8 +- .../Distributions/Distribution.html | 6 +- .../Statistics/Distributions/Exponential.html | 8 +- docs/Statistics/Distributions/Normal.html | 8 +- docs/Statistics/Distributions/Poisson.html | 8 +- docs/Statistics/Distributions/Uniform.html | 8 +- docs/index.html | 2 +- docs/index.json | 2 +- docs/search-index.js | 2 +- src/statistics.cr | 12 ++- 12 files changed, 92 insertions(+), 49 deletions(-) diff --git a/docs/Statistics.html b/docs/Statistics.html index 63d72de..d6b3142 100644 --- a/docs/Statistics.html +++ b/docs/Statistics.html @@ -3,7 +3,7 @@ - + @@ -157,14 +157,14 @@

- + lib/distributions.cr
- + statistics.cr @@ -186,7 +186,7 @@

- VERSION = "0.2.0" + VERSION = "0.3.0"
@@ -208,6 +208,13 @@

    +
  • + #bin_count(values : Enumerable, bins : Int32, min = nil, max = nil) : Array(::Tuple(Float64, Int32)) + +

    Counts the number of values in each bin of size (max - min) / bins.

    + +
  • +
  • #describe(values) @@ -323,6 +330,36 @@

    Instance Method Detail

    +
    +
    + + def bin_count(values : Enumerable, bins : Int32, min = nil, max = nil) : Array(::Tuple(Float64, Int32)) + + # +
    + +
    + +

    Counts the number of values in each bin of size (max - min) / bins.

    + +

    Returns an array of tuples {edge, count} ordered by edge, where edge is the +starting edge of a bin and count is the number of values in the corresponding bin.

    + +

    NOTE Any empty bin will also be included.

    + +

    Parameters

    + +
    • values: a one-dimensional dataset.
    • bins: the number of equally-sized bins to divide the datapoints into.
    • min: the left end of the first bin's edge. If none is provided, then values.min is used.
    • max: the right end of the last bin's edge. If none is provided, then values.max is used.
    +
    + +
    +
    + + [View source] + +
    +
    +
    @@ -343,7 +380,7 @@


    @@ -364,13 +401,13 @@

    Parameters

    -
    • values: a one-dimensional dataset
    +
    • values: a one-dimensional dataset.


    @@ -397,7 +434,7 @@


    @@ -422,7 +459,7 @@


    @@ -452,7 +489,7 @@


    @@ -473,7 +510,7 @@


    @@ -501,7 +538,7 @@


    @@ -531,7 +568,7 @@


    @@ -557,7 +594,7 @@


    @@ -587,7 +624,7 @@


    @@ -614,7 +651,7 @@


    @@ -642,7 +679,7 @@


    @@ -670,7 +707,7 @@


    diff --git a/docs/Statistics/Distributions.html b/docs/Statistics/Distributions.html index d976f97..9d9ff0a 100644 --- a/docs/Statistics/Distributions.html +++ b/docs/Statistics/Distributions.html @@ -3,7 +3,7 @@ - + @@ -130,7 +130,7 @@

    - + lib/distributions.cr diff --git a/docs/Statistics/Distributions/Constant.html b/docs/Statistics/Distributions/Constant.html index cf62064..70d4610 100644 --- a/docs/Statistics/Distributions/Constant.html +++ b/docs/Statistics/Distributions/Constant.html @@ -3,7 +3,7 @@ - + @@ -143,7 +143,7 @@

    - + lib/distributions.cr @@ -269,7 +269,7 @@


    @@ -308,7 +308,7 @@


    diff --git a/docs/Statistics/Distributions/Distribution.html b/docs/Statistics/Distributions/Distribution.html index d51db58..abc0978 100644 --- a/docs/Statistics/Distributions/Distribution.html +++ b/docs/Statistics/Distributions/Distribution.html @@ -3,7 +3,7 @@ - + @@ -154,7 +154,7 @@

    - + lib/distributions.cr @@ -246,7 +246,7 @@


    diff --git a/docs/Statistics/Distributions/Exponential.html b/docs/Statistics/Distributions/Exponential.html index 235a20f..2267282 100644 --- a/docs/Statistics/Distributions/Exponential.html +++ b/docs/Statistics/Distributions/Exponential.html @@ -3,7 +3,7 @@ - + @@ -147,7 +147,7 @@

    - + lib/distributions.cr @@ -273,7 +273,7 @@


    @@ -312,7 +312,7 @@


    diff --git a/docs/Statistics/Distributions/Normal.html b/docs/Statistics/Distributions/Normal.html index 564accd..dd23130 100644 --- a/docs/Statistics/Distributions/Normal.html +++ b/docs/Statistics/Distributions/Normal.html @@ -3,7 +3,7 @@ - + @@ -145,7 +145,7 @@

    - + lib/distributions.cr @@ -290,7 +290,7 @@


    @@ -329,7 +329,7 @@


    diff --git a/docs/Statistics/Distributions/Poisson.html b/docs/Statistics/Distributions/Poisson.html index 6544b85..4a5e920 100644 --- a/docs/Statistics/Distributions/Poisson.html +++ b/docs/Statistics/Distributions/Poisson.html @@ -3,7 +3,7 @@ - + @@ -147,7 +147,7 @@

    - + lib/distributions.cr @@ -273,7 +273,7 @@


    @@ -312,7 +312,7 @@


    diff --git a/docs/Statistics/Distributions/Uniform.html b/docs/Statistics/Distributions/Uniform.html index 3dac68d..960f308 100644 --- a/docs/Statistics/Distributions/Uniform.html +++ b/docs/Statistics/Distributions/Uniform.html @@ -3,7 +3,7 @@ - + @@ -145,7 +145,7 @@

    - + lib/distributions.cr @@ -271,7 +271,7 @@


    @@ -310,7 +310,7 @@


    diff --git a/docs/index.html b/docs/index.html index ce64c7a..7c7a895 100644 --- a/docs/index.html +++ b/docs/index.html @@ -3,7 +3,7 @@ - + diff --git a/docs/index.json b/docs/index.json index de65d60..a570e56 100644 --- a/docs/index.json +++ b/docs/index.json @@ -1 +1 @@ -{"repository_name":"github.com/lbarasti/statistics","body":"[![GitHub release](https://img.shields.io/github/release/lbarasti/statistics.svg)](https://github.com/lbarasti/statistics/releases)\n![Build Status](https://github.com/lbarasti/statistics/workflows/build/badge.svg)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n\n# statistics\n\nA statistical library to perform descriptive statistics and generate random values based on popular probability distributions.\n\n## Installation\n\n1. Add the dependency to your `shard.yml`:\n\n```yaml\ndependencies:\n statistics:\n github: lbarasti/statistics\n```\n\n2. Run `shards install`\n\n## Usage\n\n```crystal\nrequire \"statistics\"\n```\n\n### Descriptive statistics\nYou can compute mean, variance and standard deviation of a collection as follows.\n```crystal\ninclude Statistics\n\nx = [1, 10, 7]\nmean(x) # 6\nvar(x) # 14\nstd(x) # 3.7416...\n```\n\nIf you'd like to know a bit more about your dataset, you can simply `describe` it\n\n```crystal\nx = (1..1000).map { rand }.to_a # a uniformely distributed dataset\ndescribe(x)\n# {\n# mean: 0.48, var: 0.08, std: 0.28, \n# skewness: 0.04, kurtosis: 1.81, \n# min: 0.01, middle: 0.49, max: 0.99, \n# q1: 0.24, median: 0.49, q3: 0.73\n# }\n```\n\n`Statistics.describe` returns a `NamedTuple`, so you can extract any value via indexing:\n\n```crystal\nstats = describe(x)\nstats[:q1] # returns the first quartile of your sample\n```\n\nFor a complete list of the statistical functions provided, including `quantile`, `moment` and `skew`, check out the [docs](https://lbarasti.com/statistics/Statistics.html).\n\n### Sampling\nTo work with distributions, import the `Distributions` namespace as follows.\n```crystal\ninclude Statistics::Distributions\n```\n\nNow, here is how we sample values from a normal distribution with `mean = 1.5` and `std = 0.2`.\n```crystal\nNormal.new(1.5, 0.2).rand\n```\n\nWe can generate an iterable of normally distributed random values as follows.\n```crystal\ngen = Normal.new(1.5, 0.2)\n1000.times.map { gen.rand }\n```\n\n#### Supported distributions\nThe following distributions are supported:\n* Constant\n* Exponential\n* Normal\n* Poisson\n* Uniform\n\nDon't see your favourite one on the list? Just fork the repo, add your distribution to the `distributions.cr` file, and open a PR.\n\n## Development\n\nThis shard is a work in progress. Everyone's contribution is welcome.\n\nThe guiding principle at this stage is\n> make it work before you make it right\n\nWhich in this context means: let's not focus on benchmarks and performance, but rather on usability and correctness.\n\n## References\n* [numpy.random](https://numpy.org/devdocs/reference/random/generator.html): distributions and random sampling\n* [numpy statistics](https://numpy.org/devdocs/reference/routines.statistics.html#averages-and-variances): order statistics, averages and variances\n* [scipy stats](https://github.com/scipy/scipy/blob/3de0d58/scipy/stats/stats.py) module and related [tests](https://github.com/scipy/scipy/blob/1150c4c033899a5a4556b7d34d6b137352b36b9e/scipy/stats/tests/test_stats.py) tests\n* [julia random](https://docs.julialang.org/en/v1/stdlib/Random/) module\n* [julia statistics](https://docs.julialang.org/en/v1/stdlib/Statistics/#Statistics.std) module\n* [julia distributions](https://juliastats.org/Distributions.jl/latest/starting/) package.\n* on [skewness and kurtosis](https://brownmath.com/stat/shape.htm), by Stan Brown\n* more on [skewness and kurtosis](https://www.itl.nist.gov/div898/handbook/eda/section3/eda35b.htm), from NIST.\n\n## Contributing\n\n1. Fork it ()\n2. Create your feature branch (`git checkout -b my-new-feature`)\n3. Commit your changes (`git commit -am 'Add some feature'`)\n4. Push to the branch (`git push origin my-new-feature`)\n5. Create a new Pull Request\n\n## Contributors\n\n- [lbarasti](https://github.com/lbarasti) - creator and maintainer\n","program":{"html_id":"github.com/lbarasti/statistics/toplevel","path":"toplevel.html","kind":"module","full_name":"Top Level Namespace","name":"Top Level Namespace","abstract":false,"superclass":null,"ancestors":[],"locations":[],"repository_name":"github.com/lbarasti/statistics","program":true,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":null,"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[{"html_id":"github.com/lbarasti/statistics/Statistics","path":"Statistics.html","kind":"module","full_name":"Statistics","name":"Statistics","abstract":false,"superclass":null,"ancestors":[],"locations":[{"filename":"lib/distributions.cr","line_number":1,"url":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr"},{"filename":"statistics.cr","line_number":6,"url":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[{"id":"VERSION","name":"VERSION","value":"\"0.2.0\"","doc":null,"summary":null}],"included_modules":[],"extended_modules":[{"html_id":"github.com/lbarasti/statistics/Statistics","kind":"module","full_name":"Statistics","name":"Statistics"}],"subclasses":[],"including_types":[],"namespace":null,"doc":"Basic descriptive statistics functionality.\n\nMore flexible than a scientific-calculator, but not as exhaustive, yet.","summary":"

    Basic descriptive statistics functionality.

    ","class_methods":[],"constructors":[],"instance_methods":[{"id":"describe(values)-instance-method","html_id":"describe(values)-instance-method","name":"describe","doc":"Computes several descriptive statistics of the passed array.\n\nParameters\n- values: a one-dimensional dataset.","summary":"

    Computes several descriptive statistics of the passed array.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"args_string":"(values)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L14","def":{"name":"describe","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"size = values.size\nsorted = values.sort\n{mean: mean(values), var: var(values), std: std(values), skewness: skew(values), kurtosis: kurtosis(values), min: sorted.first, middle: middle(sorted), max: sorted.last, q1: quantile(sorted, 0.25, sorted: true), median: median(sorted, sorted: true), q3: quantile(sorted, 0.75, sorted: true)}\n"}},{"id":"frequency(values:Enumerable(T))forallT-instance-method","html_id":"frequency(values:Enumerable(T))forallT-instance-method","name":"frequency","doc":"Computes the number of occurrences of each value in the dataset.\n\nReturns a Hash with each the dataset values as keys and the number of times they appear as value.\n\nParameters\n- values: a one-dimensional dataset","summary":"

    Computes the number of occurrences of each value in the dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":"Enumerable(T)"}],"args_string":"(values : Enumerable(T)) forall T","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L38","def":{"name":"frequency","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":"Enumerable(T)"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"values.reduce(Hash(T, Int32).new(0)) do |freq, v|\n __temp_24 = v\n freq[__temp_24] = freq[__temp_24] + 1\n freq\nend"}},{"id":"kurtosis(values,corrected=false,excess=false)-instance-method","html_id":"kurtosis(values,corrected=false,excess=false)-instance-method","name":"kurtosis","doc":"Computes the kurtosis of a dataset.\n\nParameters\n- values: a one-dimensional dataset.\n- corrected: when set to `true`, then the calculations are corrected for statistical bias. Default is `false`.\n- excess: when set to `true`, computes the [excess kurtosis](https://en.wikipedia.org/wiki/Kurtosis#Excess_kurtosis). Default is `false`.\n\nThis implementation is based on the [scipy/stats.py](https://github.com/scipy/scipy/blob/3de0d58/scipy/stats/stats.py#L1142).","summary":"

    Computes the kurtosis of a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""},{"name":"excess","doc":null,"default_value":"false","external_name":"excess","restriction":""}],"args_string":"(values, corrected = false, excess = false)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L53","def":{"name":"kurtosis","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""},{"name":"excess","doc":null,"default_value":"false","external_name":"excess","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"n = values.size\nm = mean(values)\nm4 = moment(values, m, 4)\nm2 = moment(values, m, 2)\nkurt = if corrected\n (((1 / (n - 2)) / (n - 3)) * (((((n ** 2) - 1) * m4) / (m2 ** 2)) - (3 * ((n - 1) ** 2)))) + 3\nelse\n m4 / (m2 ** 2)\nend\nexcess ? kurt - 3 : kurt\n"}},{"id":"mean(values)-instance-method","html_id":"mean(values)-instance-method","name":"mean","doc":"Computes the mean of a dataset.\n\nParameters\n- values: a one-dimensional dataset.","summary":"

    Computes the mean of a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"args_string":"(values)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L72","def":{"name":"mean","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"(values.reduce(0) do |acc, v|\n acc + v\nend) / values.size"}},{"id":"median(values,sorted=false)-instance-method","html_id":"median(values,sorted=false)-instance-method","name":"median","doc":"Computes the median of all elements in a dataset.\n\nFor an even number of elements the mean of the two median elements will be computed.\n\nParameters\n- values: a one-dimensional dataset.\n- sorted: when `true`, the computations assume that the provided values are\n sorted. Default is `false`.\n\nSee Julia's [Statistics.median](https://docs.julialang.org/en/v1/stdlib/Statistics/#Statistics.median).","summary":"

    Computes the median of all elements in a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"sorted","doc":null,"default_value":"false","external_name":"sorted","restriction":""}],"args_string":"(values, sorted = false)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L86","def":{"name":"median","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"sorted","doc":null,"default_value":"false","external_name":"sorted","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"size = values.size\nmid = size // 2\nsorted_values = sorted ? values : values.sort\nif size.odd?\n sorted_values[mid]\nelse\n middle([sorted_values[mid - 1], sorted_values[mid]])\nend\n"}},{"id":"middle(a,b)-instance-method","html_id":"middle(a,b)-instance-method","name":"middle","doc":"Computes the middle of two values `a` and `b`.","summary":"

    Computes the middle of two values a and b.

    ","abstract":false,"args":[{"name":"a","doc":null,"default_value":"","external_name":"a","restriction":""},{"name":"b","doc":null,"default_value":"","external_name":"b","restriction":""}],"args_string":"(a, b)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L111","def":{"name":"middle","args":[{"name":"a","doc":null,"default_value":"","external_name":"a","restriction":""},{"name":"b","doc":null,"default_value":"","external_name":"b","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"0.5 * (a + b)"}},{"id":"middle(values)-instance-method","html_id":"middle(values)-instance-method","name":"middle","doc":"Computes the middle of an array `a`, which consists of finding its\nextrema and then computing their mean.\n\nParameters\n- values: a one-dimensional dataset.\n\nSee Julia's [Statistics.middle](https://docs.julialang.org/en/v1/stdlib/Statistics/#Statistics.middle).","summary":"

    Computes the middle of an array a, which consists of finding its extrema and then computing their mean.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"args_string":"(values)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L105","def":{"name":"middle","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"min, max = values.minmax\nmiddle(min, max)\n"}},{"id":"mode(values:Enumerable)-instance-method","html_id":"mode(values:Enumerable)-instance-method","name":"mode","doc":"Computes the modal (most common) value in a dataset.\n\nReturns a pair with the modal value and the bin-count for the modal bin.\nIf there is more than one such value, no guarantees are made which one will be picked.\nNOTE: Computing the mode requires traversing the entire dataset.\n\nParameters\n- values: a one-dimensional dataset.","summary":"

    Computes the modal (most common) value in a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":"Enumerable"}],"args_string":"(values : Enumerable)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L123","def":{"name":"mode","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":"Enumerable"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"(frequency(values)).max_by(&.last)"}},{"id":"moment(values,mean=nil,n=1)-instance-method","html_id":"moment(values,mean=nil,n=1)-instance-method","name":"moment","doc":"Calculates the n-th moment about the mean for a sample.\n\nParameters\n- values: a one-dimensional dataset.\n- mean: a pre-computed mean. If a mean is not provided, then the sample's\n mean will be computed. Default is `nil`.\n- n: order of central moment that is returned. Default is `1`.","summary":"

    Calculates the n-th moment about the mean for a sample.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"n","doc":null,"default_value":"1","external_name":"n","restriction":""}],"args_string":"(values, mean = nil, n = 1)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L134","def":{"name":"moment","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"n","doc":null,"default_value":"1","external_name":"n","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"m = mean || (Statistics.mean(values))\n(values.reduce(0) do |a, b|\n a + ((b - m) ** n)\nend) / values.size\n"}},{"id":"quantile(values,p,sorted=false)-instance-method","html_id":"quantile(values,p,sorted=false)-instance-method","name":"quantile","doc":"Computes the quantile of a dataset at a specified probability `p` on the interval [0,1].\n\nQuantiles are computed via linear interpolation between the points `((k-1)/(n-1), v[k])`,\nfor `k = 1:n` where `n = values.size`.\n\nParameters\n- values: a one-dimensional dataset.\n- p: probability. Values of `p` should be in the interval `[0, 1]`.\n- sorted indicates whether values can be assumed to be sorted.\n\nImplementation based on Julia's [Statistics.quantile](https://docs.julialang.org/en/v1/stdlib/Statistics/#Statistics.quantile).","summary":"

    Computes the quantile of a dataset at a specified probability p on the interval [0,1].

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"p","doc":null,"default_value":"","external_name":"p","restriction":""},{"name":"sorted","doc":null,"default_value":"false","external_name":"sorted","restriction":""}],"args_string":"(values, p, sorted = false)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L150","def":{"name":"quantile","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"p","doc":null,"default_value":"","external_name":"p","restriction":""},{"name":"sorted","doc":null,"default_value":"false","external_name":"sorted","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"sorted_values = sorted ? values : values.sort\nn = values.size\naleph = (n - 1) * p\nj = (clamp(aleph.floor, 0, n - 2)).to_i\ngamma = clamp(aleph - j, 0, 1)\na = sorted_values[j]\nb = sorted_values[j + 1]\na + ((b - a) * gamma)\n"}},{"id":"skew(values,corrected=false)-instance-method","html_id":"skew(values,corrected=false)-instance-method","name":"skew","doc":"Computes the skewness of a dataset.\n\nParameters\n- values: a one-dimensional dataset.\n- corrected: when set to `true`, then the calculations are corrected for statistical bias. Default is `false`.\n\nThis implementation is based on the [scipy/stats.py](https://github.com/scipy/scipy/blob/3de0d58/scipy/stats/stats.py#L1039).","summary":"

    Computes the skewness of a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"args_string":"(values, corrected = false)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L170","def":{"name":"skew","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"n = values.size\nm = mean(values)\nm3 = moment(values, m, 3)\nm2 = moment(values, m, 2)\ncorrection_factor = corrected ? (Math.sqrt((n - 1.0) * n)) / (n - 2.0) : 1\n(correction_factor * m3) / (m2 ** 1.5)\n"}},{"id":"std(values,mean=nil,corrected=false)-instance-method","html_id":"std(values,mean=nil,corrected=false)-instance-method","name":"std","doc":"Computes the standard deviation of a dataset.\n\nParameters\n- values: a one-dimensional dataset.\n- mean: a pre-computed mean. This could be a pre-computed sample's mean\n or the population's known mean. If a mean is not provided, then the sample's\n mean will be computed. Default is `nil`.\n- corrected: when set to `true`, then the sum of squares is scaled\n with `values.size - 1`, rather than with `values.size`. Default is `false`.","summary":"

    Computes the standard deviation of a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"args_string":"(values, mean = nil, corrected = false)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L188","def":{"name":"std","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"Math.sqrt(var(values, mean, corrected))"}},{"id":"var(values,mean=nil,corrected=false)-instance-method","html_id":"var(values,mean=nil,corrected=false)-instance-method","name":"var","doc":"Computes the variance of a dataset.\n\nParameters\n- values: a one-dimensional dataset.\n- mean: a pre-computed mean. This could be a pre-computed sample's mean\n or the population's known mean. If a mean is not provided, then the sample's\n mean will be computed. Default is `nil`.\n- corrected: when set to `true`, then the sum of squares is scaled\n with `values.size - 1`, rather than with `values.size`. Default is `false`.","summary":"

    Computes the variance of a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"args_string":"(values, mean = nil, corrected = false)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L201","def":{"name":"var","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"correction_factor = corrected ? values.size / (values.size - 1) : 1\n(moment(values, mean, 2)) * correction_factor\n"}}],"macros":[],"types":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","path":"Statistics/Distributions.html","kind":"module","full_name":"Statistics::Distributions","name":"Distributions","abstract":false,"superclass":null,"ancestors":[],"locations":[{"filename":"lib/distributions.cr","line_number":2,"url":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics","kind":"module","full_name":"Statistics","name":"Statistics"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Constant","path":"Statistics/Distributions/Constant.html","kind":"class","full_name":"Statistics::Distributions::Constant","name":"Constant","abstract":false,"superclass":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":9,"url":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":"Represents a deterministic distribution taking a single value.","summary":"

    Represents a deterministic distribution taking a single value.

    ","class_methods":[],"constructors":[{"id":"new(krand:Float64)-class-method","html_id":"new(krand:Float64)-class-method","name":"new","doc":"Creates a degenerate distribution which only takes the value `k`.","summary":"

    Creates a degenerate distribution which only takes the value k.

    ","abstract":false,"args":[{"name":"rand","doc":null,"default_value":"","external_name":"k","restriction":"Float64"}],"args_string":"(k rand : Float64)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr#L13","def":{"name":"new","args":[{"name":"rand","doc":null,"default_value":"","external_name":"k","restriction":"Float64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(rand)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"rand:Float64-instance-method","html_id":"rand:Float64-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":false,"args":[],"args_string":" : Float64","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr#L10","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Float64","visibility":"Public","body":"@rand"}}],"macros":[],"types":[]},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","path":"Statistics/Distributions/Distribution.html","kind":"class","full_name":"Statistics::Distributions::Distribution(T)","name":"Distribution","abstract":true,"superclass":{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":3,"url":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Constant","kind":"class","full_name":"Statistics::Distributions::Constant","name":"Constant"},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Exponential","kind":"class","full_name":"Statistics::Distributions::Exponential","name":"Exponential"},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Normal","kind":"class","full_name":"Statistics::Distributions::Normal","name":"Normal"},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Poisson","kind":"class","full_name":"Statistics::Distributions::Poisson","name":"Poisson"},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Uniform","kind":"class","full_name":"Statistics::Distributions::Uniform","name":"Uniform"}],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[{"id":"rand:T-instance-method","html_id":"rand:T-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":true,"args":[],"args_string":" : T","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr#L5","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"T","visibility":"Public","body":""}}],"macros":[],"types":[]},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Exponential","path":"Statistics/Distributions/Exponential.html","kind":"class","full_name":"Statistics::Distributions::Exponential","name":"Exponential","abstract":false,"superclass":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":22,"url":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":"Represents the probability distribution of the time between events in\na Poisson point process, i.e., a process in which events occur continuously\nand independently at a constant average rate.\n\nSee [wikipedia](https://en.wikipedia.org/wiki/Exponential_distribution) for more details.","summary":"

    Represents the probability distribution of the time between events in a Poisson point process, i.e., a process in which events occur continuously and independently at a constant average rate.

    ","class_methods":[],"constructors":[{"id":"new(lambda:Float64)-class-method","html_id":"new(lambda:Float64)-class-method","name":"new","doc":"Creates an exponential distribution with a rate parameter `lambda`.","summary":"

    Creates an exponential distribution with a rate parameter lambda.

    ","abstract":false,"args":[{"name":"lambda","doc":null,"default_value":"","external_name":"lambda","restriction":"Float64"}],"args_string":"(lambda : Float64)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr#L24","def":{"name":"new","args":[{"name":"lambda","doc":null,"default_value":"","external_name":"lambda","restriction":"Float64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(lambda)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"rand:Float64-instance-method","html_id":"rand:Float64-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":false,"args":[],"args_string":" : Float64","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr#L27","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Float64","visibility":"Public","body":"(-(Math.log(::rand))) / @lambda"}}],"macros":[],"types":[]},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Normal","path":"Statistics/Distributions/Normal.html","kind":"class","full_name":"Statistics::Distributions::Normal","name":"Normal","abstract":false,"superclass":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":38,"url":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[{"id":"TWO_PI","name":"TWO_PI","value":"2 * Math::PI","doc":null,"summary":null}],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":"Represents a normal distribution.\n\nSee [wikipedia](https://en.wikipedia.org/wiki/Normal_distribution) for more details.","summary":"

    Represents a normal distribution.

    ","class_methods":[],"constructors":[{"id":"new(mean:Float64,std:Float64)-class-method","html_id":"new(mean:Float64,std:Float64)-class-method","name":"new","doc":"Creates a normal distribution with the given `mean` and `std`.","summary":"

    Creates a normal distribution with the given mean and std.

    ","abstract":false,"args":[{"name":"mean","doc":null,"default_value":"","external_name":"mean","restriction":"Float64"},{"name":"std","doc":null,"default_value":"","external_name":"std","restriction":"Float64"}],"args_string":"(mean : Float64, std : Float64)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr#L42","def":{"name":"new","args":[{"name":"mean","doc":null,"default_value":"","external_name":"mean","restriction":"Float64"},{"name":"std","doc":null,"default_value":"","external_name":"std","restriction":"Float64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(mean, std)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"rand:Float64-instance-method","html_id":"rand:Float64-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":false,"args":[],"args_string":" : Float64","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr#L45","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Float64","visibility":"Public","body":"v = (Math.sqrt(-2 * (Math.log(::rand)))) * (Math.sin(TWO_PI * ::rand))\n(v * @std) + @mean\n"}}],"macros":[],"types":[]},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Poisson","path":"Statistics/Distributions/Poisson.html","kind":"class","full_name":"Statistics::Distributions::Poisson","name":"Poisson","abstract":false,"superclass":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":58,"url":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":"Represents a discrete probability distribution that expresses\nthe probability of a given number of events occurring in a\nfixed interval of time or space if these events occur with a\nknown constant mean rate and independently of the time since\nthe last event (source: [wikipedia](https://en.wikipedia.org/wiki/Poisson_distribution))","summary":"

    Represents a discrete probability distribution that expresses the probability of a given number of events occurring in a fixed interval of time or space if these events occur with a known constant mean rate and independently of the time since the last event (source: wikipedia)

    ","class_methods":[],"constructors":[{"id":"new(lambda:Float64)-class-method","html_id":"new(lambda:Float64)-class-method","name":"new","doc":"Creates a Poisson distribution with expected value `lambda`.","summary":"

    Creates a Poisson distribution with expected value lambda.

    ","abstract":false,"args":[{"name":"lambda","doc":null,"default_value":"","external_name":"lambda","restriction":"Float64"}],"args_string":"(lambda : Float64)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr#L60","def":{"name":"new","args":[{"name":"lambda","doc":null,"default_value":"","external_name":"lambda","restriction":"Float64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(lambda)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"rand:Int32-instance-method","html_id":"rand:Int32-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":false,"args":[],"args_string":" : Int32","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr#L63","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Int32","visibility":"Public","body":"x = 0\np = Math.exp(-@lambda)\ns = p\nu = ::rand\nwhile u > s\n x = x + 1\n p = p * (@lambda / x)\n s = s + p\nend\nx\n"}}],"macros":[],"types":[]},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Uniform","path":"Statistics/Distributions/Uniform.html","kind":"class","full_name":"Statistics::Distributions::Uniform","name":"Uniform","abstract":false,"superclass":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":84,"url":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":"Represents a continuous uniform distribution.\n\nSee [wikipedia](https://en.wikipedia.org/wiki/Uniform_distribution_(continuous).","summary":"

    Represents a continuous uniform distribution.

    ","class_methods":[],"constructors":[{"id":"new(min:Float64,max:Float64)-class-method","html_id":"new(min:Float64,max:Float64)-class-method","name":"new","doc":"Creates a uniform distribution within the interval [`min`, `max`].","summary":"

    Creates a uniform distribution within the interval [min, max].

    ","abstract":false,"args":[{"name":"min","doc":null,"default_value":"","external_name":"min","restriction":"Float64"},{"name":"max","doc":null,"default_value":"","external_name":"max","restriction":"Float64"}],"args_string":"(min : Float64, max : Float64)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr#L88","def":{"name":"new","args":[{"name":"min","doc":null,"default_value":"","external_name":"min","restriction":"Float64"},{"name":"max","doc":null,"default_value":"","external_name":"max","restriction":"Float64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(min, max)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"rand:Float64-instance-method","html_id":"rand:Float64-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":false,"args":[],"args_string":" : Float64","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr#L92","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Float64","visibility":"Public","body":"@min + (::rand * @interval)"}}],"macros":[],"types":[]}]}]}]}} \ No newline at end of file +{"repository_name":"github.com/lbarasti/statistics","body":"[![GitHub release](https://img.shields.io/github/release/lbarasti/statistics.svg)](https://github.com/lbarasti/statistics/releases)\n![Build Status](https://github.com/lbarasti/statistics/workflows/build/badge.svg)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n\n# statistics\n\nA statistical library to perform descriptive statistics and generate random values based on popular probability distributions.\n\n## Installation\n\n1. Add the dependency to your `shard.yml`:\n\n```yaml\ndependencies:\n statistics:\n github: lbarasti/statistics\n```\n\n2. Run `shards install`\n\n## Usage\n\n```crystal\nrequire \"statistics\"\n```\n\n### Descriptive statistics\nYou can compute mean, variance and standard deviation of a collection as follows.\n```crystal\ninclude Statistics\n\nx = [1, 10, 7]\nmean(x) # 6\nvar(x) # 14\nstd(x) # 3.7416...\n```\n\nIf you'd like to know a bit more about your dataset, you can simply `describe` it\n\n```crystal\nx = (1..1000).map { rand }.to_a # a uniformely distributed dataset\ndescribe(x)\n# {\n# mean: 0.48, var: 0.08, std: 0.28, \n# skewness: 0.04, kurtosis: 1.81, \n# min: 0.01, middle: 0.49, max: 0.99, \n# q1: 0.24, median: 0.49, q3: 0.73\n# }\n```\n\n`Statistics.describe` returns a `NamedTuple`, so you can extract any value via indexing:\n\n```crystal\nstats = describe(x)\nstats[:q1] # returns the first quartile of your sample\n```\n\nFor a complete list of the statistical functions provided, including `quantile`, `moment` and `skew`, check out the [docs](https://lbarasti.com/statistics/Statistics.html).\n\n### Sampling\nTo work with distributions, import the `Distributions` namespace as follows.\n```crystal\ninclude Statistics::Distributions\n```\n\nNow, here is how we sample values from a normal distribution with `mean = 1.5` and `std = 0.2`.\n```crystal\nNormal.new(1.5, 0.2).rand\n```\n\nWe can generate an iterable of normally distributed random values as follows.\n```crystal\ngen = Normal.new(1.5, 0.2)\n1000.times.map { gen.rand }\n```\n\n#### Supported distributions\nThe following distributions are supported:\n* Constant\n* Exponential\n* Normal\n* Poisson\n* Uniform\n\nDon't see your favourite one on the list? Just fork the repo, add your distribution to the `distributions.cr` file, and open a PR.\n\n## Development\n\nThis shard is a work in progress. Everyone's contribution is welcome.\n\nThe guiding principle at this stage is\n> make it work before you make it right\n\nWhich in this context means: let's not focus on benchmarks and performance, but rather on usability and correctness.\n\n## References\n* [numpy.random](https://numpy.org/devdocs/reference/random/generator.html): distributions and random sampling\n* [numpy statistics](https://numpy.org/devdocs/reference/routines.statistics.html#averages-and-variances): order statistics, averages and variances\n* [scipy stats](https://github.com/scipy/scipy/blob/3de0d58/scipy/stats/stats.py) module and related [tests](https://github.com/scipy/scipy/blob/1150c4c033899a5a4556b7d34d6b137352b36b9e/scipy/stats/tests/test_stats.py) tests\n* [julia random](https://docs.julialang.org/en/v1/stdlib/Random/) module\n* [julia statistics](https://docs.julialang.org/en/v1/stdlib/Statistics/#Statistics.std) module\n* [julia distributions](https://juliastats.org/Distributions.jl/latest/starting/) package.\n* on [skewness and kurtosis](https://brownmath.com/stat/shape.htm), by Stan Brown\n* more on [skewness and kurtosis](https://www.itl.nist.gov/div898/handbook/eda/section3/eda35b.htm), from NIST.\n\n## Contributing\n\n1. Fork it ()\n2. Create your feature branch (`git checkout -b my-new-feature`)\n3. Commit your changes (`git commit -am 'Add some feature'`)\n4. Push to the branch (`git push origin my-new-feature`)\n5. Create a new Pull Request\n\n## Contributors\n\n- [lbarasti](https://github.com/lbarasti) - creator and maintainer\n","program":{"html_id":"github.com/lbarasti/statistics/toplevel","path":"toplevel.html","kind":"module","full_name":"Top Level Namespace","name":"Top Level Namespace","abstract":false,"superclass":null,"ancestors":[],"locations":[],"repository_name":"github.com/lbarasti/statistics","program":true,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":null,"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[{"html_id":"github.com/lbarasti/statistics/Statistics","path":"Statistics.html","kind":"module","full_name":"Statistics","name":"Statistics","abstract":false,"superclass":null,"ancestors":[],"locations":[{"filename":"lib/distributions.cr","line_number":1,"url":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr"},{"filename":"statistics.cr","line_number":6,"url":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[{"id":"VERSION","name":"VERSION","value":"\"0.3.0\"","doc":null,"summary":null}],"included_modules":[],"extended_modules":[{"html_id":"github.com/lbarasti/statistics/Statistics","kind":"module","full_name":"Statistics","name":"Statistics"}],"subclasses":[],"including_types":[],"namespace":null,"doc":"Basic descriptive statistics functionality.\n\nMore flexible than a scientific-calculator, but not as exhaustive, yet.","summary":"

    Basic descriptive statistics functionality.

    ","class_methods":[],"constructors":[],"instance_methods":[{"id":"bin_count(values:Enumerable,bins:Int32,min=nil,max=nil):Array(::Tuple(Float64,Int32))-instance-method","html_id":"bin_count(values:Enumerable,bins:Int32,min=nil,max=nil):Array(::Tuple(Float64,Int32))-instance-method","name":"bin_count","doc":"Counts the number of values in each bin of size `(max - min) / bins`.\n\nReturns an array of tuples `{edge, count}` ordered by `edge`, where `edge` is the\nstarting edge of a bin and `count` is the number of values in the corresponding `bin`.\n\nNOTE: Any empty bin will also be included.\n\nParameters\n- values: a one-dimensional dataset.\n- bins: the number of equally-sized bins to divide the datapoints into.\n- min: the left end of the first bin's edge. If none is provided, then `values.min` is used.\n- max: the right end of the last bin's edge. If none is provided, then `values.max` is used.","summary":"

    Counts the number of values in each bin of size (max - min) / bins.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":"Enumerable"},{"name":"bins","doc":null,"default_value":"","external_name":"bins","restriction":"Int32"},{"name":"min","doc":null,"default_value":"nil","external_name":"min","restriction":""},{"name":"max","doc":null,"default_value":"nil","external_name":"max","restriction":""}],"args_string":"(values : Enumerable, bins : Int32, min = nil, max = nil) : Array(::Tuple(Float64, Int32))","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L57","def":{"name":"bin_count","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":"Enumerable"},{"name":"bins","doc":null,"default_value":"","external_name":"bins","restriction":"Int32"},{"name":"min","doc":null,"default_value":"nil","external_name":"min","restriction":""},{"name":"max","doc":null,"default_value":"nil","external_name":"max","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Array(::Tuple(Float64, Int32))","visibility":"Public","body":"if min.nil? || max.nil?\n sample_min, sample_max = values.minmax\n if min.nil?\n min = sample_min\n end\n if max.nil?\n max = sample_max\n end\nend\ncounter = Array(Int32).new(size: bins, value: 0)\nstep = (max - min) / bins\nvalues.each do |v|\n idx = v == max ? bins - 1 : ((v - min) / step).floor.to_i\n __temp_26 = idx\n counter[__temp_26] = counter[__temp_26] + 1\nend\nArray.new(bins) do |i|\n {min + (i * step), counter[i]}\nend\n"}},{"id":"describe(values)-instance-method","html_id":"describe(values)-instance-method","name":"describe","doc":"Computes several descriptive statistics of the passed array.\n\nParameters\n- values: a one-dimensional dataset.","summary":"

    Computes several descriptive statistics of the passed array.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"args_string":"(values)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L14","def":{"name":"describe","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"size = values.size\nsorted = values.sort\n{mean: mean(values), var: var(values), std: std(values), skewness: skew(values), kurtosis: kurtosis(values), min: sorted.first, middle: middle(sorted), max: sorted.last, q1: quantile(sorted, 0.25, sorted: true), median: median(sorted, sorted: true), q3: quantile(sorted, 0.75, sorted: true)}\n"}},{"id":"frequency(values:Enumerable(T))forallT-instance-method","html_id":"frequency(values:Enumerable(T))forallT-instance-method","name":"frequency","doc":"Computes the number of occurrences of each value in the dataset.\n\nReturns a Hash with each the dataset values as keys and the number of times they appear as value.\n\nParameters\n- values: a one-dimensional dataset.","summary":"

    Computes the number of occurrences of each value in the dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":"Enumerable(T)"}],"args_string":"(values : Enumerable(T)) forall T","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L38","def":{"name":"frequency","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":"Enumerable(T)"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"values.reduce(Hash(T, Int32).new(0)) do |freq, v|\n __temp_24 = v\n freq[__temp_24] = freq[__temp_24] + 1\n freq\nend"}},{"id":"kurtosis(values,corrected=false,excess=false)-instance-method","html_id":"kurtosis(values,corrected=false,excess=false)-instance-method","name":"kurtosis","doc":"Computes the kurtosis of a dataset.\n\nParameters\n- values: a one-dimensional dataset.\n- corrected: when set to `true`, then the calculations are corrected for statistical bias. Default is `false`.\n- excess: when set to `true`, computes the [excess kurtosis](https://en.wikipedia.org/wiki/Kurtosis#Excess_kurtosis). Default is `false`.\n\nThis implementation is based on the [scipy/stats.py](https://github.com/scipy/scipy/blob/3de0d58/scipy/stats/stats.py#L1142).","summary":"

    Computes the kurtosis of a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""},{"name":"excess","doc":null,"default_value":"false","external_name":"excess","restriction":""}],"args_string":"(values, corrected = false, excess = false)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L84","def":{"name":"kurtosis","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""},{"name":"excess","doc":null,"default_value":"false","external_name":"excess","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"n = values.size\nm = mean(values)\nm4 = moment(values, m, 4)\nm2 = moment(values, m, 2)\nkurt = if corrected\n (((1 / (n - 2)) / (n - 3)) * (((((n ** 2) - 1) * m4) / (m2 ** 2)) - (3 * ((n - 1) ** 2)))) + 3\nelse\n m4 / (m2 ** 2)\nend\nexcess ? kurt - 3 : kurt\n"}},{"id":"mean(values)-instance-method","html_id":"mean(values)-instance-method","name":"mean","doc":"Computes the mean of a dataset.\n\nParameters\n- values: a one-dimensional dataset.","summary":"

    Computes the mean of a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"args_string":"(values)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L103","def":{"name":"mean","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"(values.reduce(0) do |acc, v|\n acc + v\nend) / values.size"}},{"id":"median(values,sorted=false)-instance-method","html_id":"median(values,sorted=false)-instance-method","name":"median","doc":"Computes the median of all elements in a dataset.\n\nFor an even number of elements the mean of the two median elements will be computed.\n\nParameters\n- values: a one-dimensional dataset.\n- sorted: when `true`, the computations assume that the provided values are\n sorted. Default is `false`.\n\nSee Julia's [Statistics.median](https://docs.julialang.org/en/v1/stdlib/Statistics/#Statistics.median).","summary":"

    Computes the median of all elements in a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"sorted","doc":null,"default_value":"false","external_name":"sorted","restriction":""}],"args_string":"(values, sorted = false)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L117","def":{"name":"median","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"sorted","doc":null,"default_value":"false","external_name":"sorted","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"size = values.size\nmid = size // 2\nsorted_values = sorted ? values : values.sort\nif size.odd?\n sorted_values[mid]\nelse\n middle([sorted_values[mid - 1], sorted_values[mid]])\nend\n"}},{"id":"middle(a,b)-instance-method","html_id":"middle(a,b)-instance-method","name":"middle","doc":"Computes the middle of two values `a` and `b`.","summary":"

    Computes the middle of two values a and b.

    ","abstract":false,"args":[{"name":"a","doc":null,"default_value":"","external_name":"a","restriction":""},{"name":"b","doc":null,"default_value":"","external_name":"b","restriction":""}],"args_string":"(a, b)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L142","def":{"name":"middle","args":[{"name":"a","doc":null,"default_value":"","external_name":"a","restriction":""},{"name":"b","doc":null,"default_value":"","external_name":"b","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"0.5 * (a + b)"}},{"id":"middle(values)-instance-method","html_id":"middle(values)-instance-method","name":"middle","doc":"Computes the middle of an array `a`, which consists of finding its\nextrema and then computing their mean.\n\nParameters\n- values: a one-dimensional dataset.\n\nSee Julia's [Statistics.middle](https://docs.julialang.org/en/v1/stdlib/Statistics/#Statistics.middle).","summary":"

    Computes the middle of an array a, which consists of finding its extrema and then computing their mean.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"args_string":"(values)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L136","def":{"name":"middle","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"min, max = values.minmax\nmiddle(min, max)\n"}},{"id":"mode(values:Enumerable)-instance-method","html_id":"mode(values:Enumerable)-instance-method","name":"mode","doc":"Computes the modal (most common) value in a dataset.\n\nReturns a pair with the modal value and the bin-count for the modal bin.\nIf there is more than one such value, no guarantees are made which one will be picked.\nNOTE: Computing the mode requires traversing the entire dataset.\n\nParameters\n- values: a one-dimensional dataset.","summary":"

    Computes the modal (most common) value in a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":"Enumerable"}],"args_string":"(values : Enumerable)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L154","def":{"name":"mode","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":"Enumerable"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"(frequency(values)).max_by(&.last)"}},{"id":"moment(values,mean=nil,n=1)-instance-method","html_id":"moment(values,mean=nil,n=1)-instance-method","name":"moment","doc":"Calculates the n-th moment about the mean for a sample.\n\nParameters\n- values: a one-dimensional dataset.\n- mean: a pre-computed mean. If a mean is not provided, then the sample's\n mean will be computed. Default is `nil`.\n- n: order of central moment that is returned. Default is `1`.","summary":"

    Calculates the n-th moment about the mean for a sample.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"n","doc":null,"default_value":"1","external_name":"n","restriction":""}],"args_string":"(values, mean = nil, n = 1)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L165","def":{"name":"moment","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"n","doc":null,"default_value":"1","external_name":"n","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"m = mean || (Statistics.mean(values))\n(values.reduce(0) do |a, b|\n a + ((b - m) ** n)\nend) / values.size\n"}},{"id":"quantile(values,p,sorted=false)-instance-method","html_id":"quantile(values,p,sorted=false)-instance-method","name":"quantile","doc":"Computes the quantile of a dataset at a specified probability `p` on the interval [0,1].\n\nQuantiles are computed via linear interpolation between the points `((k-1)/(n-1), v[k])`,\nfor `k = 1:n` where `n = values.size`.\n\nParameters\n- values: a one-dimensional dataset.\n- p: probability. Values of `p` should be in the interval `[0, 1]`.\n- sorted indicates whether values can be assumed to be sorted.\n\nImplementation based on Julia's [Statistics.quantile](https://docs.julialang.org/en/v1/stdlib/Statistics/#Statistics.quantile).","summary":"

    Computes the quantile of a dataset at a specified probability p on the interval [0,1].

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"p","doc":null,"default_value":"","external_name":"p","restriction":""},{"name":"sorted","doc":null,"default_value":"false","external_name":"sorted","restriction":""}],"args_string":"(values, p, sorted = false)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L181","def":{"name":"quantile","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"p","doc":null,"default_value":"","external_name":"p","restriction":""},{"name":"sorted","doc":null,"default_value":"false","external_name":"sorted","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"sorted_values = sorted ? values : values.sort\nn = values.size\naleph = (n - 1) * p\nj = (clamp(aleph.floor, 0, n - 2)).to_i\ngamma = clamp(aleph - j, 0, 1)\na = sorted_values[j]\nb = sorted_values[j + 1]\na + ((b - a) * gamma)\n"}},{"id":"skew(values,corrected=false)-instance-method","html_id":"skew(values,corrected=false)-instance-method","name":"skew","doc":"Computes the skewness of a dataset.\n\nParameters\n- values: a one-dimensional dataset.\n- corrected: when set to `true`, then the calculations are corrected for statistical bias. Default is `false`.\n\nThis implementation is based on the [scipy/stats.py](https://github.com/scipy/scipy/blob/3de0d58/scipy/stats/stats.py#L1039).","summary":"

    Computes the skewness of a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"args_string":"(values, corrected = false)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L201","def":{"name":"skew","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"n = values.size\nm = mean(values)\nm3 = moment(values, m, 3)\nm2 = moment(values, m, 2)\ncorrection_factor = corrected ? (Math.sqrt((n - 1.0) * n)) / (n - 2.0) : 1\n(correction_factor * m3) / (m2 ** 1.5)\n"}},{"id":"std(values,mean=nil,corrected=false)-instance-method","html_id":"std(values,mean=nil,corrected=false)-instance-method","name":"std","doc":"Computes the standard deviation of a dataset.\n\nParameters\n- values: a one-dimensional dataset.\n- mean: a pre-computed mean. This could be a pre-computed sample's mean\n or the population's known mean. If a mean is not provided, then the sample's\n mean will be computed. Default is `nil`.\n- corrected: when set to `true`, then the sum of squares is scaled\n with `values.size - 1`, rather than with `values.size`. Default is `false`.","summary":"

    Computes the standard deviation of a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"args_string":"(values, mean = nil, corrected = false)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L219","def":{"name":"std","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"Math.sqrt(var(values, mean, corrected))"}},{"id":"var(values,mean=nil,corrected=false)-instance-method","html_id":"var(values,mean=nil,corrected=false)-instance-method","name":"var","doc":"Computes the variance of a dataset.\n\nParameters\n- values: a one-dimensional dataset.\n- mean: a pre-computed mean. This could be a pre-computed sample's mean\n or the population's known mean. If a mean is not provided, then the sample's\n mean will be computed. Default is `nil`.\n- corrected: when set to `true`, then the sum of squares is scaled\n with `values.size - 1`, rather than with `values.size`. Default is `false`.","summary":"

    Computes the variance of a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"args_string":"(values, mean = nil, corrected = false)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L232","def":{"name":"var","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"correction_factor = corrected ? values.size / (values.size - 1) : 1\n(moment(values, mean, 2)) * correction_factor\n"}}],"macros":[],"types":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","path":"Statistics/Distributions.html","kind":"module","full_name":"Statistics::Distributions","name":"Distributions","abstract":false,"superclass":null,"ancestors":[],"locations":[{"filename":"lib/distributions.cr","line_number":2,"url":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics","kind":"module","full_name":"Statistics","name":"Statistics"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Constant","path":"Statistics/Distributions/Constant.html","kind":"class","full_name":"Statistics::Distributions::Constant","name":"Constant","abstract":false,"superclass":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":9,"url":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":"Represents a deterministic distribution taking a single value.","summary":"

    Represents a deterministic distribution taking a single value.

    ","class_methods":[],"constructors":[{"id":"new(krand:Float64)-class-method","html_id":"new(krand:Float64)-class-method","name":"new","doc":"Creates a degenerate distribution which only takes the value `k`.","summary":"

    Creates a degenerate distribution which only takes the value k.

    ","abstract":false,"args":[{"name":"rand","doc":null,"default_value":"","external_name":"k","restriction":"Float64"}],"args_string":"(k rand : Float64)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr#L13","def":{"name":"new","args":[{"name":"rand","doc":null,"default_value":"","external_name":"k","restriction":"Float64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(rand)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"rand:Float64-instance-method","html_id":"rand:Float64-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":false,"args":[],"args_string":" : Float64","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr#L10","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Float64","visibility":"Public","body":"@rand"}}],"macros":[],"types":[]},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","path":"Statistics/Distributions/Distribution.html","kind":"class","full_name":"Statistics::Distributions::Distribution(T)","name":"Distribution","abstract":true,"superclass":{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":3,"url":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Constant","kind":"class","full_name":"Statistics::Distributions::Constant","name":"Constant"},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Exponential","kind":"class","full_name":"Statistics::Distributions::Exponential","name":"Exponential"},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Normal","kind":"class","full_name":"Statistics::Distributions::Normal","name":"Normal"},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Poisson","kind":"class","full_name":"Statistics::Distributions::Poisson","name":"Poisson"},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Uniform","kind":"class","full_name":"Statistics::Distributions::Uniform","name":"Uniform"}],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[{"id":"rand:T-instance-method","html_id":"rand:T-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":true,"args":[],"args_string":" : T","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr#L5","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"T","visibility":"Public","body":""}}],"macros":[],"types":[]},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Exponential","path":"Statistics/Distributions/Exponential.html","kind":"class","full_name":"Statistics::Distributions::Exponential","name":"Exponential","abstract":false,"superclass":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":22,"url":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":"Represents the probability distribution of the time between events in\na Poisson point process, i.e., a process in which events occur continuously\nand independently at a constant average rate.\n\nSee [wikipedia](https://en.wikipedia.org/wiki/Exponential_distribution) for more details.","summary":"

    Represents the probability distribution of the time between events in a Poisson point process, i.e., a process in which events occur continuously and independently at a constant average rate.

    ","class_methods":[],"constructors":[{"id":"new(lambda:Float64)-class-method","html_id":"new(lambda:Float64)-class-method","name":"new","doc":"Creates an exponential distribution with a rate parameter `lambda`.","summary":"

    Creates an exponential distribution with a rate parameter lambda.

    ","abstract":false,"args":[{"name":"lambda","doc":null,"default_value":"","external_name":"lambda","restriction":"Float64"}],"args_string":"(lambda : Float64)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr#L24","def":{"name":"new","args":[{"name":"lambda","doc":null,"default_value":"","external_name":"lambda","restriction":"Float64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(lambda)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"rand:Float64-instance-method","html_id":"rand:Float64-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":false,"args":[],"args_string":" : Float64","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr#L27","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Float64","visibility":"Public","body":"(-(Math.log(::rand))) / @lambda"}}],"macros":[],"types":[]},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Normal","path":"Statistics/Distributions/Normal.html","kind":"class","full_name":"Statistics::Distributions::Normal","name":"Normal","abstract":false,"superclass":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":38,"url":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[{"id":"TWO_PI","name":"TWO_PI","value":"2 * Math::PI","doc":null,"summary":null}],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":"Represents a normal distribution.\n\nSee [wikipedia](https://en.wikipedia.org/wiki/Normal_distribution) for more details.","summary":"

    Represents a normal distribution.

    ","class_methods":[],"constructors":[{"id":"new(mean:Float64,std:Float64)-class-method","html_id":"new(mean:Float64,std:Float64)-class-method","name":"new","doc":"Creates a normal distribution with the given `mean` and `std`.","summary":"

    Creates a normal distribution with the given mean and std.

    ","abstract":false,"args":[{"name":"mean","doc":null,"default_value":"","external_name":"mean","restriction":"Float64"},{"name":"std","doc":null,"default_value":"","external_name":"std","restriction":"Float64"}],"args_string":"(mean : Float64, std : Float64)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr#L42","def":{"name":"new","args":[{"name":"mean","doc":null,"default_value":"","external_name":"mean","restriction":"Float64"},{"name":"std","doc":null,"default_value":"","external_name":"std","restriction":"Float64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(mean, std)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"rand:Float64-instance-method","html_id":"rand:Float64-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":false,"args":[],"args_string":" : Float64","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr#L45","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Float64","visibility":"Public","body":"v = (Math.sqrt(-2 * (Math.log(::rand)))) * (Math.sin(TWO_PI * ::rand))\n(v * @std) + @mean\n"}}],"macros":[],"types":[]},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Poisson","path":"Statistics/Distributions/Poisson.html","kind":"class","full_name":"Statistics::Distributions::Poisson","name":"Poisson","abstract":false,"superclass":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":58,"url":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":"Represents a discrete probability distribution that expresses\nthe probability of a given number of events occurring in a\nfixed interval of time or space if these events occur with a\nknown constant mean rate and independently of the time since\nthe last event (source: [wikipedia](https://en.wikipedia.org/wiki/Poisson_distribution))","summary":"

    Represents a discrete probability distribution that expresses the probability of a given number of events occurring in a fixed interval of time or space if these events occur with a known constant mean rate and independently of the time since the last event (source: wikipedia)

    ","class_methods":[],"constructors":[{"id":"new(lambda:Float64)-class-method","html_id":"new(lambda:Float64)-class-method","name":"new","doc":"Creates a Poisson distribution with expected value `lambda`.","summary":"

    Creates a Poisson distribution with expected value lambda.

    ","abstract":false,"args":[{"name":"lambda","doc":null,"default_value":"","external_name":"lambda","restriction":"Float64"}],"args_string":"(lambda : Float64)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr#L60","def":{"name":"new","args":[{"name":"lambda","doc":null,"default_value":"","external_name":"lambda","restriction":"Float64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(lambda)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"rand:Int32-instance-method","html_id":"rand:Int32-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":false,"args":[],"args_string":" : Int32","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr#L63","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Int32","visibility":"Public","body":"x = 0\np = Math.exp(-@lambda)\ns = p\nu = ::rand\nwhile u > s\n x = x + 1\n p = p * (@lambda / x)\n s = s + p\nend\nx\n"}}],"macros":[],"types":[]},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Uniform","path":"Statistics/Distributions/Uniform.html","kind":"class","full_name":"Statistics::Distributions::Uniform","name":"Uniform","abstract":false,"superclass":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":84,"url":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":"Represents a continuous uniform distribution.\n\nSee [wikipedia](https://en.wikipedia.org/wiki/Uniform_distribution_(continuous).","summary":"

    Represents a continuous uniform distribution.

    ","class_methods":[],"constructors":[{"id":"new(min:Float64,max:Float64)-class-method","html_id":"new(min:Float64,max:Float64)-class-method","name":"new","doc":"Creates a uniform distribution within the interval [`min`, `max`].","summary":"

    Creates a uniform distribution within the interval [min, max].

    ","abstract":false,"args":[{"name":"min","doc":null,"default_value":"","external_name":"min","restriction":"Float64"},{"name":"max","doc":null,"default_value":"","external_name":"max","restriction":"Float64"}],"args_string":"(min : Float64, max : Float64)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr#L88","def":{"name":"new","args":[{"name":"min","doc":null,"default_value":"","external_name":"min","restriction":"Float64"},{"name":"max","doc":null,"default_value":"","external_name":"max","restriction":"Float64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(min, max)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"rand:Float64-instance-method","html_id":"rand:Float64-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":false,"args":[],"args_string":" : Float64","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr#L92","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Float64","visibility":"Public","body":"@min + (::rand * @interval)"}}],"macros":[],"types":[]}]}]}]}} \ No newline at end of file diff --git a/docs/search-index.js b/docs/search-index.js index 63a5415..11af590 100644 --- a/docs/search-index.js +++ b/docs/search-index.js @@ -1 +1 @@ -crystal_doc_search_index_callback({"repository_name":"github.com/lbarasti/statistics","body":"[![GitHub release](https://img.shields.io/github/release/lbarasti/statistics.svg)](https://github.com/lbarasti/statistics/releases)\n![Build Status](https://github.com/lbarasti/statistics/workflows/build/badge.svg)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n\n# statistics\n\nA statistical library to perform descriptive statistics and generate random values based on popular probability distributions.\n\n## Installation\n\n1. Add the dependency to your `shard.yml`:\n\n```yaml\ndependencies:\n statistics:\n github: lbarasti/statistics\n```\n\n2. Run `shards install`\n\n## Usage\n\n```crystal\nrequire \"statistics\"\n```\n\n### Descriptive statistics\nYou can compute mean, variance and standard deviation of a collection as follows.\n```crystal\ninclude Statistics\n\nx = [1, 10, 7]\nmean(x) # 6\nvar(x) # 14\nstd(x) # 3.7416...\n```\n\nIf you'd like to know a bit more about your dataset, you can simply `describe` it\n\n```crystal\nx = (1..1000).map { rand }.to_a # a uniformely distributed dataset\ndescribe(x)\n# {\n# mean: 0.48, var: 0.08, std: 0.28, \n# skewness: 0.04, kurtosis: 1.81, \n# min: 0.01, middle: 0.49, max: 0.99, \n# q1: 0.24, median: 0.49, q3: 0.73\n# }\n```\n\n`Statistics.describe` returns a `NamedTuple`, so you can extract any value via indexing:\n\n```crystal\nstats = describe(x)\nstats[:q1] # returns the first quartile of your sample\n```\n\nFor a complete list of the statistical functions provided, including `quantile`, `moment` and `skew`, check out the [docs](https://lbarasti.com/statistics/Statistics.html).\n\n### Sampling\nTo work with distributions, import the `Distributions` namespace as follows.\n```crystal\ninclude Statistics::Distributions\n```\n\nNow, here is how we sample values from a normal distribution with `mean = 1.5` and `std = 0.2`.\n```crystal\nNormal.new(1.5, 0.2).rand\n```\n\nWe can generate an iterable of normally distributed random values as follows.\n```crystal\ngen = Normal.new(1.5, 0.2)\n1000.times.map { gen.rand }\n```\n\n#### Supported distributions\nThe following distributions are supported:\n* Constant\n* Exponential\n* Normal\n* Poisson\n* Uniform\n\nDon't see your favourite one on the list? Just fork the repo, add your distribution to the `distributions.cr` file, and open a PR.\n\n## Development\n\nThis shard is a work in progress. Everyone's contribution is welcome.\n\nThe guiding principle at this stage is\n> make it work before you make it right\n\nWhich in this context means: let's not focus on benchmarks and performance, but rather on usability and correctness.\n\n## References\n* [numpy.random](https://numpy.org/devdocs/reference/random/generator.html): distributions and random sampling\n* [numpy statistics](https://numpy.org/devdocs/reference/routines.statistics.html#averages-and-variances): order statistics, averages and variances\n* [scipy stats](https://github.com/scipy/scipy/blob/3de0d58/scipy/stats/stats.py) module and related [tests](https://github.com/scipy/scipy/blob/1150c4c033899a5a4556b7d34d6b137352b36b9e/scipy/stats/tests/test_stats.py) tests\n* [julia random](https://docs.julialang.org/en/v1/stdlib/Random/) module\n* [julia statistics](https://docs.julialang.org/en/v1/stdlib/Statistics/#Statistics.std) module\n* [julia distributions](https://juliastats.org/Distributions.jl/latest/starting/) package.\n* on [skewness and kurtosis](https://brownmath.com/stat/shape.htm), by Stan Brown\n* more on [skewness and kurtosis](https://www.itl.nist.gov/div898/handbook/eda/section3/eda35b.htm), from NIST.\n\n## Contributing\n\n1. Fork it ()\n2. Create your feature branch (`git checkout -b my-new-feature`)\n3. Commit your changes (`git commit -am 'Add some feature'`)\n4. Push to the branch (`git push origin my-new-feature`)\n5. Create a new Pull Request\n\n## Contributors\n\n- [lbarasti](https://github.com/lbarasti) - creator and maintainer\n","program":{"html_id":"github.com/lbarasti/statistics/toplevel","path":"toplevel.html","kind":"module","full_name":"Top Level Namespace","name":"Top Level Namespace","abstract":false,"superclass":null,"ancestors":[],"locations":[],"repository_name":"github.com/lbarasti/statistics","program":true,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":null,"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[{"html_id":"github.com/lbarasti/statistics/Statistics","path":"Statistics.html","kind":"module","full_name":"Statistics","name":"Statistics","abstract":false,"superclass":null,"ancestors":[],"locations":[{"filename":"lib/distributions.cr","line_number":1,"url":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr"},{"filename":"statistics.cr","line_number":6,"url":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[{"id":"VERSION","name":"VERSION","value":"\"0.2.0\"","doc":null,"summary":null}],"included_modules":[],"extended_modules":[{"html_id":"github.com/lbarasti/statistics/Statistics","kind":"module","full_name":"Statistics","name":"Statistics"}],"subclasses":[],"including_types":[],"namespace":null,"doc":"Basic descriptive statistics functionality.\n\nMore flexible than a scientific-calculator, but not as exhaustive, yet.","summary":"

    Basic descriptive statistics functionality.

    ","class_methods":[],"constructors":[],"instance_methods":[{"id":"describe(values)-instance-method","html_id":"describe(values)-instance-method","name":"describe","doc":"Computes several descriptive statistics of the passed array.\n\nParameters\n- values: a one-dimensional dataset.","summary":"

    Computes several descriptive statistics of the passed array.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"args_string":"(values)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L14","def":{"name":"describe","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"size = values.size\nsorted = values.sort\n{mean: mean(values), var: var(values), std: std(values), skewness: skew(values), kurtosis: kurtosis(values), min: sorted.first, middle: middle(sorted), max: sorted.last, q1: quantile(sorted, 0.25, sorted: true), median: median(sorted, sorted: true), q3: quantile(sorted, 0.75, sorted: true)}\n"}},{"id":"frequency(values:Enumerable(T))forallT-instance-method","html_id":"frequency(values:Enumerable(T))forallT-instance-method","name":"frequency","doc":"Computes the number of occurrences of each value in the dataset.\n\nReturns a Hash with each the dataset values as keys and the number of times they appear as value.\n\nParameters\n- values: a one-dimensional dataset","summary":"

    Computes the number of occurrences of each value in the dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":"Enumerable(T)"}],"args_string":"(values : Enumerable(T)) forall T","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L38","def":{"name":"frequency","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":"Enumerable(T)"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"values.reduce(Hash(T, Int32).new(0)) do |freq, v|\n __temp_24 = v\n freq[__temp_24] = freq[__temp_24] + 1\n freq\nend"}},{"id":"kurtosis(values,corrected=false,excess=false)-instance-method","html_id":"kurtosis(values,corrected=false,excess=false)-instance-method","name":"kurtosis","doc":"Computes the kurtosis of a dataset.\n\nParameters\n- values: a one-dimensional dataset.\n- corrected: when set to `true`, then the calculations are corrected for statistical bias. Default is `false`.\n- excess: when set to `true`, computes the [excess kurtosis](https://en.wikipedia.org/wiki/Kurtosis#Excess_kurtosis). Default is `false`.\n\nThis implementation is based on the [scipy/stats.py](https://github.com/scipy/scipy/blob/3de0d58/scipy/stats/stats.py#L1142).","summary":"

    Computes the kurtosis of a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""},{"name":"excess","doc":null,"default_value":"false","external_name":"excess","restriction":""}],"args_string":"(values, corrected = false, excess = false)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L53","def":{"name":"kurtosis","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""},{"name":"excess","doc":null,"default_value":"false","external_name":"excess","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"n = values.size\nm = mean(values)\nm4 = moment(values, m, 4)\nm2 = moment(values, m, 2)\nkurt = if corrected\n (((1 / (n - 2)) / (n - 3)) * (((((n ** 2) - 1) * m4) / (m2 ** 2)) - (3 * ((n - 1) ** 2)))) + 3\nelse\n m4 / (m2 ** 2)\nend\nexcess ? kurt - 3 : kurt\n"}},{"id":"mean(values)-instance-method","html_id":"mean(values)-instance-method","name":"mean","doc":"Computes the mean of a dataset.\n\nParameters\n- values: a one-dimensional dataset.","summary":"

    Computes the mean of a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"args_string":"(values)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L72","def":{"name":"mean","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"(values.reduce(0) do |acc, v|\n acc + v\nend) / values.size"}},{"id":"median(values,sorted=false)-instance-method","html_id":"median(values,sorted=false)-instance-method","name":"median","doc":"Computes the median of all elements in a dataset.\n\nFor an even number of elements the mean of the two median elements will be computed.\n\nParameters\n- values: a one-dimensional dataset.\n- sorted: when `true`, the computations assume that the provided values are\n sorted. Default is `false`.\n\nSee Julia's [Statistics.median](https://docs.julialang.org/en/v1/stdlib/Statistics/#Statistics.median).","summary":"

    Computes the median of all elements in a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"sorted","doc":null,"default_value":"false","external_name":"sorted","restriction":""}],"args_string":"(values, sorted = false)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L86","def":{"name":"median","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"sorted","doc":null,"default_value":"false","external_name":"sorted","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"size = values.size\nmid = size // 2\nsorted_values = sorted ? values : values.sort\nif size.odd?\n sorted_values[mid]\nelse\n middle([sorted_values[mid - 1], sorted_values[mid]])\nend\n"}},{"id":"middle(a,b)-instance-method","html_id":"middle(a,b)-instance-method","name":"middle","doc":"Computes the middle of two values `a` and `b`.","summary":"

    Computes the middle of two values a and b.

    ","abstract":false,"args":[{"name":"a","doc":null,"default_value":"","external_name":"a","restriction":""},{"name":"b","doc":null,"default_value":"","external_name":"b","restriction":""}],"args_string":"(a, b)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L111","def":{"name":"middle","args":[{"name":"a","doc":null,"default_value":"","external_name":"a","restriction":""},{"name":"b","doc":null,"default_value":"","external_name":"b","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"0.5 * (a + b)"}},{"id":"middle(values)-instance-method","html_id":"middle(values)-instance-method","name":"middle","doc":"Computes the middle of an array `a`, which consists of finding its\nextrema and then computing their mean.\n\nParameters\n- values: a one-dimensional dataset.\n\nSee Julia's [Statistics.middle](https://docs.julialang.org/en/v1/stdlib/Statistics/#Statistics.middle).","summary":"

    Computes the middle of an array a, which consists of finding its extrema and then computing their mean.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"args_string":"(values)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L105","def":{"name":"middle","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"min, max = values.minmax\nmiddle(min, max)\n"}},{"id":"mode(values:Enumerable)-instance-method","html_id":"mode(values:Enumerable)-instance-method","name":"mode","doc":"Computes the modal (most common) value in a dataset.\n\nReturns a pair with the modal value and the bin-count for the modal bin.\nIf there is more than one such value, no guarantees are made which one will be picked.\nNOTE: Computing the mode requires traversing the entire dataset.\n\nParameters\n- values: a one-dimensional dataset.","summary":"

    Computes the modal (most common) value in a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":"Enumerable"}],"args_string":"(values : Enumerable)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L123","def":{"name":"mode","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":"Enumerable"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"(frequency(values)).max_by(&.last)"}},{"id":"moment(values,mean=nil,n=1)-instance-method","html_id":"moment(values,mean=nil,n=1)-instance-method","name":"moment","doc":"Calculates the n-th moment about the mean for a sample.\n\nParameters\n- values: a one-dimensional dataset.\n- mean: a pre-computed mean. If a mean is not provided, then the sample's\n mean will be computed. Default is `nil`.\n- n: order of central moment that is returned. Default is `1`.","summary":"

    Calculates the n-th moment about the mean for a sample.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"n","doc":null,"default_value":"1","external_name":"n","restriction":""}],"args_string":"(values, mean = nil, n = 1)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L134","def":{"name":"moment","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"n","doc":null,"default_value":"1","external_name":"n","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"m = mean || (Statistics.mean(values))\n(values.reduce(0) do |a, b|\n a + ((b - m) ** n)\nend) / values.size\n"}},{"id":"quantile(values,p,sorted=false)-instance-method","html_id":"quantile(values,p,sorted=false)-instance-method","name":"quantile","doc":"Computes the quantile of a dataset at a specified probability `p` on the interval [0,1].\n\nQuantiles are computed via linear interpolation between the points `((k-1)/(n-1), v[k])`,\nfor `k = 1:n` where `n = values.size`.\n\nParameters\n- values: a one-dimensional dataset.\n- p: probability. Values of `p` should be in the interval `[0, 1]`.\n- sorted indicates whether values can be assumed to be sorted.\n\nImplementation based on Julia's [Statistics.quantile](https://docs.julialang.org/en/v1/stdlib/Statistics/#Statistics.quantile).","summary":"

    Computes the quantile of a dataset at a specified probability p on the interval [0,1].

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"p","doc":null,"default_value":"","external_name":"p","restriction":""},{"name":"sorted","doc":null,"default_value":"false","external_name":"sorted","restriction":""}],"args_string":"(values, p, sorted = false)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L150","def":{"name":"quantile","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"p","doc":null,"default_value":"","external_name":"p","restriction":""},{"name":"sorted","doc":null,"default_value":"false","external_name":"sorted","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"sorted_values = sorted ? values : values.sort\nn = values.size\naleph = (n - 1) * p\nj = (clamp(aleph.floor, 0, n - 2)).to_i\ngamma = clamp(aleph - j, 0, 1)\na = sorted_values[j]\nb = sorted_values[j + 1]\na + ((b - a) * gamma)\n"}},{"id":"skew(values,corrected=false)-instance-method","html_id":"skew(values,corrected=false)-instance-method","name":"skew","doc":"Computes the skewness of a dataset.\n\nParameters\n- values: a one-dimensional dataset.\n- corrected: when set to `true`, then the calculations are corrected for statistical bias. Default is `false`.\n\nThis implementation is based on the [scipy/stats.py](https://github.com/scipy/scipy/blob/3de0d58/scipy/stats/stats.py#L1039).","summary":"

    Computes the skewness of a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"args_string":"(values, corrected = false)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L170","def":{"name":"skew","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"n = values.size\nm = mean(values)\nm3 = moment(values, m, 3)\nm2 = moment(values, m, 2)\ncorrection_factor = corrected ? (Math.sqrt((n - 1.0) * n)) / (n - 2.0) : 1\n(correction_factor * m3) / (m2 ** 1.5)\n"}},{"id":"std(values,mean=nil,corrected=false)-instance-method","html_id":"std(values,mean=nil,corrected=false)-instance-method","name":"std","doc":"Computes the standard deviation of a dataset.\n\nParameters\n- values: a one-dimensional dataset.\n- mean: a pre-computed mean. This could be a pre-computed sample's mean\n or the population's known mean. If a mean is not provided, then the sample's\n mean will be computed. Default is `nil`.\n- corrected: when set to `true`, then the sum of squares is scaled\n with `values.size - 1`, rather than with `values.size`. Default is `false`.","summary":"

    Computes the standard deviation of a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"args_string":"(values, mean = nil, corrected = false)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L188","def":{"name":"std","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"Math.sqrt(var(values, mean, corrected))"}},{"id":"var(values,mean=nil,corrected=false)-instance-method","html_id":"var(values,mean=nil,corrected=false)-instance-method","name":"var","doc":"Computes the variance of a dataset.\n\nParameters\n- values: a one-dimensional dataset.\n- mean: a pre-computed mean. This could be a pre-computed sample's mean\n or the population's known mean. If a mean is not provided, then the sample's\n mean will be computed. Default is `nil`.\n- corrected: when set to `true`, then the sum of squares is scaled\n with `values.size - 1`, rather than with `values.size`. Default is `false`.","summary":"

    Computes the variance of a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"args_string":"(values, mean = nil, corrected = false)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/statistics.cr#L201","def":{"name":"var","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"correction_factor = corrected ? values.size / (values.size - 1) : 1\n(moment(values, mean, 2)) * correction_factor\n"}}],"macros":[],"types":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","path":"Statistics/Distributions.html","kind":"module","full_name":"Statistics::Distributions","name":"Distributions","abstract":false,"superclass":null,"ancestors":[],"locations":[{"filename":"lib/distributions.cr","line_number":2,"url":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics","kind":"module","full_name":"Statistics","name":"Statistics"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Constant","path":"Statistics/Distributions/Constant.html","kind":"class","full_name":"Statistics::Distributions::Constant","name":"Constant","abstract":false,"superclass":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":9,"url":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":"Represents a deterministic distribution taking a single value.","summary":"

    Represents a deterministic distribution taking a single value.

    ","class_methods":[],"constructors":[{"id":"new(krand:Float64)-class-method","html_id":"new(krand:Float64)-class-method","name":"new","doc":"Creates a degenerate distribution which only takes the value `k`.","summary":"

    Creates a degenerate distribution which only takes the value k.

    ","abstract":false,"args":[{"name":"rand","doc":null,"default_value":"","external_name":"k","restriction":"Float64"}],"args_string":"(k rand : Float64)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr#L13","def":{"name":"new","args":[{"name":"rand","doc":null,"default_value":"","external_name":"k","restriction":"Float64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(rand)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"rand:Float64-instance-method","html_id":"rand:Float64-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":false,"args":[],"args_string":" : Float64","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr#L10","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Float64","visibility":"Public","body":"@rand"}}],"macros":[],"types":[]},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","path":"Statistics/Distributions/Distribution.html","kind":"class","full_name":"Statistics::Distributions::Distribution(T)","name":"Distribution","abstract":true,"superclass":{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":3,"url":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Constant","kind":"class","full_name":"Statistics::Distributions::Constant","name":"Constant"},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Exponential","kind":"class","full_name":"Statistics::Distributions::Exponential","name":"Exponential"},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Normal","kind":"class","full_name":"Statistics::Distributions::Normal","name":"Normal"},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Poisson","kind":"class","full_name":"Statistics::Distributions::Poisson","name":"Poisson"},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Uniform","kind":"class","full_name":"Statistics::Distributions::Uniform","name":"Uniform"}],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[{"id":"rand:T-instance-method","html_id":"rand:T-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":true,"args":[],"args_string":" : T","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr#L5","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"T","visibility":"Public","body":""}}],"macros":[],"types":[]},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Exponential","path":"Statistics/Distributions/Exponential.html","kind":"class","full_name":"Statistics::Distributions::Exponential","name":"Exponential","abstract":false,"superclass":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":22,"url":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":"Represents the probability distribution of the time between events in\na Poisson point process, i.e., a process in which events occur continuously\nand independently at a constant average rate.\n\nSee [wikipedia](https://en.wikipedia.org/wiki/Exponential_distribution) for more details.","summary":"

    Represents the probability distribution of the time between events in a Poisson point process, i.e., a process in which events occur continuously and independently at a constant average rate.

    ","class_methods":[],"constructors":[{"id":"new(lambda:Float64)-class-method","html_id":"new(lambda:Float64)-class-method","name":"new","doc":"Creates an exponential distribution with a rate parameter `lambda`.","summary":"

    Creates an exponential distribution with a rate parameter lambda.

    ","abstract":false,"args":[{"name":"lambda","doc":null,"default_value":"","external_name":"lambda","restriction":"Float64"}],"args_string":"(lambda : Float64)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr#L24","def":{"name":"new","args":[{"name":"lambda","doc":null,"default_value":"","external_name":"lambda","restriction":"Float64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(lambda)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"rand:Float64-instance-method","html_id":"rand:Float64-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":false,"args":[],"args_string":" : Float64","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr#L27","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Float64","visibility":"Public","body":"(-(Math.log(::rand))) / @lambda"}}],"macros":[],"types":[]},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Normal","path":"Statistics/Distributions/Normal.html","kind":"class","full_name":"Statistics::Distributions::Normal","name":"Normal","abstract":false,"superclass":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":38,"url":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[{"id":"TWO_PI","name":"TWO_PI","value":"2 * Math::PI","doc":null,"summary":null}],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":"Represents a normal distribution.\n\nSee [wikipedia](https://en.wikipedia.org/wiki/Normal_distribution) for more details.","summary":"

    Represents a normal distribution.

    ","class_methods":[],"constructors":[{"id":"new(mean:Float64,std:Float64)-class-method","html_id":"new(mean:Float64,std:Float64)-class-method","name":"new","doc":"Creates a normal distribution with the given `mean` and `std`.","summary":"

    Creates a normal distribution with the given mean and std.

    ","abstract":false,"args":[{"name":"mean","doc":null,"default_value":"","external_name":"mean","restriction":"Float64"},{"name":"std","doc":null,"default_value":"","external_name":"std","restriction":"Float64"}],"args_string":"(mean : Float64, std : Float64)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr#L42","def":{"name":"new","args":[{"name":"mean","doc":null,"default_value":"","external_name":"mean","restriction":"Float64"},{"name":"std","doc":null,"default_value":"","external_name":"std","restriction":"Float64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(mean, std)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"rand:Float64-instance-method","html_id":"rand:Float64-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":false,"args":[],"args_string":" : Float64","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr#L45","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Float64","visibility":"Public","body":"v = (Math.sqrt(-2 * (Math.log(::rand)))) * (Math.sin(TWO_PI * ::rand))\n(v * @std) + @mean\n"}}],"macros":[],"types":[]},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Poisson","path":"Statistics/Distributions/Poisson.html","kind":"class","full_name":"Statistics::Distributions::Poisson","name":"Poisson","abstract":false,"superclass":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":58,"url":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":"Represents a discrete probability distribution that expresses\nthe probability of a given number of events occurring in a\nfixed interval of time or space if these events occur with a\nknown constant mean rate and independently of the time since\nthe last event (source: [wikipedia](https://en.wikipedia.org/wiki/Poisson_distribution))","summary":"

    Represents a discrete probability distribution that expresses the probability of a given number of events occurring in a fixed interval of time or space if these events occur with a known constant mean rate and independently of the time since the last event (source: wikipedia)

    ","class_methods":[],"constructors":[{"id":"new(lambda:Float64)-class-method","html_id":"new(lambda:Float64)-class-method","name":"new","doc":"Creates a Poisson distribution with expected value `lambda`.","summary":"

    Creates a Poisson distribution with expected value lambda.

    ","abstract":false,"args":[{"name":"lambda","doc":null,"default_value":"","external_name":"lambda","restriction":"Float64"}],"args_string":"(lambda : Float64)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr#L60","def":{"name":"new","args":[{"name":"lambda","doc":null,"default_value":"","external_name":"lambda","restriction":"Float64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(lambda)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"rand:Int32-instance-method","html_id":"rand:Int32-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":false,"args":[],"args_string":" : Int32","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr#L63","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Int32","visibility":"Public","body":"x = 0\np = Math.exp(-@lambda)\ns = p\nu = ::rand\nwhile u > s\n x = x + 1\n p = p * (@lambda / x)\n s = s + p\nend\nx\n"}}],"macros":[],"types":[]},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Uniform","path":"Statistics/Distributions/Uniform.html","kind":"class","full_name":"Statistics::Distributions::Uniform","name":"Uniform","abstract":false,"superclass":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":84,"url":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":"Represents a continuous uniform distribution.\n\nSee [wikipedia](https://en.wikipedia.org/wiki/Uniform_distribution_(continuous).","summary":"

    Represents a continuous uniform distribution.

    ","class_methods":[],"constructors":[{"id":"new(min:Float64,max:Float64)-class-method","html_id":"new(min:Float64,max:Float64)-class-method","name":"new","doc":"Creates a uniform distribution within the interval [`min`, `max`].","summary":"

    Creates a uniform distribution within the interval [min, max].

    ","abstract":false,"args":[{"name":"min","doc":null,"default_value":"","external_name":"min","restriction":"Float64"},{"name":"max","doc":null,"default_value":"","external_name":"max","restriction":"Float64"}],"args_string":"(min : Float64, max : Float64)","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr#L88","def":{"name":"new","args":[{"name":"min","doc":null,"default_value":"","external_name":"min","restriction":"Float64"},{"name":"max","doc":null,"default_value":"","external_name":"max","restriction":"Float64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(min, max)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"rand:Float64-instance-method","html_id":"rand:Float64-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":false,"args":[],"args_string":" : Float64","source_link":"https://github.com/lbarasti/statistics/blob/bbd282b89ee86911c5616d0a08c1904e9a8d2e01/src/lib/distributions.cr#L92","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Float64","visibility":"Public","body":"@min + (::rand * @interval)"}}],"macros":[],"types":[]}]}]}]}}) \ No newline at end of file +crystal_doc_search_index_callback({"repository_name":"github.com/lbarasti/statistics","body":"[![GitHub release](https://img.shields.io/github/release/lbarasti/statistics.svg)](https://github.com/lbarasti/statistics/releases)\n![Build Status](https://github.com/lbarasti/statistics/workflows/build/badge.svg)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n\n# statistics\n\nA statistical library to perform descriptive statistics and generate random values based on popular probability distributions.\n\n## Installation\n\n1. Add the dependency to your `shard.yml`:\n\n```yaml\ndependencies:\n statistics:\n github: lbarasti/statistics\n```\n\n2. Run `shards install`\n\n## Usage\n\n```crystal\nrequire \"statistics\"\n```\n\n### Descriptive statistics\nYou can compute mean, variance and standard deviation of a collection as follows.\n```crystal\ninclude Statistics\n\nx = [1, 10, 7]\nmean(x) # 6\nvar(x) # 14\nstd(x) # 3.7416...\n```\n\nIf you'd like to know a bit more about your dataset, you can simply `describe` it\n\n```crystal\nx = (1..1000).map { rand }.to_a # a uniformely distributed dataset\ndescribe(x)\n# {\n# mean: 0.48, var: 0.08, std: 0.28, \n# skewness: 0.04, kurtosis: 1.81, \n# min: 0.01, middle: 0.49, max: 0.99, \n# q1: 0.24, median: 0.49, q3: 0.73\n# }\n```\n\n`Statistics.describe` returns a `NamedTuple`, so you can extract any value via indexing:\n\n```crystal\nstats = describe(x)\nstats[:q1] # returns the first quartile of your sample\n```\n\nFor a complete list of the statistical functions provided, including `quantile`, `moment` and `skew`, check out the [docs](https://lbarasti.com/statistics/Statistics.html).\n\n### Sampling\nTo work with distributions, import the `Distributions` namespace as follows.\n```crystal\ninclude Statistics::Distributions\n```\n\nNow, here is how we sample values from a normal distribution with `mean = 1.5` and `std = 0.2`.\n```crystal\nNormal.new(1.5, 0.2).rand\n```\n\nWe can generate an iterable of normally distributed random values as follows.\n```crystal\ngen = Normal.new(1.5, 0.2)\n1000.times.map { gen.rand }\n```\n\n#### Supported distributions\nThe following distributions are supported:\n* Constant\n* Exponential\n* Normal\n* Poisson\n* Uniform\n\nDon't see your favourite one on the list? Just fork the repo, add your distribution to the `distributions.cr` file, and open a PR.\n\n## Development\n\nThis shard is a work in progress. Everyone's contribution is welcome.\n\nThe guiding principle at this stage is\n> make it work before you make it right\n\nWhich in this context means: let's not focus on benchmarks and performance, but rather on usability and correctness.\n\n## References\n* [numpy.random](https://numpy.org/devdocs/reference/random/generator.html): distributions and random sampling\n* [numpy statistics](https://numpy.org/devdocs/reference/routines.statistics.html#averages-and-variances): order statistics, averages and variances\n* [scipy stats](https://github.com/scipy/scipy/blob/3de0d58/scipy/stats/stats.py) module and related [tests](https://github.com/scipy/scipy/blob/1150c4c033899a5a4556b7d34d6b137352b36b9e/scipy/stats/tests/test_stats.py) tests\n* [julia random](https://docs.julialang.org/en/v1/stdlib/Random/) module\n* [julia statistics](https://docs.julialang.org/en/v1/stdlib/Statistics/#Statistics.std) module\n* [julia distributions](https://juliastats.org/Distributions.jl/latest/starting/) package.\n* on [skewness and kurtosis](https://brownmath.com/stat/shape.htm), by Stan Brown\n* more on [skewness and kurtosis](https://www.itl.nist.gov/div898/handbook/eda/section3/eda35b.htm), from NIST.\n\n## Contributing\n\n1. Fork it ()\n2. Create your feature branch (`git checkout -b my-new-feature`)\n3. Commit your changes (`git commit -am 'Add some feature'`)\n4. Push to the branch (`git push origin my-new-feature`)\n5. Create a new Pull Request\n\n## Contributors\n\n- [lbarasti](https://github.com/lbarasti) - creator and maintainer\n","program":{"html_id":"github.com/lbarasti/statistics/toplevel","path":"toplevel.html","kind":"module","full_name":"Top Level Namespace","name":"Top Level Namespace","abstract":false,"superclass":null,"ancestors":[],"locations":[],"repository_name":"github.com/lbarasti/statistics","program":true,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":null,"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[{"html_id":"github.com/lbarasti/statistics/Statistics","path":"Statistics.html","kind":"module","full_name":"Statistics","name":"Statistics","abstract":false,"superclass":null,"ancestors":[],"locations":[{"filename":"lib/distributions.cr","line_number":1,"url":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr"},{"filename":"statistics.cr","line_number":6,"url":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[{"id":"VERSION","name":"VERSION","value":"\"0.3.0\"","doc":null,"summary":null}],"included_modules":[],"extended_modules":[{"html_id":"github.com/lbarasti/statistics/Statistics","kind":"module","full_name":"Statistics","name":"Statistics"}],"subclasses":[],"including_types":[],"namespace":null,"doc":"Basic descriptive statistics functionality.\n\nMore flexible than a scientific-calculator, but not as exhaustive, yet.","summary":"

    Basic descriptive statistics functionality.

    ","class_methods":[],"constructors":[],"instance_methods":[{"id":"bin_count(values:Enumerable,bins:Int32,min=nil,max=nil):Array(::Tuple(Float64,Int32))-instance-method","html_id":"bin_count(values:Enumerable,bins:Int32,min=nil,max=nil):Array(::Tuple(Float64,Int32))-instance-method","name":"bin_count","doc":"Counts the number of values in each bin of size `(max - min) / bins`.\n\nReturns an array of tuples `{edge, count}` ordered by `edge`, where `edge` is the\nstarting edge of a bin and `count` is the number of values in the corresponding `bin`.\n\nNOTE: Any empty bin will also be included.\n\nParameters\n- values: a one-dimensional dataset.\n- bins: the number of equally-sized bins to divide the datapoints into.\n- min: the left end of the first bin's edge. If none is provided, then `values.min` is used.\n- max: the right end of the last bin's edge. If none is provided, then `values.max` is used.","summary":"

    Counts the number of values in each bin of size (max - min) / bins.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":"Enumerable"},{"name":"bins","doc":null,"default_value":"","external_name":"bins","restriction":"Int32"},{"name":"min","doc":null,"default_value":"nil","external_name":"min","restriction":""},{"name":"max","doc":null,"default_value":"nil","external_name":"max","restriction":""}],"args_string":"(values : Enumerable, bins : Int32, min = nil, max = nil) : Array(::Tuple(Float64, Int32))","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L57","def":{"name":"bin_count","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":"Enumerable"},{"name":"bins","doc":null,"default_value":"","external_name":"bins","restriction":"Int32"},{"name":"min","doc":null,"default_value":"nil","external_name":"min","restriction":""},{"name":"max","doc":null,"default_value":"nil","external_name":"max","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Array(::Tuple(Float64, Int32))","visibility":"Public","body":"if min.nil? || max.nil?\n sample_min, sample_max = values.minmax\n if min.nil?\n min = sample_min\n end\n if max.nil?\n max = sample_max\n end\nend\ncounter = Array(Int32).new(size: bins, value: 0)\nstep = (max - min) / bins\nvalues.each do |v|\n idx = v == max ? bins - 1 : ((v - min) / step).floor.to_i\n __temp_26 = idx\n counter[__temp_26] = counter[__temp_26] + 1\nend\nArray.new(bins) do |i|\n {min + (i * step), counter[i]}\nend\n"}},{"id":"describe(values)-instance-method","html_id":"describe(values)-instance-method","name":"describe","doc":"Computes several descriptive statistics of the passed array.\n\nParameters\n- values: a one-dimensional dataset.","summary":"

    Computes several descriptive statistics of the passed array.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"args_string":"(values)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L14","def":{"name":"describe","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"size = values.size\nsorted = values.sort\n{mean: mean(values), var: var(values), std: std(values), skewness: skew(values), kurtosis: kurtosis(values), min: sorted.first, middle: middle(sorted), max: sorted.last, q1: quantile(sorted, 0.25, sorted: true), median: median(sorted, sorted: true), q3: quantile(sorted, 0.75, sorted: true)}\n"}},{"id":"frequency(values:Enumerable(T))forallT-instance-method","html_id":"frequency(values:Enumerable(T))forallT-instance-method","name":"frequency","doc":"Computes the number of occurrences of each value in the dataset.\n\nReturns a Hash with each the dataset values as keys and the number of times they appear as value.\n\nParameters\n- values: a one-dimensional dataset.","summary":"

    Computes the number of occurrences of each value in the dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":"Enumerable(T)"}],"args_string":"(values : Enumerable(T)) forall T","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L38","def":{"name":"frequency","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":"Enumerable(T)"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"values.reduce(Hash(T, Int32).new(0)) do |freq, v|\n __temp_24 = v\n freq[__temp_24] = freq[__temp_24] + 1\n freq\nend"}},{"id":"kurtosis(values,corrected=false,excess=false)-instance-method","html_id":"kurtosis(values,corrected=false,excess=false)-instance-method","name":"kurtosis","doc":"Computes the kurtosis of a dataset.\n\nParameters\n- values: a one-dimensional dataset.\n- corrected: when set to `true`, then the calculations are corrected for statistical bias. Default is `false`.\n- excess: when set to `true`, computes the [excess kurtosis](https://en.wikipedia.org/wiki/Kurtosis#Excess_kurtosis). Default is `false`.\n\nThis implementation is based on the [scipy/stats.py](https://github.com/scipy/scipy/blob/3de0d58/scipy/stats/stats.py#L1142).","summary":"

    Computes the kurtosis of a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""},{"name":"excess","doc":null,"default_value":"false","external_name":"excess","restriction":""}],"args_string":"(values, corrected = false, excess = false)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L84","def":{"name":"kurtosis","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""},{"name":"excess","doc":null,"default_value":"false","external_name":"excess","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"n = values.size\nm = mean(values)\nm4 = moment(values, m, 4)\nm2 = moment(values, m, 2)\nkurt = if corrected\n (((1 / (n - 2)) / (n - 3)) * (((((n ** 2) - 1) * m4) / (m2 ** 2)) - (3 * ((n - 1) ** 2)))) + 3\nelse\n m4 / (m2 ** 2)\nend\nexcess ? kurt - 3 : kurt\n"}},{"id":"mean(values)-instance-method","html_id":"mean(values)-instance-method","name":"mean","doc":"Computes the mean of a dataset.\n\nParameters\n- values: a one-dimensional dataset.","summary":"

    Computes the mean of a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"args_string":"(values)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L103","def":{"name":"mean","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"(values.reduce(0) do |acc, v|\n acc + v\nend) / values.size"}},{"id":"median(values,sorted=false)-instance-method","html_id":"median(values,sorted=false)-instance-method","name":"median","doc":"Computes the median of all elements in a dataset.\n\nFor an even number of elements the mean of the two median elements will be computed.\n\nParameters\n- values: a one-dimensional dataset.\n- sorted: when `true`, the computations assume that the provided values are\n sorted. Default is `false`.\n\nSee Julia's [Statistics.median](https://docs.julialang.org/en/v1/stdlib/Statistics/#Statistics.median).","summary":"

    Computes the median of all elements in a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"sorted","doc":null,"default_value":"false","external_name":"sorted","restriction":""}],"args_string":"(values, sorted = false)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L117","def":{"name":"median","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"sorted","doc":null,"default_value":"false","external_name":"sorted","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"size = values.size\nmid = size // 2\nsorted_values = sorted ? values : values.sort\nif size.odd?\n sorted_values[mid]\nelse\n middle([sorted_values[mid - 1], sorted_values[mid]])\nend\n"}},{"id":"middle(a,b)-instance-method","html_id":"middle(a,b)-instance-method","name":"middle","doc":"Computes the middle of two values `a` and `b`.","summary":"

    Computes the middle of two values a and b.

    ","abstract":false,"args":[{"name":"a","doc":null,"default_value":"","external_name":"a","restriction":""},{"name":"b","doc":null,"default_value":"","external_name":"b","restriction":""}],"args_string":"(a, b)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L142","def":{"name":"middle","args":[{"name":"a","doc":null,"default_value":"","external_name":"a","restriction":""},{"name":"b","doc":null,"default_value":"","external_name":"b","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"0.5 * (a + b)"}},{"id":"middle(values)-instance-method","html_id":"middle(values)-instance-method","name":"middle","doc":"Computes the middle of an array `a`, which consists of finding its\nextrema and then computing their mean.\n\nParameters\n- values: a one-dimensional dataset.\n\nSee Julia's [Statistics.middle](https://docs.julialang.org/en/v1/stdlib/Statistics/#Statistics.middle).","summary":"

    Computes the middle of an array a, which consists of finding its extrema and then computing their mean.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"args_string":"(values)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L136","def":{"name":"middle","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"min, max = values.minmax\nmiddle(min, max)\n"}},{"id":"mode(values:Enumerable)-instance-method","html_id":"mode(values:Enumerable)-instance-method","name":"mode","doc":"Computes the modal (most common) value in a dataset.\n\nReturns a pair with the modal value and the bin-count for the modal bin.\nIf there is more than one such value, no guarantees are made which one will be picked.\nNOTE: Computing the mode requires traversing the entire dataset.\n\nParameters\n- values: a one-dimensional dataset.","summary":"

    Computes the modal (most common) value in a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":"Enumerable"}],"args_string":"(values : Enumerable)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L154","def":{"name":"mode","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":"Enumerable"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"(frequency(values)).max_by(&.last)"}},{"id":"moment(values,mean=nil,n=1)-instance-method","html_id":"moment(values,mean=nil,n=1)-instance-method","name":"moment","doc":"Calculates the n-th moment about the mean for a sample.\n\nParameters\n- values: a one-dimensional dataset.\n- mean: a pre-computed mean. If a mean is not provided, then the sample's\n mean will be computed. Default is `nil`.\n- n: order of central moment that is returned. Default is `1`.","summary":"

    Calculates the n-th moment about the mean for a sample.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"n","doc":null,"default_value":"1","external_name":"n","restriction":""}],"args_string":"(values, mean = nil, n = 1)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L165","def":{"name":"moment","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"n","doc":null,"default_value":"1","external_name":"n","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"m = mean || (Statistics.mean(values))\n(values.reduce(0) do |a, b|\n a + ((b - m) ** n)\nend) / values.size\n"}},{"id":"quantile(values,p,sorted=false)-instance-method","html_id":"quantile(values,p,sorted=false)-instance-method","name":"quantile","doc":"Computes the quantile of a dataset at a specified probability `p` on the interval [0,1].\n\nQuantiles are computed via linear interpolation between the points `((k-1)/(n-1), v[k])`,\nfor `k = 1:n` where `n = values.size`.\n\nParameters\n- values: a one-dimensional dataset.\n- p: probability. Values of `p` should be in the interval `[0, 1]`.\n- sorted indicates whether values can be assumed to be sorted.\n\nImplementation based on Julia's [Statistics.quantile](https://docs.julialang.org/en/v1/stdlib/Statistics/#Statistics.quantile).","summary":"

    Computes the quantile of a dataset at a specified probability p on the interval [0,1].

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"p","doc":null,"default_value":"","external_name":"p","restriction":""},{"name":"sorted","doc":null,"default_value":"false","external_name":"sorted","restriction":""}],"args_string":"(values, p, sorted = false)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L181","def":{"name":"quantile","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"p","doc":null,"default_value":"","external_name":"p","restriction":""},{"name":"sorted","doc":null,"default_value":"false","external_name":"sorted","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"sorted_values = sorted ? values : values.sort\nn = values.size\naleph = (n - 1) * p\nj = (clamp(aleph.floor, 0, n - 2)).to_i\ngamma = clamp(aleph - j, 0, 1)\na = sorted_values[j]\nb = sorted_values[j + 1]\na + ((b - a) * gamma)\n"}},{"id":"skew(values,corrected=false)-instance-method","html_id":"skew(values,corrected=false)-instance-method","name":"skew","doc":"Computes the skewness of a dataset.\n\nParameters\n- values: a one-dimensional dataset.\n- corrected: when set to `true`, then the calculations are corrected for statistical bias. Default is `false`.\n\nThis implementation is based on the [scipy/stats.py](https://github.com/scipy/scipy/blob/3de0d58/scipy/stats/stats.py#L1039).","summary":"

    Computes the skewness of a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"args_string":"(values, corrected = false)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L201","def":{"name":"skew","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"n = values.size\nm = mean(values)\nm3 = moment(values, m, 3)\nm2 = moment(values, m, 2)\ncorrection_factor = corrected ? (Math.sqrt((n - 1.0) * n)) / (n - 2.0) : 1\n(correction_factor * m3) / (m2 ** 1.5)\n"}},{"id":"std(values,mean=nil,corrected=false)-instance-method","html_id":"std(values,mean=nil,corrected=false)-instance-method","name":"std","doc":"Computes the standard deviation of a dataset.\n\nParameters\n- values: a one-dimensional dataset.\n- mean: a pre-computed mean. This could be a pre-computed sample's mean\n or the population's known mean. If a mean is not provided, then the sample's\n mean will be computed. Default is `nil`.\n- corrected: when set to `true`, then the sum of squares is scaled\n with `values.size - 1`, rather than with `values.size`. Default is `false`.","summary":"

    Computes the standard deviation of a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"args_string":"(values, mean = nil, corrected = false)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L219","def":{"name":"std","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"Math.sqrt(var(values, mean, corrected))"}},{"id":"var(values,mean=nil,corrected=false)-instance-method","html_id":"var(values,mean=nil,corrected=false)-instance-method","name":"var","doc":"Computes the variance of a dataset.\n\nParameters\n- values: a one-dimensional dataset.\n- mean: a pre-computed mean. This could be a pre-computed sample's mean\n or the population's known mean. If a mean is not provided, then the sample's\n mean will be computed. Default is `nil`.\n- corrected: when set to `true`, then the sum of squares is scaled\n with `values.size - 1`, rather than with `values.size`. Default is `false`.","summary":"

    Computes the variance of a dataset.

    ","abstract":false,"args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"args_string":"(values, mean = nil, corrected = false)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/statistics.cr#L232","def":{"name":"var","args":[{"name":"values","doc":null,"default_value":"","external_name":"values","restriction":""},{"name":"mean","doc":null,"default_value":"nil","external_name":"mean","restriction":""},{"name":"corrected","doc":null,"default_value":"false","external_name":"corrected","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"correction_factor = corrected ? values.size / (values.size - 1) : 1\n(moment(values, mean, 2)) * correction_factor\n"}}],"macros":[],"types":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","path":"Statistics/Distributions.html","kind":"module","full_name":"Statistics::Distributions","name":"Distributions","abstract":false,"superclass":null,"ancestors":[],"locations":[{"filename":"lib/distributions.cr","line_number":2,"url":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics","kind":"module","full_name":"Statistics","name":"Statistics"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Constant","path":"Statistics/Distributions/Constant.html","kind":"class","full_name":"Statistics::Distributions::Constant","name":"Constant","abstract":false,"superclass":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":9,"url":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":"Represents a deterministic distribution taking a single value.","summary":"

    Represents a deterministic distribution taking a single value.

    ","class_methods":[],"constructors":[{"id":"new(krand:Float64)-class-method","html_id":"new(krand:Float64)-class-method","name":"new","doc":"Creates a degenerate distribution which only takes the value `k`.","summary":"

    Creates a degenerate distribution which only takes the value k.

    ","abstract":false,"args":[{"name":"rand","doc":null,"default_value":"","external_name":"k","restriction":"Float64"}],"args_string":"(k rand : Float64)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr#L13","def":{"name":"new","args":[{"name":"rand","doc":null,"default_value":"","external_name":"k","restriction":"Float64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(rand)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"rand:Float64-instance-method","html_id":"rand:Float64-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":false,"args":[],"args_string":" : Float64","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr#L10","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Float64","visibility":"Public","body":"@rand"}}],"macros":[],"types":[]},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","path":"Statistics/Distributions/Distribution.html","kind":"class","full_name":"Statistics::Distributions::Distribution(T)","name":"Distribution","abstract":true,"superclass":{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":3,"url":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Constant","kind":"class","full_name":"Statistics::Distributions::Constant","name":"Constant"},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Exponential","kind":"class","full_name":"Statistics::Distributions::Exponential","name":"Exponential"},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Normal","kind":"class","full_name":"Statistics::Distributions::Normal","name":"Normal"},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Poisson","kind":"class","full_name":"Statistics::Distributions::Poisson","name":"Poisson"},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Uniform","kind":"class","full_name":"Statistics::Distributions::Uniform","name":"Uniform"}],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[{"id":"rand:T-instance-method","html_id":"rand:T-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":true,"args":[],"args_string":" : T","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr#L5","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"T","visibility":"Public","body":""}}],"macros":[],"types":[]},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Exponential","path":"Statistics/Distributions/Exponential.html","kind":"class","full_name":"Statistics::Distributions::Exponential","name":"Exponential","abstract":false,"superclass":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":22,"url":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":"Represents the probability distribution of the time between events in\na Poisson point process, i.e., a process in which events occur continuously\nand independently at a constant average rate.\n\nSee [wikipedia](https://en.wikipedia.org/wiki/Exponential_distribution) for more details.","summary":"

    Represents the probability distribution of the time between events in a Poisson point process, i.e., a process in which events occur continuously and independently at a constant average rate.

    ","class_methods":[],"constructors":[{"id":"new(lambda:Float64)-class-method","html_id":"new(lambda:Float64)-class-method","name":"new","doc":"Creates an exponential distribution with a rate parameter `lambda`.","summary":"

    Creates an exponential distribution with a rate parameter lambda.

    ","abstract":false,"args":[{"name":"lambda","doc":null,"default_value":"","external_name":"lambda","restriction":"Float64"}],"args_string":"(lambda : Float64)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr#L24","def":{"name":"new","args":[{"name":"lambda","doc":null,"default_value":"","external_name":"lambda","restriction":"Float64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(lambda)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"rand:Float64-instance-method","html_id":"rand:Float64-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":false,"args":[],"args_string":" : Float64","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr#L27","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Float64","visibility":"Public","body":"(-(Math.log(::rand))) / @lambda"}}],"macros":[],"types":[]},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Normal","path":"Statistics/Distributions/Normal.html","kind":"class","full_name":"Statistics::Distributions::Normal","name":"Normal","abstract":false,"superclass":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":38,"url":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[{"id":"TWO_PI","name":"TWO_PI","value":"2 * Math::PI","doc":null,"summary":null}],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":"Represents a normal distribution.\n\nSee [wikipedia](https://en.wikipedia.org/wiki/Normal_distribution) for more details.","summary":"

    Represents a normal distribution.

    ","class_methods":[],"constructors":[{"id":"new(mean:Float64,std:Float64)-class-method","html_id":"new(mean:Float64,std:Float64)-class-method","name":"new","doc":"Creates a normal distribution with the given `mean` and `std`.","summary":"

    Creates a normal distribution with the given mean and std.

    ","abstract":false,"args":[{"name":"mean","doc":null,"default_value":"","external_name":"mean","restriction":"Float64"},{"name":"std","doc":null,"default_value":"","external_name":"std","restriction":"Float64"}],"args_string":"(mean : Float64, std : Float64)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr#L42","def":{"name":"new","args":[{"name":"mean","doc":null,"default_value":"","external_name":"mean","restriction":"Float64"},{"name":"std","doc":null,"default_value":"","external_name":"std","restriction":"Float64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(mean, std)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"rand:Float64-instance-method","html_id":"rand:Float64-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":false,"args":[],"args_string":" : Float64","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr#L45","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Float64","visibility":"Public","body":"v = (Math.sqrt(-2 * (Math.log(::rand)))) * (Math.sin(TWO_PI * ::rand))\n(v * @std) + @mean\n"}}],"macros":[],"types":[]},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Poisson","path":"Statistics/Distributions/Poisson.html","kind":"class","full_name":"Statistics::Distributions::Poisson","name":"Poisson","abstract":false,"superclass":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":58,"url":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":"Represents a discrete probability distribution that expresses\nthe probability of a given number of events occurring in a\nfixed interval of time or space if these events occur with a\nknown constant mean rate and independently of the time since\nthe last event (source: [wikipedia](https://en.wikipedia.org/wiki/Poisson_distribution))","summary":"

    Represents a discrete probability distribution that expresses the probability of a given number of events occurring in a fixed interval of time or space if these events occur with a known constant mean rate and independently of the time since the last event (source: wikipedia)

    ","class_methods":[],"constructors":[{"id":"new(lambda:Float64)-class-method","html_id":"new(lambda:Float64)-class-method","name":"new","doc":"Creates a Poisson distribution with expected value `lambda`.","summary":"

    Creates a Poisson distribution with expected value lambda.

    ","abstract":false,"args":[{"name":"lambda","doc":null,"default_value":"","external_name":"lambda","restriction":"Float64"}],"args_string":"(lambda : Float64)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr#L60","def":{"name":"new","args":[{"name":"lambda","doc":null,"default_value":"","external_name":"lambda","restriction":"Float64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(lambda)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"rand:Int32-instance-method","html_id":"rand:Int32-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":false,"args":[],"args_string":" : Int32","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr#L63","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Int32","visibility":"Public","body":"x = 0\np = Math.exp(-@lambda)\ns = p\nu = ::rand\nwhile u > s\n x = x + 1\n p = p * (@lambda / x)\n s = s + p\nend\nx\n"}}],"macros":[],"types":[]},{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Uniform","path":"Statistics/Distributions/Uniform.html","kind":"class","full_name":"Statistics::Distributions::Uniform","name":"Uniform","abstract":false,"superclass":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},"ancestors":[{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions/Distribution","kind":"class","full_name":"Statistics::Distributions::Distribution","name":"Distribution"},{"html_id":"github.com/lbarasti/statistics/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/lbarasti/statistics/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"lib/distributions.cr","line_number":84,"url":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr"}],"repository_name":"github.com/lbarasti/statistics","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/lbarasti/statistics/Statistics/Distributions","kind":"module","full_name":"Statistics::Distributions","name":"Distributions"},"doc":"Represents a continuous uniform distribution.\n\nSee [wikipedia](https://en.wikipedia.org/wiki/Uniform_distribution_(continuous).","summary":"

    Represents a continuous uniform distribution.

    ","class_methods":[],"constructors":[{"id":"new(min:Float64,max:Float64)-class-method","html_id":"new(min:Float64,max:Float64)-class-method","name":"new","doc":"Creates a uniform distribution within the interval [`min`, `max`].","summary":"

    Creates a uniform distribution within the interval [min, max].

    ","abstract":false,"args":[{"name":"min","doc":null,"default_value":"","external_name":"min","restriction":"Float64"},{"name":"max","doc":null,"default_value":"","external_name":"max","restriction":"Float64"}],"args_string":"(min : Float64, max : Float64)","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr#L88","def":{"name":"new","args":[{"name":"min","doc":null,"default_value":"","external_name":"min","restriction":"Float64"},{"name":"max","doc":null,"default_value":"","external_name":"max","restriction":"Float64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(min, max)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"rand:Float64-instance-method","html_id":"rand:Float64-instance-method","name":"rand","doc":"Samples a random variable with the given distribution.","summary":"

    Samples a random variable with the given distribution.

    ","abstract":false,"args":[],"args_string":" : Float64","source_link":"https://github.com/lbarasti/statistics/blob/24ac181e033bb39fd1f8fb99b4ffb8ec125d9cc4/src/lib/distributions.cr#L92","def":{"name":"rand","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Float64","visibility":"Public","body":"@min + (::rand * @interval)"}}],"macros":[],"types":[]}]}]}]}}) \ No newline at end of file diff --git a/src/statistics.cr b/src/statistics.cr index 6c41973..6575113 100644 --- a/src/statistics.cr +++ b/src/statistics.cr @@ -34,7 +34,7 @@ module Statistics # Returns a Hash with each the dataset values as keys and the number of times they appear as value. # # Parameters - # - values: a one-dimensional dataset + # - values: a one-dimensional dataset. def frequency(values : Enumerable(T)) forall T values.reduce(Hash(T, Int32).new(0)) { |freq, v| freq[v] += 1 @@ -42,12 +42,18 @@ module Statistics } end - # Counts the number of values in each bin of size `(max - min)` / `bins`. + # Counts the number of values in each bin of size `(max - min) / bins`. # # Returns an array of tuples `{edge, count}` ordered by `edge`, where `edge` is the # starting edge of a bin and `count` is the number of values in the corresponding `bin`. # - # Note: Any empty bin will also be included. + # NOTE: Any empty bin will also be included. + # + # Parameters + # - values: a one-dimensional dataset. + # - bins: the number of equally-sized bins to divide the datapoints into. + # - min: the left end of the first bin's edge. If none is provided, then `values.min` is used. + # - max: the right end of the last bin's edge. If none is provided, then `values.max` is used. def bin_count(values : Enumerable, bins : Int32, min = nil, max = nil) : Array({Float64, Int32}) if min.nil? || max.nil? sample_min, sample_max = values.minmax