2010-09-26 7 views
18

Ich bin mit cor() auf eine data.frame mit allen numerischen Werten und ich bin immer dies als Resultat:cor zeigt nur NA oder 1 für Korrelationen - Warum?

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

es ist also entweder 1 oder NA für jeden Wert in der Ergebnistabelle. Warum erscheinen die NA s anstelle gültiger Korrelationen?

Antwort

21

Die 1 s sind, weil alles perfekt mit sich selbst korreliert ist, und die NA s sind, weil es NA s in Ihren Variablen gibt.

Sie müssen angeben, wie R die Korrelation berechnen soll, wenn Werte fehlen, da standardmäßig nur ein Koeffizient mit vollständigen Informationen berechnet wird.

Sie können dieses Verhalten mit dem use-Argument zu cor ändern, siehe ?cor für Details.

11

NAs erscheinen auch, wenn Attribute mit Nullvarianz vorhanden sind (mit allen Elementen gleich); siehe zum Beispiel:

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

, die zurückgibt:

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

ich dieses Problem immer bin. Dies scheint mathematisch verständlich zu sein, dass die Korrelation aus der Varianz, also der NA für die Nullvarianz, berechnet wird. Aber logisch sind die zwei Elemente immer noch verbunden, selbst wenn die Varianz Null ist. Nein? Zum Beispiel versuche ich zu sehen, welcher Artikelumsatz mit der Temperatur jeden Tag korreliert. Und für einige Artikel gibt es einen einzigen Verkauf. Also Null Varianz. Aber NA scheint logisch falsch. – urwaCFC

24

die Korrelation Sagen Sie den NAs mit use Argumente zu ignorieren, zB:

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

Die NA kann tatsächlich durch 2 Gründe . Zum einen gibt es in Ihren Daten eine NA. Ein anderer Grund liegt darin, dass einer der Werte konstant ist. Dies führt dazu, dass die Standardabweichung gleich Null ist und daher die COR-Funktion NA zurückgibt.

1

sehr einfache und richtige Antwort

die Korrelation Sagen Sie den NAs mit Verwendung Argumente zu ignorieren, z.B .:

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