gpt4 book ai didi

r - 如何正确解释 ggplot 的 stat_density2d

转载 作者:行者123 更新时间:2023-12-04 01:10:32 26 4
gpt4 key购买 nike

我最初的目标是绘制单个点的总体,然后绘制一个凸包,其中包含以总体质量为中心的 80% 的总体。

在尝试了许多想法之后,我想出的最佳解决方案是使用 ggplotstat_density2d .虽然这对定性分析很有用,但我仍然需要指出 80% 的边界。我开始寻找一种方法来勾勒第 80 个百分位数 人口 边界,但我可以使用 80% 概率密度边界代替。

这是我寻求帮助的地方。 bin kde2d 的参数(由 stat_density2d 使用)没有明确记录。如果我设置 bin = 4 在下面的例子中,我是否正确地将中心(绿色)区域解释为包含 25% 的概率质量,并将黄色、红色和绿色区域组合为代表 75% 的概率质量?如果是这样,通过将 bin 更改为 = 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

enter image description here

我重复了一些测试用例并手动计算了排除的点 [很想找到一种方法来根据它们包含的......级别来计算它们] 但考虑到数据的随机性(我的真实数据和测试数据) stat_density2d之外的点数区域变化足以保证寻求帮助。

总而言之,是否有一种实用的方法可以在数据框中 80% 的中心点周围绘制多边形?或者,除此之外,我可以安全使用 stat_density2d并将 bin 设置为 5 以产生 80% 的概率质量?

来自 Bryan Hanson 的出色回答消除了我可以通过无证件 bin 的模糊概念 stat_density2d 中的参数.结果看起来很接近 bin 的值大约 4 到 6,但正如他所说,实际功能未知,因此无法使用。

我使用 DWin 接受的答案中提供的 HDRegionplot 来解决我的问题。为此,我添加了一个重心( COGravity )并指向 pnt.in.poly 中的多边形( SDMTools )包完成分析。
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

enter image description here

最佳答案

package:emdbook 中的 HPDregionplot 应该这样做。它确实使用了 MASS::kde2d 但它标准化了结果。我认为它的缺点是它需要一个 mcmc 对象。

library(MASS)
library(coda)
HPDregionplot(mcmc(data.matrix(df)), prob=0.8)
with(df, points(x,y))

enter image description here

关于r - 如何正确解释 ggplot 的 stat_density2d,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19329318/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com