class Statistics::Distribution::NegativeBinomial
Attributes
number_of_failures[RW]
probability_per_trial[RW]
Public Class Methods
new(r, p)
click to toggle source
# File lib/statistics/distribution/negative_binomial.rb, line 6 def initialize(r, p) self.number_of_failures = r.to_i self.probability_per_trial = p end
Public Instance Methods
cumulative_function(k)
click to toggle source
# File lib/statistics/distribution/negative_binomial.rb, line 20 def cumulative_function(k) return if k < 0 || k > number_of_failures k = k.to_i 1.0 - Math.incomplete_beta_function(probability_per_trial, k + 1, number_of_failures) end
mean()
click to toggle source
# File lib/statistics/distribution/negative_binomial.rb, line 27 def mean (probability_per_trial * number_of_failures)/(1 - probability_per_trial).to_r end
mode()
click to toggle source
# File lib/statistics/distribution/negative_binomial.rb, line 39 def mode if number_of_failures > 1 up = probability_per_trial * (number_of_failures - 1) down = (1 - probability_per_trial).to_r (up/down).floor elsif number_of_failures <= 1 0.0 end end
probability_mass_function(k)
click to toggle source
# File lib/statistics/distribution/negative_binomial.rb, line 11 def probability_mass_function(k) return if number_of_failures < 0 || k < 0 || k > number_of_failures left = Math.combination(k + number_of_failures - 1, k) right = ((1 - probability_per_trial) ** number_of_failures) * (probability_per_trial ** k) left * right end
skewness()
click to toggle source
# File lib/statistics/distribution/negative_binomial.rb, line 35 def skewness (1 + probability_per_trial).to_r / Math.sqrt(probability_per_trial * number_of_failures) end
variance()
click to toggle source
# File lib/statistics/distribution/negative_binomial.rb, line 31 def variance (probability_per_trial * number_of_failures)/((1 - probability_per_trial) ** 2).to_r end