Los diagramas de puntos son útiles para representar dos variables numéricas, tanto discretas como continuas, pero también podemos utilizarlos para diferenciar los datos asociados a distintas categorías utilizando distintos colores, formas o incluso tamaño de los puntos. Además, podemos representar la recta de regresión de los datos. Para todo ello, vamos a utilizar las librerías ggplot2 y ggpubr.

library(ggplot2)
library(ggpubr)

Vamos a comenzar generando nuestro propio conjunto de datos. Éste está formado por una variable cualitativa con 5 categorías (modelo), dos variables cuantitativas continuas (x,y) y una variable cuantitativa discreta (peso).

#Indicamos el número de datos que deseamos generar.
n <- 100
#A continuación, vamos a generar distintas variables numéricas (continuas, discretas), así como variables categóricas. 
v1 <- sort(sample(c("A","B","C","D","E"),n,replace = TRUE))
v2 <- numeric()
v3 <- numeric()
v4 <- numeric()
for(i in 1:5){
  va <- runif(n/5,0,10)
  v2 <- c(v2,va)
  v3 <- c(v3,2*i*va+rnorm(n/5))
  v4 <- c(v4,sample(1:5,n/5,replace = TRUE))
}
#Para poder emplear la librería ggplot2 es necesario considerar el conjunto de datos como un data.frame 
data <- data.frame(modelo=v1,x=v2,y=v3,peso=v4)

Una vez creado nuestro conjunto de datos, vamos a empezar representando las variables numéricas con un diagrama de puntos. Para ello, la librería ggplot2 dispone de la función geom_point(). Dentro de la estética de la función aes() vamos a representar las variables x e y, y además, como se dispone de cinco categorías distintas (modelo), vamos a representar el diagrama de puntos para cada categoría en distintos gráficos. Utilizamos la función facet_wrap().

ggplot(data)+
  geom_point(aes(x=x,y=y))+
  facet_wrap(vars(modelo))

Otra ventaja que tiene esta librería es que nos permite representar en un mismo gráfico los puntos de todas las categorías diferenciándolas, por ejemplo, por colores.

ggplot(data)+
  geom_point(aes(x=x,y=y,colour=modelo))

Al igual que ocurría con la función básica plot, podemos modificar el tamaño de los puntos, añadir título al gráfico, modificar los ejes (con la función labs), e incluso la leyenda (con scale_.._discrete), o cambiar el estilo del gráfico (empleando theme_..). Para modificar la posición de la leyenda, podemos utilizar la función theme()

ggplot(data)+
  geom_point(aes(x=x,y=y,colour=modelo))+
  labs(title="Diagrama de puntos",x="x",y="y",family="Times New Roman", font=2)+
  scale_colour_discrete(name="Modelo",labels=c("A","B","C","D","E"))+
  theme_minimal()+
  theme(legend.position = "top")

Además, podemos modificar su forma en función de su categoría (shape).

ggplot(data)+
  geom_point(aes(x=x,y=y,shape=modelo,colour=modelo))+
  labs(title="Diagrama de puntos",x="x",y="y",family="Times New Roman", font=2)+
  theme_classic()+
  theme(legend.position = "left")

En nuestro conjunto de datos disponemos de la variable discreta peso, que puede representar los pesos para cada valor, la podemos utilizar para variar los tamaños de los puntos (size).
Además, podemos eliminar leyendas utilizando la función guides(). Para que se puedan diferenciar con claridad los puntos, se puede utilizar alpha = .. en la función geom_point() para indicar la transparencia de los puntos.

ggplot(data)+
  geom_point(aes(x=x,y=y,colour=modelo,size=peso),alpha=0.5)+
  labs(title="Diagrama de puntos",x="x",y="y",family="Times New Roman", font=2)+
  scale_colour_discrete(name="Modelo",labels=c("A","B","C","D","E"))+
  guides(size="none")+
  theme_bw()+
  theme(legend.position = "bottom")

Una vez que hemos visto varias formas de representar un diagrama de puntos utilizando la librería ggplot2, veamos que sobre dicha gráfica podemos representar la recta de regresión de los puntos. Para ello se emplea la función geom_smooth().

ggplot(data)+
  geom_point(aes(x=x,y=y,colour=modelo),alpha=0.75)+
  geom_smooth(aes(x=x,y=y,colour=modelo),formula=y~x, method="lm",se=FALSE)+
  labs(title="Diagrama de puntos",x="x",y="y",family="Times New Roman", font=2)+
  scale_colour_discrete(name="Modelo",labels=c("A","B","C","D","E"))+
  theme_linedraw()

Como observamos en ambas funciones o capas, la estética es la misma, es decir, aes(x=x,y=y,colour=modelo). En estos casos, podemos añadir la estética como otra capa más, de modo que se escribe una única vez. Además, si se quiere añadir el intervalo de confianza al nivel de confianza del 90%, podemos emplear se=TRUE y level=0.90 en la función geom_smooth().

ggplot(data)+
  aes(x=x,y=y,colour=modelo)+
  geom_point(alpha=0.75)+
  geom_smooth(formula=y~x, method="lm",se=TRUE, level=0.9,)+
  labs(title="Diagrama de puntos",x="x",y="y",family="Times New Roman", font=2)+
  scale_colour_discrete(name="Modelo",labels=c("A","B","C","D","E"))+
  theme_light()

Por otro lado, sobre el diagrama de puntos también podemos añadir la ecuación de la recta de regresión (utilizando la función stat_regline_equation()de la librería ggpubr). Para mostrarlo con mayor claridad, consideremos un nuevo conjunto de datos.

n <- 100
v1 <- runif(n,0,10)
v2 <- sample(2:5,1)*v1 + rnorm(n)

data <- data.frame(x=v1,y=v2)

ggplot(data)+
  aes(x=x,y=y)+
  geom_point(alpha=0.75)+
  geom_smooth(formula=y~x, method="lm",se=TRUE,level=0.95)+
  labs(title="Diagrama de puntos",x="x",y="y",family="Times New Roman", font=2)+
  theme_bw()+
  stat_regline_equation(label.x=6,label.y=5)

Además, podemos añadir el valor de \(R^2\) de la recta de regresión, para ello utilizaremos la función stat_cor().

ggplot(data)+
  aes(x=x,y=y)+
  geom_point(alpha=0.75)+
  geom_smooth(formula=y~x, method="lm",se=TRUE,level=0.95)+
  labs(title="Diagrama de puntos",x="x",y="y",family="Times New Roman", font=2)+
  theme_bw()+
  stat_regline_equation(label.x=6,label.y=5)+
  stat_cor(aes(label=..rr.label..),label.x=6,label.y=2)