fork download
  1. samplemaker_weibull <- function(n=130,shape=4,scale=1,end=1.5 ){
  2. x <- rweibull(n,shape,scale)
  3. t <- runif(n,0,end)
  4.  
  5. observedx <- x[which(x>t)]
  6.  
  7. return(observedx)
  8. }
  9.  
  10. ## 設定以下起始值
  11.  
  12. # 假設需要n_conditioned個observedx
  13. n_conditioned <- 100000
  14. # n_batch: samplemaker_weibull(n = n_batch)
  15. n_batch <- n_conditioned
  16. # pass_ratio: samplemaker_weibull內條件的通過率
  17. pass_ratio <- NULL
  18. # result: 所有生成的樣本
  19. result <- NULL
  20. # len: result的長度, 等於n_conditioned時停止迴圈
  21. len <- 0
  22.  
  23.  
  24. ## 樣本生成
  25.  
  26. while(len < n_conditioned) {
  27. N <- samplemaker_weibull(n = n_batch)
  28.  
  29. # 每次迴圈會計算1次pass_ratio, 並從中找出min
  30. pass_ratio <- c(pass_ratio, length(N)/n_batch)
  31. pr_min <- min(pass_ratio)
  32.  
  33. # 修改下次迴圈輸入的n_batch: 依據不足樣本數及pass_ratio計算期望值*2
  34. n_batch <- (n_conditioned - length(N))/pr_min*2
  35.  
  36. # 產生結果並計算結果長度
  37. result <- c(result, N)
  38. len <- length(result)
  39. }
  40.  
  41. ## 得到n_conditioned樣本
  42. result_n_conditioned <- sample(result, n_conditioned, replace = FALSE)
Success #stdin #stdout 0.32s 46984KB
stdin
Standard input is empty
stdout
Standard output is empty