class Statistics::Distribution::Geometric

Attributes

always_success_allowed[RW]
probability_of_success[RW]

Public Class Methods

new(p, always_success: false) click to toggle source
# File lib/statistics/distribution/geometric.rb, line 6
def initialize(p, always_success: false)
  self.probability_of_success = p.to_r
  self.always_success_allowed = always_success
end

Public Instance Methods

cumulative_function(k) click to toggle source
# File lib/statistics/distribution/geometric.rb, line 25
def cumulative_function(k)
  k = k.to_i

  if always_success_allowed
    return if k < 0

    1.0 - ((1.0 - probability_of_success) ** (k + 1.0))
  else
    return if k <= 0

    1.0 - ((1.0 - probability_of_success) ** k)
  end
end
density_function(k) click to toggle source
# File lib/statistics/distribution/geometric.rb, line 11
def density_function(k)
  k = k.to_i

  if always_success_allowed
    return if k < 0

    ((1.0 - probability_of_success) ** k) * probability_of_success
  else
    return if k <= 0

    ((1.0 - probability_of_success) ** (k - 1.0)) * probability_of_success
  end
end
kurtosis() click to toggle source
# File lib/statistics/distribution/geometric.rb, line 71
def kurtosis
  6.0 + ((probability_of_success ** 2) / (1.0 - probability_of_success))
end
mean() click to toggle source
# File lib/statistics/distribution/geometric.rb, line 39
def mean
  if always_success_allowed
    (1.0 - probability_of_success) / probability_of_success
  else
    1.0 / probability_of_success
  end
end
median() click to toggle source
# File lib/statistics/distribution/geometric.rb, line 47
def median
  if always_success_allowed
    (-1.0 / Math.log2(1.0 - probability_of_success)).ceil - 1.0
  else
    (-1.0 / Math.log2(1.0 - probability_of_success)).ceil
  end
end
mode() click to toggle source
# File lib/statistics/distribution/geometric.rb, line 55
def mode
  if always_success_allowed
    0.0
  else
    1.0
  end
end
skewness() click to toggle source
# File lib/statistics/distribution/geometric.rb, line 67
def skewness
  (2.0 - probability_of_success) / Math.sqrt(1.0 - probability_of_success)
end
variance() click to toggle source
# File lib/statistics/distribution/geometric.rb, line 63
def variance
  (1.0 - probability_of_success) / (probability_of_success ** 2)
end