celestialgod

MCMC

Apr 14th, 2015
270
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 2.29 KB | None | 0 0
  1. # 探討在不同母體分配(BETA為例)之下,樣本數是否會影響樣本平均數的抽樣分配
  2. # 收斂到常態分配的情形。
  3. # 探討樣本數需達多少,樣本平均數的抽樣分配與常態分配間的差異才可被忽略
  4. # 以R生成BETA分配的隨機樣本模擬,比較在相同母體不同參數下
  5. # 及不同樣本數的收斂情形。
  6. # 每次抽取n(n=10,20,30,40...120個樣本並計算其平均數),重複500次後
  7. # 再對這500個平均數的資料作常態分配的檢定,得出檢定的 P value.
  8. # 重複1000次並計算在1000個 P value小於顯著水準0.05的比例
  9.  
  10. library(plyr)
  11. library(magrittr)
  12. type_I_error_f = function(shape1 = 8, shape2 = 8,
  13.   n = seq(10, 120, by = 10), N = 500, R = 1000){
  14.   pvalues = replicate(R,
  15.     aaply(n, 1, function(x){
  16.       rbeta(x*N, shape1, shape2) %>%
  17.         matrix(x) %>% colMeans() %>%
  18.         shapiro.test() %>% use_series(p.value)
  19.     })
  20.   )
  21.   rowMeans(pvalues < .05) %>% set_names(n)
  22. }
  23. type_I_error_f() # default => a symmetric distribution
  24. #    10    20    30    40    50    60    70    80    90   100   110   120
  25. # 0.043 0.043 0.059 0.048 0.041 0.041 0.057 0.042 0.058 0.043 0.040 0.043
  26. type_I_error_f(8, 3) # a non-symmetric distribution
  27. #    10    20    30    40    50    60    70    80    90   100   110   120
  28. # 0.271 0.159 0.129 0.099 0.095 0.082 0.068 0.068 0.079 0.073 0.076 0.062
  29. ## non-symmetric distribution need more samples to approximate normal.
  30.  
  31. library(snowfall)
  32. type_I_error_par_f = function(shape1 = 8, shape2 = 8,
  33.   n = seq(10, 120, by = 10), N = 500, R = 1000){
  34.   sfInit(TRUE, 4)
  35.   sfLibrary(plyr)
  36.   sfLibrary(magrittr)
  37.   sfExport(list = c("shape1", "shape2", "n", "N"))
  38.   pvalues = sfSapply(1:R, function(i){
  39.     aaply(n, 1, function(x){
  40.       rbeta(x*N, shape1, shape2) %>%
  41.         matrix(x) %>% colMeans() %>%
  42.         shapiro.test() %>% use_series(p.value)
  43.     })
  44.   })
  45.   sfStop()
  46.   rowMeans(pvalues < .05) %>% set_names(n)
  47. }
  48. type_I_error_par_f()
  49. #    10    20    30    40    50    60    70    80    90   100   110   120
  50. # 0.043 0.035 0.052 0.052 0.049 0.050 0.055 0.055 0.052 0.055 0.058 0.053
  51. type_I_error_par_f(8, 3)
  52. #    10    20    30    40    50    60    70    80    90   100   110   120
  53. # 0.251 0.142 0.098 0.079 0.095 0.088 0.089 0.078 0.084 0.065 0.062 0.068
Advertisement
Add Comment
Please, Sign In to add comment