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

Introducción

El coeficiente de correlación de Kendall 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 Kendall entre pares de variables
 
data("iris")
 
# Correlaciones entre las variables de "iris" excepto la nº 5
p <- cor(iris[-5], method="kendall") # Correlación de Kendall
 
 
cat("Correlación de Kendall\n")
print(p)
 
 
Probar este programa
Correlación de Kendall
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length   1.00000000 -0.07699679    0.7185159   0.6553086
Sepal.Width   -0.07699679  1.00000000   -0.1859944  -0.1571257
Petal.Length   0.71851593 -0.18599442    1.0000000   0.8068907
Petal.Width    0.65530856 -0.15712566    0.8068907   1.0000000

cor.test()

# Test de correlación de Kendall
 
data(iris)
 
# Test de correlación entre dos variables de iris
test <- cor.test(iris$Sepal.Length,iris$Sepal.Width, method="kendall")
 
print(test)
 
Probar este programa
    Kendall's rank correlation tau
 
data:  iris$Sepal.Length and iris$Sepal.Width
z = -1.3318, p-value = 0.1829
alternative hypothesis: true tau is not equal to 0
sample estimates:
        tau
-0.07699679

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="kendall")
 
print(test)
Probar este programa
$Method
[1] "Kendall's rank correlation tau"
 
$r
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length   1.00000000 -0.07699679    0.7185159   0.6553086
Sepal.Width   -0.07699679  1.00000000   -0.1859944  -0.1571257
Petal.Length   0.71851593 -0.18599442    1.0000000   0.8068907
Petal.Width    0.65530856 -0.15712566    0.8068907   1.0000000
 
$`p-value`
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length     0.000000 0.182921015  0.000000000 0.000000000
Sepal.Width      0.182921 0.000000000  0.001283268 0.007518013
Petal.Length     0.000000 0.001283268  0.000000000 0.000000000
Petal.Width      0.000000 0.007518013  0.000000000 0.000000000