1 Introducción a la Estadística Descriptiva

1.1 Estadística Descriptiva

Durante este módulo vamos a trabajar con el dataset diamonds que viene como parte de la instalación de tidyverse

1.1.1 Summary de los datos

Para cargar un librería utilizamos:

install.packages('tidyverse')

require(tidyverse)

Para ver los primeros 10 renglones del dataset utilizamos la función head(datos, 10)

#Cargamos la libreria
require(tidyverse)
## Loading required package: tidyverse
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.3     v purrr   0.3.4
## v tibble  3.1.0     v dplyr   1.0.2
## v tidyr   1.1.2     v stringr 1.4.0
## v readr   1.4.0     v forcats 0.5.0
## Warning: package 'ggplot2' was built under R version 4.0.3
## Warning: package 'tibble' was built under R version 4.0.4
## Warning: package 'readr' was built under R version 4.0.3
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
head(diamonds, 10)

Para obtener información descriptiva de todo el dataset usamos summary()

summary(diamonds)
##      carat               cut        color        clarity          depth      
##  Min.   :0.2000   Fair     : 1610   D: 6775   SI1    :13065   Min.   :43.00  
##  1st Qu.:0.4000   Good     : 4906   E: 9797   VS2    :12258   1st Qu.:61.00  
##  Median :0.7000   Very Good:12082   F: 9542   SI2    : 9194   Median :61.80  
##  Mean   :0.7979   Premium  :13791   G:11292   VS1    : 8171   Mean   :61.75  
##  3rd Qu.:1.0400   Ideal    :21551   H: 8304   VVS2   : 5066   3rd Qu.:62.50  
##  Max.   :5.0100                     I: 5422   VVS1   : 3655   Max.   :79.00  
##                                     J: 2808   (Other): 2531                  
##      table           price             x                y         
##  Min.   :43.00   Min.   :  326   Min.   : 0.000   Min.   : 0.000  
##  1st Qu.:56.00   1st Qu.:  950   1st Qu.: 4.710   1st Qu.: 4.720  
##  Median :57.00   Median : 2401   Median : 5.700   Median : 5.710  
##  Mean   :57.46   Mean   : 3933   Mean   : 5.731   Mean   : 5.735  
##  3rd Qu.:59.00   3rd Qu.: 5324   3rd Qu.: 6.540   3rd Qu.: 6.540  
##  Max.   :95.00   Max.   :18823   Max.   :10.740   Max.   :58.900  
##                                                                   
##        z         
##  Min.   : 0.000  
##  1st Qu.: 2.910  
##  Median : 3.530  
##  Mean   : 3.539  
##  3rd Qu.: 4.040  
##  Max.   :31.800  
## 

1.1.2 Medidas de tendencia central

La primer medida de tendencia central es la media o promedio aritmético:

\(\hat{x} = \frac{1}{n} \sum_{i=1}^n x_i\)

El comando mean() recibe como argumentos la columna numerica de un dataset. Para referirnos a una columna en especial, podemos hacer uso del operador $ con datos$columna. Tambie

Por ejemplo, para computar la media de la columna price hacemos:

mean(diamonds$price)
## [1] 3932.8

Si queremos computar el promedio de varias columnas hacemos:

sapply(diamonds[, 7:10], mean)
##       price           x           y           z 
## 3932.799722    5.731157    5.734526    3.538734

La función sapply aplica una función como sum() o mean() a las columnas seleccionadas

La segunda medida para medir la centralidad es la mediana

Cuando el tamaño de la muestra \(n\) es par:

\(med(x) = Z[\frac{n}{2}]\)

En donde \(Z\) es una lista ordenada de valores de menor a mayor y \(n/2\) es la posición en donde se encuentra la mediana dentro de \(Z\).

Cuando el tamaño de la muetra \(n\) es impar la mediana es:

\(med(x) = \frac{Z[\frac{n-1}{2}] + Z[\frac{n+1}{2}]}{2}\)

La mediana de la variable price es:

