2016-05-20 3 views
2

Pour en revenir à ce thread, je calculais l'intersection entre deux ellipses, par ex. le volume de l'intersection entre versicolor et virginca: PCA on iris dataset utilisant le MWe suivant:Comment ajuster le calcul de chevauchement des ellipses dans le chevauchement {siar} pour faire correspondre les ellipsoïdes de probabilité normale dans ggbiplot?

data(iris) 
log.ir <- log(iris[, 1:4]) 
ir.species <- iris[, 5] 
ir.pca <- prcomp(log.ir, center = TRUE, scale. = TRUE) 

library(ggbiplot) 
g <- ggbiplot(ir.pca, obs.scale = 1, var.scale = 1, 
      groups = ir.species, ellipse = TRUE, 
      circle = TRUE) 
g <- g + scale_color_discrete(name = '') 
g <- g + theme(legend.direction = 'horizontal', 
      legend.position = 'top') 
print(g) 

Je calcule alors les ellipsoïdes en utilisant le chevauchement {siar} comme suit:

library(siar) 
setosa <- ir.pca$x[ir.species=="setosa",] 
versicolor <- ir.pca$x[ir.species=="versicolor",] 
virginica <- ir.pca$x[ir.species=="virginica",] 

tmp <- overlap(versicolor[,1], versicolor[,2], virginica[,1], virginica[,2], steps = 5) 
virginica.percentage <- round(x=(tmp$overlap/tmp$area2*100), digits = 2) 
versicolor.percentage <- round(x=(tmp$overlap/tmp$area1*100), digits = 2) 
> virginica.percentage [1] 1.54 
> versicolor.percentage[1] 1.56 

qui est apparemment beaucoup moins qu'illustré sur la figure 2 ci-dessus. Comme l'indique le ggbiplot code on line 50, ggbiplot calcule les ellipsoïdes de probabilité normale avec une probabilité de "ellipse.prob = 0,68" par défaut, ce qui est utilisé dans le graphique ci-dessus.

En raison du chevauchement documentation {siar} calcule les ellipses en tant que "ellipses standard corrigées de petite taille d'échantillon".

Par conséquent, je me demandais comment le chevauchement {siar} pouvait être modifié pour calculer une ellipsoïde de probabilité normale similaire à celle tracée/calculée dans ggbiplot.

Répondre

2

La dernière version de SIBER disponible auprès de https://github.com/AndrewLJackson/SIBER inclut deux nouvelles fonctions pour calculer le chevauchement d'ellipses d'une taille définie par l'utilisateur (c'est-à-dire des quantiles différents).

maxLikOverlap() 

et

bayesianOverlap() 

Je vous suggère d'installer de la branche maître à l'aide

# install.packages("devtools") # install if necessary 
    devtools::install_github("andrewljackson/[email protected]", 
    build_vingettes = TRUE) 
    library(SIBER) 

Et suivez la vignette "Ellipse-Overlap". Si les vignettes ne sont pas installées pour vous, vous pouvez les télécharger directement depuis le référentiel github https://github.com/AndrewLJackson/SIBER/tree/master/vignettes