使用 Rejection Method 从分布函数进行模拟

Simulate from a distribution function using Rejection Method

我正在尝试为以下分布模拟数据 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}}

你有一堆 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
 }
}