2015-06-07 35 views
7

Standart cov işlevi, örnek kovaryans matrisini hesaplar, popülasyon kovaryans matrisine sahip olmak istiyorum.Popülasyon kovaryans matrisini hesaplamak için cov nasıl yeniden tanımlanır

cov.pop <- function(x,y=NULL) { 
    cov(x,y)*(length(x)-1)/length(x) 
} 

> sapply(list(Apple,HP,Microsoft),cov.pop,y=Apple) #correct 
[1] 0.7861672 0.1363396 0.2223303 
> sapply(list(Apple,HP,Microsoft),cov.pop,y=HP) #correct 
[1] 0.13633964 0.09560376 0.05226032 
> sapply(list(Apple,HP,Microsoft),cov.pop,y=Microsoft) #correct 
[1] 0.22233028 0.05226032 0.13519964 
> cov.pop(cbind(Apple,HP,Microsoft)) #not correct 
       Apple   HP Microsoft 
Apple  0.8444018 0.14643887 0.23879919 
HP  0.1464389 0.10268552 0.05613145 
Microsoft 0.2387992 0.05613145 0.14521443 

sorum
doğru nüfus kovaryans matrisi elde etmek cov.pop işlevini değiştirmek için basit bir yolu var mı:

Aşağıdaki çalıştı?

cevap

5

I matrix (yani cbind(Apple, HP, Microsoft) içinde length ve her list öğesinde length

set.seed(24) 
Apple <- rnorm(140) 
HP <- rnorm(140) 
Microsoft <- rnorm(140) 

cov.pop(cbind(Apple,HP,Microsoft)) 
#    Apple   HP Microsoft 
#Apple  0.946489639 0.006511604 0.02518080 
#HP  0.006511604 1.015532869 0.04940075 
#Microsoft 0.025180805 0.049400745 1.08388185 

sapply(list(Apple,HP,Microsoft),cov.pop,y=Apple) 
#[1] 0.946489639 0.006511604 0.025180805 

sapply(list(Apple,HP,Microsoft),cov.pop,y=HP) 
#[1] 0.006511604 1.015532869 0.049400745 

sapply(list(Apple,HP,Microsoft),cov.pop,y=Microsoft) 
#[1] 0.02518080 0.04940075 1.08388185 
+0

+1 ve bir örnek veri kümesi kullanılarak aynı

cov.pop <- function(x,y=NULL) { cov(x,y)*(NROW(x)-1)/NROW(x) } 

olmadığı için sonuçlar farklı tahmin kabul edildi: Bu fantastik, teşekkür ederim! Ben bu satırlar boyunca bir şey hakkında düşündüm ama 'NROW (x)' aslında hile yapar :-) – vonjd

+1

@vonjd Çalıştığını bilmek için sevindim. Geri dönüşünüz için teşekkür ederiz – akrun