Introducción | cor() | cor.test() | r.test()

Introducción

El coeficiente de correlación de Pearson se utiliza cuando los datos siguen una distribución normal para comprobar si dos variables cuantitativas tienen una relación lineal entre sí, es decir si varían de forma simultánea. En caso de no cumplirse la normalidad se utilizan la correlación de Spearman o la de Kendall.

Existen dos funciones que calculan la correlación: cor() y cor.test(). La primera nos permite calcular la correlación de un par de variables o de un conjunto de pares (normalmente de un data.frame) pero no calcula el valor p de significación. cor.test() sí calcula la significación de la correlación pero no puede aplicarse a más de dos variables a mismo tiempo. Hemos creado la función r.test() que devuelve una matriz de correlaciones y otra con las significaciones correspondientes.

cor()


# Correlación de Pearson entre pares de variables
 
data("iris")
 
# Correlaciones entre las variables de "iris" excepto la nº 5
p <- cor(iris[-5]) # Correlación de Pearson
 
 
cat("Correlación de Pearson\n")
print(p)
 
 
Probar este programa
Correlación de Pearson
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length    1.0000000  -0.1175698    0.8717538   0.8179411
Sepal.Width    -0.1175698   1.0000000   -0.4284401  -0.3661259
Petal.Length    0.8717538  -0.4284401    1.0000000   0.9628654
Petal.Width     0.8179411  -0.3661259    0.9628654   1.0000000


cor.test()


# Test de correlación
 
data(iris)
 
# Test de correlación entre dos variables de iris
test <- cor.test(iris$Sepal.Length,iris$Sepal.Width)
 
print(test)
 
Probar este programa
    Pearson's product-moment correlation
 
data:  iris$Sepal.Length and iris$Sepal.Width
t = -1.4403, df = 148, p-value = 0.1519
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.27269325  0.04351158
sample estimates:
       cor
-0.1175698

El valor de P-value mayor de 0.05 nos indica que no existe correlación entre ambas variables.



r.test()


# m tiene que ser una matriz o data.frame.
# Hace un test de correlación entre las columnas dando como resultado una matriz
# de r y otra de p
 
r.test <-function(m,method="pearson") {
 
  n<-0
 
  # Matriz que contendrá los p-value
  p<-matrix(rep(0,ncol(m)^2), nc=ncol(m),nr=ncol(m))
  colnames(p) <- rownames(p) <- colnames(m)
 
 
  # Matriz que contendrá las correlaciones
  r<-matrix(rep(1,ncol(m)^2), nc=ncol(m),nr=ncol(m))
  colnames(r) <- rownames(r) <- colnames(m)
 
 
  for (i in 1:(ncol(m)-1)) {
    for (j in (i+1):ncol(m)) {
      n <- n+1
      test <- cor.test(m[,i],m[,j],method=method)
      p[i,j] <- p[j,i] <- test$p.value
      r[i,j] <- r[j,i] <- test$estimate
 
    }
  }
 
  return(list("Method"=test$method,"r"=r,"p-value"=p))
}
 
data("iris")
 
# Se hará una correlación entre todas la variables
# excepto la 5 que no es numérica
test <- r.test(iris[-5])
 
print(test)
Probar este programa
$Method
[1] "Pearson's product-moment correlation"
 
$r
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length    1.0000000  -0.1175698    0.8717538   0.8179411
Sepal.Width    -0.1175698   1.0000000   -0.4284401  -0.3661259
Petal.Length    0.8717538  -0.4284401    1.0000000   0.9628654
Petal.Width     0.8179411  -0.3661259    0.9628654   1.0000000
 
$`p-value`
             Sepal.Length  Sepal.Width Petal.Length  Petal.Width
Sepal.Length    0.0000000 1.518983e-01 0.000000e+00 0.000000e+00
Sepal.Width     0.1518983 0.000000e+00 4.513314e-08 4.073229e-06
Petal.Length    0.0000000 4.513314e-08 0.000000e+00 0.000000e+00
Petal.Width     0.0000000 4.073229e-06 0.000000e+00 0.000000e+00