INTRODUCCIÓN

De acuerdo con lo expuesto en el apartado inicial del tema, para conocer la relación entre dos variables cuantitativas (discretas o continuas) podemos acudir a diferentes procedimientos:

Comenzaremos este apartado importando el dataframe mtcars. Es uno de los conjuntos de datos que incluye el propio programa

data(mtcars)
str(mtcars)
## 'data.frame':    32 obs. of  11 variables:
##  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
##  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
##  $ disp: num  160 160 108 258 360 ...
##  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
##  $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
##  $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
##  $ qsec: num  16.5 17 18.6 19.4 17 ...
##  $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
##  $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
##  $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
##  $ carb: num  4 4 1 1 2 1 4 2 2 4 ...

Comprende las siguientes variables:

Algunas de estas variables son variables cualitativas que pueden transformarse en factores

mtcars$vs <- factor(mtcars$vs, 
                    levels = c(0,1),
                    labels = c("en V", "en línea recta"))

mtcars$am <- factor(mtcars$am, 
                    levels = c(0,1),
                    labels = c("automática", "manual"))

REPRESENTACIÓN GRÁFICA

Para resaltar la importancia de una representación gráfica inicial se puede recurrir al cuarteto de Anscombe. Éste comprende cuatro conjuntos de datos con valores estadísticos casi idénticos, pero distribuciones muy diferentes. Este cuarteto todavía se usa a menudo para ilustrar la importancia de evaluar gráficamente los datos antes de comenzar su análisis, y la insuficiencia de las propiedades estadísticas básicas para describir conjuntos de datos.

Figura 1: Cuarteto de Ambscombe
Figura 1: Cuarteto de Ambscombe

Gráfico de dispersión

El gráfico de dispersión muestra la relación entre 2 variables cuantitativas. Consiste en una representación, en un sistema de coordenadas cartesianas, de los datos de cada variable. Cada punto corresponde al valor de cada pareja de datos). La función plot() crea este tipo de gráficos, cuyos argumentos más usuales se muestran a continuación:

plot(x, y, type,…,)

Los argumentos de la función plot son:

  • x: vector numérico con las coordenadas del eje horizontal.

  • y: vector numérico con las coordenadas del eje vertical.

  • type: tipo de gráfico a dibujar. Las opciones son:

Figura 2: Tipos de gráficos simples con R
Figura 2: Tipos de gráficos simples con R
  • ...: otros parámetros gráficos que pueden ser pasados como argumentos para plot.

En el siguiente ejemplo se representa la relación entre el consumo y la potencia del motor.

plot(mtcars$mpg, mtcars$hp, 
     pch = 19,                                     # Tipo de símbolo
     col = "black")                                # Color del símbolo

La nube de puntos informa de diversas posibilidades:

  • Si existe una relación funcional: la nube de puntos se dispone aproximadamente en línea recta.

  • Si la relación entre las variables es fuerte o débil.

  • Si es directa (positiva: ambas variables aumentan de valor simultáneamente) o inversa (negativa: cuando una variable aumenta de valor la otra disminuye).

  • Si se ajusta a un modelo lineal o a otro modelo (ej: exponencial). En el segundo caso, la medición deberá utilizar los estadísticos más apropiados para esta circunstancia.

También posee otras utilidades, como la detección de casos excepcionales o “outliers”.

Figura 3: Tipos de nubes de puntos
Figura 3: Tipos de nubes de puntos

En ocasiones, es difícil apreciar la nube de puntos cuando hay parejas con datos similares, que tienden a superponerse. Existe una variante del gráfico de dispersión, a través de la función sunflowerplot(), que permite visualizar estos conjuntos de datos. Si una pareja aparece una sola vez, se representará por un punto; si la pareja se repite dos veces se representará por un punto y dos rayitas rojas (pétalos); si la pareja se repite tres veces se representará por un punto y tres rayitas rojas (pétalos) y así sucesivamente. La estructura de la función sunflowerplot con los argumentos más usuales es la siguiente:

sunflowerplot(x, y, pch, seg.col, seg.lwd, …)

Los argumentos de la función sunflowerplot son:

  • x: vector numérico con las coordenadas del eje horizontal.

  • y: vector numérico con las coordenadas del eje vertical.

  • pch: valor o vector numérico con el tipo de punto a usar, por defecto pch=1. Para conocer los diferentes símbolos que se pueden obtener con el parámetro pch se recomienda consultar la Figura @ref(fig:point1).

  • seg.col: color de los pétalos.

  • seg.lwd: ancho de los pétalos.

  • ...: otros parámetros gráficos que pueden ser pasados como argumentos para plot.

Como ejemplo, se representarán dos variables, en las que existe:

  • Una pareja de datos (1, 1) que aparece una sola vez,

  • Otra (2, 3) repetida cuatro veces,

  • Otra (3, 2) repetido seis veces

  • Otra (4, 5) repetido dos veces.

A título comparativo, se van a dibujar de manera contigua dos gráficos de dispersión, uno con la función plot y el otro con la función sunflowerplot.

x <- c(1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4)
y <- c(1, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 5, 5)
par(mfrow=c(1, 2))
plot(x, y, main='a) Usando plot')
sunflowerplot(x, y, 
              seg.col='blue', 
              seg.lwd=2, 
              cex=1.5,
              main='b) Uso de sunflowerplot')

En el panel de la izquierda sólo se observan 4 puntos idénticos, puesto que se superponen algunas parejas de datos. En el panel de la derecha el diagrama obtenido con la función sunflowerplot también aparecen cuatro puntos, pero la simbología explica que el punto con coordenadas (1, 1) se representó con un punto, el punto (2, 3) está representado por un punto y cuatro pétalos de color azul ya que él se repite cuatro veces, y los puntos (3, 2) y (4, 5) se represetan con seis y dos pétalos porque esas son las veces que ellos se repiten.

Como ilustración vamos a crear un diagrama de dispersión con la función sunflowerplot para las variables mpg y cyl. El código necesario para cargar la base de datos y construir el diagrama de dispersión se muestra a continuación.

sunflowerplot(mtcars$mpg, 
              mtcars$cyl)

Del diagrama de dispersión representando la relación entre el número de cilindros y el consumo se deduce que la mayoría de los vehículos con menor consumo tienen 4 cilindros, mientras los vehículos con 8 cilindros son los de mayor consumo (menor recorrido por cada unidad de combustible).