median(diamonds$price)
## [1] 2401

Cuando queremos aplicar a multiples columnas, hacemos igual que con la media:

sapply(diamonds[, 7:10], median)
##   price       x       y       z 
## 2401.00    5.70    5.71    3.53

1.1.3 Medidas de dispersión

La medida de dispersión más elemental es el rango que se define como:

\(rango = max(x) - min(x)\)

Para calcular el valor máximo y el mínimo lo hacemos con max(x)y min(x) respectivamente:

rango = max(diamonds$price) - min(diamonds$price)
rango
## [1] 18497

Podemos hacer una función que se llame rango y que tome como una entrada la columna de referencia:

rango = function(x){
  r = max(x) - min(x)
  return(r)
}

Vamos a usar nuestra nueva función para computar el rango de varias variables:

sapply(diamonds[, 7:10], rango)
##    price        x        y        z 
## 18497.00    10.74    58.90    31.80

La segunda medida de dispersión es la Varianza y la Desviación Estandar que es simplemente la raíz cuadrada de la varianza:

\(Var(x) = \frac{1}{n-1}\sum_{i=1}^2 (x_i - \hat{x}) ^2\)

\(std(x) = \sqrt{Var[x]}\)

Para calcular la varianza y la desviación estándar utilizamos las funciones var(x) y sd(x)

varianza = var(diamonds$price)
desv_est = sd(diamonds$price)

print(paste('La Varianza y la desviación estándar es: ', varianza, 'y ', desv_est))
## [1] "La Varianza y la desviación estándar es:  15915629.4243014 y  3989.43973814638"

Tambien podemos aplicar sapply:

sapply(diamonds[, 7:10], sd)
##        price            x            y            z 
## 3989.4397381    1.1217607    1.1421347    0.7056988

1.1.4 Juntando todo en una función

Si queremos obtener los estadísticos descriptivos de múltiples variables, tendriamos que hacer una función y luego aplicar sapply como en los ejemplos anteriores.

Vamos a definir una función que compute la media, la mediana, el rango y la desviación estándar:

my_decriptives = function(x){
  list(mean(x), median(x), max(x) - min(x), sd(x))
}

sapply(diamonds[, 7:10], my_decriptives)
##      price   x        y        z        
## [1,] 3932.8  5.731157 5.734526 3.538734 
## [2,] 2401    5.7      5.71     3.53     
## [3,] 18497   10.74    58.9     31.8     
## [4,] 3989.44 1.121761 1.142135 0.7056988

El primer renglón es la media, el segundo la mediana, el tercero el rango y finalmente tenemos la desviación estándar.

Por fortuna podemos usar el poder colaborativo de R. Existe una libreria que no ayuda a facilitar la tarea: la librería pastecs. Primero necesitamos instalar la librería install.packages("pastecs"). Después usamos el comando stat.desc(datos)

require(pastecs)
## Loading required package: pastecs
## Warning: package 'pastecs' was built under R version 4.0.4
## 
## Attaching package: 'pastecs'
## The following objects are masked from 'package:dplyr':
## 
##     first, last
## The following object is masked from 'package:tidyr':
## 
##     extract
options(width = 300)
estadisticos = stat.desc(diamonds)

#Todas las columnas que no son numericas apareceran con NA´s. Primero eliminamos las columnas con NA´s utilizando un truco
#que consiste en aplicar el operador transpuesta 2 veces en conjunto con na.omit. El primer operador traspuesto
#convierte las columnas en renglones una vez que esto sucede eliminamos los renglones con NAs. El segundo
#Operador transpuesto, convierte los renglones en columnas

estadisticos = t(na.omit(t(estadisticos)))

