Class: Rubystats::MultivariateNormalDistribution
- Inherits:
-
ProbabilityDistribution
- Object
- ProbabilityDistribution
- Rubystats::MultivariateNormalDistribution
- Includes:
- MultivariateDistribution, NumericalConstants
- Defined in:
- lib/rubystats/multivariate_normal_distribution.rb
Constant Summary
Constants included from NumericalConstants
NumericalConstants::EPS, NumericalConstants::GAMMA, NumericalConstants::GAMMA_X_MAX_VALUE, NumericalConstants::GOLDEN_RATIO, NumericalConstants::LOG_GAMMA_X_MAX_VALUE, NumericalConstants::MAX_FLOAT, NumericalConstants::MAX_ITERATIONS, NumericalConstants::MAX_VALUE, NumericalConstants::PRECISION, NumericalConstants::SQRT2, NumericalConstants::SQRT2PI, NumericalConstants::TWO_PI, NumericalConstants::XMININ
Instance Attribute Summary
Attributes included from SpecialMath
#log_beta_cache_p, #log_beta_cache_q, #log_beta_cache_res, #log_gamma_cache_res, #log_gamma_cache_x
Instance Method Summary collapse
-
#initialize(mu = [0.0,0.0], sigma = [[1.0,0.0],[0.0,1.0]]) ⇒ MultivariateNormalDistribution
constructor
A new instance of MultivariateNormalDistribution.
Methods included from MultivariateDistribution
Methods inherited from ProbabilityDistribution
#cdf, #check_range, #find_root, #get_factorial, #icdf, #mean, #pdf, #rng, #variance
Methods included from ExtraMath
Methods included from SpecialMath
#beta, #beta_fraction, #complementary_error, #error, #gamma, #gamma_fraction, #gamma_series_expansion, #incomplete_beta, #incomplete_gamma, #log_beta, #log_gamma, #orig_gamma
Constructor Details
#initialize(mu = [0.0,0.0], sigma = [[1.0,0.0],[0.0,1.0]]) ⇒ MultivariateNormalDistribution
Returns a new instance of MultivariateNormalDistribution.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/rubystats/multivariate_normal_distribution.rb', line 16 def initialize(mu=[0.0,0.0],sigma=[[1.0,0.0],[0.0,1.0]]) raise "dimensions of mu vector and sigma matrix doesn't match" if mu.size != sigma.size sigma.each{|row| raise "row dim of sigma does not match mu vector" if row.size != mu.size } mu_f = mu.collect{|x| x.to_f } sigma_f = sigma.collect{|row| row.collect{|x| x.to_f}} @mu = Vector.elements(mu_f) @sigma = Matrix.rows(sigma_f) u, d, u_inv = @sigma.eigensystem @sigma_inv = u * (1/d) * u_inv @a = u * (d)**(0.5) @pdf_factor = 1.0 / Math.sqrt((TWO_PI * @sigma).determinant.to_f) @stdnorm = Rubystats::NormalDistribution.new(0.0,1.0) end |