Datos

Considera el siguiente data frame para este tutorial, que consiste en dos variables numéricas y una categórica con tres grupos distintos.

set.seed(2)

# Simulación de datos
x <- runif(500)
y <- 4 * x ^ 2 + rnorm(length(x), sd = 4)
grupo <- ifelse(x < 0.4, "A",
                 ifelse(x > 0.8, "C", "B"))
x <- x + runif(length(x), -0.15, 0.15)

# Data frame
df <- data.frame(x = x, y = y, grupo = grupo)

Agregando elipses con stat_ellipse

Elipse por defecto

Puedes agregar una elipse a tu diagrama de dispersión añadiendo la capa stat_ellipse, tal y como se muestra en el ejemplo siguiente.

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

ggplot(df, aes(x = x, y = y)) +
  geom_point() +
  stat_ellipse()

Gráfico de dispersión con elipse t-Student multivariante en ggplot2

Personalización

El color, el tipo y ancho de línea de las elipses se puede personalizar con los argumentos color, linetype y lwd, respectivamente.

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

ggplot(df, aes(x = x, y = y)) +
  geom_point() +
  stat_ellipse(color = 2,
               linetype = 2,
               lwd = 1.2)

Personalización de la elipse en ggplot2

Intervalos de confianza

Por defecto, la función stat_ellipse dibuja un intervalo de confianza del 95% para una distribución t multivariante. Puedes modificar este nivel con el argumento level.

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

ggplot(df, aes(x = x, y = y)) +
  geom_point() +
  stat_ellipse(level = 0.9) +
  stat_ellipse(level = 0.95, color = 2) +
  stat_ellipse(level = 0.99, color = 3)

Intervalo de confianza de la elipse en ggplot2

Segmentos

El número por defecto de segmentos que se utilizan para crear la elipse es 51, pero puedes modificar este número con el argumento segments.

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

ggplot(df, aes(x = x, y = y)) +
  geom_point() +
  stat_ellipse(segments = 10)

ggplot2 segmentos de la elipse

Elipses por grupo

Cuando creas un gráfico de dispersión por grupo, las elipses se crean para cada grupo.

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

ggplot(df, aes(x = x, y = y, color = grupo)) +
  geom_point() +
  stat_ellipse()

Agregando elipses por grupo en ggplot2

Tipo de línea por grupo

También puedes cambiar el tipo de línea de las elipses basándose en el grupo, pasando la variable categórica al argumento linetype de la función aes.

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

ggplot(df, aes(x = x, y = y, color = grupo,
               linetype = grupo)) +
  geom_point() +
  stat_ellipse()

Tipo de línea de las elipses en R basando el grupo

Color del área de las elipses

Elipse geom polygon

Color del área

La función stat_ellipse usa geom_path por defecto para crear las elipses, pero si estableces geom = "polygon" se creará un polígono con área. Ten en cuenta que puedes cambiar el grado de transparencia con alpha.

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

ggplot(df, aes(x = x, y = y))+
  geom_point() +
  stat_ellipse(geom = "polygon",
               fill = 4, alpha = 0.25)

Color de las elipses por grupo en ggplot2

Color del área por grupo

Si creas un diagrama de dispersión por grupo y estableces geom = "polygon" dentro de stat_ellipse las áreas se colorearán por grupo.

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

ggplot(df, aes(x = x, y = y, color = grupo)) +
  geom_point() +
  stat_ellipse(geom = "polygon",
               aes(fill = grupo))

Transparencia de la elipse por grupo en ggplot

Color y transparencia del área por grupo

Tal y como se mostró en uno de los ejemplos anteriores, el argumento alpha se puede utilizar para establecer el grado de transparencia de las áreas.

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

ggplot(df, aes(x = x, y = y, color = grupo)) +
  geom_point() +
  stat_ellipse(geom = "polygon",
               aes(fill = grupo), 
               alpha = 0.25)

Tipos de elipses

Elipse normal

Por defecto, la función stat_ellipse asume una distribución t multivariante (type = "t"). Sin embargo, puedes establecer type = "norm" para asumir una distribución normal multivariante.

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

ggplot(df, aes(x = x, y = y, color = grupo)) +
  geom_point() +
  stat_ellipse(type = "t") +
  stat_ellipse(type = "norm", linetype = 2)

Elipse normal multivariante en ggplot2

Elipse euclídea

La opción restante es establecer type = "euclid" para dibujar una elipse euclídea. Ten en cuenta que la elipse no se verá circular salvo que establezcas coord_fixed. En este escenario, si estableces un intervalo con level, el nivel será el radio del círculo dibujado.

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

ggplot(df, aes(x = x, y = y, color = grupo)) +
  geom_point() +
  stat_ellipse(type = "euclid")

Elipse euclídea en ggplot2

También te puede interesar