1 votos

Simulación de una variable aleatoria de área de división

Supongamos que tenemos una variable aleatoria con pdf como $f = \left\{ \begin{array}{ c l } x+1, x\in [-1,0] \\ -x+1, x\in (0,1] \end{array} \right.$ y tenemos que simularlo.

Su pdf es $F(x) = \left\{ \begin{array}{ c l } x^2/2+x+0.5, x\in [-1,0] \\ -x^2/2+x+0.5, x\in (0,1] \end{array} \right.$

dos métodos para simular esto se pueden encontrar aquí http://web.ics.purdue.edu/~hwan/IE680/Lectures/Chap08Slides.pdf página 12.

Mi pregunta es si podemos simular problemas así por puño simular un U(0,1) aleatorio y

si es pequeño a que la probabilidad $P(x\in [-1,0])=1/2$ simular desde la primera parte con la transformación inversa $\sqrt{2U}-1$ pero para un $U\sim Unif(0,1/2=P(x\in [-1,0]))$

y si es mayor simulación con transformación inversa $1-\sqrt{(2(1-U))}$ utilizando a $U\sim Unif(1/2,1)$ .

Cuando hago el histograma parece que funciona, pero ¿es correcto?

[code]rand=function(){
if(runif(1,0,1)<=1/2){x=sqrt(2*runif(1,0,1/2))-1}else{
x=1-sqrt(2-2*runif(1,1/2,1))
}
return(x)
}

pri=NULL

for(i in 1:10000)
{
pri=c(pri,rand())
}

hist(pri,prob=T)[/code]

1voto

mac Puntos 1497

Sí, tu código genera los resultados correctos, pero como puedes ver en los cálculos de abajo, es difícil de entender. Le sugiero que siga los apuntes de las clases enlazadas y que utilice runif(1,0,1) que representa $\mathrm{Unif}(0,1)$ .

El algoritmo de composición en las notas vinculadas:

  1. Generar dos independientes $U_1, U_2 \sim \mathrm{Unif}(0,1)$
    • Si $U_1 < 1/2$ , volver $X = \sqrt{U_2}-1$
    • En caso contrario, devuelve $X = 1 - \sqrt{1-U_2}$

El algoritmo de composición en el cuerpo de la pregunta contiene una versión reescalada de $U_2$ .

  1. Generar $U_1 \sim \mathrm{Unif}(0,1)$
    • $U_1 < 1/2$ , volver $X = \sqrt{2U}-1$ para $U\sim \mathrm{Unif}(0,1/2)$
      De hecho, $2U \stackrel{(d)}{=} U_2$ .
    • En caso contrario, devuelve $X = 1 - \sqrt{2-2U}$ para $U\sim \mathrm{Unif}(1/2,1)$
      De hecho, $2U \sim \mathrm{Unif}(1,2)$ Así que $2-2U \sim \mathrm{Unif}(0,1)$ y $2-2U \stackrel{(d)}{=} 1-U_2$ .

Estas figuras ilustran el funcionamiento del código.

histogram by OP's algo

Si aumentamos el tamaño de la muestra de 10k a 50k, el histograma se parece más a la distribución triangular en $[-1,1]$ .

enter image description here

Aumentamos el número de clases de 20 a 50 para poder observar los datos más de cerca.

enter image description here


Mi código

rand=function(){
if(runif(1,0,1)<=1/2){x=sqrt(2*runif(1,0,1/2))-1}else{
x=1-sqrt(2-2*runif(1,1/2,1))
}
return(x)
}

pri=NULL
for(i in 1:50000)
{
pri=c(pri,rand())
}

hist(pri,breaks=50,prob=T)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X