Un gráfico de la array de correlación se conoce como Correlograma . Esto generalmente se usa para resaltar las variables en un conjunto de datos o una tabla de datos que están más correlacionadas. Los coeficientes de correlación en el gráfico están coloreados según el valor. Según el grado de asociación entre las variables, podemos reordenar la array de correlación en consecuencia.
Correlograma en R
En R , usaremos el paquete «corrplot» para implementar un correlograma. Por lo tanto, para instalar el paquete desde R Console debemos ejecutar el siguiente comando:
install.packages("corrplot")
Una vez que hayamos instalado el paquete correctamente, cargaremos el paquete en nuestro script R usando la función library() de la siguiente manera:
library("corrplot")
Ahora veremos cómo implementar el correlograma en la programación R. Veremos la explicación detallada de la implementación con un ejemplo paso a paso.
Ejemplo:
Paso 1: [Datos para análisis de correlación]: el primer trabajo es seleccionar un conjunto de datos adecuado para implementar el concepto. Para nuestro ejemplo, usaremos el conjunto de datos «mtcars» , que es un conjunto de datos incorporado de R. Veremos algunos de los datos en este conjunto de datos.
R
# Correlogram in R # including the required packages library(corrplot) head(mtcars)
Producción:
head(mtcars) mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
Paso 2: [Cálculo de la array de correlación]: ahora calcularemos una array de correlación para la que queremos trazar el correlograma. Usaremos la función cor() para calcular una array de correlación.
R
# Correlogram in R # required packages library(corrplot) head(mtcars) #correlation matrix M<-cor(mtcars) head(round(M,2))
Producción:
head(round(M,2)) mpg cyl disp hp drat wt qsec vs am gear carb mpg 1.00 -0.85 -0.85 -0.78 0.68 -0.87 0.42 0.66 0.60 0.48 -0.55 cyl -0.85 1.00 0.90 0.83 -0.70 0.78 -0.59 -0.81 -0.52 -0.49 0.53 disp -0.85 0.90 1.00 0.79 -0.71 0.89 -0.43 -0.71 -0.59 -0.56 0.39 hp -0.78 0.83 0.79 1.00 -0.45 0.66 -0.71 -0.72 -0.24 -0.13 0.75 drat 0.68 -0.70 -0.71 -0.45 1.00 -0.71 0.09 0.44 0.71 0.70 -0.09 wt -0.87 0.78 0.89 0.66 -0.71 1.00 -0.17 -0.55 -0.69 -0.58 0.43
Paso 3: [Visualización usando el argumento Método]: Primero, veremos cómo visualizar el correlograma en diferentes formas como círculos, pastel, elipse, etc. Usaremos la función corrplot() y mencionaremos la forma en sus argumentos de método .
R
# Correlogram in R # required packages library(corrplot) head(mtcars) #correlation matrix M<-cor(mtcars) head(round(M,2)) #visualizing correlogram #as circle corrplot(M, method="circle") # as pie corrplot(M, method="pie") # as colour corrplot(M, method="color") # as number corrplot(M, method="number")
Producción:
Paso 4: [Visualización usando argumento de tipo]: Veremos cómo visualizar el correlograma en diferentes tipos como arrays triangulares superior e inferior. Usaremos la función corrplot() y mencionaremos el argumento de tipo .
R
# Correlogram in R # required package library(corrplot) head(mtcars) # correlation matrix M<-cor(mtcars) head(round(M,2)) # types # upper triangular matrix corrplot(M, type="upper") # lower triangular matrix corrplot(M, type="lower")
Producción:
Paso 5: [Reordenar el correlograma]: Veremos cómo reordenar el correlograma. Usaremos la función corrplot() y mencionaremos el argumento order . Vamos a utilizar el orden «hclust» para la agrupación jerárquica.
R
# Correlogram in R # required packages library(corrplot) head(mtcars) # correlation matrix M<-cor(mtcars) head(round(M, 2)) # reordering # correlogram with hclust reordering corrplot(M, type = "upper", order = "hclust") # Using different color spectrum col<- colorRampPalette(c("red", "white", "blue"))(20) corrplot(M, type="upper", order = "hclust", col = col) # Change background color to lightblue corrplot(M, type="upper", order="hclust", col = c("black", "white"), bg = "lightblue")
Producción:
Paso 6: [Cambiar el color en el correlograma]: Ahora veremos cómo cambiar el color en el correlograma. Para este propósito, instalamos el paquete “RColorBrewer” y lo agregamos a nuestro script R para usar los colores de su paleta.
R
# Correlogram in R # required package library(corrplot) library(RColorBrewer) head(mtcars) # correlation matrix M<-cor(mtcars) head(round(M, 2)) # changing colour of the correlogram corrplot(M, type="upper", order = "hclust", col=brewer.pal(n = 8, name = "RdBu")) corrplot(M, type="upper", order = "hclust", col=brewer.pal(n = 8, name = "RdYlBu")) corrplot(M, type="upper", order = "hclust", col=brewer.pal(n = 8, name = "PuOr"))
Producción:
Paso 7: [Cambiar el color y la rotación de las etiquetas de texto]: Para ello, incluiremos los argumentos tl.col y tl.str en la función corrplot() .
R
# Correlogram in R # required packages library(corrplot) library(RColorBrewer) head(mtcars) # correlation matrix M<-cor(mtcars) head(round(M, 2)) # changing the colour and # rotation of the text labels corrplot(M, type = "upper", order = "hclust", tl.col = "black", tl.srt = 45)
Producción:
Paso 8: [Cálculo del valor p de las correlaciones]: antes de que podamos agregar una prueba de significancia al correlograma, calcularemos el valor p de las correlaciones usando una función R personalizada de la siguiente manera:
R
# Correlogram in R # required package library(corrplot) head(mtcars) M<-cor(mtcars) head(round(M,2)) # mat : is a matrix of data # ... : further arguments to pass # to the native R cor.test function cor.mtest <- function(mat, ...) { mat <- as.matrix(mat) n <- ncol(mat) p.mat<- matrix(NA, n, n) diag(p.mat) <- 0 for (i in 1:(n - 1)) { for (j in (i + 1):n) { tmp <- cor.test(mat[, i], mat[, j], ...) p.mat[i, j] <- p.mat[j, i] <- tmp$p.value } } colnames(p.mat) <- rownames(p.mat) <- colnames(mat) p.mat } # matrix of the p-value of the correlation p.mat <- cor.mtest(mtcars) head(p.mat[, 1:5])
Producción:
head(p.mat[, 1:5]) mpg cyl disp hp drat mpg 0.000000e+00 6.112687e-10 9.380327e-10 1.787835e-07 1.776240e-05 cyl 6.112687e-10 0.000000e+00 1.802838e-12 3.477861e-09 8.244636e-06 disp 9.380327e-10 1.802838e-12 0.000000e+00 7.142679e-08 5.282022e-06 hp 1.787835e-07 3.477861e-09 7.142679e-08 0.000000e+00 9.988772e-03 drat 1.776240e-05 8.244636e-06 5.282022e-06 9.988772e-03 0.000000e+00 wt 1.293959e-10 1.217567e-07 1.222320e-11 4.145827e-05 4.784260e-06
Paso 9: [Agregar prueba de significado]: Necesitamos agregar el argumento sig.level e insig en la función corrplot() . Si el valor p es mayor que 0,01, entonces es un valor insignificante para el cual las celdas están en blanco o cruzadas.
R
# Correlogram in R # required package library(corrplot) head(mtcars) M<-cor(mtcars) head(round(M, 2)) library(corrplot) # mat : is a matrix of data # ... : further arguments to pass # to the native R cor.test function cor.mtest <- function(mat, ...) { mat <- as.matrix(mat) n <- ncol(mat) p.mat<- matrix(NA, n, n) diag(p.mat) <- 0 for (i in 1:(n - 1)) { for (j in (i + 1):n) { tmp <- cor.test(mat[, i], mat[, j], ...) p.mat[i, j] <- p.mat[j, i] <- tmp$p.value } } colnames(p.mat) <- rownames(p.mat) <- colnames(mat) p.mat } # matrix of the p-value of the correlation p.mat <- cor.mtest(mtcars) head(p.mat[, 1:5]) # Specialized the insignificant value # according to the significant level corrplot(M, type = "upper", order = "hclust", p.mat = p.mat, sig.level = 0.01) # Leave blank on no significant coefficient corrplot(M, type = "upper", order = "hclust", p.mat = p.mat, sig.level = 0.01, insig = "blank")
Producción:
Paso 10: [Personalizar el Correlograma]: Podemos personalizar nuestro correlograma usando los argumentos requeridos en la función corrplot() y ajustando sus valores.
R
# Correlogram in R # required package library(corrplot) library(RColorBrewer) head(mtcars) M<-cor(mtcars) head(round(M,2)) # customize the correlogram library(corrplot) col <- colorRampPalette(c("#BB4444", "#EE9988", "#FFFFFF", "#77AADD", "#4477AA")) corrplot(M, method = "color", col = col(200), type = "upper", order = "hclust", addCoef.col = "black", # Add coefficient of correlation tl.col="black", tl.srt = 45, # Text label color and rotation # Combine with significance p.mat = p.mat, sig.level = 0.01, insig = "blank", # hide correlation coefficient # on the principal diagonal diag = FALSE )
Producción: