¿Cómo puedo encontrar en esta iteración mientras bucle cuántas iteraciones fueron necesarias hasta que la condición ya no se cumplió. ¿Cuántas iteraciones fueron rechazadas y cuántas fueron aceptadas?

a=2
b=2
n=10000
M=1.5
X = 0
AR = rep(NA,n)
set.seed(12345)
while (X < n) {
  u = runif(1,0,1)
  y = runif(1)
  if (u < dbeta(y,2,2)/(M*dunif(y,0,1))) { 
    X = X+1
    AR[X] = y
  }
}
AR
0
user9279267 25 abr. 2020 a las 21:27

2 respuestas

La mejor respuesta

Simplemente agregue variables de contador:

a=2
b=2
n=10000
M=1.5
X = 0
AR = rep(NA,n)
set.seed(12345)
i1 <- i2 <- 0
while (X < n) {
  i1 <- i1 + 1
  u = runif(1,0,1)
  y = runif(1)
  if (u < dbeta(y,2,2)/(M*dunif(y,0,1))) { 
    i2 <- i2 + 1
    X = X+1
    AR[X] = y
  }
}
AR

i1
i2
0
tpetzoldt 25 abr. 2020 a las 18:31

Necesita otro contador iter para las iteraciones, por ejemplo,

  • con while
iter <- 0
while (X < n) {
  iter <- iter + 1
  u = runif(1,0,1)
  y = runif(1)
  if (u < dbeta(y,2,2)/(M*dunif(y,0,1))) {
    X = X+1
    AR[X] = y
  }
}
  • con repeat
iter <- 0
repeat {
  if (X==n) break
  iter <- iter + 1
  u = runif(1,0,1)
  y = runif(1)
  if (u < dbeta(y,2,2)/(M*dunif(y,0,1))) { 
    X = X+1
    AR[X] = y
  }
}
0
ThomasIsCoding 25 abr. 2020 a las 20:10