Matrices de correlaciones

La función cor() proporciona la matriz de coeficientes de correlación de Pearson de las variables introducidas como argumento. Así,
cor(survey$Height,survey$Wr.Hnd, use=''complete.obs'')
nos da el coeficiente de correlación entre la estatura y el tamaño de la mano. El resultado
[1] 0.600991
es lo que deberemos interpretar. Hay que hacer notar que, cuando hay valores perdidos, a la función cor() hay que decirle a R qué hacer con los mismos. Para que haga el cálculo del coeficiente sólo a partir de los casos completos para ambas variables introducimos la opción use=''complete.obs''.
Para calcular el coeficiente de determinación sólo deberíamos elevar al cuadrado el valor devuelto por la función. Por ejemplo tecleando
cor(survey$Height,survey$Wr.Hnd, use=''complete.obs'')^2
Adviértase que, como no hemos asignado el valor a ningún objeto, no quedará almacenado en el espacio de trabajo; tan sólo será presentado por pantalla.

Podemos aplicar la función cor() a un data.frame con variables numéricas. En este caso obtendremos una matriz de correlaciones. Para obtener la matriz de correlaciones de las cuatro variables numéricas contenidas en el data.frame survey podemos teclear
options(digits=3)
cor(data.frame(NW.Hnd,Wr.Hnd,Height,Pulse),use=''complete.obs'')
como se ve, se crea un data.frame interno que almacena las variables numéricas. Este será el objeto que recibirá la acción de la función. Como antes, sólo se tendrán en cuenta los casos completos. El resultado es


 		NW.Hnd 		 Wr.Hnd 		Height 		 Pulse               

NW.Hnd 1.0000 0.96643 0.6000 -0.01698
Wr.Hnd 0.9664 1.00000 0.6184 -0.00761
Height 0.6000 0.61835 1.0000 -0.08468
Pulse -0.0170 -0.00761 -0.0847 1.00000

Como se explicó en un capítulo anterior, si nos interesase calcular estos valores con asiduidad, sería conveniente definir sendas funciones.

Una cuestión importante es contrastar el grado de significación de los coeficientes de la matriz de correlaciones. Para un $\alpha=0.05$, podemos considerar que son significativos los valores $r_{ij}$ que cumplen

$\vert r_{ij}\vert\cdot\sqrt{n}> 1.96$
siendo $n$ el número de casos de la serie de datos7.1.
En el ejemplo que estamos utilizando, para obtener el valor de $n$ debemos tener en cuenta que en el cálculo de los coeficientes de correlación estamos considerando sólo los casos completos para las cuatro variables numéricas. Para sabér cuántos son, podemos teclear
str(na.omit((data.frame(NW.Hnd,Wr.Hnd,Height,Pulse))))
que solicita la estructura del data.frame de variables numéricas omitiendo(cosa que conseguimos con na.omit())los casos con algún valor perdido. El resultado
`data.frame': 170 obs. of 4 variables:
$ NW.Hnd: num 18 20.5 20 17.7 17.7 17.3 19.5 18.5 17.2 20.2 ...
$ Wr.Hnd: num 18.5 19.5 20 18 17.7 17 20 18.5 17 19.5 ...
$ Height: num 173 178 165 173 183 ...
$ Pulse : num 92 104 35 64 83 74 72 90 80 66 ...
- attr(*, "na.action")=Class 'omit' Named int [1:67] 3 4 12 13 15 16 19 25 26 29 ...
.. ..- attr(*, "names")= chr [1:67] "3" "4" "12" "13" ...
nos informa de que el data.frame consta de $170$ observaciones.
En este momento podemos multiplicar los coeficientes de correlación por la raiz cuadrada del número de observaciones efectuando la siguiente operación
cor(data.frame(NW.Hnd,Wr.Hnd,Height,Pulse),

use=''complete.obs'')*sqrt(170)
cuyo resultado es


 		  NW.Hnd 		   Wr.Hnd 		  Height 		     Pulse

NW.Hnd 13.0384048 12.60072500 7.822565 -0.22136976
Wr.Hnd 12.6007250 13.03840481 8.062344 -0.09920578
Height 7.8225652 8.06234371 13.038405 -1.10414082
Pulse -0.2213698 -0.09920578 -1.104141 13.03840481
Puede apreciarse que la diagonal se ha transformado en la $\sqrt170$ y que son significativos al 5% los coeficientes de correlación entre las variables tamaño de la mano escritora/tamaño de la mano no escritora, $r=12.600$ y altura frente a tamaño de ambas manos ($r=7.823$ y $r=8.062$).
2007-02-12