module Laboratory::Calculations::ConfidenceLevel
Public Class Methods
calculate(n1:, p1:, n2:, p2:)
click to toggle source
# File lib/laboratory/calculations/confidence_level.rb, line 4 def self.calculate(n1:, p1:, n2:, p2:) # rubocop:disable Naming/MethodParameterName cvr1 = p1.fdiv(n1) cvr2 = p2.fdiv(n2) z = ZScore.calculate( n1: n1, p1: cvr1, n2: n2, p2: cvr2 ) percentage_from_z_score(-z).round(4) end
percentage_from_z_score(z)
click to toggle source
# File lib/laboratory/calculations/confidence_level.rb, line 18 def self.percentage_from_z_score(z) # rubocop:disable Naming/MethodParameterName, Metrics/AbcSize, Metrics/MethodLength return 0 if z < -6.5 return 1 if z > 6.5 factk = 1 sum = 0 term = 1 k = 0 const = 0.3989422804 loop_stop = Math.exp(-23) while term.abs > loop_stop do # rubocop:disable Style/WhileUntilDo term = const * ((-1)**k) * (z**k) / (2 * k + 1) / (2**k) * (z**(k + 1)) / factk # rubocop:disable Layout/LineLength sum += term k += 1 factk *= k end sum += 0.5 1 - sum end