Создание 2D бинов в R

У меня есть данные координат в R, и я хотел бы определить распределение, где лежат мои точки. Все пространство точек представляет собой квадрат длины стороны 100.

Я хотел бы назначить точки на разные сегменты на квадрате, например, округленные до ближайшего 5. Я видел примеры, использующиеcut а такжеfindinterval но я не уверен, как использовать это при создании 2d bin.

На самом деле я хочу сгладить распределение, чтобы не было больших скачков между соседними областями сетки.

Например (это просто для иллюстрации проблемы):

set.seed(1)
x <- runif(2000, 0, 100)
y <- runif(2000, 0, 100)
plot(y~x)
points( x = 21, y = 70, col = 'red', cex = 2, bg = 'red')

красная точка явно находится в области, у которой случайно не было много других точек, поэтому плотность здесь будет скачком от плотности соседних областей, я хотел бы иметь возможность сгладить это

Ответы на вопрос(2)

Если вы готовы использоватьggplot2Есть несколько приятных вариантов.

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

ggplot(data.frame(x,y), aes(x,y)) + stat_density2d(aes(fill = ..level..), geom = "polygon")

Обновление: для вычисления 2-мерного биннинга вы можете использовать 2-мерное (двумерное) нормальное сглаживание плотности ядра:

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()

bins объект содержитx а такжеy значения и нормализованная плотностьfhat, Поиграйте с размером сетки (количество точек сетки в каждом направлении) и пропускной способностью (масштаб сглаживания), чтобы получить то, что вам нужно.

 Jonathan Carroll08 авг. 2016 г., 09:08
Обновленный ответ.
 dimebucker9108 авг. 2016 г., 08:53
как извлечь бункеры здесь? а вероятность назначена каждому бину?
Решение Вопроса

bin2 функция вash библиотека.

Что касается проблемы разреженности данных в области вокруг красной точки, одним из возможных решений является гистограмма со средним смещением. Он связывает ваши данные после смещения гистограммы несколько раз и усреднения количества корзин. Это облегчает проблему происхождения бункера. например, представьте, как изменяется количество точек в ячейке, содержащей красную точку, если красная точка является верхним краем ячейки или нижней правой частью ячейки.

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)

Если вам нужны более гладкие ячейки, попробуйте увеличить аргументm, который является вектором длины 2, управляющим параметрами сглаживания вдоль каждой переменной.

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

сравнитьf а такжеf2

Алгоритм биннинга реализован на фортране и очень быстр.

 shayaa08 авг. 2016 г., 09:24
Кстати, пепел является вычислительно эффективной альтернативой использованию kdes, которые, как правило, лучше оценивают плотность, чем методы, основанные на гистограмме. Стоит только отметить логику мыслительного процесса. Также стоит учесть, что большинство быстрых реализаций kde будут использовать бинарные оценки оценки плотности.

Ваш ответ на вопрос