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

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

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)
Другие вопросы по тегам