2 votos

¿Por qué los valores pequeños producen densidades onduladas cuando se traza el logaritmo de una prioridad loguniforme (en R)?

Estoy utilizando un programa que dibuja valores aleatorios en una distribución log-uniforme digamos entre 1 y 100. Cuando trazo la densidad de los valores producidos con R parece una distribución log-uniforme con alta densidad para los valores pequeños y bajas densidades para los valores más altos. Pero si trazo la densidad del logaritmo de los valores [es decir, y = densidad(log(x))] entonces la densidad que debería ser uniforme es ondulada para valores pequeños de x y se estabiliza como un uniforme para valores mayores. (Véase la línea negra en el gráfico de ejemplo de abajo).

Example plot of density(log(x))

Mi explicación es que hay algún redondeo antes de tomar el logaritmo y que esto causa la oscilación para los valores pequeños porque están más afectados por el redondeo que los valores más grandes.

  1. ¿Tiene sentido? ¿Alguien ha experimentado un problema similar antes?
  2. ¿Alguien tiene una idea de cómo solucionarlo (sin tener que 'desredondear' los valores que da el programa C)?
  3. ¿Debo aumentar el alisado?
  4. ¿Sería posible tener un mayor alisamiento para valores pequeños que para valores mayores? ¿O un núcleo diferente? ¿Ayudaría eso? ¿Es eso "científicamente" correcto?

2 votos

Si intento x <- 100^runif(1000000); plot(density(log(x))) entonces obtengo algo que parece sensato entre $0$ y sobre $4.6 \approx \log_e(100)$ ¿Qué has hecho para conseguir esa oscilación?

0 votos

Gracias por la respuesta y por la línea de código (no sabía cómo reproducirla con R.) El prior es dibujado por un programa C independiente que teóricamente no puedo cambiar. Realmente creo que viene del redondeo. Si se simula x <- round(100^runif(1000000)); plot(density(log(x))) se obtiene el mismo tipo de oscilaciones. Pero como no puedo cambiar el redondeo, me pregunto cómo se puede solucionar. (Preguntas 2 a 4)

1voto

lucia de finetti Puntos 30

Utilicemos la versión R, porque todos podemos reproducirla

Si lo hago

x <-100^runif(1000000); plot(density(log(x)))

Me sale

uniform-looking density

Sin embargo, si lo hago

x <- round(100^runif(1000000)); plot(density(log(x)))

Me sale el tipo de cosa que ves (poner un ancho de banda de 0,1 te acerca)

wiggles

Mirando table(log(x))[1:10] you see that the discrete values are at log(1) , log(2) , log(3)`, y así sucesivamente, y se van acercando, con recuentos menores, a medida que $x$ aumenta:

                0 0.693147180559945  1.09861228866811  1.38629436111989   1.6094379124341 
            87807            111514             72896             54910             43344 
 1.79175946922805  1.94591014905531  2.07944154167984  2.19722457733622  2.30258509299405 
            36324             31011             27164             24285             21628 

Parece que el programa C está redondeando al entero más cercano. Podrías alisar más, pero acabarías extendiendo la probabilidad ofensiva por debajo de cero y por encima de donde la gráfica es ahora suave. Realmente necesitas un ancho de banda de suavizado variable.

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