Introducción Correlación Lineal

Para cuantificar y estudiar la relación lineal entre dos variables continuas es necesario disponer de parámetros que permitan cuantificar dicha relación.
Covarianza
Indica el grado de variación conjunta de dos variables aleatorias. La covarianza depende de las escalas en que se miden las variables estudiadas, por lo tanto, no es comparable entre distintos pares de variables.Luego, para hacer comparaciones se estandariza la covarianza, generando lo que se conoce como coeficientes de correlación.
Coeficientes de Correlación

Existen diferentes tipos, de entre los que destacan el coeficiente de Pearson, Rho de Spearman y Tau de Kendall entre otros(ver presentación correlación).

Correlación en R

En R se puede calular los diferentes tipos de correlaciones y sus niveles de significancia con : cor() y cor.test(),respectivamente. Recuerde que siempre puede utilizar “help” para una explicación mayor
** Ejemplo**
Para ilustrar la correlación, considere el conjunto de datos de vino (wine) contenido en el paquete gclus R.
Recuerde primero se instala paquete.install.packages(“gclus”) y luego se descarga la librería

## Loading required package: cluster

Este conjunto de datos proporciona 13 mediciones obtenidas de un análisis químico de 178 vinos cultivados en la misma región en Italia pero derivados de tres cultivares diferentes (Barolo, Grignolino, Barbera).

data(wine, package= "gclus")
head(wine)
##   Class Alcohol Malic  Ash Alcalinity Magnesium Phenols Flavanoids
## 1     1   14.23  1.71 2.43       15.6       127    2.80       3.06
## 2     1   13.20  1.78 2.14       11.2       100    2.65       2.76
## 3     1   13.16  2.36 2.67       18.6       101    2.80       3.24
## 4     1   14.37  1.95 2.50       16.8       113    3.85       3.49
## 5     1   13.24  2.59 2.87       21.0       118    2.80       2.69
## 6     1   14.20  1.76 2.45       15.2       112    3.27       3.39
##   Nonflavanoid Proanthocyanins Intensity  Hue OD280 Proline
## 1         0.28            2.29      5.64 1.04  3.92    1065
## 2         0.26            1.28      4.38 1.05  3.40    1050
## 3         0.30            2.81      5.68 1.03  3.17    1185
## 4         0.24            2.18      7.80 0.86  3.45    1480
## 5         0.39            1.82      4.32 1.04  2.93     735
## 6         0.34            1.97      6.75 1.05  2.85    1450
help(wine)
## starting httpd help server ... done

Como se observa, hay una columna adicional referida al tipo de vino(Class), la cual tiene los niveles de 1,2 y 3.Luego, esta variable es un factor con tres niveles, que segun las referencias son:“Barolo”, “Grignolino”, “Barbera”; respectivamente

Class <- factor(wine$Class, levels = 1:3, 
          labels = c("Barolo", "Grignolino",      "Barbera"))
names(wine)
##  [1] "Class"           "Alcohol"         "Malic"          
##  [4] "Ash"             "Alcalinity"      "Magnesium"      
##  [7] "Phenols"         "Flavanoids"      "Nonflavanoid"   
## [10] "Proanthocyanins" "Intensity"       "Hue"            
## [13] "OD280"           "Proline"

Revisamos de manera descritiva la base de datos excepto la Class

X <- data.matrix(wine[,-1])#-1no la primera columna

** Algunos estadísticos**
Para el cálculo de la moda, debe haberse instalado previamente el paquete “modeest” y haberlo cargado en la sesión de trabajo; esto permitirá contar con una función que calculará de forma automática el o los valores más frecuentes de la distribución, herramienta que no existe en los paquetes básicos de R. Luego, se utiliza el comando mfv para calcular la moda de la variable.

library(modeest)
X1=subset(wine,wine$Class=="1" )
mfv(X1$Malic)
## [1] 1.73
X2=subset(wine, wine$Class=="2")
mfv(X2$Malic)
## [1] 1.51 1.61
X3= subset(wine,wine$Class=="3")
mfv(X3$Malic)
## [1] 3.03

** Análisis**
La concentración de ácido málico en cada uno de los tres tipos mayoritariamente esta entre: 1,51 y 3,03.Esas concentraciones de ácido málico indican que los vinos han sido añejados todos en más de 6 años (BLOUIN y GUIMBERTEAU, 2000), y hace que la acidez del vino disminuya para que se acentúe más el sabor en los mismos.
### Ejercicio Realice un análisis de la cada uno de los paramétros, en forma general y para cada tipo de vino.
En cuanto a la correlación entre las variables(13 variables)vamos a revisar dicha relación de manera gráfica.En primer lugar se representan las dos variables mediante un diagrama de dispersión (+) para intuir si existe relación lineal o monotónica. Si no la hay, no tiene sentido calcular este tipo de correlaciones.

