Sha256: 73ec9dc66b61078cd9e58287ccbbbc132cf475450bc35d251b087dad81f4a6b3

Contents?: true

Size: 1.73 KB

Versions: 4

Compression:

Stored size: 1.73 KB

Contents

module Statistics
  module Distribution
    class Geometric
      attr_accessor :probability_of_success, :always_success_allowed

      def initialize(p, always_success: false)
        self.probability_of_success = p.to_f
        self.always_success_allowed = always_success
      end

      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

      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

      def mean
        if always_success_allowed
          (1.0 - probability_of_success) / probability_of_success
        else
          1.0 / probability_of_success
        end
      end

      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

      def mode
        if always_success_allowed
          0.0
        else
          1.0
        end
      end

      def variance
        (1.0 - probability_of_success) / (probability_of_success ** 2)
      end

      def skewness
        (2.0 - probability_of_success) / Math.sqrt(1.0 - probability_of_success)
      end

      def kurtosis
        6.0 + ((probability_of_success ** 2) / (1.0 - probability_of_success))
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
ruby-statistics-2.1.2 lib/statistics/distribution/geometric.rb
ruby-statistics-2.1.1 lib/statistics/distribution/geometric.rb
ruby-statistics-2.1.0 lib/statistics/distribution/geometric.rb
ruby-statistics-2.0.5 lib/statistics/distribution/geometric.rb