Class: RailsDataExplorer::Statistics::RngCategory

Inherits:
Object
  • Object
show all
Defined in:
lib/rails-data-explorer/statistics/rng_category.rb

Instance Method Summary collapse

Constructor Details

#initialize(categories, category_probabilities = nil, rng = lambda { Kernel.rand }) ⇒ RngCategory

Returns a new instance of RngCategory.



5
6
7
8
9
10
# File 'lib/rails-data-explorer/statistics/rng_category.rb', line 5

def initialize(categories, category_probabilities = nil, rng = lambda { Kernel.rand })
  @categories, @category_probabilities, @rng = categories, category_probabilities, rng
  @category_probabilities ||= @categories.map { |e| @rng.call }
  @category_probabilities = normalize_category_probabilities
  @category_order = compute_category_order
end

Instance Method Details

#compute_category_orderObject



25
26
27
28
29
30
31
32
33
# File 'lib/rails-data-explorer/statistics/rng_category.rb', line 25

def compute_category_order
  category_order = []
  running_sum = 0
  @categories.each_with_index { |e, idx|
    running_sum += @category_probabilities[idx]
    category_order << { category: e, threshold: running_sum }
  }
  category_order
end

#normalize_category_probabilitiesObject



20
21
22
23
# File 'lib/rails-data-explorer/statistics/rng_category.rb', line 20

def normalize_category_probabilities
  total = @category_probabilities.inject(0) { |m,e| m += e }
  @category_probabilities.map { |e| e / total.to_f }
end

#randObject



12
13
14
15
16
17
18
# File 'lib/rails-data-explorer/statistics/rng_category.rb', line 12

def rand
  r_v = @rng.call
  rnd = @category_order.detect { |e|
    e[:threshold] >= r_v
  }
  rnd[:category]
end