plot(TestData[,1:2], pch=20, col=as.numeric(TestData$z)+2)
CH1 = chull(TestData[TestData$z,1:2])
CH2 = chull(TestData[!TestData$z,1:2])
polygon(TestData[which(TestData$z)[CH1],1:2], lty=2, col="#00FF0011")
polygon(TestData[which(!TestData$z)[CH2],1:2], lty=2, col="#FF000011")
あなたはポリゴンを持ったら、pracma
パッケージからpolyarea
機能は面積を計算します。 「符号付き」領域を計算するので、ポリゴンを横断する方向を注意したり、領域の絶対値を取る必要があります。
library(pracma)
abs(polyarea(TestData[which(TestData$z)[CH1],1],
TestData[which(TestData$z)[CH1],2]))
[1] 16.48692
abs(polyarea(TestData[which(!TestData$z)[CH2],1],
TestData[which(!TestData$z)[CH2],2]))
[1] 15.17897
更新
これは、更新され、質問に基づいて完全に異なる答えです。質問が今それを参照しているので私は古い答えを残しています。 質問にはデータに関する情報(「TRUEよりも約2倍多い」)が表示されるため、更新された偽のデータセットを反映させました。
ここで問題となるのは、真密度と偽の密度がほぼ等しい領域です。質問は長方形の領域を求めましたが、少なくともこのデータの場合は難しくなります。理由を知るためには、適切な視覚化を得ることができます。
MASS
パッケージの関数kde2d
を使用して、TRUEポイントとFALSEポイントの2次元密度を得ることができます。この2つの密度の差をとると、差がゼロに近い領域しか見つけられません。密度の差があれば、これを等高線プロットで可視化することができます。プロットで
library(MASS)
Grid1 = kde2d(TestData$x[TestData$z], TestData$y[TestData$z],
lims = c(c(-3,3), c(-3,3)))
Grid2 = kde2d(TestData$x[!TestData$z], TestData$y[!TestData$z],
lims = c(c(-3,3), c(-3,3)))
GridDiff = Grid1
GridDiff$z = Grid1$z - Grid2$z
filled.contour(GridDiff, color = terrain.colors)
はるかにTRUE偽未満(-1,1)に近いがあること場所を簡単に確認することができ、どこで、(1近くTRUEよりFALSEがあります - 1)。密度の差がゼロに近い場所は、線y = xの一般的な領域の狭い帯域にあることも分かります。より多くのTRUEを持つ領域がより偽の領域によってバランスが取られているが、密度が同じ領域が小さいボックスを得ることができるかもしれません。
もちろん、これはあなたの実際のデータとほとんど関係がない私の偽のデータセットです。あなたはあなたのデータについて同じ種類の分析を実行することができます。そして、あなたは、ほぼ等しい密度のより大きな領域で幸運になるでしょう。
助けを求めるときは、ヘルプを簡単にするために[再現可能な例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)を提供する必要があります君は。あなたの説明に基づいて、無限に多くの地域を作る可能性が高いので、どのように "良いサイズ"を定義していますか?ある地域を他の地域よりも「良い」ものにするには?正方形または長方形の領域のみを考慮していますか? – MrFlick
TRUEの密度がFALSEの密度とほぼ等しい領域を探していますか? – G5W
@ G5Wはい、それはそれを置くのに最適です。 TRUEよりも約2倍のFALSEがあります。 – mast