#Rendondeamos para poder imprimir en la consola
round(estadisticos, 2)
##                 carat      depth      table        price         x         y         z
## nbr.val      53940.00   53940.00   53940.00     53940.00  53940.00  53940.00  53940.00
## nbr.null         0.00       0.00       0.00         0.00      8.00      7.00     20.00
## nbr.na           0.00       0.00       0.00         0.00      0.00      0.00      0.00
## min              0.20      43.00      43.00       326.00      0.00      0.00      0.00
## max              5.01      79.00      95.00     18823.00     10.74     58.90     31.80
## range            4.81      36.00      52.00     18497.00     10.74     58.90     31.80
## sum          43040.87 3330762.90 3099240.50 212135217.00 309138.62 309320.33 190879.30
## median           0.70      61.80      57.00      2401.00      5.70      5.71      3.53
## mean             0.80      61.75      57.46      3932.80      5.73      5.73      3.54
## SE.mean          0.00       0.01       0.01        17.18      0.00      0.00      0.00
## CI.mean.0.95     0.00       0.01       0.02        33.67      0.01      0.01      0.01
## var              0.22       2.05       4.99  15915629.42      1.26      1.30      0.50
## std.dev          0.47       1.43       2.23      3989.44      1.12      1.14      0.71
## coef.var         0.59       0.02       0.04         1.01      0.20      0.20      0.20
## attr(,"na.action")
##     cut   color clarity 
##       2       3       4 
## attr(,"class")
## [1] "omit"

1.1.5 Estadísticas por grupo

Veamos ahora qué tipo de datos tenemos. Para esto podemos utilizar el comando glimpse(datos)

glimpse(diamonds, width = 100)
## Rows: 53,940
## Columns: 10
## $ carat   <dbl> 0.23, 0.21, 0.23, 0.29, 0.31, 0.24, 0.24, 0.26, 0.22, 0.23, 0.30, 0.23, 0.22, 0.31~
## $ cut     <ord> Ideal, Premium, Good, Premium, Good, Very Good, Very Good, Very Good, Fair, Very G~
## $ color   <ord> E, E, E, I, J, J, I, H, E, H, J, J, F, J, E, E, I, J, J, J, I, E, H, J, J, G, I, J~
## $ clarity <ord> SI2, SI1, VS1, VS2, SI2, VVS2, VVS1, SI1, VS2, VS1, SI1, VS1, SI1, SI2, SI2, I1, S~
## $ depth   <dbl> 61.5, 59.8, 56.9, 62.4, 63.3, 62.8, 62.3, 61.9, 65.1, 59.4, 64.0, 62.8, 60.4, 62.2~
## $ table   <dbl> 55, 61, 65, 58, 58, 57, 57, 55, 61, 61, 55, 56, 61, 54, 62, 58, 54, 54, 56, 59, 56~
## $ price   <int> 326, 326, 327, 334, 335, 336, 336, 337, 337, 338, 339, 340, 342, 344, 345, 345, 34~
## $ x       <dbl> 3.95, 3.89, 4.05, 4.20, 4.34, 3.94, 3.95, 4.07, 3.87, 4.00, 4.25, 3.93, 3.88, 4.35~
## $ y       <dbl> 3.98, 3.84, 4.07, 4.23, 4.35, 3.96, 3.98, 4.11, 3.78, 4.05, 4.28, 3.90, 3.84, 4.37~
## $ z       <dbl> 2.43, 2.31, 2.31, 2.63, 2.75, 2.48, 2.47, 2.53, 2.49, 2.39, 2.73, 2.46, 2.33, 2.71~

Observando el dataset, nos interesaría obtener las estadísticas descriptivas de la variable price por el color del diamante.

R cuenta con una librería llamada psych que hace esta tarea. Recuerda que para instalar la librería hacemos install.packages('psych')

require(psych)
## Loading required package: psych
## 
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
options(width = 300)
describeBy(diamonds$price, group = diamonds$color, mat = T, digits = 2)

La opción mat = TRUE imprime una matriz en lugar de una lista. Esto para lograr una mejor comprensión en la consola. La opción digits = 2 redondea las cifras a 2 decimales.

