Crear y visualizar una matriz de correlación en R

Jesse John 21 junio 2023
  1. la función cor() en R
  2. Prepare los datos para crear una matriz de correlación en R
  3. Visualice una matriz de correlación en R
  4. Referencias
Crear y visualizar una matriz de correlación en R

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.

  1. 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.

  2. Se requiere una paleta de colores divergente porque los valores de los coeficientes de correlación pueden variar de negativos a positivos.

  3. Usaremos una paleta amigable para los daltónicos. Esta paleta puede proporcionar hasta 11 valores de color distintos.

  4. 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).

Gráfica de matriz de correlación

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.

Gráfico de una matriz de correlación dada

Referencias

  1. Para las funciones dplyr, consulte el paquete documentación.
  2. La página CRAN del paquete GGally enlaza con su manual.
Autor: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.

Artículo relacionado - R Matrix