¿Cómo generar distribuciones dadas, media, SD, sesgo y curtosis en R?

¿Es posible generar distribuciones en R para las cuales se conoce la media, desviación estándar, desviación y curtosis? Hasta ahora, parece que la mejor ruta sería crear números aleatorios y transformarlos en consecuencia. Si hay un paquete diseñado para generar distribuciones específicas que podrían adaptarse, aún no lo he encontrado. Gracias

Hay una distribución de Johnson en el paquete SuppDists. Johnson le dará una distribución que coincida con momentos o cuantiles. Otros comentarios son correctos de que 4 momentos no hace una distribución. Pero Johnson ciertamente lo intentará.

Aquí hay un ejemplo de cómo adaptar un Johnson a algunos datos de muestra:

require(SuppDists) ## make a weird dist with Kurtosis and Skew a <- rnorm( 5000, 0, 2 ) b <- rnorm( 1000, -2, 4 ) c <- rnorm( 3000, 4, 4 ) babyGotKurtosis <- c( a, b, c ) hist( babyGotKurtosis , freq=FALSE) ## Fit a Johnson distribution to the data ## TODO: Insert Johnson joke here parms<-JohnsonFit(babyGotKurtosis, moment="find") ## Print out the parameters sJohnson(parms) ## add the Johnson function to the histogram plot(function(x)dJohnson(x,parms), -20, 20, add=TRUE, col="red") 

La ttwig final se ve así:

enter image description here

Puede ver un poco el problema que otros señalan acerca de cómo 4 momentos no capturan por completo una distribución.

¡Buena suerte!

EDITAR Como Hadley señaló en los comentarios, el ajuste de Johnson parece desviado. Hice una prueba rápida y ajusté la distribución de Johnson usando moment="quant" que se ajusta a la distribución de Johnson usando 5 cuantiles en lugar de los 4 momentos. Los resultados se ven mucho mejor:

 parms<-JohnsonFit(babyGotKurtosis, moment="quant") plot(function(x)dJohnson(x,parms), -20, 20, add=TRUE, col="red") 

Que produce lo siguiente:

enter image description here

¿Alguien tiene alguna idea de por qué Johnson parece parcial cuando está en forma usando momentos?

Esta es una pregunta interesante, que realmente no tiene una buena solución. Supongo que, aunque no conozca los otros momentos, tiene una idea de cómo debería ser la distribución. Por ejemplo, es unimodal.

Hay algunas formas diferentes de abordar este problema:

  1. Suponga una distribución subyacente y momentos de coincidencia. Hay muchos paquetes R estándar para hacer esto. Una desventaja es que la generalización multivariante puede ser poco clara.

  2. Aproximaciones Saddlepoint. En este papel:

    Gillespie, CS y Renshaw, E. Una aproximación de silla de montar mejorada. Mathematical Biosciences , 2007.

    Consideramos la recuperación de un pdf / pmf cuando se da solo los primeros momentos. Descubrimos que este enfoque funciona cuando la asimetría no es demasiado grande.

  3. Expansiones de Laguerre:

    Mustapha, H. y Dimitrakopoulosa, R. Generalizó expansiones de Laguerre de las densidades de probabilidad multivariante con momentos . Computadoras y Matemáticas con Aplicaciones , 2010.

    Los resultados en este documento parecen más prometedores, pero no los he codificado.

Esta pregunta fue hecha hace más de 3 años, así que espero que mi respuesta no llegue demasiado tarde.

Hay una manera de identificar de forma única una distribución cuando se conocen algunos de los momentos. De esa manera es el método de Maximum Entropy . La distribución que resulta de este método es la distribución que maximiza su ignorancia sobre la estructura de la distribución, dado lo que usted sabe . Cualquier otra distribución que también tenga los momentos que haya especificado pero que no sea la distribución de MaxEnt está implícitamente asumiendo una estructura mayor a la que ingresó. Lo funcional para maximizar es la entropía de información de Shannon, $ S [p (x)] = – \ int p (x) log p (x) dx $. Conocer la media, desviación estándar, asimetría y curtosis, se traduce como restricciones en el primer, segundo, tercer y cuarto momento de la distribución, respectivamente.

El problema es entonces maximizar S sujeto a las restricciones: 1) $ \ int xp (x) dx = “primer momento” $, 2) $ \ int x ^ 2 p (x) dx = “segundo momento” $, 3 ) … y así

Recomiendo el libro “Harte, J., Maximum Entropy and Ecology: A Theory of Abundance, Distribution and Energetics (Oxford University Press, Nueva York, 2011)”.

Aquí hay un enlace que intenta implementar esto en R: https://stats.stackexchange.com/questions/21173/max-entropy-solver-in-r

Estoy de acuerdo en que necesitas una estimación de densidad para replicar cualquier distribución. Sin embargo, si tiene cientos de variables, como es típico en una simulación de Monte Carlo, debería tener un compromiso.

Un enfoque sugerido es el siguiente:

  1. Usa la transformada de Fleishman para obtener el coeficiente para el sesgo y la curtosis dados. Fleishman toma el sesgo y la curtosis y le da los coeficientes
  2. Genera N variables normales (media = 0, std = 1)
  3. Transforme los datos en (2) con los coeficientes de Fleishman para transformar los datos normales en el sesgo y curtosis dados
  4. En este paso, use datos del paso (3) y transfórmelos a la media y desviación estándar (estándar) deseada utilizando new_data = mean + deseado (datos del paso 3) * std deseado

Los datos resultantes del Paso 4 tendrán la media deseada, estándar, sesgo y curtosis.

Advertencias:

  1. Fleishman no funcionará para todas las combinaciones de asimetría y kurtois
  2. Los pasos anteriores suponen variables no correlacionadas. Si desea generar datos correlacionados, necesitará un paso antes de la transformación de Fleishman

Esos parámetros en realidad no definen completamente una distribución. Para eso necesitas una densidad o una función de distribución equivalente.

Como escribieron @David y @Carl anteriormente, hay varios paquetes dedicados a generar diferentes distribuciones, véase, por ejemplo, la vista de tareas de distribución de probabilidades en CRAN .

Si está interesado en la teoría (cómo dibujar una muestra de números que se ajuste a una distribución específica con los parámetros dados), simplemente busque las fórmulas adecuadas, por ejemplo, consulte la distribución de gamma en Wiki y cree un sistema de calidad simple con el proporcionó los parámetros para calcular la escala y la forma.

Vea un ejemplo concreto aquí , donde calculé los parámetros alfa y beta de una distribución beta requerida en base a la media y la desviación estándar.

Intereting Posts