2014-10-19

Generar una distribución normal aleatoria en R

Title En R, podemos generar un histograma de una distribución normal mediante la función rnorm.

Muestras aleatorias de una distribución normal

Para que los resultados sean reproducibles generamos números pseudoaleatorios con al función set.seed

set.seed(123)
normal <- rnorm(10000)
head(data.frame(normal))
       normal
1 -0.56047565
2 -0.23017749
3  1.55870831
4  0.07050839
5  0.12928774
6  1.71506499
Comprobamos que los resultados son muy parecidos a los que esperaríamos de una distribución normal estándar N(0, 1). Recordar que la notación de la distribución normal N(media, varianza), es distinta de la empleada por R: N(media, desviación típica).

mean(normal) # Calculamos la media
[1] -0.002371702
# Calculamos la varianza ≃ 1
sd(normal)^2 
var(normal)
[1] 0.9986366
Si deseamos generar muestras aleatorias distintas de la distribución estándar, especificamos la media y la desviación típica.

N(-2, 0.5)

set.seed(123)
normal <- rnorm(10000, -2, sqrt(.5))
head(data.frame(normal))
mean(normal)
[1] -2.001677
# Calculamos la varianza ≃ 0.5
sd(normal)^2 
var(normal)
[1] 0.4986376

Histograma de la distribución

set.seed(123)
hist(rnorm(10000), prob = TRUE, xlab = "x", 
     main = "Histograma", xlim = c(-3, 3), ylim = c(0, 0.4))
Añadimos la curva de la función de densidad de probabilidad sobre el histograma:

curve(dnorm(x), xlim = c(-3, 3), add = TRUE, las = 1, 
      col = "darkblue", lwd = 2) 

Tabla de frecuencias

Creamos la tabla de frecuencias de la muestra aleatoria generada.

set.seed(123)
rangos <- seq(-3, 3, 0.5)
intervalos <- cut(rnorm(10000), breaks = rangos)
tabla.frec  <- table(intervalos) 
as.data.frame(tabla.frec)

   intervalos Freq
1   (-3,-2.5]   46
2   (-2.5,-2]  173
3   (-2,-1.5]  438
4   (-1.5,-1]  942
5   (-1,-0.5] 1451
6    (-0.5,0] 1978
7     (0,0.5] 1899
8     (0.5,1] 1484
9     (1,1.5]  924
10    (1.5,2]  431
11    (2,2.5]  161
12    (2.5,3]   45
Algunos valores de los 10.000 generados están fuera de los intervalos fijados de -3 y 3: 28

sum(tabla.frec)

 [1] 9972
Referencias:

No hay comentarios:

Publicar un comentario

Nube de datos