#| Streaks in Racket/Gamble Here's an exploration of streaks. From Grinstead, Peterson, Snell: "Probability Tales", page2ff """ It can be shown that in a sequence of 200 independent trials, where the probability of a success on a given trial is .85, the average length of the longest run of successes is about 24.0. (We will discuss this calculation a little later in this chapter.) Since many players shoot 200 or more free throws in a given season, it is not surprising that this player has a success run of 20. We will say more below about the length of the longest run in this model. """ This model checks for min, mean, and max value of the lengths of the runs on a binary list generated by (bernoulli 0.85). This verifies that the average max run length is (about) 24. * n=200 variable : min-run 1: 1.0000000000000022 mean: 1.0000000000000022 variable : mean-run 3.9215686274509802: 0.0755000000000007 4.081632653061225: 0.0741000000000007 3.7735849056603774: 0.07010000000000069 3.6363636363636362: 0.06920000000000066 4.25531914893617: 0.0635000000000006 ... 2.5641025641025643: 0.00020000000000000185 7.6923076923076925: 0.00020000000000000185 2.6315789473684212: 0.00020000000000000185 2.5: 0.00010000000000000093 8.695652173913043: 0.00010000000000000093 mean: 3.9610041025724003 HPD interval (0.5): 3.389830508474576..4.081632653061225 HPD interval (0.84): 3.076923076923077..4.651162790697675 HPD interval (0.9): 2.985074626865672..4.878048780487805 HPD interval (0.95): 2.816901408450704..5.128205128205129 HPD interval (0.99): 2.5974025974025974..5.882352941176471 variable : max-run 19: 0.06860000000000063 21: 0.06700000000000061 22: 0.06470000000000059 20: 0.06280000000000056 18: 0.059500000000000546 ... 61: 0.00020000000000000185 66: 0.00010000000000000093 69: 0.00010000000000000093 73: 0.00010000000000000093 60: 0.00010000000000000093 mean: 24.079200000000224 HPD interval (0.5): 15..23 HPD interval (0.84): 14..31 HPD interval (0.9): 14..34 HPD interval (0.95): 13..38 HPD interval (0.99): 10..46 variable : runs-len 51: 0.07950000000000064 49: 0.07020000000000055 47: 0.06930000000000058 53: 0.06780000000000057 55: 0.06640000000000056 ... 28: 0.00020000000000000155 82: 0.00010000000000000078 83: 0.00010000000000000078 25: 0.00010000000000000078 26: 0.00010000000000000078 mean: 51.70810000000041 HPD interval (0.5): 45..55 HPD interval (0.84): 39..61 HPD interval (0.9): 37..63 HPD interval (0.95): 37..67 HPD interval (0.99): 33..73 variable : num01 26: 0.10130000000000122 25: 0.09880000000000128 24: 0.09500000000000114 27: 0.08760000000000107 23: 0.08490000000000109 ... 38: 0.0008000000000000093 40: 0.00040000000000000474 12: 0.00040000000000000474 13: 0.00040000000000000474 11: 0.00010000000000000118 mean: 25.38080000000031 HPD interval (0.5): 21..26 HPD interval (0.84): 19..30 HPD interval (0.9): 18..31 HPD interval (0.95): 18..33 HPD interval (0.99): 15..35 variable : num10 26: 0.10320000000000129 25: 0.09790000000000128 24: 0.09520000000000116 27: 0.0902000000000011 23: 0.0868000000000011 ... 39: 0.0007000000000000081 40: 0.0005000000000000059 13: 0.0005000000000000059 12: 0.00040000000000000474 11: 0.00010000000000000118 mean: 25.38070000000032 HPD interval (0.5): 21..26 HPD interval (0.84): 19..30 HPD interval (0.9): 18..31 HPD interval (0.95): 18..33 HPD interval (0.99): 15..35 variable : comp 01=10: 0.7497000000000059 01>10: 0.12520000000000195 10>01: 0.12510000000000196 variable : p #t: 0.7096000000000012 #f: 0.2904000000000032 mean: 0.7096000000000012 Theoretical: (t ... 0.7090909535292595) * n=200 and prob=0.5 (instead of 0.85) variable : min-run 1: 1.000000000000002 mean: 1.000000000000002 variable : mean-run 1.9801980198019802: 0.05780000000000012 2.0: 0.05500000000000011 2.0202020202020203: 0.05390000000000011 1.9230769230769231: 0.0521000000000001 1.941747572815534: 0.05170000000000011 ... 1.6: 0.0003000000000000006 2.5974025974025974: 0.00020000000000000042 2.6666666666666665: 0.00010000000000000021 2.5641025641025643: 0.00010000000000000021 1.5873015873015872: 0.00010000000000000021 mean: 1.9992406755222298 HPD interval (0.5): 1.8867924528301887..2.0618556701030926 HPD interval (0.84): 1.8018018018018018..2.1739130434782608 HPD interval (0.9): 1.7543859649122806..2.197802197802198 HPD interval (0.95): 1.7391304347826086..2.272727272727273 HPD interval (0.99): 1.6666666666666667..2.380952380952381 variable : max-run 7: 0.2586000000000005 8: 0.22090000000000046 6: 0.16940000000000033 9: 0.14280000000000023 10: 0.0870000000000002 ... 16: 0.0014000000000000032 4: 0.0009000000000000021 17: 0.0005000000000000011 18: 0.0003000000000000006 19: 0.00020000000000000042 mean: 7.971400000000015 HPD interval (0.5): 6..8 HPD interval (0.84): 6..10 HPD interval (0.9): 5..10 HPD interval (0.95): 5..11 HPD interval (0.99): 5..14 variable : runs-len 101: 0.05780000000000012 100: 0.05500000000000011 99: 0.05390000000000011 104: 0.0521000000000001 103: 0.05170000000000011 ... 125: 0.0003000000000000006 77: 0.00020000000000000042 75: 0.00010000000000000021 78: 0.00010000000000000021 126: 0.00010000000000000021 mean: 100.54290000000022 HPD interval (0.5): 94..103 HPD interval (0.84): 90..109 HPD interval (0.9): 87..110 HPD interval (0.95): 86..113 HPD interval (0.99): 82..118 * Enumerate for n=20 variable : min-run 1: 48834730287124554914767311/52428800000000000000000000 (0.931448560469142) 20: 2032115703323788004593001/52428800000000000000000000 (0.03875953108451439) 2: 1371677788039869670459887/52428800000000000000000000 (0.026162677536771196) 3: 164434560259583633923791/52428800000000000000000000 (0.0031363403369824147) 4: 22553469618023355009813/52428800000000000000000000 (0.000430173294411151) 5: 1465722381356866478997/26214400000000000000000000 (5.591287160327402e-5) 6: 82610997437238904701/13107200000000000000000000 (6.302718920687783e-6) 7: 10830983185174718799/26214400000000000000000000 (4.131692194051635e-7) 8: 1913145850987332201/26214400000000000000000000 (7.29807224650319e-8) 9: 347790610790477199/26214400000000000000000000 (1.326715891992482e-8) 10: 119042423827613001/52428800000000000000000000 (2.2705540433428383e-9) mean: 46410373535718200907979259/26214400000000000000000000 (1.7704152502333907) HPD interval (0.5): 1..1 HPD interval (0.84): 1..1 HPD interval (0.9): 1..1 HPD interval (0.95): 1..2 HPD interval (0.99): 1..20 variable : mean-run 4.0: 3092607571822305217173009/13107200000000000000000000 (0.23594723295763437) 2.857142857142857: 2580822913615122285920979/13107200000000000000000000 (0.19690116223259904) 6.666666666666667: 7838160569963137473344991/52428800000000000000000000 (0.14950104846884035) 2.2222222222222223: 2460103638403053504663063/26214400000000000000000000 (0.09384550622570242) 3.3333333333333335: 1106066962977909551108991/13107200000000000000000000 (0.08438621238539959) 2.5: 820034546134351168221021/13107200000000000000000000 (0.06256367081713494) 5.0: 3092607571822305217173009/52428800000000000000000000 (0.05898680823940859) 20.0: 2032115703323788004593001/52428800000000000000000000 (0.03875953108451439) 2.0: 676117808256122840510937/26214400000000000000000000 (0.02579184754395) 1.8181818181818181: 676117808256122840510937/26214400000000000000000000 (0.02579184754395) 10.0: 870906729995904163704999/52428800000000000000000000 (0.01661122760764893) 1.6666666666666667: 154871202077657258715063/26214400000000000000000000 (0.00590786751089696) 1.5384615384615385: 51623734025885752905021/13107200000000000000000000 (0.003938578340597973) 1.4285714285714286: 9329966303953148552979/13107200000000000000000000 (0.0007118199389612692) 1.3333333333333333: 3998556987408492236991/13107200000000000000000000 (0.00030506568812625827) 1.25: 521178303912485481009/13107200000000000000000000 (3.976274901676067e-5) 1.1764705882352942: 521178303912485481009/52428800000000000000000000 (9.940687254190168e-6) 1.1111111111111112: 40943591301179600991/52428800000000000000000000 (7.809370289073868e-7) 1.0526315789473684: 4549287922353288999/52428800000000000000000000 (8.677078098970964e-8) 1.0: 119042423827613001/52428800000000000000000000 (2.2705540433428383e-9) mean: 4.501386157591329 HPD interval (0.5): 2.857142857142857..4.0 HPD interval (0.84): 2.2222222222222223..6.666666666666667 HPD interval (0.9): 2.0..6.666666666666667 HPD interval (0.95): 1.6666666666666667..10.0 HPD interval (0.99): 1.6666666666666667..20.0 variable : max-run 8: 2933829252369313293890601/26214400000000000000000000 (0.11191670426823858) 7: 9022241386427630823/81920000000000000000 (0.11013478254916542) 9: 5468230481009316324311799/52428800000000000000000000 (0.10429821931856759) 10: 5186751467901806572386999/52428800000000000000000000 (0.09892943321040738) 6: 1500422923483820358849/16384000000000000000000 (0.09157854757591677) 11: 82252557763617/1024000000000000 (0.08032476344103223) 12: 53309935424765643/819200000000000000 (0.06507560476655962) 5: 3146686903403893963286199/52428800000000000000000000 (0.060018289630964165) 13: 43084914539358219/819200000000000000 (0.052593889818552515) 14: 2778234139246496241/65536000000000000000 (0.04239248869699854) 20: 2032115703323788004593001/52428800000000000000000000 (0.03875953108451439) 15: 1395431237693362053/40960000000000000000 (0.0340681454514981) 16: 3576597602894811472047/131072000000000000000000 (0.027287274192007535) 4: 660692395271006640704601/26214400000000000000000000 (0.025203414736595407) 17: 2853978903511923294537/131072000000000000000000 (0.02177413103875674) 18: 907068947158555967147001/52428800000000000000000000 (0.017300967162295455) 19: 358608653527736866493199/26214400000000000000000000 (0.013679834500417208) 3: 47648948069645291238273/10485760000000000000000000 (0.004544157797779588) 2: 6281939605454511983433/52428800000000000000000000 (0.0001198184891787436) 1: 119042423827613001/52428800000000000000000000 (2.2705540433428383e-9) mean: 266456338798540846742044181/26214400000000000000000000 (10.164502670232423) HPD interval (0.5): 6..10 HPD interval (0.84): 4..14 HPD interval (0.9): 4..16 HPD interval (0.95): 4..19 HPD interval (0.99): 4..20 variable : runs-len 5: 3092607571822305217173009/13107200000000000000000000 (0.23594723295763437) 7: 2580822913615122285920979/13107200000000000000000000 (0.19690116223259904) 3: 7838160569963137473344991/52428800000000000000000000 (0.14950104846884035) 9: 2460103638403053504663063/26214400000000000000000000 (0.09384550622570242) 6: 1106066962977909551108991/13107200000000000000000000 (0.08438621238539959) 8: 820034546134351168221021/13107200000000000000000000 (0.06256367081713494) 4: 3092607571822305217173009/52428800000000000000000000 (0.05898680823940859) 1: 2032115703323788004593001/52428800000000000000000000 (0.03875953108451439) 10: 676117808256122840510937/26214400000000000000000000 (0.02579184754395) 11: 676117808256122840510937/26214400000000000000000000 (0.02579184754395) 2: 870906729995904163704999/52428800000000000000000000 (0.01661122760764893) 12: 154871202077657258715063/26214400000000000000000000 (0.00590786751089696) 13: 51623734025885752905021/13107200000000000000000000 (0.003938578340597973) 14: 9329966303953148552979/13107200000000000000000000 (0.0007118199389612692) 15: 3998556987408492236991/13107200000000000000000000 (0.00030506568812625827) 16: 521178303912485481009/13107200000000000000000000 (3.976274901676067e-5) 17: 521178303912485481009/52428800000000000000000000 (9.940687254190168e-6) 18: 40943591301179600991/52428800000000000000000000 (7.809370289073868e-7) 19: 4549287922353288999/52428800000000000000000000 (8.677078098970964e-8) 20: 119042423827613001/52428800000000000000000000 (2.2705540433428383e-9) mean: 1169/200 (5.845) HPD interval (0.5): 5..7 HPD interval (0.84): 3..9 HPD interval (0.9): 3..10 HPD interval (0.95): 1..10 HPD interval (0.99): 1..12 Cf gamble_runs.rkt This program was created by Hakan Kjellerstrand, hakank@gmail.com See also my Racket page: http://www.hakank.org/racket/ |# #lang gamble ; (require gamble/viz) (require racket) (require "gamble_utils.rkt") ; (require "gamble_distributions.rkt") (define (model) (; enumerate ; rejection-sampler importance-sampler ; mh-sampler (define prob 85/100) (define num-throws 200) ; (define num-throws 20) ; for enumerate (define throws (for/list ([i num-throws]) (bernoulli prob))) (define runs (get-runs throws)) ; The number of runs (define runs-len (length runs)) ; The lengths of the runs (define runs-lens (get-runs-lens throws)) (define min-run (min-list runs-lens)) (define mean-run (* 1.0 (avg runs-lens))) (define max-run (max-list runs-lens)) ; Comparison of positive (0->1), negative (1->0), no change (x->x) (define num01 (count-occurrences-sublist '(0 1) throws)) (define num10 (count-occurrences-sublist '(1 0) throws)) (define num01>num10 (> num01 num10)) (define num10>num01 (> num10 num01)) (define num10=num01 (= num10 num01)) (define comp (cond [(> num01 num10) "01>10"] [(> num10 num01) "10>01"] [else "01=10"])) ; What is the probability of having at least a run of 20? (define p (>= max-run 20)) (list min-run mean-run max-run runs-len num01 num10 comp p ) ) ) (show-marginals (model) (list "min-run" "mean-run" "max-run" "runs-len" "num01" "num10" "comp" "p" ) #:num-samples 10000 #:truncate-output 5 ; #:skip-marginals? #t ; #:show-stats? #t ; #:credible-interval 0.84 #:hpd-interval (list 0.5 0.84 0.9 0.95 0.99) ; #:show-histogram? #t ; #:show-percentiles? #t ; #:burn 0 ; #:thin 0 ) (displayln "\nTheoretical:") (let* ([n 200] [p 85/100] [r 20] [t (probability-of-run-size n p r)]) (show2 "t" t (* 1.0 t)))