El output es una matriz que consta de 7 renglones, 1 renglón para cada valor de color. Así por por ejemplo, el renglón 1 que está tipificado como X11 quiere decir que para el precio de diamantes cuando el color = D tenemos n = 6775 observaciones, el promedio del precio es mean = 3169 y la desviación estándar es 3356

1.2 Análisis Exploratorio (EDA)

El Análisis Exploratorio de Datos o EDA se utiliza para representar un conjunto de datos y sus relaciones en forma visual y gráfica de tal forma que los datos cuenten alguna historia. El principio es que para nuestro cerebro es más fácil entender una imagen que una tabla con números.

En esta sección usaremos ggplot con el conjunto de datos diamonds que es parte del ecosistema tidyverse

ggplot funciona con “capas” que se van agregando de tal forma que cada una de ellas contiene algún elemento visual de la gráfica. Estas capas operan en jerarquías de importancia:

  • Primero tenemos los aesteticos o aes(). El más importate es el primer aestetico que se refiere a los datos que vamos a utilizar para graficar.
  • En segundo lugar, están los elementos geométricos o geom_xyz() que describen las geometrías que componen las gráficas.
  • En tercer lugar, están otros elementos como los temas, colores, titulos y leyendas

ggplot opera bajo el principio de que todo lo que esté en un aes() opera sobre toda la gráfica o bien sobre todo el elemento geométrico. Por ejemplo, si definimos que el eje \(x\) contiene la variable precio todos los elementos geométricos asumen que x = precio.

Para comenzar con ggplot debemos definir la primera capa:

ggplot(data, aes(x = x, y = y, color = z, size = w, alpha = 0.6))

en este ejemplo, todos los parámetros dentro de aes() aplicarán para **toda* la gráfica. Por ejemplo, si queremos hacer una gráfica de puntos, el tamaño del punto estará dado por la variable w. Si queremos agregar el valor del punto en la gráfica, el tamaño del texto también estará dado por la variable w.

Una fuente de inspiración podemos encontrarla en https://www.r-graph-gallery.com/

1.2.1 Histogramas

El histograma visualiza la distribución de frecuencias de los datos. En ggplot existe la forma geométrica geom_histogram:

require(tidyverse)
ggplot(diamonds, aes(x = price)) +
  geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Sobre el histograma básico, podemos cambiar el color de las lineas, el color del relleno, el número de intervalos de clase, el tema, etc.

ggplot(diamonds, aes(x = price)) +
  geom_histogram(fill = 'red', color = 'white')
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Este es el mismo histograma con relleno rojo y color de líneas blancas.

También podemos hacer un histograma por la variable color. Para lograr esto, podemos hacer uso de un facet. Los facets permiten hacer un corte en los datos para visualizarlos por grupos. Mi favorito es el facet_wrap().

ggplot(diamonds, aes(x = price, fill = color, color = 'white')) +
  geom_histogram() +
  facet_wrap(~color, scales = 'free', nrow = 2)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Para simplificar la gráfica, vamos a eliminar las leyendas, agregar un título y un subtitulo

ggplot(diamonds, aes(x = price, fill = color)) +
  geom_histogram(color = 'white') +
  facet_wrap(~color, scales = 'free', nrow = 2) +
  theme(legend.position = 'none') +
  labs(title = 'Dataset diamonds',
       subtitle = 'Histogram by color')
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

En este ejemplo hemos puesto en el primer aestético, aes(x = price, fill = color) indicando que para todos los elementos geométricos, el relleno será de color definido por la variable color (R asigna una paleta de colores con un color para cada nivel de la variable color).

1.2.2 Density plots

Un density plot es similar a un histograma solo que utiliza una estimación no paramétrica de la distribución de probabilidades de los datos. El objeto geométrico es geom_density

ggplot(diamonds, aes(x = price)) +
  geom_density()

Al igual que en el histograma también podemos agregar capas. Por ejemplo, vamos a graficar la distribución de frecuencias por color:

ggplot(diamonds, aes(x = price, fill = color)) +
  geom_density(alpha = 0.4)

