Module: MathStatisticsArrayMethods::ArrayStatistics

Included in:
Array
Defined in:
lib/math_statistics_array_methods/array_statistics.rb

Overview

Module to extend the array class

Instance Method Summary collapse

Instance Method Details

#combination_quantity(size_of_combination = self.length) ⇒ Object

Give you the amount of possible combination for a given draw size



87
88
89
# File 'lib/math_statistics_array_methods/array_statistics.rb', line 87

def combination_quantity(size_of_combination = self.length)
  return length.factorial / ((length - size_of_combination).factorial * size_of_combination.factorial)
end

#frequenciesObject

Hash of the frequency per values of the array.



51
52
53
54
55
56
57
58
59
# File 'lib/math_statistics_array_methods/array_statistics.rb', line 51

def frequencies
  frequency = Hash.new
  self.each do |n|
    frequency[n] = 0 unless frequency.include? n
    frequency[n] += 1
  end

  return frequency
end

#medianObject

Measure of center, not affected by outliers



20
21
22
23
24
25
26
27
28
29
30
# File 'lib/math_statistics_array_methods/array_statistics.rb', line 20

def median
  sorted = self.sort

  middle_index = (length - 1) / 2
  if length % 2 == 0
    second_middle = middle_index + 1
    return [ sorted[middle_index],  sorted[second_middle] ].sample_average
  else
    return sorted[middle_index]
  end
end

#modeObject

Most frequent value



64
65
66
# File 'lib/math_statistics_array_methods/array_statistics.rb', line 64

def mode
  return frequencies.group_by { |_,value| value }.max_by { |key,_| key }.last.map{|k, v| k}
end

#permuation_repetition_quantity(size_of_permutation = self.length) ⇒ Object

Give you the amount of permutation available for a given draw size if you can pick twice the same item



94
95
96
# File 'lib/math_statistics_array_methods/array_statistics.rb', line 94

def permuation_repetition_quantity(size_of_permutation = self.length)
  return length ** size_of_permutation
end

#permutation_quantity(size_of_permutation = self.length) ⇒ Object

Give you the amount of permutation available for a given draw size



80
81
82
# File 'lib/math_statistics_array_methods/array_statistics.rb', line 80

def permutation_quantity(size_of_permutation = self.length)
  return length.factorial / (length - size_of_permutation).factorial
end

#probability_of(a) ⇒ Object

return the probability of a number to be picked in this set.



71
72
73
74
75
# File 'lib/math_statistics_array_methods/array_statistics.rb', line 71

def probability_of(a)
  f = frequencies
  positive_outcome = f.include?(a) ? f[a] : 0
  return positive_outcome / length.to_f
end

#rangeObject

max value minus min value



101
102
103
# File 'lib/math_statistics_array_methods/array_statistics.rb', line 101

def range
  return self.max - self.min
end

#sample_averageObject

Measure of center, affected by outliers



11
12
13
14
15
# File 'lib/math_statistics_array_methods/array_statistics.rb', line 11

def sample_average
  return 0 if self.empty?
  total = self.inject(0){|acc, n| acc += n}
  return total.to_f / self.length.to_f
end

#sample_standard_deviationObject

Measure of variation, “average” distance from the mean.



44
45
46
# File 'lib/math_statistics_array_methods/array_statistics.rb', line 44

def sample_standard_deviation
  return Math.sqrt(variance)
end

#varianceObject

variance of this array



35
36
37
38
39
# File 'lib/math_statistics_array_methods/array_statistics.rb', line 35

def variance
  avg = self.sample_average
  total = self.inject(0) {|acc, n| acc += (n - avg)**2 }
  return total / length.to_f
end