Advertisement
nlw

Jeffreys interval demo

nlw
Jul 19th, 2013
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.53 KB | None | 0 0
  1. from __future__ import division
  2.  
  3. from pylab import *
  4. from scipy.stats import beta, binom
  5. from numpy.random import binomial
  6.  
  7. def estimate_p(x, N):
  8.     dist = beta(x + 0.5, (N - x) + 0.5)
  9.     p = x / float(N)
  10.     lo = dist.ppf(0.025)
  11.     hi = dist.ppf(0.975)
  12.  
  13.     return p, lo, hi
  14.  
  15.  
  16.  
  17. def plot_box(x, a, b, c, w=0.4):
  18.     xx = array([-1.0, 1.0]) * w * 0.5
  19.     yy = array([1.0, 1.0])
  20.     plot([x-w*0.5, x+w*0.5, x+w*0.5, x-w*0.5, x-w*0.5],
  21.          [a, a, c, c, a],
  22.          'b-')
  23.     plot([x-w*0.5, x+w*0.5],
  24.          [b, b],
  25.          'r-')
  26.  
  27.  
  28. def plota_coisa(p, N, do_sort=False, Ntrials=40):
  29.     # Ntrials = 40
  30.     # N = 10
  31.     # p = 0.3
  32.     samples = binomial(N, p, Ntrials)
  33.  
  34.     subplot(2,1,1)
  35.     title('{} random samples'.format(Ntrials, p, N))
  36.     mm = []
  37.     for i, x in enumerate(samples):
  38.         phat, lo, hi = estimate_p(x, N)
  39.         plot_box(1+i, lo, phat, hi)
  40.         if i%2:
  41.             text(1+i, 0.01+hi, '{}'.format(x), ha='center', fontsize=8)
  42.         else:
  43.             text(1+i, lo - 0.05, '{}'.format(x), ha='center', fontsize=8)
  44.         mm.append(hi-lo)
  45.  
  46.     text(0, 0.9, '<length>: {:.2f}'.format(mean(mm)))
  47.  
  48.     print 'p:',p, 'N:', N, '<hi-lo>:', mean(mm)
  49.  
  50.  
  51.     plot([-0.5, Ntrials + 0.5], [p, p], 'k--')        
  52.    
  53.     xlim(-1, Ntrials+1)
  54.     ylim(-0.05, 1.05)
  55.  
  56.     subplot(2,1,2)
  57.     title('Same samples, ordered')
  58.     samples.sort()
  59.     for i, x in enumerate(samples):
  60.         phat, lo, hi = estimate_p(x, N)
  61.         plot_box(1+i, lo, phat, hi)
  62.         if i%2:
  63.             text(1+i, 0.01+hi, '{}'.format(x), ha='center', fontsize=8)
  64.         else:
  65.             text(1+i, lo - 0.05, '{}'.format(x), ha='center', fontsize=8)
  66.            
  67.  
  68.     plot([-0.5, Ntrials + 0.5], [p, p], 'k--')        
  69.    
  70.     xlim(-1, Ntrials+1)
  71.     ylim(-0.05, 1.05)
  72.  
  73.  
  74. def plot_benny(N, pp):
  75.     for p in pp:
  76.         plot(mgrid[:N+1], binom(N, p).pmf(mgrid[:N+1]), '-o', label='p:{}'.format(p))
  77.     legend()
  78.        
  79.    
  80.  
  81.  
  82.  
  83. if __name__ == '__main__':
  84.  
  85.  
  86.  
  87.     ion()
  88.  
  89.     N=10
  90.     figure()
  91.     title('Binomial, N:{}'.format(N))
  92.     plot_benny(N, [0.1, 0.5])
  93.     savefig('binom-{}.png'.format(N))
  94.  
  95.     N=100
  96.     figure()
  97.     title('Binomial, N:{}'.format(N))
  98.     plot_benny(N, [0.1, 0.5])
  99.     savefig('binom-{}.png'.format(N))
  100.  
  101.     N=1000
  102.     figure()
  103.     title('Binomial, N:{}'.format(N))
  104.     plot_benny(N, [0.1, 0.5])
  105.     savefig('binom-{}.png'.format(N))
  106.  
  107.  
  108.     p = 0.1
  109.     N = 10
  110.     figure(figsize=(8,8))
  111.     suptitle('Bernoulli parameter estimates, p:{} N:{}'.format(p, N))
  112.     plota_coisa(p, N)
  113.     savefig('bsmp-{}-{}.png'.format(p,N))
  114.  
  115.     p = 0.5
  116.     N = 10
  117.     figure(figsize=(8,8))
  118.     suptitle('Bernoulli parameter estimates, p:{} N:{}'.format(p, N))
  119.     plota_coisa(p, N)
  120.     savefig('bsmp-{}-{}.png'.format(p,N))
  121.  
  122.     p = 0.1
  123.     N = 100
  124.     figure(figsize=(8,8))
  125.     suptitle('Bernoulli parameter estimates, p:{} N:{}'.format(p, N))
  126.     plota_coisa(p, N)
  127.     savefig('bsmp-{}-{}.png'.format(p,N))
  128.  
  129.     p = 0.5
  130.     N = 100
  131.     figure(figsize=(8,8))
  132.     suptitle('Bernoulli parameter estimates, p:{} N:{}'.format(p, N))
  133.     plota_coisa(p, N)
  134.     savefig('bsmp-{}-{}.png'.format(p,N))
  135.  
  136.     p = 0.1
  137.     N = 1000
  138.     figure(figsize=(8,8))
  139.     suptitle('Bernoulli parameter estimates, p:{} N:{}'.format(p, N))
  140.     plota_coisa(p, N)
  141.     savefig('bsmp-{}-{}.png'.format(p,N))
  142.  
  143.     p = 0.5
  144.     N = 1000
  145.     figure(figsize=(8,8))
  146.     suptitle('Bernoulli parameter estimates, p:{} N:{}'.format(p, N))
  147.     plota_coisa(p, N)
  148.     savefig('bsmp-{}-{}.png'.format(p,N))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement