Class: ERV::ExpNormDistribution

Inherits:
Distribution show all
Defined in:
lib/erv/expnorm_distribution.rb

Constant Summary

Constants inherited from Distribution

Distribution::DEFAULT_SEED

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ ExpNormDistribution

Returns a new instance of ExpNormDistribution.

Raises:

  • (ArgumentError)


5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/erv/expnorm_distribution.rb', line 5

def initialize(opts = {})
  super(opts)

  raise ArgumentError, 'mu is required'     unless opts[:mu]
  raise ArgumentError, 'sigma is required'  unless opts[:sigma]
  raise ArgumentError, 'lambda is required' unless opts[:lambda]
  raise ArgumentError, 'sigma must be > 0'  if opts[:sigma].to_f <= 0
  raise ArgumentError, 'lambda must be > 0' if opts[:lambda].to_f <= 0

  @mu     = opts[:mu].to_f
  @sigma  = opts[:sigma].to_f
  @lambda = opts[:lambda].to_f # rate = 1/mean_exponential

  @gaussian = GaussianDistribution.new(mean: @mu, sd: @sigma)
  @exponential = ExponentialDistribution.new(rate: @lambda)
end

Instance Method Details

#kObject



36
37
38
# File 'lib/erv/expnorm_distribution.rb', line 36

def k
  @lambda / @sigma
end

#meanObject

Theoretical Mean E: μ + 1/λ



27
28
29
# File 'lib/erv/expnorm_distribution.rb', line 27

def mean
  @mu + 1.0 / @lambda
end

#sampleObject



22
23
24
# File 'lib/erv/expnorm_distribution.rb', line 22

def sample
  @gaussian.sample + @exponential.sample
end

#varianceObject

Theoretical Variance: σ² + 1/λ²



32
33
34
# File 'lib/erv/expnorm_distribution.rb', line 32

def variance
  @sigma**2 + 1.0 / (@lambda**2)
end