Advertisement
ihadanny

fisher_vs_newton

Oct 24th, 2016
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.76 KB | None | 0 0
  1. import random
  2. import numpy as np
  3.  
  4. pi_t = random.random()
  5. n = 1000
  6. draws = [1 if x < pi_t else 0 for x in np.random.rand(n)]
  7. x_bar = np.mean(draws)
  8.  
  9. def u(pi):
  10.     return n*x_bar/pi - n*(1-x_bar)/(1-pi)
  11. def J(pi):
  12.     return -n*x_bar/pi**2 - n*(1-x_bar)/((1-pi)**2)
  13. def I_hat(pi):
  14.     return u(pi)**2
  15. def Newton(pi):
  16.     return pi - u(pi)/J(pi)
  17. def Fisher(pi):
  18.     return pi + u(pi)/I_hat(pi)
  19.  
  20. def dance(method_name, method):
  21.     print("starting iterations for: " + method_name)
  22.     pi, prev_pi, i = 0.5, None, 0
  23.     while i == 0 or (abs(pi-pi_t) > 0.001 and abs(pi-prev_pi) > 0.001 and i < 10):
  24.         prev_pi, pi = pi, method(pi)
  25.         i += 1
  26.         print(method_name, i, "delta: ", abs(pi-pi_t))
  27.  
  28. dance("Newton", Newton)
  29. dance("Fisher", Fisher)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement