Gráfico de densidad en ggplot2 con geom_density

Dada una variable continua puedes crear un gráfico de densidad en ggplot2 haciendo uso de la función geom_density.

# install.packages("ggplot2")
library(ggplot2)

# Datos
set.seed(14012021)
x <- rnorm(200, mean = 4)
df <- data.frame(x)

# Gráfico de densidad básico en ggplot2
ggplot(df, aes(x = x)) +
  geom_density()

Gráfico de densidad en ggplot2

La curva se puede personalizar de diferentes maneras, tales como cambiar el color, el ancho o el tipo de línea.

# install.packages("ggplot2")
library(ggplot2)

# Datos
set.seed(14012021)
x <- rnorm(200, mean = 4)
df <- data.frame(x)

# Gráfico de densidad en ggplot2
ggplot(df, aes(x = x)) +
  geom_density(color = 4,    # Color
               lwd = 1,      # Ancho
               linetype = 1) # Tipo

Estimación kernel de la densidad en ggplot2

También puedes colorear el área bajo la curva y establecer un nivel de transparencia con los argumentos fill y alpha, respectivamente.

# install.packages("ggplot2")
library(ggplot2)

# Datos
set.seed(14012021)
x <- rnorm(200, mean = 4)
df <- data.frame(x)

# Gráfico de densidad en ggplot2
ggplot(df, aes(x = x)) +
  geom_density(color = 4,
               fill = 4,
               alpha = 0.25)

Estimación tipo núcleo de la densidad con área coloreada en ggplot2

Selección del parámetro ventana

Cuando se calcula una estimación tipo núcleo es necesario seleccionar un parámetro ventana (parámetro de suavizado o bandwidth). Una ventana muy grande hará la curva muy suave, mientras que uno pequeño hará que la curva sea afilada.

El método utilizado por defecto para calcular la ventana se llama rule-of-thumb (regla del pulgar), pero puedes elegir otras opciones, utilizar un multiplicador de la ventana o escoger el valor que quieras, tal y como se muestra en los ejemplos siguientes.

geom_density bandwidth

Multiplicador de la ventana

# install.packages("ggplot2")
library(ggplot2)

# Datos
set.seed(14012021)
x <- rnorm(200, mean = 4)
df <- data.frame(x)

# Multiplicador de la ventana
ggplot(df, aes(x = x)) +
  geom_density(adjust = 1.75)

Selección de la ventana para la estimación de la densidad en ggplot2

Ventana de Scott (factor 1.06)

# install.packages("ggplot2")
library(ggplot2)

# Datos
set.seed(14012021)
x <- rnorm(200, mean = 4)
df <- data.frame(x)

# Custom bandwidth
ggplot(df, aes(x = x)) +
  geom_density(bw = "nrd")

Unbiased cross validation bandwidth para estimar la densidad

Validación cruzada insesgada

# install.packages("ggplot2")
library(ggplot2)

# Datos
set.seed(14012021)
x <- rnorm(200, mean = 4)
df <- data.frame(x)

# Validación cruzada insesgada
ggplot(df, aes(x = x)) +
  geom_density(bw = "ucv")

Cross validation bandwidth en ggplot2

Validación cruzada sesgada

# install.packages("ggplot2")
library(ggplot2)

# Datos
set.seed(14012021)
x <- rnorm(200, mean = 4)
df <- data.frame(x)

# Validación cruzada sesgada
ggplot(df, aes(x = x)) +
  geom_density(bw = "bcv")

SJ bandwidth en ggplot2

Método de Sheather & Jones

# install.packages("ggplot2")
library(ggplot2)

# Datos
set.seed(14012021)
x <- rnorm(200, mean = 4)
df <- data.frame(x)

# Método SJ
ggplot(df, aes(x = x)) +
  geom_density(bw = "SJ")

Selección del kernel

El kernel (núcleo) utilizado se puede cambiar con el argumento kernel. Las posibles opciones son "gaussian" (por defecto), "rectangular", "triangular", "epanechnikov", "biweight", "cosine" y "optcosine".

En el siguiente bloque de código puedes ver un ejemplo que utiliza un kernel rectangular en lugar de uno gaussiano. La decisión de qué kernel elegir dependerá de tus datos.

Kernel rectangular

# install.packages("ggplot2")
library(ggplot2)

# Datos
set.seed(14012021)
x <- rnorm(200, mean = 4)
df <- data.frame(x)

# Selección del kernel
ggplot(df, aes(x = x)) +
  geom_density(kernel = "rectangular")

Selección del kernel para estimar densidades en ggplot2

También te puede interesar