skab 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/skab/models.rb +1 -0
- data/lib/skab/models/base.rb +25 -0
- data/lib/skab/models/binomial.rb +14 -6
- data/lib/skab/models/poisson.rb +12 -6
- data/lib/skab/output/summary.rb +2 -12
- metadata +20 -3
    
        data/lib/skab/models.rb
    CHANGED
    
    
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            module Skab
         | 
| 2 | 
            +
              module Models
         | 
| 3 | 
            +
                class Base
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                  private
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  def factorial(n)
         | 
| 8 | 
            +
                    @_factorials ||= {
         | 
| 9 | 
            +
                      0 => 1,
         | 
| 10 | 
            +
                      1 => 1
         | 
| 11 | 
            +
                    }
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    raise "Illegal factorial, expecting n > 0" if n < 0
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    last = @_factorials.keys.last
         | 
| 16 | 
            +
                    (last..n).each do |i|
         | 
| 17 | 
            +
                      @_factorials[i] = i * @_factorials[i - 1]
         | 
| 18 | 
            +
                    end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                    return @_factorials[n]
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
    
        data/lib/skab/models/binomial.rb
    CHANGED
    
    | @@ -27,7 +27,9 @@ module Skab | |
| 27 27 | 
             
                    i = 0.0
         | 
| 28 28 | 
             
                    while i <= 1000
         | 
| 29 29 | 
             
                      @distribution[i][1] /= sums[1]
         | 
| 30 | 
            +
                      @distribution[i][1] *= 1000
         | 
| 30 31 | 
             
                      @distribution[i][2] /= sums[2]
         | 
| 32 | 
            +
                      @distribution[i][2] *= 1000
         | 
| 31 33 | 
             
                      i += 1
         | 
| 32 34 | 
             
                    end
         | 
| 33 35 | 
             
                    @distribution
         | 
| @@ -40,7 +42,7 @@ module Skab | |
| 40 42 | 
             
                    while i <= 1000
         | 
| 41 43 | 
             
                      j = 0.0
         | 
| 42 44 | 
             
                      while j <= 1000
         | 
| 43 | 
            -
                        @differential[(j - i) / 1000] += distribution[j][2] * distribution[i][1]
         | 
| 45 | 
            +
                        @differential[(j - i) / 1000] += distribution[j][2] * distribution[i][1] / 1000
         | 
| 44 46 | 
             
                        j += 1
         | 
| 45 47 | 
             
                      end
         | 
| 46 48 | 
             
                      i += 1
         | 
| @@ -48,6 +50,17 @@ module Skab | |
| 48 50 | 
             
                    @differential
         | 
| 49 51 | 
             
                  end
         | 
| 50 52 |  | 
| 53 | 
            +
                  def percentile(p)
         | 
| 54 | 
            +
                    sum = 0.0
         | 
| 55 | 
            +
                    Hash[differential.sort].each do |k, v|
         | 
| 56 | 
            +
                      sum += v
         | 
| 57 | 
            +
                      if sum >= p * 1000
         | 
| 58 | 
            +
                        return k
         | 
| 59 | 
            +
                      end
         | 
| 60 | 
            +
                    end
         | 
| 61 | 
            +
                    percentile
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
             | 
| 51 64 | 
             
                  def self.help
         | 
| 52 65 | 
             
                    <<-HELP
         | 
| 53 66 | 
             
            skab [output] binomial [trials_a] [successes_a] [trials_b] [successes_b]
         | 
| @@ -70,11 +83,6 @@ skab [output] binomial [trials_a] [successes_a] [trials_b] [successes_b] | |
| 70 83 | 
             
                  def binomial_coef(n, k)
         | 
| 71 84 | 
             
                    factorial(n) / (factorial(k) * factorial(n - k))
         | 
| 72 85 | 
             
                  end
         | 
| 73 | 
            -
             | 
| 74 | 
            -
                  def factorial(n)
         | 
| 75 | 
            -
                    return @fact[n] if @fact[n]
         | 
| 76 | 
            -
                    @fact[n] = (n > 1) ? n * factorial(n - 1) : 1
         | 
| 77 | 
            -
                  end
         | 
| 78 86 | 
             
                end
         | 
| 79 87 | 
             
              end
         | 
| 80 88 | 
             
            end
         | 
    
        data/lib/skab/models/poisson.rb
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            module Skab
         | 
| 2 2 | 
             
              module Models
         | 
| 3 | 
            -
                class Poisson
         | 
| 3 | 
            +
                class Poisson < Base
         | 
| 4 4 |  | 
| 5 5 | 
             
                  def initialize(args)
         | 
