2010-07-08 16 views
12

Tener un conjunto de datos y calcular las estadísticas a partir de él es fácil. ¿Qué tal si fuera de la otra manera?Estadísticas "inversas": generar datos en base a la media y la desviación estándar

Digamos que sé que alguna variable tiene un promedio X, una desviación estándar Y y se supone que tiene una distribución normal (Gaussiana). ¿Cuál sería la mejor forma de generar un conjunto de datos "aleatorio" (de tamaño arbitrario) que se ajuste a la distribución?

EDITAR: Este tipo de desarrolla de this question; Podría hacer algo basado en ese método, pero me pregunto si existe una forma más eficiente de hacerlo.

Respuesta

12

Puede generar estándar variables aleatorias normales con el Box-Mueller method. Luego, para transformar eso para que tenga la sig media y la desviación estándar, multiplique sus muestras por sigma y agregue mu. Es decir. para cada z del normal estándar, devuelve mu + sigma * z.

1

Podría hacer una especie de simulación de Monte Carlo. Comience con un amplio "rango aceptable" aleatorio y genere unos pocos valores verdaderamente aleatorios. Verifique sus estadísticas y vea si el promedio y la varianza están desactivados. Ajuste el "rango aceptable" para los valores aleatorios y agregue algunos valores más. Repita hasta que haya alcanzado sus requisitos y el tamaño de muestra de su población.

Justo fuera de mi cabeza, déjame saber lo que piensas. :-)

0

Es fácil generar el conjunto de datos con distribución normal (consulte http://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform).
¡Recuerde que la muestra generada no tendrá una distribución N (0,1) exacta! Necesita estandarizarlo: restar media y luego dividir por desviación estándar. Luego, puede transformar esta muestra en Distribución normal con los parámetros dados: multiplicar por desviación estándar y luego agregar significar.

2

Voy a dar un ejemplo usando R y el segundo algoritmo en la lista here.

X<-4; Y<-2 # mean and std 
z <- sapply(rep(0,100000), function(x) (sum(runif(12)) - 6) * Y + X) 

plot(density(z)) 
> mean(z) 
[1] 4.002347 

> sd(z) 
[1] 2.005114 

> library(fUtilities) 

> skewness(z,method ="moment") 
[1] -0.003924771 
attr(,"method") 
[1] "moment" 

> kurtosis(z,method ="moment") 
[1] 2.882696 
attr(,"method") 
[1] "moment" 
8

Esto es realmente fácil de hacer en Excel con la función norminv(). Ejemplo:

= DISTR.NORM.INV (rand(), 100, 15)

generaría un valor de una distribución normal con media de 100 y DESVEST de 15 (IQS humanos). Arrastre esta fórmula hacia abajo en una columna y tendrá tantos valores como desee.

+0

+1 sin necesidad de programación – quantumSoup

1

La función MATLAB normrnd de Statistics Toolbox puede generar números aleatorios distribuidos normalmente con un mu y sigma dados.

Cuestiones relacionadas