2016-05-17 12 views
3

2つの楕円の交点を計算する方法が不思議でした。ベルシカラーとvirginca交点の容積このグラフに示すように: PCA on iris dataset tutorialこれに基づいて、以下のMWEを用いてプロットされている次のように私は楕円のための共分散と中心を得るrの楕円の体積を計算する方法

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) 

setosa.cov <- cov(ir.pca$x[ir.species=="setosa",]) 
versicolor.cov <- cov(ir.pca$x[ir.species=="versicolor",]) 
virginica.cov <- cov(ir.pca$x[ir.species=="virginica",]) 
setosa.centre <- colMeans(ir.pca$x[ir.species=="setosa",]) 
versicolor.centre <- colMeans(ir.pca$x[ir.species=="versicolor",]) 
virginica.centre <- colMeans(ir.pca$x[ir.species=="virginica",]) 

しかし、その後、私は私のウィットの終わりにしています: - |

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

overlap.fun <- function(data.1, data.2){ 
    dimensions <- ncol(data.1) 
    for(i in 1:(dimensions-1)){ 
     overlap.out <- overlap(data.1[,i], data.1[,i+1], data.2[,i], data.2[,i+1], steps = 5) 
     out$overlap[i] <- overlap.out$overlap 
     out$area1[i] <- overlap.out$area1 
     out$area2[i] <- overlap.out$area2 
    } 
    return(out) 
} 

overlap.fun(versicolor, virginica) 

リターン:不思議なこと

$overlap 
[1] 0.01587977 0.48477088 0.08375927 
$area1 
[1]1.020596 1.04614461 0.08758691     
$area2 
[1] 1.028594 1.1535106 0.1208483 

私は

編集:SIAR ::重複を使用して、ここでの例以下@カール・witthoft、の兆候後 パーセントの計算値は、本当にggbiplotのPCAに楕円に対応していない:

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 

であり、これは上記の図1に示されているよりはるかに少ない。 しかし、このhereで別のスレッドを開く方が良いでしょう。

+0

基本的な方法は、距離を、交点を見つけ、「上」と「下」曲線の積分を計算し、取ることです。あなたは、各積分は、単一の値を超えていることを確認するために、これを分割する必要がありますd関数の範囲である。つまり、この種の交差面積計算を含むCRANに1つまたは2つのパッケージがあることを思い出しているようです。当然私はどのものを思い出すことができません:-( –

答えて

4

可能なツール:

spatstat::overlap.owin , geo::geointersect, siar::overlap . 

あなたが求めることができる - あなたを尋ねるべき - 「どのように彼はそれらの答えは非常に高速手に入れた

なたにパッケージsosを取得し、???overlap

を入力?
+0

光速応答のために本当にありがとう! 私はsiar :: overlapを試しました。それは私にとって最も理解しやすいものです 'library(siar)' 'バーチカラー、バーチカラー、バーチカラー、バーチカラー、バーチカラー、バーシカラー、バーチカラー、バーシカラー、バーシカラー、 が返すもの: '$ overlap' '[1] 0.01587977' ' $ area1' '[1]、[versicolor [、2]、virginica [、1]、virginica [ 1.020596' '$は ' [1] 1.028594' – raumkundschafter

+0

@sesselastronautをarea2'動作するグラッド - 。それならば –

+0

@ carl-wittcroft例で示されているように、最初の2台のPCは間違いありません。私は、虹彩データセットのpcaに由来する4つの主要な要素のすべてをどのように処理するのかと思いましたか?それらをすべて比較して追加しますか? – raumkundschafter

関連する問題