使用拒绝方法从分布函数模拟

时间:2018-02-21 19:17:48

标签: r simulation probability-density

我正在尝试模拟以下分布的数据10000观察结果:

         { 3x(1-x)2         0 < x < 1

  f(x) = { 3(2-x)(1-x)2     1 ≤ x  < 2

         { 0                otherwise

使用拒绝方法,我通过以下矩形装箱发行版:x=0,x=2,y=0,y=2

但是,我的代码中存在一些错误,因为它似乎无法正常工作。任何人都可以提出修复建议吗?

n=10000
t=0
x=0
while(t<n)
    {u=runif(1,0,2)
    y=runif(1,0,2) 
    if {(u in c(0:1))
        fun=3*u*(1-u)^2
    else (u in c(1:2))
        fun=3*(2-u)*(1-u)^2}
    if (y<fun)
      {t=t+1
      x[t]=u}}

1 个答案:

答案 0 :(得分:1)

你有一堆R语法错误。您应该查看基本的R介绍。小心放置牙箍。 R中也没有in个关键字。

n <- 10000
t <- 0
x <- 0
while(t<n) {
 u <- runif(1,0,2)
 y <- runif(1,0,2) 
 if (u > 0 & u < 1) {
  fun <- 3*u*(1-u)^2
 } else if (u >= 1 & u < 2) {
  fun <- 3*(2-u)*(1-u)^2
 } else {
  fun <- 0
 }
 if (y<fun){
   t <- t+1
   x[t] <- u
 }
}