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

Introducción

El coeficiente de correlación de Spearman se utiliza cuando los datos no 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.

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 Spearman entre pares de variables
 
data("iris")
 
# Correlaciones entre las variables de "iris" excepto la nº 5
p <- cor(iris[-5], method="spearman") # Correlación de Spearman
 
 
cat("Correlación de Spearman\n")
print(p)
 
 
Probar este programa
Correlación de Spearman
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length    1.0000000  -0.1667777    0.8818981   0.8342888
Sepal.Width    -0.1667777   1.0000000   -0.3096351  -0.2890317
Petal.Length    0.8818981  -0.3096351    1.0000000   0.9376668
Petal.Width     0.8342888  -0.2890317    0.9376668   1.0000000

cor.test()


# Test de correlación de Spearman
 
data(iris)
 
# Test de correlación entre dos variables de iris
test <- cor.test(iris$Sepal.Length,iris$Sepal.Width, method="spearman")
 
print(test)
 
Probar este programa
    Spearman's rank correlation rho
 
data:  iris$Sepal.Length and iris$Sepal.Width
S = 656283.3, p-value = 0.04137
alternative hypothesis: true rho is not equal to 0
sample estimates:
       rho
-0.1667777
 
Mensajes de aviso perdidos
In cor.test.default(iris$Sepal.Length, iris$Sepal.Width, method = "spearman") :
  Cannot compute exact p-value with ties
El mensaje de aviso no invalida la prueba, sólo avisa de que no puede calcular p de forma exacta debido a la presencia de empates (pares de datos iguales). Estos mensajes pueden evitarse indicando en los parámetros de cor.test: exact=FALSE aunque el resultado será el mismo.



r.test()

# Hace un test de correlación entre las columnas dando como resultado una matriz
# de r y otra de p
# m tiene que ser una matriz o data.frame.
 
 
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], method="spearman")
 
print(test)
Probar este programa
$Method
[1] "Spearman's rank correlation rho"
 
$r
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length    1.0000000  -0.1667777    0.8818981   0.8342888
Sepal.Width    -0.1667777   1.0000000   -0.3096351  -0.2890317
Petal.Length    0.8818981  -0.3096351    1.0000000   0.9376668
Petal.Width     0.8342888  -0.2890317    0.9376668   1.0000000
 
$`p-value`
             Sepal.Length  Sepal.Width Petal.Length  Petal.Width
Sepal.Length 0.000000e+00 0.0413679942 3.443087e-50 4.189447e-40
Sepal.Width  4.136799e-02 0.0000000000 1.153938e-04 3.342981e-04
Petal.Length 3.443087e-50 0.0001153938 0.000000e+00 8.156597e-70
Petal.Width  4.189447e-40 0.0003342981 8.156597e-70 0.000000e+00
 
Mensajes de aviso perdidos
1: In cor.test.default(m[, i], m[, j], method = method) :
  Cannot compute exact p-value with ties
2: In cor.test.default(m[, i], m[, j], method = method) :
  Cannot compute exact p-value with ties
3: In cor.test.default(m[, i], m[, j], method = method) :
  Cannot compute exact p-value with ties
4: In cor.test.default(m[, i], m[, j], method = method) :
  Cannot compute exact p-value with ties
5: In cor.test.default(m[, i], m[, j], method = method) :
  Cannot compute exact p-value with ties
6: In cor.test.default(m[, i], m[, j], method = method) :
  Cannot compute exact p-value with ties

Los mensajes de aviso no invalidan la prueba, sólo avisa de que no puede calcular p de forma exacta debido a la presencia de empates (pares de datos iguales). Estos mensajes pueden evitarse indicando en los parámetros de cor.test: exact=FALSE aunque el resultado será el mismo.