Class: ERV::ExpNormDistribution
- Inherits:
-
Distribution
- Object
- Distribution
- ERV::ExpNormDistribution
- Defined in:
- lib/erv/expnorm_distribution.rb
Constant Summary
Constants inherited from Distribution
Instance Method Summary collapse
-
#initialize(opts = {}) ⇒ ExpNormDistribution
constructor
A new instance of ExpNormDistribution.
- #k ⇒ Object
-
#mean ⇒ Object
Theoretical Mean E: μ + 1/λ.
- #sample ⇒ Object
-
#variance ⇒ Object
Theoretical Variance: σ² + 1/λ².
Constructor Details
#initialize(opts = {}) ⇒ ExpNormDistribution
Returns a new instance of ExpNormDistribution.
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
#k ⇒ Object
36 37 38 |
# File 'lib/erv/expnorm_distribution.rb', line 36 def k @lambda / @sigma end |
#mean ⇒ Object
Theoretical Mean E: μ + 1/λ
27 28 29 |
# File 'lib/erv/expnorm_distribution.rb', line 27 def mean @mu + 1.0 / @lambda end |
#sample ⇒ Object
22 23 24 |
# File 'lib/erv/expnorm_distribution.rb', line 22 def sample @gaussian.sample + @exponential.sample end |
#variance ⇒ Object
Theoretical Variance: σ² + 1/λ²
32 33 34 |
# File 'lib/erv/expnorm_distribution.rb', line 32 def variance @sigma**2 + 1.0 / (@lambda**2) end |