class Lite::Statistics::Descriptive

Constants

CALCULATIONS

Public Class Methods

new(collection) click to toggle source
# File lib/lite/statistics/descriptive.rb, line 42
def initialize(collection)
  @collection = collection
end

Public Instance Methods

average()
Alias for: mean
coefficient_of_variation()
frequencies() click to toggle source
# File lib/lite/statistics/descriptive.rb, line 57
def frequencies
  return if @collection.empty?

  @collection.each_with_object(Hash.new(0)) { |val, hash| hash[val] += 1 }
end
kurtosis()
Alias for: sample_kurtosis
max() click to toggle source

rubocop:disable Style/RedundantSort

# File lib/lite/statistics/descriptive.rb, line 66
def max
  return if @collection.empty?

  sort.last
end
mean() click to toggle source

rubocop:enable Style/RedundantSort

# File lib/lite/statistics/descriptive.rb, line 75
def mean
  return if @collection.empty?

  sum / size.to_f
end
Also aliased as: average
median() click to toggle source

rubocop:disable Metrics/AbcSize

# File lib/lite/statistics/descriptive.rb, line 85
def median
  return if @collection.empty?
  return sort[size / 2] unless size.even?

  (sort[(size / 2) - 1] + sort[size / 2]) / 2.0
end
midextreme()
Alias for: midrange
midrange() click to toggle source
# File lib/lite/statistics/descriptive.rb, line 207
def midrange
  return if @collection.empty?

  [min, max].sum / 2.0
end
Also aliased as: midextreme
min() click to toggle source

rubocop:disable Style/RedundantSort

# File lib/lite/statistics/descriptive.rb, line 96
def min
  return if @collection.empty?

  sort.first
end
mode() click to toggle source

rubocop:enable Style/RedundantSort

# File lib/lite/statistics/descriptive.rb, line 105
def mode
  return if @collection.empty?

  top_two = frequencies.sort_by { |_, val| -val }.take(2)
  return if top_two.first.last == top_two.last.last

  top_two.first.first
end
percentile(value)
percentile_from_value(value) click to toggle source
# File lib/lite/statistics/descriptive.rb, line 116
def percentile_from_value(value)
  return if @collection.empty?

  (sort.index(value) / size.to_f * 100).ceil
end
Also aliased as: percentile
percentile_rank(percentile)
population_coefficient_of_variation() click to toggle source
# File lib/lite/statistics/descriptive.rb, line 125
def population_coefficient_of_variation
  return if @collection.empty?

  population_standard_deviation / mean
end
population_kurtosis() click to toggle source
# File lib/lite/statistics/descriptive.rb, line 139
def population_kurtosis
  return if @collection.empty?
  return 0 if size == 1

  quarted_standard_deviation = population_standard_deviation**4
  sum_of_power(4) / (population_size * quarted_standard_deviation.to_f)
end
population_size() click to toggle source
# File lib/lite/statistics/descriptive.rb, line 133
def population_size
  @collection.size - 1
end
population_skewness() click to toggle source
# File lib/lite/statistics/descriptive.rb, line 149
def population_skewness
  return if @collection.empty?
  return 0 if size == 1

  cubed_standard_deviation = population_standard_deviation**3
  sum_of_power(3) / (population_size * cubed_standard_deviation.to_f)
end
population_standard_deviation() click to toggle source
# File lib/lite/statistics/descriptive.rb, line 159
def population_standard_deviation
  return if @collection.empty?

  Math.sqrt(population_variance)
end
population_standard_error() click to toggle source
# File lib/lite/statistics/descriptive.rb, line 167
def population_standard_error
  return if @collection.empty?

  population_standard_deviation / Math.sqrt(population_size)
end
population_summary() click to toggle source
# File lib/lite/statistics/descriptive.rb, line 175
def population_summary
  base_summary.merge(
    population_coefficient_of_variation: population_coefficient_of_variation,
    population_kurtosis: population_kurtosis,
    population_size: population_size,
    population_skewness: population_skewness,
    population_standard_deviation: population_standard_deviation,
    population_standard_error: population_standard_error,
    population_variance: population_variance,
    population_zscores: population_zscores
  )
end
population_variance() click to toggle source
# File lib/lite/statistics/descriptive.rb, line 188
def population_variance
  return if @collection.empty?

  sum_of_power(2) / population_size.to_f
end
population_zscores() click to toggle source
# File lib/lite/statistics/descriptive.rb, line 196
def population_zscores
  return if size < 2
  return Hash.new(0) if population_standard_deviation.zero?

  @collection.each_with_object({}) do |val, hash|
    hash[val] ||= (val - mean) / population_standard_deviation
  end
