在R中创建二维垃圾箱

在R中创建二维垃圾箱,r,2d,bins,R,2d,Bins,我有R中的坐标数据,我想确定我的点所在的分布。点的整个空间是边长为100的正方形 我想为正方形上的不同线段指定点,例如四舍五入到最接近的5。我看到过使用cut和findinterval的示例,但我不确定在创建二维垃圾箱时如何使用它 实际上,我希望能够做到的是平滑分布,这样网格相邻区域之间就不会有巨大的跳跃 例如(这只是为了说明问题): set.seed(1) 如果您愿意使用ggplot2,有一些不错的选择 ggplot(data.frame(x,y), aes(x,y)) + geom_bin2

我有R中的坐标数据,我想确定我的点所在的分布。点的整个空间是边长为100的正方形

我想为正方形上的不同线段指定点,例如四舍五入到最接近的5。我看到过使用
cut
findinterval
的示例,但我不确定在创建二维垃圾箱时如何使用它

实际上,我希望能够做到的是平滑分布,这样网格相邻区域之间就不会有巨大的跳跃

例如(这只是为了说明问题):

set.seed(1)

如果您愿意使用
ggplot2
,有一些不错的选择

ggplot(data.frame(x,y), aes(x,y)) + geom_bin2d()

更新:要计算2d装箱,可以使用2d(双变量)正态核密度平滑:

library(KernSmooth)
bins <- bkde2D(as.matrix(data.frame(x, y)), bandwidth = c(2, 2), gridsize = c(25L, 25L))


bins
对象包含
x
y
值和标准化密度
fhat
。使用gridsize(每个方向上的网格点数量)和带宽(平滑比例)来获得所需的数据。

您可以使用
ash
库中的
bin2
函数来获取装箱数据

关于红点周围区域的数据稀疏性问题,一种可能的解决方案是使用平均移位直方图。它在多次移动柱状图并平均存储单元计数后存储数据。这缓解了垃圾箱来源的问题。e、 例如,想象一下,如果红点位于箱子的左上角或右下角,则包含红点的箱子中的点数会如何变化

library(ash)
bins <- bin2(cbind(x,y))
f <- ash2(bins, m = c(10,10))

image(f$x,f$y,f$z)
contour(f$x,f$y,f$z,add=TRUE)
比较
f
f2


装箱算法是用fortran语言实现的,速度非常快

我如何在这里提取垃圾箱?每个箱子的概率是多少?@dimebucker91我同意,这个ggplot函数的问题是它不是很灵活。例如,使用箱子控制几何点大小。顺便说一句,ash是使用KDE的一种计算效率高的替代方法,KDE通常比基于直方图的方法更适合密度估计。值得注意的是思维过程背后的逻辑。还值得考虑的是,大多数快速的kde实现将使用密度估计的组合估计。
library(KernSmooth)
bins <- bkde2D(as.matrix(data.frame(x, y)), bandwidth = c(2, 2), gridsize = c(25L, 25L))
library(reshape2)
ggplot(melt(bins$fhat), aes(Var1, Var2, fill = value)) + geom_raster()
library(ash)
bins <- bin2(cbind(x,y))
f <- ash2(bins, m = c(10,10))

image(f$x,f$y,f$z)
contour(f$x,f$y,f$z,add=TRUE)
f2 <- ash2(bins, m = c(10,10))
image(f2$x, f2$y, f2$z)
contour(f2$x,f2$y,f2$z,add=TRUE)