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