Apple_Tree
Apple_Tree

Reputation: 49

Simulate from a distribution function using Rejection Method

I am trying to simulate data 10000 observations for the following distribution:

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

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

         { 0                otherwise

Using the rejection method, I am boxing the distribution by the following rectangle: x=0,x=2,y=0,y=2

However, there is some fault in my code below as it doesn't seem to work. Can any one please advise on a fix?

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}}

Upvotes: 0

Views: 75

Answers (1)

MrFlick
MrFlick

Reputation: 206167

You have a bunch of R syntax errors. You should review a basic R introduction. be careful with placement of braces. Also there is no in keyword in R.

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
 }
}

Upvotes: 1

Related Questions