plot(X3$Ash,X3$Alcalinity, col="blue", 
     main = "Diagrama de Dispersión")

Hipótesis Existe una relación lineal positiva entre los paramétros Ash y Acalinidad.
Si queremos, graficar todas las relaciones entre los diferentes paramétros, se puede utilizar la función “pairs”. No obstante, debe tener en cuenta que los diferentes parametros, tienen magnitudes diferentes.

X3=X3[,-1]#eliminar columna 1
pairs(X3, lower.panel = NULL) # No se muestra la diagonal inferior ya que es lo mismo que la superior

¿Teniendo en cuenta el anterior diagrama, cuál par variables considera que tienen correlación alta lineal y cuáles no?
Para responder, a esta pregunta es necesario cuantificar la correlación (cor)y luego medir su significacncia(cor,test).
Para poder elegir el coeficiente de correlación adecuado, se tiene que analizar el tipo de variables y la distribución que presentan. En este caso, ambas variables son cuantitativas continuas y pueden transformarse en rangos para ordenarlas, por lo que a priori los tres coeficientes podrían aplicarse. La elección se hará en función de la distribución que presenten las observaciones

par(mfrow = c(1, 2))
hist(X3$Alcalinity, breaks = 6, 
     main = "Distribución de Alcalinity", 
     xlab = "Alcalinity", border = "darkred")
hist(X3$Ash, breaks = 6, 
     main = "Distribución Ash", xlab = "Ash", 
     border = "blue")

Segunla anterior gráfic, queilustra una aproximación de la variable Alcalinity y podría pensar que esta tiene distribución normal?

par(mfrow = c(1, 2))
qqnorm(X3$Alcalinity, main = "Alcalinity", 
       col = "darkred")
qqline(X3$Alcalinity) 
qqnorm(X3$Ash, main = "Ash", col = "blue") 
qqline(X3$Ash)

Como observamos en la prueba gráfica (QQ-plot) para el caso de la variable Ash, la normlidad no se asegura para valores extremos. Por lo tanto, vamos a revisar la significancia de la normalidad con una prueba estadística (\(\alpha=0.05\)). Se utilizará la prueba de Shapiro teniendo en cuenta que \(n_{3}=48\)
\[H_{0}:Ash(Normal)\]

par(mfrow = c(1, 1))
shapiro.test(X3$Ash)
## 
##  Shapiro-Wilk normality test
## 
## data:  X3$Ash
## W = 0.96085, p-value = 0.1092
shapiro.test(X3$Alcalinity)
## 
##  Shapiro-Wilk normality test
## 
## data:  X3$Alcalinity
## W = 0.95976, p-value = 0.09874

Resultado de la prueba
Para la variable Ash pvalor>0.05 no se rechaza la hipotesis nula
Para la variable Alcalinity pvalor>0.05 No se rechaza la hipótesis nula
Homocedasticidad
La homocedasticidad implica que la varianza se mantenga constante. Puede analizarse de forma gráfica representando las observaciones en un diagrama de dispersión y viendo si mantiene una homogeneidad en su dispersión a lo largo del eje X. En algunos libros se menciona el test de Goldfeld-Quandt o el de Breusch-Pagan como test de hipótesis para la homocedasticidad en correlación y regresión.
Otra manera gráfica,tal como muestra en un diagrama de dispersión, es observar sí hay un patrón cónico(en forma de cono). Esto debe de tenerse en cuenta si se utiliza Pearson puesto que viola una de sus condiciones.
Es decir, si se presentala falta de homocedasticidad, los resultados generados por Pearson no son precisos, desde el punto de vista teórico Spearman o Kendall son más adecuados.

cor(X3$Ash, X3$Alcalinity, method = "pearson")
## [1] 0.7585177

El valor de correlación una correlación alta (>0.7). Sin embargo para poder considerar que existe realmente correlación entre las dos variables es necesario calcular su significancia, de lo contrario podría deberse al azar.

Prueba de Significancia de correlación

Tenga en cuenta que por muy alto que sea un coeficiente de correlación, si no es significativa se ha de considerar inexistente.

cor.test(X3$Ash,X3$Alcalinity,
         alternative = "two.sided",
         conf.level = 0.95, method = "pearson")