En este caso hemos agregado una transparencia a través del parámetro alpha = 0.4 para poder visualizar la distribución por color. si te parece que la imagen no es muy clara, podemos aplicar un facet_wrap

ggplot(diamonds, aes(x = price, fill = color)) +
  geom_density(alpha = 0.4) +
  facet_wrap(~color, scales = 'free', nrow = 2) +
  theme(legend.position = 'none') +
  labs(title = 'Dataset diamonds',
       subtitle = 'Density Plot by color')

1.2.3 Box Plots

La gráfica de cajas es otra forma de visualizar la distribución de los datos. La geometría que la define es geom_boxplot() y son muy buenas para visualizar la dispersión por grupos de datos.

ggplot(diamonds, aes(y = price, x = color, fill = color)) +
  geom_boxplot()

Las gráficas de caja o box plots nos permiten agregar una 3er variable para visualizar los datos. Supongamos que queremos ver las diferencias entre la pureza del diamante y el precio y el color. Entonces, agregaremos un facet por la variable clarity

ggplot(diamonds, aes(y = price, x = color, fill = color)) +
  geom_boxplot() +
  facet_wrap(~clarity, scales = 'free', nrow = 2) +
  theme(legend.position = 'none') +
    labs(title = 'Dataset diamonds',
       subtitle = 'Box Plot by color and by clarity')

Una característica interesante de ggplot es que también podemos agregar elementos gráficos que se computan por medio de estadísticos. Supongamos que queremos agregar un punto en cada caja que represente el promedio por grupo. Esto se logra con el elemento stat_summary()

ggplot(diamonds, aes(y = price, x = color, fill = color)) +
  geom_boxplot(alpha = 0.6) +
  facet_wrap(~clarity, scales = 'free', nrow = 2) +
  theme(legend.position = 'none') +
  stat_summary(fun=mean, geom = "point", shape = 16, size = 1, color="red", fill = "red") +
    labs(title = 'Dataset diamonds',
       subtitle = 'Box Plot by color and by clarity')

Los argumentos de stat_summary() toman la función a computar fun = mean , la geometría geom = 'point', la forma de la geometría que para que el punto sea circular es shape = 16, el tamaño del punto size = 1, el color de relleno y de la línea.

1.2.4 Violin plot

Es una variante del gráfico de caja que muestra de una forma mas clara la distribución de los datos en cuanto al sesgo y la kurtosis de la distribución de frecuencias.

ggplot(diamonds, aes(y = price, x = color, fill = color)) +
  geom_violin()

1.2.5 QQ-Plots

Las gráficas QQ-Plots se utilizan para revisar si la distribución de frecuencias de una variable se parece a una distribución teórica hipotética (usualmente la distribución Normal). Esto es importante porque muchos algoritmos asumen que la distribución de frecuencias es Normal.

El objeto geométrico es geom_qq() que grafica los datos sobre un papel probabilístico y geom_qq_line() que dibuja una línea recta con la distibución acumulada de frecuencias linealizada. Si los datos (puntos) siguen un comportamiento lineal, entonces, se puede asumir que a distribución de los datos podría provenir de una distribución de probabilidades teórica dada (usualmente la normal)

La distribución de probabilidades asumiendo Normalidad es:

\(f(x) = \frac{e^{-(x - \mu)^{2}/(2\sigma^{2}) }} {\sigma\sqrt{2\pi}}\)

Para explicar la herramienta, vamos a simular 1000 datos de una distribución normal y vamos a gráfica el qq-plot

#simulacion de 1000 datos normalmente distribuidos
simulacion = rnorm(n = 1000, mean = 0, sd = 1)
qqnorm(simulacion)

En la gráfica se aprecia como nuestra simulación se aproxima a una línea recta indicando que los datos simulados sí se aproximan a una distribución normal.

Regresando al ejemplo, queremos saber si la variable carat está distribuida normalmente:

