Class: Binomial::Calculator

Inherits:
Object
  • Object
show all
Defined in:
lib/binomial/calculator.rb

Overview

Params:

- trials:         Total number of trials conducted
- probability:    The probability of one success
- target:         The desired amount of successes

Direct Known Subclasses

CumulativeCalculator

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params = {}) ⇒ Calculator

Returns a new instance of Calculator.



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/binomial/calculator.rb', line 10

def initialize(params = {})
  @trials = params[:trials]
  @probability = params[:probability]
  @target = params[:target]

  check_positive(:@trials)
  check_positive(:@target)
  check_positive(:@probability)

  @probability <= 1  or raise "Error: probability[#{@probability}] must be <= 1"
  @trials >= @target or raise "Error: target[#{@target}] must be < trials[#{@trials}]"
end

Instance Attribute Details

#probabilityObject

Returns the value of attribute probability.



8
9
10
# File 'lib/binomial/calculator.rb', line 8

def probability
  @probability
end

#targetObject

Returns the value of attribute target.



8
9
10
# File 'lib/binomial/calculator.rb', line 8

def target
  @target
end

#trialsObject

Returns the value of attribute trials.



8
9
10
# File 'lib/binomial/calculator.rb', line 8

def trials
  @trials
end

Instance Method Details

#calculateObject

Calculates the result



41
42
43
44
45
# File 'lib/binomial/calculator.rb', line 41

def calculate
  @trials.choose(@target) *
  (@probability ** @target) *
  ((1 - @probability) ** (@trials - @target))
end

#check_positive(inst_var) ⇒ Object

param: name of instance variable WITH leading @



24
25
26
27
28
29
# File 'lib/binomial/calculator.rb', line 24

def check_positive(inst_var)
  value = instance_variable_get(inst_var)
  var_name = inst_var.to_s.delete('@')
  value > 0 or
    raise "Error: '#{var_name}' must be > 0, but was: #{value}"
end

#equationObject

A representation of the equation performed



36
37
38
# File 'lib/binomial/calculator.rb', line 36

def equation
  "P(X=#{@target}) = #{@trials}C#{@target} * #{@probability}^#{@target} * #{1 - @probability}^#{@trials - @target} = #{calculate}"
end

#modelObject



31
32
33
# File 'lib/binomial/calculator.rb', line 31

def model
  "X~B(#{@trials}, #{@probability})"
end