многомерные расчеты плотности в R

У меня есть кадр данных со многими числовыми переменными. Есть ли способ рассчитать (а не построить) области глобальной плотности, которые менее плотны, чем другие? Другими словами, есть ли способ найти области гиперпространства, которые очень редко населены точками данных?


person Omry Atia    schedule 10.04.2018    source источник


Ответы (1)


Предполагая, что ваш фрейм данных выглядит так

df <- data.frame(x = c(rnorm(100,0,3),rnorm(100,12,1),rnorm(100,20,3)), 
                 y = c(rnorm(75,5,2),rnorm(75,-5,3),rnorm(140,10,2),rnorm(10,25,10)))

Вы можете сохранить каждую плотность в векторе

dsx <- density(df$x)
dsy <- density(df$y)

Теперь посмотрите, например, на результат dsx. Вы увидите, что мы получаем список, который содержит:

  • dsx$x координаты, где оценивается плотность

  • dsx$y предполагаемая плотность в этих координатах

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

dsx$x[which(dsx$y) < 0.03] # returns coordinates for which density(x) < 0.03

Чтобы объединить все ваши координаты (здесь x и y), я бы создал фрейм данных с координатами и их плотностью и отфильтровал его на основе значений плотности.

df_ds <- data.frame(dsx$x, dsy$x, dsx$y, dsy$y)
df_ds[which((df_ds$dsx.y < 0.03) & (df_ds$dsy.y < 0.01)), c("dsx.x","dsy.x")]

По умолчанию вы получите 512 значений density для каждой координаты. Вы можете увеличить этот шаг, установив n в density. Обязательно установите одинаковое значение для каждой из ваших координат.

dsx <- density(df$x, n=2048)
person AshOfFire    schedule 10.04.2018
comment
это хороший вариант для 1-2D случаев, но мне нужна многомерная оценка, где многомерное распределение неизвестно - person Omry Atia; 10.04.2018