## 
##  Pearson's product-moment correlation
## 
## data:  X3$Ash and X3$Alcalinity
## t = 7.8946, df = 46, p-value = 4.232e-10
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.6047111 0.8577822
## sample estimates:
##       cor 
## 0.7585177

Resultado de la prueba
El coeficiente de correlación es significativos porque el pvalor<0.05, es decir (p_value ≈ 0).

Tamaño del Efecto

La correlación lineal entre dos variables, además del valor del coeficiente de correlación y de sus significancia, también tiene un tamaño de efecto asociado. Se conoce como coeficiente de determinación 𝑅2. Se interpreta como la cantidad de varianza de 𝑌 explicada por 𝑋. En el caso del coeficiente de Pearson y el de Spearman, 𝑅2 se obtiene elevando al cuadrado el coeficiente de correlación. En el caso de Kendall no se puede calcular de este modo. (No he encontrado como se calcula).
Se emplean como medida de fuerza de asociación (tamaño del efecto):
– 0: asociación nula.
– 0.1: asociación pequeña.
– 0.3: asociación mediana.
– 0.5: asociación moderada.
– 0.7: asociación alta.
– 0.9: asociación muy alta.

R2_pearson <- cor(X3$Ash,X3$Alcalinity ,
                  method = "pearson")^2
R2_pearson
## [1] 0.5753492

Conclusión

Existe una correlación significativa entre el la variable Ash y la Alcalinity con (r=0.76,p-value < 4.232e-10) y con un tamaño de efecto moderado (\(R^{2}=0.58\)).
Finalmente, mediante bootstrapping también se puede calcular la significancia de un coeficiente de correlación. Es una alternativa no paramétrica.

Matriz de Correlación

Cuando se dispone de varias variables como en este caso, y se quiere estudiar la relación entre todas ellas se recurre al cálculo de matrices con el coeficiente de correlación de cada par de variables (pairwise correlation). También se generan gráficos de dispersión dos a dos.
En R existen diferentes funciones o librerias como ggplot2,que permiten realizar este estudio de las diferencias entre ellas son el modo en que se representan gráficamente los resultados.

Vamos a utilizar solo las cuatro primeras `` Un subconjunto de ellos formado por las variables asociadas al color y la madurez del vino

datos <- X3[, c(2,5,8,9,12)]
head(datos)
##     Malic Magnesium Nonflavanoid Proanthocyanins OD280
## 131  1.35       122         0.21            0.94  1.29
## 132  2.99       104         0.24            0.83  1.42
## 133  2.31        98         0.27            0.83  1.36
## 134  3.55       106         0.17            0.84  1.29
## 135  1.24        85         0.60            1.25  1.51
## 136  2.46        94         0.63            0.94  1.58

Matriz de correlación

cor(x = datos, method = "pearson")
##                        Malic  Magnesium Nonflavanoid Proanthocyanins
## Malic            1.000000000 -0.1749785    0.1427581      -0.2234474
## Magnesium       -0.174978513  1.0000000   -0.5056961       0.1535235
## Nonflavanoid     0.142758070 -0.5056961    1.0000000       0.1718491
## Proanthocyanins -0.223447373  0.1535235    0.1718491       1.0000000
## OD280            0.007206139 -0.2230251    0.3066323      -0.1286366
##                        OD280
## Malic            0.007206139
## Magnesium       -0.223025107
## Nonflavanoid     0.306632298
## Proanthocyanins -0.128636602
## OD280            1.000000000

Segun esta matriz la correlación más alta esta entre Proanthocyanins and Intensity(0.68). Graficamente se tiene

pairs(x=datos,lower.panel = NULL,
      col="red")

Analisis para determinar que metodo

require(psych) 
multi.hist(x = datos, 
           dcol = c("blue", "red"),
           dlty = c("dotted", "solid"), 
           main = "")

SugerenciaLa función corrplot() del paquete corrplot recibe como argumento la matriz de correlaciones generada por la función cor() y genera diferentes tipos de “heat maps” mucho más visuales que la matriz numérica.

require(corrplot) 
## Loading required package: corrplot
## corrplot 0.84 loaded
corrplot(corr = cor(x = datos, 
                    method = "pearson"), 
         method = "number")

En R se pueden encontrar otras librerias que permiten representar a la vez los diagramas de dispersión y los valores de correlación para cada par de variables. Además de la distribución de cada una de las variables.

require(psych) 
pairs.panels(x = X3[,c(2,5,8,9)], 
             ellipses = FALSE,
             lm = TRUE, method = "pearson")