De la misma manera, la función symbols proporciona diagramas de dispersión que permiten la inclusión de información adicional (por ejemplo, incorporando variables cuantitativas). En este caso relacionaremos las variables mpg/hp y drat/disp incorporando además el número de cilindros como variable adicional.

subdat <- subset(mtcars, am == 'manual')

par(mfrow=c(1, 2))

with(subdat, symbols(mpg, hp,
                     circles = cyl,                               # Tamaño de los símbolos, según cilindros
                     las=1,                                       # Etiquetas X e Y verticales
                     inches=0.1,                                  # Tamaño de los símbolos
                     fg='red',                                    # Color del borde del símbolo
                     main='Título'))                              # Título del gráfico
with(subdat, symbols(disp, drat,
                     squares = cyl, 
                     las=1, 
                     inches=0.1, 
                     fg='dodgerblue4', 
                     bg='pink',                                   # Color del fondo del símbolo
                     main='Título'))

📝 ACTIVIDAD DE EVALUACIÓN CONTINUA: :

El fichero contaminación so2.csv sirve para analizar la relación entre la concentración de \(SO_2\) (un contaminante provocado por la combustión de combustibles fósiles) y una serie de variables atmosféricas y humanas. Las variables son las siguientes:

  • so2: concentración de SO2 (mgr por metro cúbico).

  • tem: temperatura media anual en ºC.

  • fab: número de empresas con más de 20 trabajadores.

  • pop: tamaño de la población (en miles de habitantes).

  • vv: velocidad media del viento (en km/h)

  • pp: precipitación media (en mm).

  • dias: número de días de lluvia al año.

Carga este fichero en R y comprueba su estructura.

contaminacion <- read.csv2('https://personales.unican.es/rasillad/docencia/G2040/TEMA_6/contaminacion_so2.csv')
str(contaminacion)
## 'data.frame':    41 obs. of  7 variables:
##  $ so2 : int  10 13 12 17 56 36 29 14 10 24 ...
##  $ tem : num  21.3 16.1 13.7 11.1 9.5 12.2 14.1 20.2 24.2 16.4 ...
##  $ fab : int  213 91 453 454 412 80 434 136 207 368 ...
##  $ pop : int  582 132 716 515 158 80 757 529 335 497 ...
##  $ vv  : num  9.36 12.79 13.57 14.04 14.04 ...
##  $ pp  : num  179 1232 525 329 1102 ...
##  $ dias: int  36 100 67 86 127 114 111 116 128 115 ...
  • Elabora, en un único lienzo, 6 gráficos de dispersión relacionando la cantidad de dióxido de azufre (so2) con cada una de las restantes variables.
par(mfrow=c(2, 3))
plot(contaminacion$so2, contaminacion$tem, pch = 19, col = "black")
plot(contaminacion$so2, contaminacion$fab, pch = 12, col = "red")
plot(contaminacion$so2, contaminacion$pop, pch = 15, col = "pink")
plot(contaminacion$so2, contaminacion$vv, pch = 17, col = "blue")
plot(contaminacion$so2, contaminacion$pp, pch = 8, col = "brown")
plot(contaminacion$so2, contaminacion$dias, pch = 6, col = "orange")
par(mfrow = c(1,1))
  • ¿Se aprecian relaciones funcionales? Si existen, ¿son lineales o de otro tipo?

⚠️ ATENCIÓN:
el papel de NA

Por defecto, cuando nuestros datos contienen algún valor ausente o perdido (identificado en R por un NA de “Not Available”), las funciones cov()y corr() devuelven “NA”. Para obtener el valor de correlación, se debe especificar cómo tratar los valores ausentes mediante el argumento use = "pairwise.complete.obs" que calcula el coeficiente de correlación para aquellas observaciones en las que no falta ningún valor de “x” ni “y”.

ESTADÍSTICOS: LA COVARIANZA

La covarianza es un estadístico que mide cómo varían de forma conjunta dos variables. Se define como: \[\text{cov}(x,y)=\frac{1}{n}\sum_{i=1}^n(x_i-\bar x)(y_i-\bar y)\]

El resultado numérico fluctúa entre los rangos +infinito a –infinito (por lo tanto, positivos o negativos)

En realidad, no sirve tanto para cuantificar el grado de relación existente entre dos variables, sólo su tendencia. Podemos comprobarlo en el siguiente ejemplo, en el que se calcula la covarianza entre dos variables, \(x\) e \(y\).

x <- c(3,4,5,2,9,6,8,7,5,8)
y <- c(2,3,6,1,7,4,9,6,8,5)
cov(x,y)
## [1] 4.477778

La matriz de covarianzas

Si en vez de dos vectores (como x e y) la función se aplica a un dataframe o a una matriz, se calcularán las covarianzas entre todas las columnas del conjunto de datos. Es lo que se conoce como matriz de covarianzas.

set.seed(15)
df <- data.frame(Var1 = rnorm(100), Var2 = runif(100), Var3 = rexp(100))        # Dataframe con 3 variables
cov(df)                                                                         # Matriz de covarianzas de 'df'
##             Var1         Var2         Var3
## Var1  0.98795201 -0.024517909 -0.079986687
## Var2 -0.02451791  0.084020062 -0.009591341
## Var3 -0.07998669 -0.009591341  2.118357213

De la misma manera también se puede calcular a partir de dos data frames.

df2 <- data.frame(Var4 = rnorm(100), Var5 = runif(100), Var6 = rexp(100))
cov(df, df2)                                                                    # Matriz de covarianzas entre 'df' y 'df2'
##              Var4         Var5        Var6
## Var1 -0.001427763  0.014351821 -0.05569541
## Var2  0.041006100  0.005160602 -0.06376888
## Var3  0.064429874 -0.053229349  0.03178257
rm(df, df2)

📝 ACTIVIDAD DE EVALUACIÓN CONTINUA: :

  • Calcula el valor de la covarianza entre el contenido de \(so^2\) y la temperatura.
cov(contaminacion$so2, contaminacion$tem)
  • Crea una matriz de covarianzas entre todas las variables del dataframe contaminacion. \(so^2\) y la temperatura.
cov(contaminacion)
  • ¿Hay variables con un valor negativo de la covarianza? ¿Qué significa?

  • ¿Cuál es el par de variables con una covarianza más elevada?

COEFICIENTES DE CORRELACIÓN

Son un conjunto de estadísticos encargados de cuantificar el grado de asociación entre dos variables. Los más importantes son:

