2014-10-23

Operaciones básicas con la distribución normal en R

Title En esta entrada emplearemos diferentes funciones en R para el cálculo de valores asociados con la distribución normal. Los valores por defecto son los de la distribución normal estándar, una media de 0 y una desviación típica de 1: N(0, 1).

Los prefijos antepuestos a las funciones de distribución de probabilidad, en nuestra entrada de la normal (norm), son:

d - density, densidad
p - probability, probabilidad
q - quantile, cuantil
r - random, aleatorio

dnorm

Devuelve la altura de la función de densidad en un punto. La marcamos con una línea vertical punteada

# Altura en el punto x = 0
v <- 0
curve(dnorm(x), xlim = c(-3, 3), las = 1, 
      main = bquote("dnorm:" ~ .(round(dnorm(v), 4))))
segments(x0 = v, y0 = 0, x1 = v, y = dnorm(v), lty = 3)

pnorm

Dado un número o una lista, devuelve la probabilidad acumulada a la izquierda de los valores suministrados. Veamos varios ejemplos.

    P(X<=-0.24)
pnorm(-0.24)
[1] 0.4051651
Al ser simétrica podemos calcular la probabilidad de Pr(X>0.24)

# Probabilidad acumulada partiendo de la derecha
pnorm(0.24, lower.tail = FALSE)
# Restamos a la probabilidad total la acumulada a la izquierda 
1 - pnorm(0.24)
    P(X>=-1)
# P(X>=-1)
1 - pnorm(-1)
pnorm(-1, lower.tail = FALSE)
pnorm(1)
[1] 0.8413447
pnorm(2.89) - pnorm(0.3)
1-pnorm(0.3) - pnorm(-2.89)
pnorm(0.3, lower.tail = FALSE) - pnorm(2.89, lower.tail = FALSE)
[1] 0.913085
    P(-1< X <1)
1-pnorm(-1)-pnorm(-1)
1-pnorm(-1) - pnorm(1, lower.tail = FALSE)
pnorm(-1, lower.tail = FALSE) - pnorm(1, lower.tail = FALSE)
[1] 0.6826895

qnorm

Es la función inversa de pnorm. Dada una probabilidad devuelve el número que deja a la izquierda la probabilidad acumulada suministrada. Calculamos la inversa de los ejemplos anteriores.

    Ejemplo 1: valor central

qnorm(0.5)
[1] 0.5
    Ejemplo 2: cola de la izquierda

qnorm(0.4051651)
[1] -0.2400001
    Ejemplo 3: cola de la derecha

qnorm(0.8413447, lower.tail = FALSE)
[1] -1
    Ejemplo 4: intervalo

qnorm((1-0.6826895)/2) # Izquierda
qnorm((1 - 0.6826895)/2, lower.tail = FALSE) # Derecha
[1] -1
[1] 1

rnorm

Genera números aleatorios de la distribución normal. Lo empleamos al comienzo de la entrada para dibujar la distribución normal.

A continuación creamos un histograma al que añadimos la curva de la distribución normal. Empleamos la función set.seed para que generar números pseudoaleatorios y que los resultados sean los mismos si le asignamos el mismo número.

set.seed(123) 
hist(rnorm(10000), prob = TRUE, xlab = "x", main = "Histograma", 
     xlim = c(-3, 3), ylim = c(0, 0.4), las = 1)
curve(dnorm(x), xlim = c(-3, 3), add = TRUE, las = 1, 
      col = "darkblue", lwd = 2)
Creamos la tabla de frecuencias del histograma anterior:

set.seed(123)
rangos <- seq(-3, 3, 0.5)
intervalos <- cut(rnorm(10000), breaks = rangos) 
tabla.frec  <- table(intervalos)   # Crea la tabla de frecuencias
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

Entradas relacionadas

No hay comentarios:

Publicar un comentario

Nube de datos