class TrailGuide::Calculators::Score
Public Class Methods
all_probabilities()
click to toggle source
# File lib/trail_guide/calculators/score.rb, line 14 def self.all_probabilities @@all_probabilities ||= (0.0..100.0).step(0.1).map { |pct| [z_score_probabilities.find { |x,a| a >= pct }.first, pct] }.reverse end
significant_probabilities()
click to toggle source
# File lib/trail_guide/calculators/score.rb, line 18 def self.significant_probabilities @@significant_probabilities ||= TrailGuide::Calculators::SIGNIFICANT_PROBABILITIES.map { |pct| [z_score_probabilities.find { |x,a| a >= pct }.first, pct] }.reverse end
significant_probability(score)
click to toggle source
# File lib/trail_guide/calculators/score.rb, line 28 def self.significant_probability(score) score = score.abs probability = significant_probabilities.find { |z,p| score >= z } probability ? probability.last : 0 end
z_score_probabilities()
click to toggle source
array of [z-score, percentage]
# File lib/trail_guide/calculators/score.rb, line 5 def self.z_score_probabilities @@z_score_probabilities ||= begin avg = 50.0 norm_dist = [] (0.0..3.1).step(0.01) { |x| norm_dist << [x, avg += 1 / Math.sqrt(2 * Math::PI) * Math::E ** (-x ** 2 / 2)] } norm_dist end end
z_score_probability(score)
click to toggle source
# File lib/trail_guide/calculators/score.rb, line 22 def self.z_score_probability(score) score = score.abs probability = all_probabilities.find { |z,p| score >= z } probability ? probability.last : 0 end
Public Instance Methods
calculate!()
click to toggle source
# File lib/trail_guide/calculators/score.rb, line 34 def calculate! pc = base.measure nc = base.superset variants_with_conversion.each do |var| p = var.measure n = var.superset z_score = (p - pc) / ((p * (1-p)/n) + (pc * (1-pc)/nc)).abs ** 0.5 var.z_score = z_score var.probability = self.class.z_score_probability(z_score) var.probability = -(var.probability) if var.z_score.negative? var.significance = self.class.significant_probability(z_score) var.significance = -(var.significance) if var.z_score.negative? #if worst && var.measure > worst.measure # var.difference = (var.measure - worst.measure) / worst.measure * 100 #end if base if var.measure > base.measure var.difference = (var.measure - base.measure) / base.measure * 100 elsif base.measure > var.measure var.difference = -((base.measure - var.measure) / base.measure * 100) else var.difference = 0 end end end @choice = best && best.probability >= probability ? best : nil self end