Edit page

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