2017-09-21 72 views
-1

考慮由Seretosa,Versicolor和Virginica組成的虹膜數據集。對於4個變量有50個觀察值:萼片長度,萼片寬度,花瓣長度和花瓣寬度。如何使用R計算每個組的樣本協方差矩陣?在R中生成樣本協方差矩陣

回答

0

下面是使用lapplydplyr管的溶液:

data(iris) 
library(dplyr) 

l = lapply(unique(iris$Species), function(s) { 
    my.matrix = iris %>% filter(Species == s) %>% select(-Species) %>% as.matrix 
    return(cov(my.matrix)) 
}) 

結果l是協方差矩陣的列表,在該物種的相同的順序,因爲它們出現在虹膜數據集。

1

可以在基礎R這樣做是爲了獲得協方差矩陣的每個組的命名列表:

tapply(seq_along(iris[[5]]), iris[[5]], FUN = function(ind) cov(iris[ind, -5])) 
3

這裏是另一種方式......

lapply(split(iris[,-5],iris$Species),cov) 

$setosa 
      Sepal.Length Sepal.Width Petal.Length Petal.Width 
Sepal.Length 0.12424898 0.099216327 0.016355102 0.010330612 
Sepal.Width 0.09921633 0.143689796 0.011697959 0.009297959 
Petal.Length 0.01635510 0.011697959 0.030159184 0.006069388 
Petal.Width 0.01033061 0.009297959 0.006069388 0.011106122 

$versicolor 
      Sepal.Length Sepal.Width Petal.Length Petal.Width 
Sepal.Length 0.26643265 0.08518367 0.18289796 0.05577959 
Sepal.Width 0.08518367 0.09846939 0.08265306 0.04120408 
Petal.Length 0.18289796 0.08265306 0.22081633 0.07310204 
Petal.Width 0.05577959 0.04120408 0.07310204 0.03910612 

$virginica 
      Sepal.Length Sepal.Width Petal.Length Petal.Width 
Sepal.Length 0.40434286 0.09376327 0.30328980 0.04909388 
Sepal.Width 0.09376327 0.10400408 0.07137959 0.04762857 
Petal.Length 0.30328980 0.07137959 0.30458776 0.04882449 
Petal.Width 0.04909388 0.04762857 0.04882449 0.07543265