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))