Un gráfico muy habitual a la hora de construir modelos de riesgo para el cálculo de tarifas es el gráfico de correlaciones de la V de Cramer, que nos sirve para medir la correlación entre factores, entre variables cualitativas (hace muchos años ya escribí sobre el tema). Hoy os traigo la creación de un corrplot con R aplicado a la V de Cramer y, además, os descubro una función muy elegante para realizar este análisis de correlaciones entre factores; esta función está sacada de StackOverflow (cómo no) y añado un análisis gráfico que nos permite conocer algunas opciones de corrplot.

library(vcd)
library(corrplot)
library(tidyverse)

data(mtcars)

predictoras <- c("cyl", "vs", "am", "gear", "carb")
correlaciones <- select(mtcars, predictoras)

# Partimos de una matriz vacía con las dimensiones apropiadas
empty_m <- matrix(ncol = length(correlaciones),
                  nrow = length(correlaciones),
                  dimnames = list(names(correlaciones),
                                  names(correlaciones)))

# Calculamos el estadístico y vamos rellenando la matriz
calculate_cramer <- function(m, df) {
  for (r in seq(nrow(m))) {
    for (c in seq(ncol(m))) {
      m[r, c] <- assocstats(table(df[[r]], df[[c]]))$cramer
    }
  }
  return(m)
}

Lo que hace la brillante función es, partiendo de una matriz cuadrada con los factores, ir rellenando con el correspondiente cálculo de la V de Cramer. El resultado final será igual que una matriz de correlaciones, por lo que podremos realizar el gráfico.

cor_matrix <- calculate_cramer(empty_m, correlaciones)

# Ya podemos graficarlo
corrplot(cor_matrix, method = "number", is.corr = FALSE, 
         type = "upper", diag = FALSE, cl.lim = c(0, 1))

remove(correlaciones)

El resultado:

Gráfico de la V de Cramer con R

Aspectos interesantes con la función corrplot: con method = "number" sale el valor (no me gustan las bolas, aunque podéis probar con pie); mejor poned is.corr = FALSE; con type = "upper" sale la parte superior de la matriz; quitamos la diagonal, que es 1, con diag = FALSE; y, como la V de Cramer es un valor que va entre 0 y 1, con cl.lim establecemos los límites de la leyenda en el gráfico de correlaciones. A partir de aquí, cada uno que establezca un umbral para determinar que dos factores están correlados; yo, por ejemplo, lo establezco en 0.33. Saludos.