Crear y visualizar una matriz de correlación en R
-
la función
cor()
en R - Prepare los datos para crear una matriz de correlación en R
- Visualice una matriz de correlación en R
- Referencias
Este artículo primero verá cómo preparar datos para crear una matriz de correlación. Luego crearemos una matriz de correlación y la visualizaremos.
Nuestro código de muestra utilizará los paquetes dplyr
, ggplot2
y GGally
. Estos paquetes deben instalarse si no están disponibles.
Código de ejemplo:
# Install required packages.
# Uncomment and run the concerned line.
# install.packages("dplyr")
# install.packages("ggplot2")
# install.packages("GGally")
la función cor()
en R
Base R proporciona la función cor()
para calcular el coeficiente de correlación entre dos vectores numéricos o la matriz de correlación para las columnas numéricas de un marco de datos o matriz.
La documentación de la función proporciona detalles sobre el uso de sus argumentos, x
, y
, uso
y método
.
El argumento x
toma los datos. El argumento use
es obligatorio si falta algún dato.
El método
es pearson
por defecto.
Prepare los datos para crear una matriz de correlación en R
El coeficiente de correlación solo se puede calcular para datos numéricos. Los datos no deben verse simplemente como números; debe estar en formato numérico.
Hay columnas de dos factores en el siguiente marco de datos de muestra compuesto por números y una columna de caracteres.
La función cor()
no se puede utilizar ni siquiera en las columnas con números porque esos números no se almacenan como valores numéricos.
Código de ejemplo:
# Vectors, data frame.
f1 = as.factor(c(7,7,3,11,7,5,5))
str(f1)
f2 = as.factor(c(6,6,6,12,6,4,2))
str(f2)
s = letters[4:10]
fr = data.frame(s,f1,f2)
# The data frame shows numbers.
fr
# But the numbers are not stored in numeric format.
str(fr)
# Correlation matrix cannot be computed.
cor(fr[2:3])
Producción :
> # The data frame shows numbers.
> fr
s f1 f2
1 d 7 6
2 e 7 6
3 f 3 6
4 g 11 12
5 h 7 6
6 i 5 4
7 j 5 2
> # But the numbers are not stored in numeric format.
> str(fr)
'data.frame': 7 obs. of 3 variables:
$ s : chr "d" "e" "f" "g" ...
$ f1: Factor w/ 4 levels "3","5","7","11": 3 3 1 4 3 2 2
$ f2: Factor w/ 4 levels "2","4","6","12": 3 3 3 4 3 2 1
> # Correlation matrix cannot be computed.
> cor(fr[2:3])
Error in cor(fr[2:3]) : 'x' must be numeric
Supongamos que los datos son numéricos pero se almacenaron como factores. Podemos convertir las columnas en cuestión a numéricas.
Esto implica dos pasos para obtener los números correctos en lugar de los niveles de los factores. Primero, convertimos al carácter y luego a numérico.
En el código de ejemplo, usaremos las funciones mutate()
, across()
y all_of()
y el operador de canalización, %>%
, del paquete dplyr
. La conversión real se realiza mediante una función personalizada.
Código de ejemplo:
library(dplyr)
# This custom function does the actual conversion.
con_fn = function(k){
return(as.numeric(as.character(k)))
}
# We will convert specific columns to numeric.
fr2 = fr %>% mutate(across(all_of(c("f1","f2")), con_fn))
# The columns are now numeric.
str(fr2)
# Compute the correlation matrix.
cor(fr2[2:3]) # No error now.
Producción :
> # The columns are now numeric.
> str(fr2)
'data.frame': 7 obs. of 3 variables:
$ s : chr "d" "e" "f" "g" ...
$ f1: num 7 7 3 11 7 5 5
$ f2: num 6 6 6 12 6 4 2
> # Compute the correlation matrix.
> cor(fr2[2:3]) # No error now.
f1 f2
f1 1.0000000 0.7833495
f2 0.7833495 1.0000000
Hemos creado con éxito una matriz de correlación para las dos variables numéricas.
Visualice una matriz de correlación en R
Antes de crear la visualización, agregaremos algunas columnas más. La última columna es de tipo int
, que también es numérica.
Código de ejemplo:
# Reproducible vectors.
set.seed(555)
n1 = round(rnorm(7)+2,1)
set.seed(222)
n2 = sample(22:42, 7, replace=TRUE)
# Join the columns to the data frame.
fr3 = cbind(fr2, n1, n2)
# Check the structure.
str(fr3)
# Compute the correlation matrix.
cor(fr3[2:5])
Producción :
> # Check the structure.
> str(fr3)
'data.frame': 7 obs. of 5 variables:
$ s : chr "d" "e" "f" "g" ...
$ f1: num 7 7 3 11 7 5 5
$ f2: num 6 6 6 12 6 4 2
$ n1: num 1.7 2.5 2.4 3.9 0.2 2.9 1.8
$ n2: int 36 39 41 30 31 30 39
> # Compute the correlation matrix.
> cor(fr3[2:5])
f1 f2 n1 n2
f1 1.0000000 0.7833495 0.3124483 -0.5809116
f2 0.7833495 1.0000000 0.4938292 -0.4142586
n1 0.3124483 0.4938292 1.0000000 -0.1132145
n2 -0.5809116 -0.4142586 -0.1132145 1.0000000
Usaremos la función ggcorr()
del paquete GGally
para visualizar la matriz de correlación. Este paquete depende del paquete ggplot2
.
Es importante tener en cuenta que esta función hace dos cosas. Calcula la matriz de correlación y luego la traza.
Por defecto, la función ggcorr()
utiliza observaciones por pares
(si faltan valores) y calcula el coeficiente de correlación de pearson
. También utiliza paletas ColorBrewer
.
-
Aunque el color se puede clasificar de forma continua, utilizaremos 6 valores discretos. El argumento
nbreaks=6
consigue este resultado.La función divide el rango -1 a 1 en 6 intervalos iguales.
-
Se requiere una paleta de colores divergente porque los valores de los coeficientes de correlación pueden variar de negativos a positivos.
-
Usaremos una paleta amigable para los daltónicos. Esta paleta puede proporcionar hasta 11 valores de color distintos.
-
El argumento
label=TRUE
traza los valores de correlación en los mosaicos de colores.
Código de ejemplo:
# Load the GGally library.
# This loads ggplot2 also.
library(GGally)
# Visualize the correlation matrix.
ggcorr(fr3[2:5], nbreaks=6, palette="PuOr", label=TRUE, label_size=5, size=8, legend.size=10)
Un gráfico de la matriz de correlación. Los tonos más oscuros representan una mayor correlación.
La correlación varía de -1 (representado por naranja) a 1 (representado por púrpura).
Supongamos que tenemos una matriz de correlación y queremos graficarla. Podemos usar la función ggcorr()
especificando data=NULL
y proporcionando una matriz de correlación usando cor_matrix
.
Código de ejemplo:
# Just three columns, for illustration.
fr4 = cor(fr3[2:4])
fr4
# Only visualize with given correlation matrix.
ggcorr(data = NULL, cor_matrix= fr4, nbreaks=7, label=TRUE, label_size=5, size=8, legend.size=10)
La gráfica de una matriz de correlación dada.
Referencias
- Para las funciones
dplyr
, consulte el paquete documentación. - La página CRAN del paquete
GGally
enlaza con su manual.