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
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
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
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_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
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
sum()
click to toggle source
# File lib/lite/statistics/descriptive.rb, line 324 def sum @collection.sum end
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
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