end
proportions() click to toggle source
# File lib/lite/statistics/descriptive.rb, line 216
def proportions
  return if @collection.empty?

  frequencies.transform_values { |val| val / size.to_f }
end
range() click to toggle source
# File lib/lite/statistics/descriptive.rb, line 224
def range
  return if @collection.empty?

  max - min
end
sample_coefficient_of_variation() click to toggle source
# File lib/lite/statistics/descriptive.rb, line 232
def sample_coefficient_of_variation
  return if @collection.empty?

  sample_standard_deviation / mean
end
Also aliased as: coefficient_of_variation
sample_kurtosis() click to toggle source
# File lib/lite/statistics/descriptive.rb, line 248
def sample_kurtosis
  return if @collection.empty?
  return 0 if size == 1

  quarted_standard_deviation = sample_standard_deviation**4
  sum_of_power(4) / (sample_size * quarted_standard_deviation.to_f)
end
Also aliased as: kurtosis
sample_size() click to toggle source
# File lib/lite/statistics/descriptive.rb, line 241
def sample_size
  @collection.size
end
Also aliased as: size
sample_skewness() click to toggle source
# File lib/lite/statistics/descriptive.rb, line 259
def sample_skewness
  return if @collection.empty?
  return 0 if size == 1

  cubed_standard_deviation = sample_standard_deviation**3
  sum_of_power(3) / (sample_size * cubed_standard_deviation.to_f)
end
Also aliased as: skewness
sample_standard_deviation() click to toggle source
# File lib/lite/statistics/descriptive.rb, line 270
def sample_standard_deviation
  return if @collection.empty?

  Math.sqrt(sample_variance)
end
Also aliased as: standard_deviation
sample_standard_error() click to toggle source
# File lib/lite/statistics/descriptive.rb, line 279
def sample_standard_error
  return if @collection.empty?

  sample_standard_deviation / Math.sqrt(sample_size)
end
Also aliased as: standard_error
sample_summary() click to toggle source
# File lib/lite/statistics/descriptive.rb, line 288
def sample_summary
  base_summary.merge(
    sample_coefficient_of_variation: sample_coefficient_of_variation,
    sample_kurtosis: sample_kurtosis,
    sample_size: sample_size,
    sample_skewness: sample_skewness,
    sample_standard_deviation: sample_standard_deviation,
    sample_standard_error: sample_standard_error,
    sample_variance: sample_variance,
    sample_zscores: sample_zscores
  )
end
Also aliased as: summary
sample_variance() click to toggle source
# File lib/lite/statistics/descriptive.rb, line 303
def sample_variance
  return if @collection.empty?

  sum_of_power(2) / sample_size.to_f
end
Also aliased as: variance
sample_zscores() click to toggle source
# File lib/lite/statistics/descriptive.rb, line 312
def sample_zscores
  return if size < 2
  return Hash.new(0) if sample_standard_deviation.zero?

  @collection.each_with_object({}) do |val, hash|
    hash[val] ||= (val - mean) / sample_standard_deviation
  end
end
Also aliased as: zscores
size()
Alias for: sample_size
skewness()
Alias for: sample_skewness
standard_deviation()
standard_error()
sum() click to toggle source
# File lib/lite/statistics/descriptive.rb, line 324
def sum
  @collection.sum
end
summary()
Alias for: sample_summary
value_from_percentile(percentile) click to toggle source
# File lib/lite/statistics/descriptive.rb, line 330
def value_from_percentile(percentile)
  return if @collection.empty?

  index = (percentile.to_f / 100 * size).ceil
  sort[index]
end
Also aliased as: percentile_rank
variance()
Alias for: sample_variance
zscores()
Alias for: sample_zscores

Private Instance Methods

base_summary() click to toggle source

rubocop:disable Metrics/MethodLength

# File lib/lite/statistics/descriptive.rb, line 343
def base_summary
  {
    frequencies: frequencies,
    max: max,
    mean: mean,
    median: median,
    midrange: midrange,
    min: min,
    mode: mode,
    proportions: proportions,
    quartile1: value_from_percentile(25),
    quartile2: value_from_percentile(50),
    quartile3: value_from_percentile(75),
    range: range,
    size: size,
    sum: sum
  }
end
sort() click to toggle source

rubocop:enable Metrics/MethodLength

# File lib/lite/statistics/descriptive.rb, line 363
def sort
  @collection.sort
end
sum_of_power(power) click to toggle source
# File lib/lite/statistics/descriptive.rb, line 369
def sum_of_power(power)
  @collection.inject(0) { |acc, val| acc + (val - mean)**power }
end