Sha256: 58517b8a1d3e1cb13258ee3997907bb50b888746fbdd8b2a22eb03ec4d0559b7

Contents?: true

Size: 979 Bytes

Versions: 3

Compression:

Stored size: 979 Bytes

Contents

module Statistics
  module Distribution
    class Weibull
      attr_accessor :shape, :scale # k and lambda

      def initialize(k, lamb)
        self.shape = k.to_f
        self.scale = lamb.to_f
      end

      def cumulative_function(random_value)
        return 0 if random_value < 0

        1 - Math.exp(-((random_value/scale) ** shape))
      end

      def density_function(value)
        return if shape <= 0 || scale <= 0
        return 0 if value < 0

        left = shape/scale
        center = (value/scale)**(shape - 1)
        right = Math.exp(-((value/scale)**shape))

        left * center * right
      end

      def mean
        scale * Math.gamma(1 + (1/shape))
      end

      def mode
        return 0 if shape <= 1

        scale * (((shape - 1)/shape) ** (1/shape))
      end

      def variance
        left = Math.gamma(1 + (2/shape))
        right = Math.gamma(1 + (1/shape)) ** 2

        (scale ** 2) * (left - right)
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ruby-statistics-1.0.2 lib/statistics/distribution/weibull.rb
ruby-statistics-1.0.0 lib/statistics/distribution/weibull.rb
ruby-statistics-0.5.0 lib/statistics/distribution/weibull.rb