cor muestra solo NA o 1 para correlaciones - ¿Por qué?


Estoy ejecutando cor() en un data.frame con todos los valores numéricos y estoy obteniendo esto como resultado:

       price exprice...
price      1      NA
exprice   NA       1
...

Así que es 1 o NA para cada valor en la tabla resultante. ¿Por qué aparecen las NAs en lugar de correlaciones válidas?

Author: zx8754, 2010-09-26

5 answers

Los 1 s son porque todo está perfectamente correlacionado consigo mismo, y los NA s son porque hay NA s en sus variables.

Tendrá que especificar cómo desea que R calcule la correlación cuando faltan valores, porque el valor predeterminado es calcular solo un coeficiente con información completa.

Puede cambiar este comportamiento con el argumento use a cor, vea ?cor para más detalles.

 26
Author: Fojtasek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-28 22:07:23

Dígale a la correlación que ignore el NAs con el argumento use, por ejemplo:

cor(data$price, data$exprice, use = "complete.obs")
 31
Author: dmt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-30 15:49:42

El NAS también aparece si hay atributos con varianza cero( con todos los elementos iguales); vea por ejemplo:

cor(cbind(a=runif(10),b=rep(1,10)))

Que devuelve:

   a  b
a  1 NA
b NA  1
Warning message:
In cor(cbind(a = runif(10), b = rep(1, 10))) :
  the standard deviation is zero
 11
Author: mbq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-26 22:34:07

La NA puede deberse a 2 razones. Una es que hay una NA en sus datos. Otro se debe a que uno de los valores es constante. Esto da como resultado que la desviación estándar sea igual a cero y, por lo tanto, la función cor devuelve NA.

 2
Author: STG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-20 21:46:45

Respuesta muy simple y correcta

Dígale a la correlación que ignore el NAs con el argumento use, por ejemplo:

cor(data$price, data$exprice, use = "complete.obs")
 1
Author: Patrick Koua,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-20 17:02:31