A model of learning from social and direct evidence:

The learner is tasked with learning the weight of a coin. She observes some number *n-l* of flips. A second person, “Zach,” sees *n-z* flips and then bets on the outcome of the next flip. The learner doesn’t see the outcomes of Zach’s *n-z* flips, but she does see how he bets.

```
;; Helper functions
(define (iota n start)
(define (helper n x)
(if (> x n)
'()
(pair x (helper n (+ x 1)))))
(helper n start))
(define (factorial n)
(apply * (iota n 1)))
(define (combo n k)
(/ (factorial n)
(* (factorial k) (factorial (- n k)))))
(define (binomial weight n)
(multinomial (iota n 0)
(map (lambda (x) (bin_prob weight n x))
(iota n 0) )))
(define (observe weight ndata obs)
(flip (bin_prob weight ndata obs)))
(define (bin_prob weight ndata obs)
(define n ndata)
(define k obs)
(define p weight)
(define nk (- n k))
(define np (- 1 p))
(* (combo n k) (expt p k) (expt np nk)))
(define (guess weight alpha)
(if (flip (* alpha weight))
1
0))
;; Set data and priors
(define reliable-prior .75)
(define ss-nsamples 5)
(define zach-nsamples 10)
(define (act-prior)
(uniform-draw '(0 1)))
(define (weight-prior)
(uniform-draw '(.1 .3 .5 .7 .9)))
(define ss-obs 2)
;; Zach's model
(define (zachs-choice z-obs ss-weight reliable)
(rejection-query
(define z-weight (weight-prior))
(define act (act-prior))
(define result (if reliable
(guess z-weight 100)
(guess z-weight 0)))
act
(and (observe z-weight zach-nsamples z-obs)
(equal? act result))))
;; Learner's model
(define (ss-model)
(rejection-query
(define ss-weight (weight-prior))
(define zach-obs (binomial ss-weight zach-nsamples))
(define zach-reliable (flip reliable-prior))
(define zach (zachs-choice zach-obs ss-weight zach-reliable))
ss-weight
;; Assuming our observations and Zach's choice:
(and (observe ss-weight ss-nsamples ss-obs)
(equal? 1 zach))))
(hist (repeat 100 ss-model))
```