ggplot(diamonds, aes(sample = carat)) +
  geom_qq(color = 'blue') +
  geom_qq_line(color = 'red') +
  labs(title = 'Diamonds Data set',
       subtitle = 'QQ-Plot for cust') +
  theme_bw()

En este pedazo de código, hemos integrado un nuevo elemento: theme_bw(). Los temas o “themes” son formatos predeterminados para la estética de las gráficas. En este caso, decidí cambiar el tema que hemos estado utilizando para ver con más claridad el qq-plot. Al igual que en el caso de histograma o del boxplot, también podemos aplicar un facet_wrap()con la variable color

ggplot(diamonds, aes(sample = carat)) +
  geom_qq(color = 'blue') +
  geom_qq_line(color = 'red') +
  labs(title = 'Diamonds Data set',
       subtitle = 'QQ-Plot for cust by Color') +
  theme_bw() +
  facet_wrap(~color, nrow = 2, scales = 'free')

1.2.6 EDA con DataExplorer

Existe una forma sencilla de obtener visualizaciones con la finalidad de entender el dataset más que para hacer una presentación o contar una historia. La librería Dataexplorer nos permite crear un reporte con una análisis básico de todo el data set utilizando la función. Recuerda instalar antes la librería con install.packages('DataExplorer')

La función create_report() recibe como input el dataset y si existiera alguna variable dependiente de interés tendríamos que poner el nombre.

Prueba poner en la consola la siguiente línea de comando create_report(diamonds)

