Class: Vangrail::BetaBinomialPrior

Inherits:
Object
  • Object
show all
Defined in:
lib/vangrail/risk_scenario.rb

Overview

Immutable beta-binomial prevalence supplied by a deployment or evaluation.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(alpha:, beta:) ⇒ BetaBinomialPrior

Returns a new instance of BetaBinomialPrior.



10
11
12
13
14
# File 'lib/vangrail/risk_scenario.rb', line 10

def initialize(alpha:, beta:)
  @alpha = positive(alpha, 'alpha')
  @beta = positive(beta, 'beta')
  freeze
end

Instance Attribute Details

#alphaObject (readonly)

Returns the value of attribute alpha.



8
9
10
# File 'lib/vangrail/risk_scenario.rb', line 8

def alpha
  @alpha
end

#betaObject (readonly)

Returns the value of attribute beta.



8
9
10
# File 'lib/vangrail/risk_scenario.rb', line 8

def beta
  @beta
end

Instance Method Details

#adjudicate(label) ⇒ Object



26
27
28
29
30
31
32
# File 'lib/vangrail/risk_scenario.rb', line 26

def adjudicate(label)
  case label.to_sym
  when :attack then self.class.new(alpha: alpha + 1, beta: beta)
  when :benign then self.class.new(alpha: alpha, beta: beta + 1)
  else raise ArgumentError, "unknown adjudicated label #{label.inspect}"
  end
end

#interval(confidence: 0.95) ⇒ Object



20
21
22
23
24
# File 'lib/vangrail/risk_scenario.rb', line 20

def interval(confidence: 0.95)
  probability(confidence, 'confidence')
  tail = (1 - confidence) / 2.0
  [Beta.quantile(tail, alpha, beta), Beta.quantile(1 - tail, alpha, beta)].freeze
end

#meanObject



16
17
18
# File 'lib/vangrail/risk_scenario.rb', line 16

def mean
  alpha.fdiv(alpha + beta)
end

#to_hObject



34
35
36
# File 'lib/vangrail/risk_scenario.rb', line 34

def to_h
  { 'alpha' => alpha, 'beta' => beta, 'mean' => mean }.freeze
end