| 6 6 | 
             
                    @a = args.shift.to_i
         | 
| @@ -31,6 +31,17 @@ module Skab | |
| 31 31 | 
             
                    @differential
         | 
| 32 32 | 
             
                  end
         | 
| 33 33 |  | 
| 34 | 
            +
                  def percentile(p)
         | 
| 35 | 
            +
                    sum = 0.0
         | 
| 36 | 
            +
                    Hash[differential.sort].each do |k, v|
         | 
| 37 | 
            +
                      sum += v
         | 
| 38 | 
            +
                      if sum >= p
         | 
| 39 | 
            +
                        return k
         | 
| 40 | 
            +
                      end
         | 
| 41 | 
            +
                    end
         | 
| 42 | 
            +
                    percentile
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
             | 
| 34 45 | 
             
                  def self.help
         | 
| 35 46 | 
             
                    <<-USAGE
         | 
| 36 47 | 
             
            skab [output] poisson [a] [b]
         | 
| @@ -54,11 +65,6 @@ skab [output] poisson [a] [b] | |
| 54 65 | 
             
                  def poisson(k, delta)
         | 
| 55 66 | 
             
                    ((delta ** k) * Math.exp(-delta)) / factorial(k)
         | 
| 56 67 | 
             
                  end
         | 
| 57 | 
            -
             | 
| 58 | 
            -
                  def factorial(n)
         | 
| 59 | 
            -
                    return @fact[n] if @fact[n]
         | 
| 60 | 
            -
                    @fact[n] = (n > 1) ? n * fact(n - 1) : 1
         | 
| 61 | 
            -
                  end
         | 
| 62 68 | 
             
                end
         | 
| 63 69 | 
             
              end
         | 
| 64 70 | 
             
            end
         | 
    
        data/lib/skab/output/summary.rb
    CHANGED
    
    | @@ -6,18 +6,8 @@ module Skab | |
| 6 6 | 
             
                  end
         | 
| 7 7 |  | 
| 8 8 | 
             
                  def output(model)
         | 
| 9 | 
            -
                     | 
| 10 | 
            -
                     | 
| 11 | 
            -
                    max = 0
         | 
| 12 | 
            -
                    Hash[model.differential.sort].each do |k, v|
         | 
| 13 | 
            -
                      sum += v
         | 
| 14 | 
            -
                      if min == 0 || sum <= 0.05
         | 
| 15 | 
            -
                        min = k
         | 
| 16 | 
            -
                      end
         | 
| 17 | 
            -
                      if max == 0 && sum >= 0.95
         | 
| 18 | 
            -
                        max = k
         | 
| 19 | 
            -
                      end
         | 
| 20 | 
            -
                    end
         | 
| 9 | 
            +
                    min = model.percentile(0.05)
         | 
| 10 | 
            +
                    max = model.percentile(0.95)
         | 
| 21 11 |  | 
| 22 12 | 
             
                    @out.puts "The difference is located between #{min} and #{max} (90% confidence)"
         | 
| 23 13 | 
             
                  end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: skab
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.2.0
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,8 +9,24 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2013-05- | 
| 13 | 
            -
            dependencies: | 
| 12 | 
            +
            date: 2013-05-31 00:00:00.000000000 Z
         | 
| 13 | 
            +
            dependencies:
         | 
| 14 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 15 | 
            +
              name: rspec
         | 
| 16 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 17 | 
            +
                none: false
         | 
| 18 | 
            +
                requirements:
         | 
| 19 | 
            +
                - - ! '>='
         | 
| 20 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 21 | 
            +
                    version: '0'
         | 
| 22 | 
            +
              type: :development
         | 
| 23 | 
            +
              prerelease: false
         | 
| 24 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 25 | 
            +
                none: false
         | 
| 26 | 
            +
                requirements:
         | 
| 27 | 
            +
                - - ! '>='
         | 
| 28 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 29 | 
            +
                    version: '0'
         | 
| 14 30 | 
             
            description: 
         | 
| 15 31 | 
             
            email: vivien@songkick.com
         | 
| 16 32 | 
             
            executables:
         | 
| @@ -30,6 +46,7 @@ files: | |
| 30 46 | 
             
            - lib/skab/output.rb
         | 
| 31 47 | 
             
            - lib/skab/models/binomial.rb
         | 
| 32 48 | 
             
            - lib/skab/models/poisson.rb
         | 
| 49 | 
            +
            - lib/skab/models/base.rb
         | 
| 33 50 | 
             
            - lib/skab/models.rb
         | 
| 34 51 | 
             
            homepage: http://github.com/songkick/skab
         | 
| 35 52 | 
             
            licenses: []
         |