Si quieres saber más sobre DataExplorer puedes visitar la página web [DataExplorer] (https://cran.r-project.org/web/packages/DataExplorer/vignettes/dataexplorer-intro.html)

1.3 Análisis de Correlación

En estadística estamos interesados en estudiar relaciones causales y una forma de hacerlo es a través del concepto de correlación. La correlación mide el grado de asociación entre dos variables y se computa de la siguiente manera:

\(\rho = \frac{\text{cov}(x,y)}{\sigma_x \sigma_y}\)

Para computar este ratio podemos usar formulas de R:

  • cov(x, y) para la covarianza
  • sd() para la desviación estándar
x = diamonds$carat
y = diamonds$price

#Calculando la covarianza
covarianza = cov(x, y)

#Calculando la desviacion estandar
sx = sd(x)
sy = sd(y)

#computamos el indice de correlación
rho = covarianza / (sx * sy)
rho
## [1] 0.9215913

El indice de correlación se encuentra en el intervalo \(-1<\rho<1\). Si \(\rho > 0\) y cercano a 1 se dice que la relación \(x,y\) es positiva (a medida que \(x\) incrementa, \(y\) también incrementa). Si \(\rho < 0\) se dice que la relación entre \(x,y\) es inversa (a medida que la \(x\) se incrementa, la \(y\) tiende a disminuir). Si \(|\rho| \rightarrow 1\) se dice que la relación es fuerte.

Podemos ahorrarnos unas cuantas líneas de código y computar el indice de correlaciones con la función cor(x, y):

cor(x, y)
## [1] 0.9215913

1.3.1 Scatter Plot

Un scatter plot ayuda a visualizar la relación entre 2 variables típicamente continuas. En ggplot el objeto geométrico es geom_point()

ggplot(diamonds, aes(x = carat, y = price)) +
  geom_point()

Tal cual lo que nos dice esta gráfica es que a medida que el valor de carat se incrementa, la variable price también se incrementa. Tal como lo dice el índice de correlaciones \(\rho = 0.92\) la relación entre ambas variables es alta.

Podemos agregar otros objetos geométricos tales como geom_smooth() que agregan una línea de tendencia. El default es una línea “smooth” que intenta capturar comportamientos que pudieran no ser lineales:

ggplot(diamonds, aes(x = carat, y = price)) +
  geom_point() +
  geom_smooth()
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'

Pero tambien podemos forzar una línea recta:

ggplot(diamonds, aes(x = carat, y = price)) +
  geom_point() +
  geom_smooth(method = 'lm')
## `geom_smooth()` using formula 'y ~ x'

También podemos utilizar transparencias con alpha y separar por color con un facet_wrap()

ggplot(diamonds, aes(x = carat, y = price, alpha = 0.4)) +
  geom_point() +
  facet_wrap(~color, scales = 'free', nrow = 2)

Podemos colorear los puntos por alguna otra variable como el corte cut y cambiar la intensidad del brillo con el operador I()

ggplot(diamonds, aes(x = carat, y = price, alpha = I(1/2), color = cut)) +
  geom_point(alpha = 0.4) +
  facet_wrap(~color, scales = 'free', nrow = 2) +
  theme(legend.position = 'bottom') +
  labs(title = 'Diamonds Data set',
       subtitle = 'Scatter plot for Precio, x = carat, color = cut')

1.3.2 Matriz de Correlaciones

Cuando tenemos múltiples variables, nos interesa ver la correlación que existe entre cada una de ellas. Si hay 4 variables continuas existen 6 pares de correlaciones distintas y con 5 tendríamos 10 (en ambos casos eliminando la correlación de cada variable con ella misma que por definición siempre es 1). En genera existirán \(N(N-1)/2\) pares únicos.

La función cor()también puede computar la matriz de correlaciones. Antes de poder usarlas, debemos quedarnos solo con las variables numéricas del data set y asegurar que el tipo de datos es numérico-matricial.

Para filtrar grupos de columnas que cumplan con características iguales usamos la función select_if() con la condición is.numeric y después aplicamos la función cor()

#Solo variables numéricas
data = select_if(diamonds, is.numeric)

#Matriz de Correlación
data = as.matrix(data)
rho = cor(data)
rho
##            carat       depth      table      price           x           y          z
## carat 1.00000000  0.02822431  0.1816175  0.9215913  0.97509423  0.95172220 0.95338738
## depth 0.02822431  1.00000000 -0.2957785 -0.0106474 -0.02528925 -0.02934067 0.09492388
## table 0.18161755 -0.29577852  1.0000000  0.1271339  0.19534428  0.18376015 0.15092869
## price 0.92159130 -0.01064740  0.1271339  1.0000000  0.88443516  0.86542090 0.86124944
## x     0.97509423 -0.02528925  0.1953443  0.8844352  1.00000000  0.97470148 0.97077180
## y     0.95172220 -0.02934067  0.1837601  0.8654209  0.97470148  1.00000000 0.95200572
## z     0.95338738  0.09492388  0.1509287  0.8612494  0.97077180  0.95200572 1.00000000

1.3.3 El Correlograma

El correlograma es la representación gráfica de la matriz de correlaciones. La librería corrplot proporciona un método simple para visualizar correlaciones. Para más detalles puedes consultar el sitio https://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html

No olvides instalar la libreria usando `install.packages(‘corrplot’)

El input de corrplot() es la matriz de correlaciones. En nuestro ejemplo la he nombrado rho

require(corrplot)
## Loading required package: corrplot
## corrplot 0.84 loaded
col <- colorRampPalette(c("#BB4444", "#EE9988", "#FFFFFF", "#77AADD", "#4477AA"))

corrplot(rho, method = "color", col = col(200),
         type = "lower", order = "hclust", number.cex = .7,
         addCoef.col = "black", # Add coefficient of correlation
         tl.col = "black", tl.srt = 90, # Text label color and rotation
         # hide correlation coefficient on the principal diagonal
         diag = FALSE)

Para mejora la apariencia de la gráfica se declaró una paleta de colores con el comando colorRampPalette que como argumento utiliza una lista de colores https://www.rdocumentation.org/packages/dichromat/versions/1.1/topics/colorRampPalette

El argumento col = col(200) toma como input la paleta que hicimos, type = 'lower' genera una matriz inferior triangular. También puedes probar con 'upper'. El argumento order = 'hclust' ordena en clusters la matriz de correlaciones y el argumento addCoef.col = 'black' agrega el valor de la correlación en color negro.