Necesito extraer números aleatorios de una distribución log-cauchy que tiene densidad: $$f(x;\mu,\sigma)=\frac{1}{x\pi\sigma\left[1+\left(\frac{ln(x)-\mu}{\sigma}\right)^2\right]}\qquad x>0.$$ ¿Alguien puede ayudarme o indicarme un libro/documento que pueda mostrarme cómo hacerlo?
Respuesta
¿Demasiados anuncios?Una variable $X$ tiene una distribución log-cauchy si $\log(X)$ tiene una distribución de Cauchy. Por lo tanto, sólo tenemos que generar variables aleatorias cauchy y exponerlas para obtener algo que se distribuya log-cauchy.
Podemos generar a partir de la distribución de Cauchy utilizando muestreo por transformación inversa que dice que si se introducen uniformes aleatorios en la FCD inversa de una distribución, entonces lo que se obtiene tiene esa distribución. La distribución de Cauchy con ubicación $\mu$ y escala $\sigma$ tiene CDF:
$$ F(x) = \frac{1}{\pi} \arctan\left(\frac{x-\mu}{\sigma}\right)+\frac{1}{2} $$
es sencillo invertir esta función para encontrar que
$$ F^{-1}(y) =\mu + \sigma\,\tan\left[\pi\left(y-\tfrac{1}{2}\right)\right] $$
Por lo tanto, si $U \sim {\rm Uniform}(0,1)$ entonces $Y = \mu + \sigma\,\tan\left[\pi\left(U-\tfrac{1}{2}\right)\right]$ tiene una distribución de Cauchy con ubicación $\mu$ y escala $\sigma$ y $\exp(Y)$ tiene una distribución log-cauchy. Algunos R
para generar desde esta distribución (sin usar rcauchy
:))
rlogcauchy <- function(n, mu, sigma)
{
u = runif(n)
x = mu + sigma*tan(pi*(u-.5))
return( exp(x) )
}
Nota: Como la distribución de Cauchy es de colas muy largas, al exponerlas en un ordenador se pueden obtener valores numéricamente "infinitos". No estoy seguro de que se pueda hacer algo al respecto.
También hay que tener en cuenta que si se hiciera un muestreo por transformada inversa utilizando la función cuantil log-cauchy directamente, se tendría el mismo problema, ya que, después de hacer el cálculo, en realidad se termina con el acto mismo - $\exp \left( \mu + \sigma\,\tan\left[\pi\left(U-\tfrac{1}{2}\right)\right] \right)$