2017-05-02 10 views
0

と機能の集合体を使用し、私は、次の例のように、各クラスのmutlivariateエネルギー試験を使用したい:R:行列引数

require(energy) 
aggregate(formula = .~Species, FUN = function(x, R) (mvnorm.etest(as.matrix(x), R = R)$p.value), data = iris, R = 999) 

しかし、エラーがある:

Error in P %*% diag(1/sqrt(lambda)) : non-conformable arguments 

ワンショットでこれを行う方法はありますか?

この問題のお手伝いをしていただきありがとうございます。ここで

答えて

0

は私が集約使用せずに思い付いた一つのアプローチである:ここでは

lapply(split(iris, iris$Species), function(x) mvnorm.etest(x[, -5], 999)) 
$setosa 

    Energy test of multivariate normality: estimated parameters 

data: x, sample size 50, dimension 4, replicates 999 
E-statistic = 1.2034, p-value = 0.03604 


$versicolor 

    Energy test of multivariate normality: estimated parameters 

data: x, sample size 50, dimension 4, replicates 999 
E-statistic = 1.084, p-value = 0.1502 


$virginica 

    Energy test of multivariate normality: estimated parameters 

data: x, sample size 50, dimension 4, replicates 999 
E-statistic = 1.0219, p-value = 0.3233 

は、私は、データフレームに結果を整理しdplyrbroomパッケージのtidy機能を使用して出ている別のアプローチです。

library(dplyr) 
library(broom) 
iris %>% 
    group_by(Species) %>% 
    do(tidy(mvnorm.etest(select(., -Species), 999))) 

Source: local data frame [3 x 4] 
Groups: Species [3] 

    Species statistic p.value              method 
     <fctr>  <dbl>  <dbl>              <fctr> 
1  setosa 1.203397 0.03303303 Energy test of multivariate normality: estimated parameters 
2 versicolor 1.083996 0.16916917 Energy test of multivariate normality: estimated parameters 
3 virginica 1.021852 0.31431431 Energy test of multivariate normality: estimated parameters 

これが役立ちます。集約を使用する必要がある場合は、なぜそれが機能していないか把握することができます。

+0

Thamks!私はdplyrについてではなく、lapplyについて知っていた(使っていた)。しかし、私は行列のような議論のためにそれを働かせる方法をよりよく理解するために集合体を使用したいと思うでしょう。だから、それについての助けも非常に高く評価されます。 – user3236841