class ABAnalyzer::ABTest
Public Class Methods
new(values)
click to toggle source
values should be hash of hashes, with top level hash the group names: { :groupa => { :yes => 20, :no => 10 }, :groupb => { :yes => 18, :no => 8 } }
# File lib/abanalyzer/abtest.rb, line 7 def initialize(values) @values = Matrix.new values end
Public Instance Methods
chisquare_p()
click to toggle source
# File lib/abanalyzer/abtest.rb, line 35 def chisquare_p 1 - Statistics2.chi2dist(df, chisquare_score) end
chisquare_score()
click to toggle source
# File lib/abanalyzer/abtest.rb, line 15 def chisquare_score sum = 0 @values.each_cell do |colname, rowname, value| ex = expected(colname, rowname) test_sufficient_data(colname, rowname, ex, value) sum += ((value - ex)**2) / ex end sum end
different?(sig = 0.05)
click to toggle source
# File lib/abanalyzer/abtest.rb, line 11 def different?(sig = 0.05) gtest_p < sig end
gtest_p()
click to toggle source
# File lib/abanalyzer/abtest.rb, line 39 def gtest_p 1 - Statistics2.chi2dist(df, 2 * gtest_score) end
gtest_score()
click to toggle source
# File lib/abanalyzer/abtest.rb, line 25 def gtest_score sum = 0 @values.each_cell do |colname, rowname, value| ex = expected(colname, rowname) test_sufficient_data(colname, rowname, ex, value) sum += value * Math.log(value / ex) end sum end
Private Instance Methods
df()
click to toggle source
# File lib/abanalyzer/abtest.rb, line 54 def df (@values.columns.length - 1) * (@values.rows.length - 1) end
expected(colname, rowname)
click to toggle source
# File lib/abanalyzer/abtest.rb, line 50 def expected(colname, rowname) (@values.row_sum(rowname) * @values.column_sum(colname)).to_f / @values.total_sum.to_f end
test_sufficient_data(colname, rowname, expected, value)
click to toggle source
# File lib/abanalyzer/abtest.rb, line 45 def test_sufficient_data(colname, rowname, expected, value) msg = "Insufficient data size for column #{colname} row #{rowname}. Expected value must be >= 5, and value must be > 0." raise InsufficientDataError, msg if (expected < 5) || (value <= 0) end