celestialgod

Monte Carlo part 2

Dec 13th, 2015
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 1.45 KB | None | 0 0
  1. rm(list = ls())
  2. p<-0.15 ; n <- 20; no.rep <- 1000
  3. asym_lt95 <- rep(NA,no.rep)
  4. asym_rt95 <- rep(NA,no.rep)
  5. asym_lt99 <- rep(NA,no.rep)
  6. asym_rt99 <- rep(NA,no.rep)
  7. for(i in 1:no.rep){
  8.   # print(i)
  9.   set.seed(i)
  10.   numSuccess <- rbinom(1,n,p)
  11.   phat = numSuccess / n
  12.   asym_lt95[i] <- phat-qnorm(0.975)*sqrt(phat*(1-phat)/n)
  13.   asym_rt95[i] <- phat+qnorm(0.975)*sqrt(phat*(1-phat)/n)
  14.   asym_lt99[i] <- phat-qnorm(0.995)*sqrt(phat*(1-phat)/n)
  15.   asym_rt99[i] <- phat+qnorm(0.995)*sqrt(phat*(1-phat)/n)
  16. }
  17. asym_lt95 = pmax(asym_lt95, 0)
  18. asym_rt95 = pmin(asym_rt95, 1)
  19. asym_lt99 = pmax(asym_lt99, 0)
  20. asym_rt99 = pmin(asym_rt99, 1)
  21. asym_95_ci_cov_rate = mean((asym_lt95<=p) & (p<=asym_rt95)) # 0.803
  22. asym_99_ci_cov_rate = mean((asym_lt99<=p) & (p<=asym_rt99)) # 0.961
  23.  
  24. asym_95_ci_len = mean(asym_rt95 - asym_lt95) # 0.2766
  25. asym_99_ci_len = mean(asym_rt99 - asym_lt99) # 0.3373
  26.  
  27. ## pretty code
  28. rm(list = ls())
  29. library(plyr)
  30. library(magrittr)
  31.  
  32. mc_binomial_f = function(no.rep, n, p, prob = 0.95){
  33.   dat = laply(1:no.rep, function(i){
  34.     set.seed(i)
  35.     rbinom(1,n,p) / n
  36.   })
  37.   sd_dat = sqrt(dat*(1-dat)/n)
  38.   dat %>% {cbind(pmax(0, . - qnorm(prob/2+0.5)*sd_dat),
  39.     pmin(. + qnorm(prob/2+0.5)*sd_dat, 1))}
  40. }
  41. p = 0.15
  42. ci_95 = mc_binomial_f(1000, 20, p)
  43. ci_99 = mc_binomial_f(1000, 20, p, 0.99)
  44.  
  45. ci_95 %>% {mean((.[,1]<=p) & (p<=.[,2]))}
  46. ci_99 %>% {mean((.[,1]<=p) & (p<=.[,2]))}
  47.  
  48. ci_95 %>% {mean((.[,2] - .[,1]))}
  49. ci_99 %>% {mean((.[,2] - .[,1]))}
Advertisement
Add Comment
Please, Sign In to add comment