23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/field_test/calculations.rb', line 23
def self.prob_c_beats_a_and_b(alpha_a, beta_a, alpha_b, beta_b, alpha_c, beta_c)
total = 0.0
logbeta_ac_bc = Math.logbeta(alpha_c, beta_c)
abc = beta_a + beta_b + beta_c
log_bb_j = []
logbeta_j_bb = []
logbeta_ac_i_j = []
0.upto(alpha_b - 1) do |j|
log_bb_j[j] = Math.log(beta_b + j)
logbeta_j_bb[j] = Math.logbeta(1 + j, beta_b)
0.upto(alpha_a - 1) do |i|
logbeta_ac_i_j[i + j] ||= Math.logbeta(alpha_c + i + j, abc)
end
end
0.upto(alpha_a - 1) do |i|
log_ba_i = Math.log(beta_a + i)
logbeta_i_ba = Math.logbeta(1 + i, beta_a)
0.upto(alpha_b - 1) do |j|
total += Math.exp(logbeta_ac_i_j[i + j] -
log_ba_i - log_bb_j[j] -
logbeta_i_ba - logbeta_j_bb[j] -
logbeta_ac_bc)
end
end
1 - prob_b_beats_a(alpha_c, beta_c, alpha_a, beta_a) -
prob_b_beats_a(alpha_c, beta_c, alpha_b, beta_b) + total
end
|