/* A/B test simple in Picat. Simple A/B test. Cf my Gamble model gamble_ab_test_simple.rkt This program was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import ppl_distributions, ppl_utils. import util. main => go. /* var : rate A Probabilities (truncated): 0.325794485218949: 0.0060240963855422 0.254575746612066: 0.0060240963855422 0.249143484957635: 0.0060240963855422 0.240038150669684: 0.0060240963855422 ......... 0.010887663009898: 0.0060240963855422 0.007450712348583: 0.0060240963855422 0.006648806052436: 0.0060240963855422 0.001519299939476: 0.0060240963855422 mean = 0.0971197 var : rate B Probabilities (truncated): 0.246583752581517: 0.0060240963855422 0.190796939187728: 0.0060240963855422 0.182072401584263: 0.0060240963855422 0.179440631356682: 0.0060240963855422 ......... 0.007763800668381: 0.0060240963855422 0.006732126104081: 0.0060240963855422 0.005904895027853: 0.0060240963855422 0.001565219137154: 0.0060240963855422 mean = 0.0706578 var : diff Probabilities (truncated): 0.170756961713498: 0.0060240963855422 0.149034887617863: 0.0060240963855422 0.148882707750458: 0.0060240963855422 0.135884629066641: 0.0060240963855422 ......... -0.197447606953484: 0.0060240963855422 -0.204612726113614: 0.0060240963855422 -0.211581473262455: 0.0060240963855422 -0.292422826706721: 0.0060240963855422 mean = -0.0264618 var : diff > 0.0 Probabilities: 0: 0.6265060240963856 1: 0.3734939759036144 mean = 0.373494 */ go ?=> reset_store, run_model(100_000,$model,[show_probs_trunc,mean]), nl, show_store_lengths,nl, % fail, nl. go => true. model() => NA = 20, % Number of trials for A NB = 25, % Number of trials for B RateA = beta_dist(1,1), RateB = beta_dist(1,1), SA = binomial_dist(NA,RateA), SB = binomial_dist(NB,RateB), Diff = RateB - RateA, observe(SA == 1, SB == 1), % Number of successes for A and B if observed_ok then add("rate A",RateA), add("rate B",RateB), add("diff",Diff), add("diff > 0.0",cond(Diff > 0, 1,0)) end.