Fecha de la ultima revisión
## [1] "2024-04-15"
Cuando hay muchas variables en el análisis, a veces podría ser más fácil observar las diferencias entre ellas usando colores en vez de números; por ejemplo, para visualizar los coeficientes de correlación entre muchos pares de variables continuas. Un mapa de calor (heat map en inglés) nos puede ayudar a visualización correlaciones con gradientes de colores. Eso es práctico para las variables continuas. Continuaremos utilizando la base de datos de la orquídea Dipodium para explicar los tres pasos para construir un mapa de calor de los coeficientes de correlación.
Primero, necesitamos calcular los coeficientes de correlación con la opción cor. Luego visualizaremos los datos con la función kable.
## # A tibble: 1,365 × 21
## tree_number tree_species dbh plant_number ramet_number distance orientation
## <int> <chr> <dbl> <int> <int> <dbl> <dbl>
## 1 1 E.o 75 1 1 2.47 40
## 2 1 E.o 76 2 1 1.97 50
## 3 2 E.o 76 3 1 1.95 350
## 4 3 E.o 58 4 1 3.24 210
## 5 4 E.o NA 5 1 0.85 80
## 6 5 E.o 59 6 1 2.62 160
## 7 5 E.o 59 7 1 2.82 170
## 8 6 E.o 8 8 1 3.12 245
## 9 7 E.o 11.5 9 1 1.12 208
## 10 8 E.o 8.5 10 1 0.75 360
## # ℹ 1,355 more rows
## # ℹ 14 more variables: number_of_flowers <dbl>, height_inflo <dbl>,
## # herbivory <chr>, row_position_nf <int>, number_flowers_position <int>,
## # number_of_fruits <int>, perc_fr_set <dbl>, pardalinum_or_roseum <chr>,
## # fruit_position_effect <int>, frutos_si_o_no <int>,
## # p_or_r_infl_lenght <chr>, num_of_fruits <int>, species_name <chr>,
## # cardinal_orientation <int>
DWCor=round(cor(dipodium[c(3, 6, 7, 8, 9, 13)],
use="pairwise.complete.obs"),3)
kable(DWCor) %>%
kable_styling(bootstrap_options = "striped", full_width = F, font_size = 10)
dbh | distance | orientation | number_of_flowers | height_inflo | number_of_fruits | |
---|---|---|---|---|---|---|
dbh | 1.000 | 0.329 | 0.116 | -0.035 | -0.100 | -0.009 |
distance | 0.329 | 1.000 | -0.074 | 0.042 | -0.095 | -0.157 |
orientation | 0.116 | -0.074 | 1.000 | -0.076 | -0.093 | 0.030 |
number_of_flowers | -0.035 | 0.042 | -0.076 | 1.000 | 0.628 | 0.234 |
height_inflo | -0.100 | -0.095 | -0.093 | 0.628 | 1.000 | 0.106 |
number_of_fruits | -0.009 | -0.157 | 0.030 | 0.234 | 0.106 | 1.000 |
Segundo, reorganizaremos los datos en un data.frame usando la librería reshape2 y la opción melt. En nuestro caso, lo que queremos es producir un data.frame con solo dos columnas con las variables en pares con su respectivo valor de correlación. En el nuevo data.frame que llamamos DWMelt, vemos tres columnas cada una representando las variables y la última con el valor de correlación.
## x1 y1 Correlation
## 1 dbh dbh 1.000
## 2 distance dbh 0.329
## 3 orientation dbh 0.116
## 4 number_of_flowers dbh -0.035
## 5 height_inflo dbh -0.100
## 6 number_of_fruits dbh -0.009
Finalmente, el tercer paso es producir la figura con geom_tile. El gráfico de la Figura se produce sin modificar los parámetros. En el segundo gráfico se modifican los colores usando la guía de color para asignarlos a diferentes grupos a la vez que se remueven los nombres de los ejes de X y de Y. A este mapa de calor básico se le asignan las variables de x y y y el valor que queremos que tenga un rango de color, en este caso el valor de correlación. Para remover el nombre de la variables x y y, se usa labs(x=NULL, y=NULL), ya que ggplot2 lo pone automáticamente cuando se construye un gráfico. Note que para remover el nombre de la columna en los ejes se usa xlab(““) y ylab(““). Aqui se añade solamente xlab(”“) y nota que ahora no se ve el nombre de la columna.
ggplot(DWMelt, aes(x=x1, y=y1))+
geom_tile(aes(fill=Correlation))+
theme(axis.text.y=element_text(size=10, face="bold"),
axis.text.x=element_text(size=8, face="bold", angle = 90, hjust = 1))+
labs(fill="Correlación")+
xlab("")
Le cambiamos los colores del gráfico, usando scale_fill_gradient2. Asignamos los valores más bajos al color amarillo, los más altos al rojo y los valores intermedios al color anaranjado. Para esta opción de scale_fill_gradient2, hay que asignar tanto los colores al extremo y el del medio. El resultado se puede ver en la Figura. Note que los valores de correlaciones varían de -1 a +1. El límite del rango se asigna especificando limits=c(valor mínimo, valor máximo). Dado esto, en este ejemplo la intensidad de colores no es tan amplia porque no hay valores muy negativos.
ggplot(DWMelt, aes(x=x1, y=y1))+
geom_tile(aes(fill=Correlation))+
scale_fill_gradient2(low="black",
mid="blue", high="red",
guide=guide_colorbar(ticks=FALSE,
barheight=5, limits=c(-.5,1)))+
theme_minimal()+
labs(x=NULL, y=NULL)+
theme(axis.title=element_text(size=20,face="bold"),
axis.text.y=element_text(size=10, face="bold"),
axis.text.x=element_text(size=8, face="bold", angle = 90, hjust = 1))+
labs(fill="Correlación")
En el siguiente gráfico, se cambia el valor intermedio a blanco (para valores más cercanos a cero).
ggplot(DWMelt, aes(x=x1, y=y1))+
geom_tile(aes(fill=Correlation))+
scale_fill_gradient2(low="black",
mid="white", high="red",
guide=guide_colorbar(ticks=FALSE,
barheight=5, limits=c(-1,1)))+
theme_minimal()+
labs(x=NULL, y=NULL)+
theme(axis.title=element_text(size=20,face="bold"),
axis.text.y=element_text(size=10, face="bold"),
axis.text.x=element_text(size=8, face="bold", angle = 90, hjust = 1))+
labs(fill="Correlación")
Se puede también hacer la selección de solamente dos colores con la función scale_fill_gradient (vea que esa opción no es lo mismo que scale_fill_gradient2). En este caso los gradientes de colores en el centro de la distribución (el cero) no está definido, y pudiese ser más difícil visualizar valores cerca de 0.
ggplot(DWMelt, aes(x=x1, y=y1))+
geom_tile(aes(fill=Correlation))+
scale_fill_gradient(low="white",
high="red", limits=c(-1,1))+
theme_minimal()+labs(x=NULL, y=NULL)+
theme(
axis.text.y=element_text(size=10, face="bold"),
axis.text.x=element_text(size=8, face="italic", angle = 90, hjust = 1))+
labs(fill="Correlación")
La función ggcor tiene la ventaja de producir un gráfico de calor que representa solamente un espejo de los resultados. En los gráficos anteriores las misma información estaba ariba y abajo de la diagonal. Este represente solamente uno de los dos. Nota aqui que la función ggcorr no es parte de ggplot2, pero es una función que se puede usar para visualizar correlaciones del paquete GGally. En este caso, se usa la función ggcorr para visualizar las correlaciones entre las variables de la base de datos de la orquídea Dipodium. Para cambiar el area, puede usar dentro de la misma parentesis geom con uno de los siguiente “tile”, “circle”, “text” or “blank”.
En este caso se usa geom = “blank” para no mostrar los cuadros de correlación. Se añade la opción label = TRUE para mostrar los valores de correlación en los cuadros. Se añade la opción hjust = 0.75 para ajustar la posición de los valores de correlación en los cuadros. Se añade la opción method = c(“pairwise”, “pearson”) para seleccionar el método de correlación. En este caso se usa el método de correlación de Pearson. Para ver los valores de correlación, se añade la opción geom_point. Se añade la opción size = 20 para aumentar el tamaño de los puntos. Se añade la opción aes(color = coefficient > 0, alpha = abs(coefficient) > 0.5) para asignar colores a los puntos dependiendo de si la correlación es positiva o negativa. Se añade la opción scale_alpha_manual para asignar transparencia a los puntos dependiendo de si la correlación es mayor a 0.5. Se añade la opción guides para remover las guías de color y transparencia. En este caso, se remueven las
Para un segundo ejemplo de ggcorr
En el segundo gráfico, se usa geom = “blank”, y se añade la opción geom_point para añadir puntos en los cuadros de correlación. Se añade la opción color = coefficient > 0 para asignar colores a los puntos dependiendo de si la correlación es positiva o negativa. Se añade la opción alpha = abs(coefficient) > 0.5 para asignar transparencia a los puntos dependiendo de si la correlación es mayor a 0.5. Se añade la opción scale_alpha_manual para tener colores más tenue.
How do you change low and high colors in ggcorr?
ggcorr(DWCor, geom = "blank", label = TRUE, hjust = 0.75 ) +
geom_point(size = 20, aes(color = coefficient > 0, alpha = abs(coefficient) > 0.5)) +
scale_alpha_manual(values = c("TRUE" = 0.25, "FALSE" = 0)) +
scale_color_manual(values = c("TRUE" = "pink", "FALSE" = "orange")) +
guides(scale = "none", alpha = FALSE)
Con datos originales
Aquí los análisis con los datos originales, no hay que calcular los coeffcientes antes de hacer el mapa de calor.
Ori=dipodium[c(3, 6, 7, 8, 9, 13)]
ggcorr(Ori, geom = "blank", method=c("pairwise.complete.obs", "kendall") , label = TRUE, hjust = 0.75) +
geom_point(size = 20, aes(color = coefficient > 0, alpha = abs(coefficient) > 0.5)) +
scale_alpha_manual(values = c("TRUE" = 0.25, "FALSE" = 0)) +
guides(scale = "none", alpha = FALSE)
Para muchos ejemplos vea este enlace. https://briatte.github.io/ggcorr/
ggplot(el archivo de datos, aes(x= la variable discreta, y=variable continua, ymax= el valor máximo, ymin= el valor mínimo))
geom_tile(x, y, alpha, color, fill, linetype, size)
alpha: la intensidad del color
color: el color de la línea
fill: el color de los cuadros
linetype: representa el estilo de línea
size: representa el ancho de la línea
ggcorr(df, method=c(“pairwise”, “pearson”, “kendall”, “spearman”))