У меня есть кадр данных со многими числовыми переменными. Есть ли способ рассчитать (а не построить) области глобальной плотности, которые менее плотны, чем другие? Другими словами, есть ли способ найти области гиперпространства, которые очень редко населены точками данных?
многомерные расчеты плотности в 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)