2010-09-26 6 views
18

estoy corriendo en un cor()data.frame con todos los valores numéricos y me estoy poniendo esto como el resultado:cor muestra solo NA o 1 para las correlaciones - ¿Por qué?

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

así que o 1 o NA para cada valor de la tabla resultante. ¿Por qué se muestran NA en lugar de correlaciones válidas?

Respuesta

21

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

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

Puede cambiar este comportamiento con el argumento use al cor, consulte ?cor para obtener más información.

11

Las NA también aparecen si hay atributos con varianza cero (con todos los elementos iguales); Véase, 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 
+0

Estoy consiguiendo este problema. Esto parece entendible matemáticamente que la correlación se calcula a partir de la varianza, por lo tanto NA para la varianza cero. Pero, lógicamente, los dos elementos todavía están relacionados, incluso si la varianza es cero. ¿No? Por ejemplo, estoy tratando de ver quién correlaciona las ventas de los productos con la temperatura todos los días. Y para algunos artículos hay una sola venta. Por lo tanto, varianza cero. Pero NA parece lógicamente incorrecta. – urwaCFC

24

Dile a la correlación de ignorar el AN con use argumento, por ejemplo:

cor(data$price, data$exprice, use = "complete.obs") 
1

El NA puede ser en realidad debido 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.

1

respuesta muy simple y correcta

Dile a la correlación de ignorar la AN con el argumento de su uso, por ejemplo .:

cor(data$price, data$exprice, use = "complete.obs") 
Cuestiones relacionadas