私の最初の目標は、個々の点の個体群をプロットし、その個体群の質量を中心にその個体群の80%を囲む凸包を描画することでした。ggplotのstat_density2dを正しく解釈する方法
多くのアイデアを試した後、私が思いついた最善の解決策は、ggplot
のstat_density2d
を使用することでした。これは定性分析には効果的ですが、まだ80%の境界を示す必要があります。私は第80パーセンタイル母集団の境界を概説する方法を探し始めましたが、代わりに80%確率濃度境界で作業することができます。
ここで私は助けを求めています。 kde2d
(stat_density2d
によって使用される)のbin
パラメータは明確に文書化されていません。下の例でbin
= 4と設定した場合、中央の(緑色)領域を25%の確率の質量とし、黄色、赤色、緑色の領域を75%の確率で表すと解釈しますか?そうであれば、ビンを= 5に変更すると、刻まれた面積は80%の確率の質量に等しくなりますか?
set.seed(1)
n=100
df <- data.frame(x=rnorm(n, 0, 1), y=rnorm(n, 0, 1))
TestData <- ggplot (data = df) +
stat_density2d(aes(x = x, y = y, fill = as.factor(..level..)),
bins=4, geom = "polygon",) +
geom_point(aes(x = x, y = y)) +
scale_fill_manual(values = c("yellow","red","green","royalblue", "black"))
TestData
私は[彼らは内に含まれた。..何..levelに基づいてそれらをカウントする方法を見つけるのが大好きだ]が、与えられたテストケースの数を繰り返し、手動で除外したポイントを数えデータのランダムな性質(私の実際のデータとテストデータの両方)、stat_density2d
エリア外のポイント数は、助けを求めることを保証するのに十分に変化しました。
要約すると、データフレーム内のポイントの母集団の中央80%の周囲にポリゴンを描画する実践的な手段がありますか?あるいは、私はstat_density2d
を使用し、ビンを5に設定して80%確率の質量を生成するのは安全ですか?ブライアン・ハンソンから
優秀な答えは、私がstat_density2d
に文書化されていないbin
パラメータを渡すことができ、ファジィ概念を払拭します。結果はbin
の値が4から6くらいに近づいていたが、彼が述べたように、実際の機能は不明であり、したがって使用できない。
私は、問題を解決するためにDWinの受け入れられた回答で提供されているHDRegionplotを使用しました。そのために、解析を完了するために、SDMTools
パッケージから重心(COGravity
)とポリゴン(pnt.in.poly
)を追加しました。パッケージ内
library(MASS)
library(coda)
library(SDMTools)
library(emdbook)
library(ggplot2)
theme_set(theme_bw(16))
set.seed(1)
n=100
df <- data.frame(x=rnorm(n, 0, 1), y=rnorm(n, 0, 1))
HPDregionplot(mcmc(data.matrix(df)), prob=0.8)
with(df, points(x,y))
ContourLines <- as.data.frame(HPDregionplot(mcmc(data.matrix(df)), prob=0.8))
df$inpoly <- pnt.in.poly(df, ContourLines[, c("x", "y")])$pip
dp <- df[df$inpoly == 1,]
COG100 <- as.data.frame(t(COGravity(df$x, df$y)))
COG80 <- as.data.frame(t(COGravity(dp$x, dp$y)))
TestData <- ggplot (data = df) +
stat_density2d(aes(x = x, y = y, fill = as.factor(..level..)),
bins=5, geom = "polygon",) +
geom_point(aes(x = x, y = y, colour = as.factor(inpoly)), alpha = 1) +
geom_point(data=COG100, aes(COGx, COGy),colour="white",size=2, shape = 4) +
geom_point(data=COG80, aes(COGx, COGy),colour="green",size=4, shape = 3) +
geom_polygon(data = ContourLines, aes(x = x, y = y), color = "blue", fill = NA) +
scale_fill_manual(values = c("yellow","red","green","royalblue", "brown", "black", "white", "black", "white","black")) +
scale_colour_manual(values = c("red", "black"))
TestData
nrow(dp)/nrow(df) # actual number of population members inscribed within the 80% probability polgyon