Un truco para generar variables aleatorias normales: sumar doce uniformes y restar seis.
En efecto,
produce
Ayuda a entender el motivo que la varianza de la distribución uniforme es 1/12 y que su media es 1/2.
Los comentarios están desabilitados.
Interesante. No entendía lo de restar el 6, pero es porque debe ir fuera del sum para que x tenga media 0 y varianza 1.
x <- replicate(1000, sum( runif(12) ) -6)
La verdad es que no entiendo en que se diferencia eso del teorema central del límite. Si simulamos lo mismo pero sin el -6 sigue saliendo una normal.
x <- replicate(10000, sum( runif(12)))
qqnorm(x)
qqline(x, col=2)
Y por supuesto, tampoco hace falta que se sumen doce unirformes…. Pueden ser 12, 20, 30, o las que se quiera.
x2 <- replicate(10000, sum( runif(30)))
qqnorm(x2)
qqline(x2, col=2)
Es cierto, podían ser otros números. Parece ser que es un truco que usan en ciertos sistemas (en electrónica, por ejemplo) para simular normales con el mínimo coste computacional y con pocos recursos (apenas un generador de uniformes). Lo que lo distingue del «teorema central del límite» es que en este se exige un número «infinito» de variables aleatorias (el promedio normalizado «converge») y en este caso particular se usan seis (que es un número bastante pequeño). Lo sorprendente es que la convergencia sea «tan rápida».
La verdad es que no me lo había planteado así, pero está claro que un generador de uniformes es mucho más fácil de conseguir que un generador de normales…
La convergencia entre la uniforme y la normal (es la que predice con carácter general el teorema del límite central) es muy rápida porque se trata de una distribución simétrica y en este caso la convergencia es más rápida. Esta propiedad es de uso habitual en estadística no paramétrica. Además la varianza de la distribución U(0,1) es 1/12, por lo que al sumar 12 uniformes se obtiene una distribución de varianza unidad como se ha dicho anteriormente. Como la media de la uniforme es 0.5, la suma de 12 tiene esperanza 6 y por tanto al restar 6 tenemos una uniforme de media o y varianza 1 (pero como se ha dicho más arriba, hay que restar después de sumar, no antes).
Fórmula equivalente:
> x<-replicate(1000,sum(runif(12)-0.5))