library(ltm)
library(psych)Estadística bivariada en R: Covarianza y Correlación
Librerías
Covarianza
x <- c(17.269, 17.18, 15.252, 15.01, 13.679, 13.766, 13.546,
15.035, 15.432, 16.501, 15.2, 17.355, 15.548, 18.708,
15.474, 16.392, 16.06, 13.424, 11.721, 16.414)
y <- c(10.361, 8.934, 8.541, 8.105, 8.207, 7.434, 7.315, 8.72,
8.025, 8.911, 8.816, 8.678, 8.085, 9.728, 9.284, 9.507,
8.351, 8.054, 6.798, 8.207)
cov(x, y)[1] 1.120312
Correlación de Pearson
¿Son normales mis datos?
x <- c(17.269, 17.18, 15.252, 15.01, 13.679, 13.766, 13.546,
15.035, 15.432, 16.501, 15.2, 17.355, 15.548, 18.708,
15.474, 16.392, 16.06, 13.424, 11.721, 16.414)
y <- c(10.361, 8.934, 8.541, 8.105, 8.207, 7.434, 7.315, 8.72,
8.025, 8.911, 8.816, 8.678, 8.085, 9.728, 9.284, 9.507,
8.351, 8.054, 6.798, 8.207)Observemos esto mediante un histograma
hist(x, breaks = 4,
main = "Variable x")
hist(y, breaks = 5,
main = "Variable y")
Dado que parece seguir la forma acampanada, podemos continuar.
Gráfico de dispersión
plot(x, y)
mod <- lm(y~x)
abline(mod) # linea de tendencia
Cálculo de la correlación de Pearson
cor(x, y, method = "pearson")[1] 0.8032937
Correlación de Spearman
Continuaremos con el ejemplo anterior, pues lo que buscamos es ejemplificar su uso en R
cor(x, y, method = "spearman")[1] 0.7423844
Dato curioso: Notará, si lo compara con el ejercicio resuelto en Excel, que los resultados son ligeramente diferentes. Esto es normal, en R la función programada para el método de Spearman sigue los siguientes pasos. Dado que puede haber empates, se dice que hacerlo de esta manera es más robusto.
# Obtener rangos de las variables numéricas
rx <- rank(x)
ry <- rank(y)
rx; ry [1] 18 17 9 6 4 5 3 7 10 16 8 19 12 20 11 14 13 2 1 15
[1] 20.0 16.0 11.0 7.0 8.5 3.0 2.0 13.0 4.0 15.0 14.0 12.0 6.0 19.0 17.0
[16] 18.0 10.0 5.0 1.0 8.5
# se calcula la correlación de Pearson con los rangos de X y Y
cor(rx, ry) # note como da el mismo resultado[1] 0.7423844
Correlación de Kendall
cor(x, y, method = "kendall")[1] 0.5751999
Correlación punto biserial
Aquí vamos a cambiar de conjunto de datos, la cantidad de tiempo de secado y la relación entre piezas buenas y malas.
cont <- c(2, 3, 16, 17, 5, 6, 14, 7, 15, 8, 9,
10, 11, 12, 13, 18, 19, 20, 21, 22)
dicot <- factor(c(0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1),
levels = c(1, 0))
ltm::biserial.cor(cont, dicot)[1] 0.3133537
Correlación biserial
La variable dicotómica se desprende de la variable continua “Notas”. Se quiere estudiar la relación entre las horas de estudio mensuales y el resultado en el curso (aprobado:1 o reprobado:0)
horas <- c(26.277, 24.612, 20.112, 30.408, 24.796, 31.698, 31.45,
27.132, 23.164, 25.31, 26.362, 26.32, 19.574, 29.382,
33.806, 29.202, 26.518, 30.387, 31.962, 30.255, 17.852,
21.119, 34.357, 25.554, 20.482, 27.247, 25.133, 18.208,
25.189, 24.843)
resultado <- c(1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1)
psych::biserial(horas, resultado) [,1]
[1,] 0.9780837
Coeficiente \(\phi\)
Aquí ambas variables deben ser dicotómicas
x <- c(1, 0, 1, 1, 0, 1, 0, 0, 1, 0)
y <- c(0, 1, 1, 1, 0, 1, 0, 0, 1, 0)Con esto, ya podemos calcular el coeficiente
psych::phi(table(x, y))[1] 0.6
Correlación tetracórica
Para el ejemplo, usemos el conjunto de datos anterior.
psych::tetrachoric(table(x, y))Call: psych::tetrachoric(x = table(x, y))
tetrachoric correlation
[1] 0.81
with tau of
0 0
0 0
Correlación policórica
Son las respuestas a dos preguntas en escala 1-5
p1 <- c(5, 4, 1, 3, 3, 2, 4, 5, 2, 2, 2, 5, 5, 4, 4,
5, 3, 3, 3, 5, 2, 5, 4, 5, 1, 2, 2, 1, 1, 2)
p2 <- c(4, 3, 2, 2, 2, 1, 4, 5, 2, 2, 1, 5, 4, 4, 3,
5, 4, 3, 3, 4, 5, 5, 4, 5, 1, 3, 3, 1, 2, 3)
psych::polychoric(data.frame(p1, p2)) # el valor es 0.84Call: psych::polychoric(x = data.frame(p1, p2))
Polychoric correlations
p1 p2
p1 1.00
p2 0.84 1.00
with tau of
1 2 3 4
p1 -1.1 -0.25 0.17 0.62
p2 -1.1 -0.43 0.17 0.84