2014-10-07

Superponer gráficos en R: distribución normal

Title Para superponer gráficos con R empleamos la función curve y su argumento add. Creamos una curva inicial en la que especificamos los argumentos del gráfico base, y le superponemos el resto de curvas.

El objetivo es obtener unos gráficos similares a los de la Wikipedia:

Función de densidad de probabilidad

# Creamos la curva inicial
curve(dnorm(x, 0, sqrt(0.2)), # Función dnorm a evaluar
      -5, 5, 1000, # Límites de x y nº de valores a evaluar
      col = "red", 
      las = 1, # Etiquetas alineadas horizontalmente
      ann = FALSE, # Sin títulos en los ejes
      xaxp = c(-5, 5, 10),  # Marcas del eje x
      ylim = c(0,1), # Límites del eje
      yaxs = "i") # Estilo del eje y, ajustado a los límites
# Añadimos el resto de curvas
curve(dnorm(x), add = TRUE, col = "green")
curve(dnorm(x, 0, sqrt(5)), add = TRUE, col = "blue")
curve(dnorm(x, -2, sqrt(0.5)), add = TRUE, col = "pink")
Le añadimos la leyenda con las letras griegas: μ (mi, mu en inglés) y σ (sigma).

# Lista (expression vector) con los textos de la leyenda
l <- expression(paste(mu, "= 0, ", sigma^2, "= 0.2"), paste(mu, "= 0, ", sigma^2, "= 1.0"), paste(mu, "= 0, ", sigma^2, "= 5.0"), paste(mu, "=-2, ", sigma^2, "= 0.5"))
legend("topright",          # Posición
       legend = l,          # Expression vector anterior
       lty = c(1, 1, 1, 1), # Líneas sólidas
       bty = "n",           # Sin bordes
       col = c("red", "green", "blue", "pink"),
       inset = .05,         # Espaciado del margen
       y.intersp = .75)     # Interlineado
# Para añadir líneas de división
grid()
En este segundo gráfico he eliminado el último argumento en la curva inicial (yaxs = "i") para que el eje de abscisas no corte con el de ordenadas en 0. Y añadí las líneas de división

Función de distribución acumulada de probabilidad

# Curvas
curve(pnorm(x, 0, sqrt(0.2)), -5, 5, col = "red", las = 1, ann = F, 
      xaxp = c(-5, 5, 10))
curve(pnorm(x),add = TRUE, col = "green")
curve(pnorm(x, 0, sqrt(5)), add = TRUE, col = "blue")
curve(pnorm(x, -2, sqrt(0.5)), add = TRUE, col = "pink")
# Leyenda
l <- expression(paste(mu, "= 0, ", sigma^2, "= 0.2"), paste(mu, "= 0, ", sigma^2, "= 1.0"), paste(mu, "= 0, ", sigma^2, "= 5.0"), paste(mu, "=-2, ", sigma^2, "= 0.5"))
legend("bottomright", legend = l, lty = c(1, 1, 1, 1), bty = "n", col = c("red", "green", "blue", "pink"), inset = .05, y.intersp = .75)
grid()

Referencias

No hay comentarios:

Publicar un comentario

Nube de datos