⚠️ ATENCIÓN:
¿Qué diferencia existe entre la covarianza y los índices de correlación?:

  • La covarianza informa de la dirección (positiva, negativa, cercana a zero) de la relación lineal de dos variables, mientras la correlación no sólo ofrece la direción, sino también la intensidad.

  • La covarianza es no acotada pues su tamaño depende de la escala de las variables, mientras que la correlación toma valores entre -1 y 1, independiente de la escala de las variables.

  • La covarianza enta no estándarizada, la correlación si.

Coeficiente de correlación de Pearson

Es denominado también “Correlación producto momento de Pearson”. Es un procedimiento de carácter paramétrico, por lo que sólo debe ser usado cuando ambas variables siguen una distribución normal, y deben proceder de una muestra aleatoria de individuos. En caso contrario se debe recurrir a:

  • Transformación de ambas variables, cambiando la escala de medición (transformación logarítmica).

  • Uso de los coeficientes de Spearman o Kendall

Se simbolizada por \(\rho_{x,y}\) cuando ha sido calculada en la población. Si se obtiene sobre una muestra, se designa por la letra \(r_{x,y}\). La fórmula para su cálculo es la siguiente:

\[r_{x,y}=\frac{cov(x,y)}{\sigma_x \sigma_y}\] Es decir, se divide covarianza entre el producto de las desviaciones típicas de \(x\) e \(y\). Su valor es independiente de las unidades en las que están medidas las variables \(x\) e \(y\) (adimensional), oscilando siempre entre –1 y +1.

  • Una correlación de +1: relación perfecta (positiva) entre las dos variables (puntuaciones bajas de la primera variable (X) se asocian con las puntuaciones bajas de la segunda variable (Y), mientras las puntuaciones altas de X se asocian con los valores altos de la variable Y.

  • Una correlación de -1: relación lineal inversa perfecta (negativa) entre las dos variables (puntuaciones bajas en X se asocian con los valores altos en Y, puntuaciones altas en X se asocian con valores bajos en Y).

  • Una correlación próxima a cero: no hay relación lineal entre las dos variables.

Una transformación lineal de una variable (multiplicación de una variable por una constante, suma de una constante) no afecta al coeficiente de correlación de Pearson

Presenta algunos problemas:

  • La correlación no implica causalidad: juicio de valor que requiere más información que un simple valor cuantitativo de un coeficiente de correlación.

  • Es sensible a valores extremos, sobre todo en muestras pequeñas, y a asociaciones no lineales, que deben detectarse previamente a través del diagrama de dispersión. En caso de que muestren patrones curvos, estaríamos ante un ejemplo de asociación no lineal entre dos variables.

  • La restricción del rango suele afectar al valor de la correlación obtenida, bien aumentando o disminuyendo su valor. Ejemplo: fuerte relación lineal positiva entre las dos variables cuando se incluyen todos los casos, pero mucho menor si se realiza sobre el subconjunto señalado en color gris.

Figura 4: Resctricción del rango
Figura 4: Resctricción del rango

Cálculo manual del coeficiente de correlación de Pearson.

Figura 5: Ejemplo desarrollado del coeficiente de correlación de Pearson
Figura 5: Ejemplo desarrollado del coeficiente de correlación de Pearson
n <- length(x)
x_y <- x * y
x_cuad <- x^2
y_cuad <- y^2

suma_x <- sum(x)
suma_y <- sum(y)
suma_x_cuad <- sum(x_cuad)
suma_y_cuad <- sum(y_cuad)
media_x <- sum(x)/n
media_y <- sum(y)/n
suma_x_y <- sum(x_y)

cov_x_y <- sum(x_y)/n - media_x * media_y
cov_x_y_bis <- cov(x,y)

desv_tip_x <- sqrt(suma_x_cuad/n - (media_x)^2)
desv_tip_y <- sqrt(suma_y_cuad/n - (media_y)^2)

r_pearson <- cov_x_y/(desv_tip_x*desv_tip_y)

tabla1_corr <- as.data.frame(cbind(x,y,
                                  x_y,
                                  x_cuad,
                                  y_cuad))

tabla2_corr <- as.data.frame(cbind(n,
                                  suma_x_cuad,suma_y_cuad,
                                  media_x,media_y,
                                  suma_x,suma_y,suma_x_y,
                                  cov_x_y,
                                  desv_tip_x,desv_tip_y,
                                  r_pearson))

Se procede a limpiar de objetos el Global Environment

rm(tabla1_cov, tabla2_cov, cov_x_y, cov_x_y_bis, desv_tip_x, desv_tip_y, media_x, media_y, n, r_pearson, suma_x, suma_y, suma_x_y, suma_x_cuad, suma_y_cuad, x_cuad, y_cuad, x_y, tabla1_corr, tabla1_corr, tabla2_corr)

Cálculo del coeficiente de correlación de Pearson a partir de funciones de R

Como en el caso anterior, es posible calcular directamente el coeficiente de correlación. Existen dos opciones:

  • OPCIÓN 1: la función cor() proporciona sólo el coeficiente de correlación (asume por defecto el argumento method = Pearson).
cor(x, y)                         
## [1] 0.7446014
  • OPCION 2: la función cor.test proporciona el coeficiente de correlación de Pearson y su significación (p-value).
cor.test(x,y)   
## 
##  Pearson's product-moment correlation
## 
## data:  x and y
## t = 3.1551, df = 8, p-value = 0.01349
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.2164525 0.9355994
## sample estimates:
##       cor 
## 0.7446014

En este último caso la información incluye:

  • t = 8.3732: valor del estadístico t.

  • df: los grados de libertad (N-1).

  • p-value: nivel de significación del test t .

  • 95 percent confidence interval: intervalo de confianza del coeficiente de correlación con un nivel de probabilidad α =0.05.

  • sample estimates: coeficiente de correlación (cor.coeff = 0.93).

Si convertimos esa función en un objeto, podemos solicitar cada uno de los elementos de esa lista por separado.

res <- cor.test(x,y)   
res$p.value                                             # Valor p
## [1] 0.01349452
res$estimate                                            # Coeficiente de correlación.
##       cor 
## 0.7446014

Otros coeficientes de correlación

Utilizan los rangos (números de orden, posición) de dos grupos de variables y comparan entre sí dichos rangos. Asume que, en caso de existir relación entre dos conjuntos de datos, los valores estarán ordenados de manera similar. Hay dos coeficientes fundamentales:

  • El coeficiente de correlación de Spearman.

  • La tau de Kendall

¿Cuándo deben utilizarse?:

  • Cuando las variables no siguen una distribución normal.

  • Cuando las variables contienen “outliers”.

Coeficiente de correlación de Spearman

Figura 6: Ejemplo desarrollado del coeficiente de correlación de Spearman
Figura 6: Ejemplo desarrollado del coeficiente de correlación de Spearman

Cálculo manual del coeficiente de correlación de Spearman.

x <- c(7,5,8,9)
y <- c(4,7,9,8)
n <- length(x)
dx <- rank(x,ties.method = "average")
dy <- rank(y,ties.method = "average")
dx_menos_dy_2 <- (dx-dy)^2
suma_dx_menos_dy_2 <- sum(dx_menos_dy_2)

rho <- 1 - (6*suma_dx_menos_dy_2)/(n*(n^2-1))

Cálculo mediante funciones de R.

La función de R para obtener el coeficiente de correlación de Spearman es la misma vista para el de Pearson, pero en este caso el argumento es method= "spearman".

correlacion.spearman <- cor(x,y,method = 'spearman')

También se puede obtener información adicional con la función cor.test.

spearman <- cor.test(x, y, method = "spearman")
spearman
## 
##  Spearman's rank correlation rho
## 
## data:  x and y
## S = 4, p-value = 0.4167
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho 
## 0.6

Coeficiente de Kendall

El último de los coeficientes de correlación, y el menos utilizado, es la tau \(\tau\) o coeficiente de Kendall. Es una medida de dependencia no paramétrica que identifica los pares concordantes y discordantes de dos variables. Una vez identificados, se calculan los totales y se hace el cociente.

Figura 7: Formula tau de Kendall
Figura 7: Formula tau de Kendall

donde \(C_n\) = número total de pares concordantes. \(NC_n\) = número total de pares no concordantes (discordantes).

La función de R para obtener el coeficiente de correlación de Spearman es la misma vista para el de Pearson, pero en este caso el argumento es method= "kendall".

res_kendall <- cor.test(x, y, method="kendall")
res_kendall
## 
##  Kendall's rank correlation tau
## 
## data:  x and y
## T = 4, p-value = 0.75
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
##       tau 
## 0.3333333
rm(list=ls())    # Limpia el Global Environment 
cat("\014")      # Limpia la consola 

📝 ACTIVIDAD DE EVALUACIÓN CONTINUA: :

  • A partir del dataframe contaminacion, calcula el valor del coeficiente de correlación de Pearson, de Spearman y de Kendall para la pareja de variables so2 y tem,
so2_tem_Pearson <- cor(contaminacion$so2, contaminacion$tem, method="pearson")
so2_tem_Spearman <- cor(contaminacion$so2, contaminacion$tem, method="spearman")
so2_tem_Kendall <- cor(contaminacion$so2, contaminacion$tem, method="kendall")
  • De acuerdo con el p-value obtenido al calcular el valor del coeficiente de correlación de Spearman sobre la pareja de valores so2 y vv, determina si la relación es estadísticamente significativa.
cor.test(contaminacion$so2, contaminacion$vv, method="pearson")
cor.test(contaminacion$so2, contaminacion$vv, method="spearman")

LA MATRIZ DE CORRELACIONES

Es muy frecuente que en el análisis estadístico se requiera analizar el grado de relación entre varias variables cuantitativas. Para evitar el cálculo de cualquiera de los coeficientes de correlación pareja a pareja, se puede elaborar una matriz de correlaciones. La matriz de correlaciones es una tabla que muestra los coeficientes de correlación entre un conjunto de variables. Cada variable aleatoria (\(x_i\)) en la tabla está correlacionada con cada uno de los otros valores en la tabla (\(x_j\)). Esto le permite ver qué pares tienen la correlación más alta, y por lo tanto, manifiestan una relación más estrecha.

En caso de que nuestro conjunto de datos disponga de variables que no son cuantitativas, o de columnas con otro tipo de información (pe. fechas, etiquetas alfanuméricas), es recomendable crear un nuevo dataframe con las variables seleccionadas, ya que la función corr calculará los coeficientes de correlación entre todas las variables.

coches <- mtcars[ , c(1,3,4,5,6,7)]                # Objeto que incluye sólo como variables de análisis unas columnas concretas
str(coches)
## 'data.frame':    32 obs. of  6 variables:
##  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
##  $ disp: num  160 160 108 258 360 ...
##  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
##  $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
##  $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
##  $ qsec: num  16.5 17 18.6 19.4 17 ...
head(coches, 6)                                    # Muestra las 6 primeras columnas del objeto datos
##                    mpg disp  hp drat    wt  qsec
## Mazda RX4         21.0  160 110 3.90 2.620 16.46
## Mazda RX4 Wag     21.0  160 110 3.90 2.875 17.02
## Datsun 710        22.8  108  93 3.85 2.320 18.61
## Hornet 4 Drive    21.4  258 110 3.08 3.215 19.44
## Hornet Sportabout 18.7  360 175 3.15 3.440 17.02
## Valiant           18.1  225 105 2.76 3.460 20.22

Elaboración de una matriz de correlaciones numérica.

Creamos un objeto (matriz de correlación) para poder reutilizar esa matriz posteriormente en otros procedmientos. Por defecto, R proporciona los coeficientes de correlación con hasta 7 decimales. Es habitual mostrar los coeficientes de correlación con dos decimales.

matriz_corr1 <- round(cor(coches),2)               # round( , 2) solicitud de dos decimales
matriz_corr1
##        mpg  disp    hp  drat    wt  qsec
## mpg   1.00 -0.85 -0.78  0.68 -0.87  0.42
## disp -0.85  1.00  0.79 -0.71  0.89 -0.43
## hp   -0.78  0.79  1.00 -0.45  0.66 -0.71
## drat  0.68 -0.71 -0.45  1.00 -0.71  0.09
## wt   -0.87  0.89  0.66 -0.71  1.00 -0.17
## qsec  0.42 -0.43 -0.71  0.09 -0.17  1.00

Una vez calculados los coeficientes de correlación, es necesario identificar cuáles son estadísticamente significativo, obteniendo el p-value: si éste es menor que el nivel de significación (α =0.05), el coeficiente es estadísticamente significativo. Para ello recurriremos a la función rcorr del paquete Hmisc, que requiere una matriz para su cálculo

# install.packages("Hmisc")
library("Hmisc")
matriz_corr2 <- rcorr(as.matrix(coches))             # devuelve los coeficientes de correlación y p-value de los pares de columnas.
matriz_corr2
##        mpg  disp    hp  drat    wt  qsec
## mpg   1.00 -0.85 -0.78  0.68 -0.87  0.42
## disp -0.85  1.00  0.79 -0.71  0.89 -0.43
## hp   -0.78  0.79  1.00 -0.45  0.66 -0.71
## drat  0.68 -0.71 -0.45  1.00 -0.71  0.09
## wt   -0.87  0.89  0.66 -0.71  1.00 -0.17
## qsec  0.42 -0.43 -0.71  0.09 -0.17  1.00
## 
## n= 32 
## 
## 
## P
##      mpg    disp   hp     drat   wt     qsec  
## mpg         0.0000 0.0000 0.0000 0.0000 0.0171
## disp 0.0000        0.0000 0.0000 0.0000 0.0131
## hp   0.0000 0.0000        0.0100 0.0000 0.0000
## drat 0.0000 0.0000 0.0100        0.0000 0.6196
## wt   0.0000 0.0000 0.0000 0.0000        0.3389
## qsec 0.0171 0.0131 0.0000 0.6196 0.3389

Como en ocasiones anteriores, es posible solicitar únicamente o bien los coeficientes de correlación (matriz_corr2$r) o bien los valores-p.

matriz_corr2$P                                      # Muestra sólo los p-values
##               mpg         disp           hp         drat           wt
## mpg            NA 9.380328e-10 1.787835e-07 1.776240e-05 1.293958e-10
## disp 9.380328e-10           NA 7.142679e-08 5.282022e-06 1.222311e-11
## hp   1.787835e-07 7.142679e-08           NA 9.988772e-03 4.145827e-05
## drat 1.776240e-05 5.282022e-06 9.988772e-03           NA 4.784260e-06
## wt   1.293958e-10 1.222311e-11 4.145827e-05 4.784260e-06           NA
## qsec 1.708199e-02 1.314404e-02 5.766253e-06 6.195826e-01 3.388683e-01
##              qsec
## mpg  1.708199e-02
## disp 1.314404e-02
## hp   5.766253e-06
## drat 6.195826e-01
## wt   3.388683e-01
## qsec           NA

Igualmente, la función symnum del paquete stats ofrece algunas posibilidades adicionales de representación en pantalla de esa matriz de correlación, por ejemplo, reemplazando los números por símbolos según su nivel de significación.

library(stats)
symnum(matriz_corr1, 
       abbr.colnames=FALSE,
       symbols = c(" ", ".", ",", "+", "*", "B"))             # Símbolos que reemplazarán a los valores del coeficiente de correlación
##      mpg disp hp drat wt qsec
## mpg  1                       
## disp +   1                   
## hp   ,   ,    1              
## drat ,   ,    .  1           
## wt   +   +    ,  ,    1      
## qsec .   .    ,          1   
## attr(,"legend")
## [1] 0 ' ' 0.3 '.' 0.6 ',' 0.8 '+' 0.9 '*' 0.95 'B' 1

Podemos representar sólo una diagonal de la matriz de correlación, bien la superior, bien la inferior. Para ello primero debe calcularse la siguiente sintaxis.

lower.tri(matriz_corr1, 
          diag = FALSE)
##       [,1]  [,2]  [,3]  [,4]  [,5]  [,6]
## [1,] FALSE FALSE FALSE FALSE FALSE FALSE
## [2,]  TRUE FALSE FALSE FALSE FALSE FALSE
## [3,]  TRUE  TRUE FALSE FALSE FALSE FALSE
## [4,]  TRUE  TRUE  TRUE FALSE FALSE FALSE
## [5,]  TRUE  TRUE  TRUE  TRUE FALSE FALSE
## [6,]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
upper.tri(matriz_corr1, 
          diag = FALSE)
##       [,1]  [,2]  [,3]  [,4]  [,5]  [,6]
## [1,] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
## [2,] FALSE FALSE  TRUE  TRUE  TRUE  TRUE
## [3,] FALSE FALSE FALSE  TRUE  TRUE  TRUE
## [4,] FALSE FALSE FALSE FALSE  TRUE  TRUE
## [5,] FALSE FALSE FALSE FALSE FALSE  TRUE
## [6,] FALSE FALSE FALSE FALSE FALSE FALSE

En este caso la diagonal superior será ocultada

upper <- matriz_corr1

upper[upper.tri(matriz_corr1)]<-""

upper <- as.data.frame(upper)

upper
##        mpg  disp    hp  drat    wt qsec
## mpg      1                             
## disp -0.85     1                       
## hp   -0.78  0.79     1                 
## drat  0.68 -0.71 -0.45     1           
## wt   -0.87  0.89  0.66 -0.71     1     
## qsec  0.42 -0.43 -0.71  0.09 -0.17    1

También es posible Ocultar la parte inferior del triángulo, pero no es tan habitual.

lower <- matriz_corr1
lower[lower.tri(matriz_corr1, diag=TRUE)]<-""
lower <- as.data.frame(lower)
lower
##      mpg  disp    hp  drat    wt  qsec
## mpg      -0.85 -0.78  0.68 -0.87  0.42
## disp            0.79 -0.71  0.89 -0.43
## hp                   -0.45  0.66 -0.71
## drat                       -0.71  0.09
## wt                               -0.17
## qsec

📝 ACTIVIDAD DE EVALUACIÓN CONTINUA: :

  • A partir del dataframe contaminacion, elabora la matriz de correlación entre todas sus variables e identifica cuáles son significativas estadísticamente.
rcorr(as.matrix(contaminacion))             # devuelve los coeficientes de correlación y p-value
  • Elabora esa misma matriz de correlación, pero ocultando la diagonal superior.
matriz_contaminacion <- round(cor(contaminacion),2)
upper.tri(matriz_contaminacion, 
          diag = FALSE)
upper <- matriz_contaminacion
upper[upper.tri(matriz_contaminacion)]<-""
upper <- as.data.frame(upper)
upper

Representación gráfica de una matriz de correlaciones.

Existen diferentes procedimientos para visualizar una matriz de correlación:

  • Diagramas de puntos y diagramas combinados.

  • Función corrplot() (correlograma).

  • Heatmap

Diagramas de puntos

El gráfico más básico para analizar la posible relación entre variables es un gráfico múltiple de dispersión, elaborado con la función pairs, o bien con la función plot.

Las matrices de dispersión obtenidas con la función pairs proporcionan un método simple de presentar las relaciones entre pares de variables cuantitativas y son la versión múltiple de la función plot. Este gráfico consiste en una matriz donde cada entrada presenta un gráfico de dispersión sencillo. Un inconveniente es que si tenemos muchas variables el tamaño de cada entrada se reduce demasiado impidiendo ver con claridad las relaciones entre los pares de variables. La celda \((i,j)\) de una matriz de dispersión contiene el gráfico de dispersión de la columna \(i\) versus la columna \(j\) de la matriz de datos.

En la Figura se muestra un ejemplo de una matriz de dispersión para un conjunto de datos, en la diagonal están los nombres de las variables y por fuera de la diagonal están los diagramas de dispersión para cada combinación de variables.

pairs(coches)

plot(coches)                                                              # Equivalente usando la función plot

La estructura de la función pairs con los argumentos más usuales se muestra a continuación:

pairs(x, labels, panel = points, …, horInd = 1:nc, verInd = 1:nc, lower.panel = panel, upper.panel = panel, diag.panel = NULL, text.panel = textPanel, label.pos = 0.5 + has.diag/3, line.main = 3, cex.labels = NULL, font.labels = 1, row1attop = TRUE, gap = 1, log = ““)

Los argumentos de la función pairs son:

  • x: matriz o dataframe con las variables cuantitativas.

  • labels: vector opcional con los nombres a colocar en la diagonal. Por defecto se usan los nombres de columnas del objeto x.

  • panel: función usual de la forma function(x,y,...) para determinar el contenido de los paneles. Por defecto es points, indicando que se dibujarán los puntos de los pares de variables. Es posible utilizar aquí otras funciones diseñadas por el usuario.

  • ...: Indica que es posible agregar otros parámetros gráficos, tales como pch y col, con los cuales puede especificarse un vector de símbolos y colores a ser usados en los scatterplots.

  • lower.panel, upper.panel: función usual de la forma function(x,y,...) para definir lo que se desea dibujar en los paneles abajo y arriba de la diagonal.

  • diag.panel: función de la forma function(x,y,...) para definir lo que se desea dibujar en la diagonal.

  • text.panel: Es opcional. Permite que una función: function(x, y, labels, cex, font, ...) sea aplicada a los paneles de la diagonal.

  • label.pos: Para especificar la posición \(y\) de las etiquetas en el text panel.

  • cex.labels, font.labels: Parámetros para la expansión de caracteres y fuentes a usar en las etiquetas de las variables.

  • row1attop: Parámetro lógico con el cual se especifica si el gráfico para especificar si el diseño lucirá como una matriz con su primera fila en la parte superior o como un gráfico con fila uno en la base. Por defecto es lo primero.

La función se puede personalizar con varios argumentos. Por ejemplo, es posible restringir el número de variables del dataframe original a un número menor de variables. El objeto coches son los datos originales, mientras que subset.coches es otro dataframe con 3 variables.

subset_coches <- coches[  ,c('mpg', 'drat', 'qsec')]
pairs(subset_coches)

También es posible editar los nombres de las variables, modificar el aspecto del símbolo, inlcir una escala logarínmica, modificar las marcas horizontales en el eje vertical y eliminar los diagramas de dispersión de la diagonal inferior

pairs(subset_coches, 
      lower.panel=NULL, 
      cex.labels=1.5, 
      log='xy',
      main='Matriz de dispersión', 
      las=1,
      labels=c('Consumo', 'Radio del eje trasero', 'Aceleración'),
      pch=3, cex=0.6, col='dodgerblue2')

En este caso, se incorpora una variable cualitativa, que ocupa la columna 10. Debemos en este caso recurrir a los datos originales, que se encuentran en mtcars que contiene todas las variables y usar una fórmula con la ayuda del operador ~ para indicar las variables de interés, y usar una fórmula con la ayuda del operador ~ para indicar las variables de interés. Esta fórmula NO debe contener nada del lado izquierdo mientras que en el lado derecho se colocan todas las variables a considerar en la matriz de dispersión, por esta razón el códido mostrado abajo se inicia con la instrucción ~ mpg + disp + hp.

grupos <- mtcars[, 10]                                              # Variable gear convertida en factor y denominada grupos
pairs(~ mpg + disp + hp, 
      data = coches,                                                 # Data frame de variables
      labels = colnames(mtcars),                                    # Nombres de las variables
      pch = 21,                                                     # Símbolo pch
      bg = rainbow(5)[grupos],                                      # Color de fondo del símbolo (pch 21 a 25)
      col = rainbow(5)[grupos],                                     # Color de borde del símbolo
      main = "Vehículos",                                           # Título del gráfico
      row1attop = TRUE,                                             # Si FALSE, cambia la dirección de la diagonal
      gap = 1,                                                      # Distancia entre subplots
      cex.labels = NULL,                                            # Tamaño del texto de la diagonal
      font.labels = 1)                                              # Estilo de fuente del texto de la diagonal

A la hora de elaborar este gráfico es posible incluir condiciones, como el que el valor de la variable \(mpg > 30\) y el valor de la variable \(disp > 100\), diferenciando además la variable vs con el color rojo si tiene un valor 0 y verde con un valor 1. Para incluir condiciones se usa el parámetro subset de la siguiente manera: subset= mpg < 30 & disp > 100.

col1 <- ifelse(mtcars$vs == '0', 'red', 'green3')
pairs(~ hp + drat + wt, 
      data= mtcars,
      lower.panel=NULL, 
      col=col1,
      subset= mpg < 30 & disp > 100, 
      pch=19, 
      cex=0.8,
      main="Matriz de dispersión para vehículos con mpg < 20 y disp > 200")

El paquete gclus proporciona una función muy similar a la anterior llamada cpairs(). Esta función mejora a pairs permitiendo ordenar las variables y colorear los subplots.

# install.packages("gclus")
library(gclus)
corr <- abs(cor(coches))                         # Matriz de correlación (en términos absolutos)
colors <- dmat.color(corr)                      # La misma matriz, sustituyendo los valores por colores
colors
##      mpg       disp      hp        drat      wt        qsec     
## mpg  NA        "#F4BBDD" "#F4BBDD" "#D2F4F2" "#F4BBDD" "#FDFFDA"
## disp "#F4BBDD" NA        "#F4BBDD" "#D2F4F2" "#F4BBDD" "#FDFFDA"
## hp   "#F4BBDD" "#F4BBDD" NA        "#FDFFDA" "#D2F4F2" "#D2F4F2"
## drat "#D2F4F2" "#D2F4F2" "#FDFFDA" NA        "#D2F4F2" "#FDFFDA"
## wt   "#F4BBDD" "#F4BBDD" "#D2F4F2" "#D2F4F2" NA        "#FDFFDA"
## qsec "#FDFFDA" "#FDFFDA" "#D2F4F2" "#FDFFDA" "#FDFFDA" NA       
## attr(,"Levels")
## [1] "[0.986,5.67]" "(5.67,10.3]"  "(10.3,15]"
order <- order.single(corr)                     # Reordena la matriz, de tal manera que valores similares presentan colores parecidos. 
order
## [1] 6 3 2 5 1 4
cpairs(coches,                                   # ATENCIÓN: data frame, no la matriz de correlación
       order,                                   # Orden de las variables
       panel.colors = colors,                   # Matriz de colores
       border.color = "grey70",                 # Color de los bordes
       gap = 0.45,                                                              # Distancia entre subplots
       main = "Variables ordenadas coloreadas por correlación",                 # Título principal
       show.points = TRUE,                                                      # Si FALSE, elimina todos los puntos
       pch = 21,                                                                # Símbolo pch
       bg = rainbow(3)[mtcars$carb])                                            # Colores según grupos (número de carburadores)

El paquete PerformanceAnalytics incorpora la función chart.Correlation() que crea un gráfico múltiple con:

  • Un histograma con la distribución de cada variable en la diagonal y su función de densidad.

  • Por debajo de la diagonal, diagramas de puntos bivariados con líneas de regresión suavizadas

  • Por encima de la diagonal, el valor del coeficiente de correlación más el nivel de significación estadística.

Cada nivel está asociado a un símbolo: p-values(0, 0.001, 0.01, 0.05, 0.1, 1) <=> símbolos(“”, “”, “”, “.”, ” “)

# install.packages("PerformanceAnalytics")
library(PerformanceAnalytics)
chart.Correlation(coches,                                                # ATENCION: dataframe original, no la matriz de corrrelación
                  method = "pearson",
                  histogram=TRUE,
                  pch=16)

El correlograma

La función corrplot, del paquete homónimo, representa gráficamente una matriz de correlación, resaltando las variables mejor correlacionadas.

# install.packages("corrplot")
library(corrplot)

Los colores y tamaño de los símbolos son proporcionales al valor de los coeficientes de correlación (la leyenda correspondiente aparece a la derecha del correlograma). Por defecto:

  • Correlaciones positivas: azul.

  • Correlaciones negativas: rojo

Ejemplo: representación de los valores numéricos.

corrplot(matriz_corr1,                            # Matriz de correlación que va a ser representada gráficamente 
         method = "number",                       # Simbología: “circle”, “square”, “ellipse”, “number”, “shade”, “color”, “pie”)
         type = "upper",                          # Visualización. Muestra únicamente la diagonal (triángulo) superior de la matriz.
         order = "hclust",                        # Reordena la matriz según el coeficiente de correlación.
         tl.col = "black",                        # Color de las etiquetas
         tl.srt = 45,                             # Ángulo de rotación de las etiquetas.
         addCoef.col = "black",                   # Añade el valor del coeficiente de correlación
         diag=FALSE)                              # Oculta el valor del coeficinte de correlación de la diagonal principal

  • Representación de círculos coloreados (signo positivo o negativo) con tamaños proporcionales al valor del coeficiente de correlación.
col<- colorRampPalette(c("red", "white", "blue"))(20)             # Mismo correlograma, pero usando una paleta de colores diferente
corrplot(matriz_corr1, 
         type="upper", 
         order="hclust", 
         col=col)

  • Incorporación de otras paletas de colores
library(RColorBrewer)
corrplot(matriz_corr1, 
         type="upper", 
         order="hclust", 
         col=brewer.pal(n=8, name="RdBu"))          # Otras paletas: brewer.pal(n=8, name="RdYlBu") ó col=brewer.pal(n=8, name="PuOr")

  • Modificación del fondo de la matriz y simbolos con dos colores
corrplot(matriz_corr1, 
         type="upper", 
         order="hclust", 
         col=c("black", "white"),
         bg="lightblue")

Mapa de calor (“Heat map”)

Un mapa de calor es una técnica de visualización de datos que muestra la magnitud de un fenómeno en dos dimensiones usando colores, proporcionando pistas visuales sobre cómo se agrupa las variables que definen un fenómeno. La variación de color puede ser mediante matiz o intensidad.

Hay dos categorías diferentes de mapas de calor: el mapa de conjuntos y el mapa espacial.

  • En un mapa de conjuntos, las magnitudes se disponen en una matriz de tamaño de celda fijo cuyas filas y columnas representan las variables sometidas a análisis, siendo su orden intencional y arbitrario, con el objetivo de sugerir agrupamientos . El color de cada celda refleja la magnitud del coeficiente de correlación.

  • Por el contrario, en un mapa espacial, el fenómeno varía continuamente.

Ejemplo de mapa de calor

col<- colorRampPalette(c("blue", "white", "red"))(20)          # Colores que vamos a utilizar
heatmap(matriz_corr1,                                          # Matriz de correlación
        col = col,                                             # Paleta de colores
        symm = TRUE)                                           # TRUE cuando la matriz es simétrica (mismo número de filas y columnas)

📝 ACTIVIDAD DE EVALUACIÓN CONTINUA: :

EJERCICIO 1. A partir del dataframe contaminacion:

  • Elabora un gráfico de correlaciones con la función chart.Correlation con las variables del dataset contaminacionutilizando Spearman como método para obtener el coeficiente de correlación.
chart.Correlation(contaminacion,                                                # ATENCION: dataframe original, no la matriz de corrrelación
                  method="pearson",
                  histogram=TRUE,
                  pch=16)
  • Elabora un mapa de calor que represente las correlaciones entre las variables del dataset contaminación.
col_nuevo <- colorRampPalette(c("blue", "white", "red"))(20)          # Colores que vamos a utilizar

heatmap(matriz_corr_cont,                                          # Matriz de correlación
        col = col_nuevo,                                             # Paleta de colores
        symm = TRUE) 

EJERCICIO 2. Importa los datos de la hoja Ejemplo1 de la hoja de cálculo https://personales.unican.es/rasillad/docencia/G14/TEMA_3/ejercicios_regresion_2023.xlsx.

#if(!require("readxl")) install.packages("readxl")
library(readxl)
download.file("https://personales.unican.es/rasillad/docencia/G14/TEMA_3/ejercicios_regresion_2023.xlsx", 
              destfile = "regresion.xlsx",
              mode="wb")
ejercicio1 <- read_excel("regresion.xlsx", sheet = "Ejemplo1")
ejercicio1
## # A tibble: 30 × 2
##        x     y
##    <dbl> <dbl>
##  1  6.81  9.85
##  2  9.84 11.2 
##  3  4.98  5.12
##  4  5     8.11
##  5  3.5   3.56
##  6  3.64  1.99
##  7  7.87 15.5 
##  8  5.14  7.52
##  9  8.39 14.0 
## 10  6.82  7.52
## # ℹ 20 more rows
  • Determina si existe una relación lineal entre las variables y si las variables cumplen con el supuesto de normalidad. La relación lineal podemos observarla mediante un gráfico
plot(ejercicio1$x, ejercicio1$x)

Una posibilidad para evaluar el supuesto de normalidad es aplicar el test de Shapiro-Wilks.

  • Hipótesis H0: La variable presenta una distribución normal -> cuando p-value es mayor que alpha = 0,05 -> No rechazar H0 (sigue una distribución normal).

  • Hipótesis H1: La variable presenta una distribución no normal -> cuando p-value es menor que alpha = 0,05 -> Rechazar H0 (la distribución no es normal)

shapiro.test(ejercicio1$x)           
shapiro.test(ejercicio1$y) 

De acuerdo con lo mencionado anteriormente, ambas variables presentan una distribución normal.

Calcula los coeficientes de correlación de Pearson y Spearman y determina si existe una relación estadísticamente significativa entre las variables.

cor.test(ejercicio1$x,ejercicio1$y)
cor.test(ejercicio1$x,ejercicio1$y, method = "spearman")

EJERCICIO 3. Importa los datos de la hoja Ejemplo2 de la hoja de cálculo https://personales.unican.es/rasillad/docencia/G14/TEMA_3/ejercicios_regresion_2023.xlsx. A partir de ella:

ejercicio2 <- read_excel("regresion.xlsx", sheet = "Ejemplo2")
ejercicio2
## # A tibble: 25 × 3
##     peso  edad grasas
##    <dbl> <dbl>  <dbl>
##  1    84    46    354
##  2    73    20    190
##  3    65    52    405
##  4    70    30    263
##  5    76    57    451
##  6    69    25    302
##  7    63    28    288
##  8    72    36    385
##  9    79    57    402
## 10    75    44    365
## # ℹ 15 more rows

Elabora una matriz de correlaciones entre las diferentes variables.

round(cor(ejercicio2),2)

Exporta tanto la matriz de correlaciones como la matriz de p-values a Excel.

library("Hmisc")
matriz.corr.ejercicio2 <- rcorr(as.matrix(ejercicio2))        # devuelve los coeficientes de correlación y p-value de los pares de columnas.
matriz.corr.ejercicio2$r 
matriz.corr.ejercicio2$P 

Representa esa matriz gráficamente con un correlograma, utilizando para ello los números correspondientes a los coeficientes de correlación de Pearson.

library(corrplot)
corrplot(cor(ejercicio2),                            # Matriz de correlación que va a ser representada gráficamente 
         method = "number",                       # Simbología: “circle”, “square”, “ellipse”, “number”, “shade”, “color”, “pie”)
         type = "upper",                          # Visualización. Muestra únicamente la diagonal (triángulo) superior de la matriz.
         order = "hclust",                        # Reordena la matriz según el coeficiente de correlación.
         tl.col = "black",                        # Color de las etiquetas
         tl.srt = 45,                             # Ángulo de rotación de las etiquetas.
         addCoef.col = "black",                   # Añade el valor del coeficiente de correlación
         diag = FALSE)       

EJERCICIO 4. Importa los datos de la hoja Ejemplo3 de la hoja de cálculo https://personales.unican.es/rasillad/docencia/G14/TEMA_3/ejercicios_regresion_2023.xlsx. A partir de ella:

ejercicio3 <- read_excel("regresion.xlsx", sheet = "Ejemplo3")
ejercicio3
## # A tibble: 30 × 6
##       y1    y2    y3    y4    y5    y6
##    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1  6.81  6.84  6.85  6.86  6.75  6.64
##  2  9.84  8.66  8.07  7.71 12.2  16.9 
##  3  4.98  4.81  4.73  4.68  5.30  5.96
##  4  5.00  5.53  5.79  5.95  3.95  1.85
##  5  3.50  3.71  3.81  3.88  3.09  2.26
##  6  3.64  3.41  3.30  3.23  4.10  5.03
##  7  7.87  8.70  9.12  9.37  6.21  2.89
##  8  5.14  5.46  5.62  5.71  4.51  3.25
##  9  8.39  8.61  8.72  8.78  7.95  7.08
## 10  6.82  6.30  6.04  5.88  7.86  9.95
## # ℹ 20 more rows

Elabora una matriz de correlaciones entre las diferentes variables.

round(cor(ejercicio3),2)

Exporta tanto la matriz de correlaciones como la matriz de p-values a Excel.

matriz.corr.ejercicio3 <- rcorr(as.matrix(ejercicio3))        # devuelve los coeficientes de correlación y p-value de los pares de columnas.
matriz.corr.ejercicio3$r 
matriz.corr.ejercicio3$P 

Representa esa matriz gráficamente con un correlograma, utilizando para ello los números correspondientes a los coeficientes de correlación de Pearson.

corrplot(cor(ejercicio3),                            # Matriz de correlación que va a ser representada gráficamente 
         method = "number",                       # Simbología: “circle”, “square”, “ellipse”, “number”, “shade”, “color”, “pie”)
         type = "upper",                          # Visualización. Muestra únicamente la diagonal (triángulo) superior de la matriz.
         order = "hclust",                        # Reordena la matriz según el coeficiente de correlación.
         tl.col = "black",                        # Color de las etiquetas
         tl.srt = 45,                             # Ángulo de rotación de las etiquetas.
         addCoef.col = "black",                   # Añade el valor del coeficiente de correlación
         diag = FALSE)