R: Взвешенный график Joyplot/Ridgeplot/Density?
Я пытаюсь создать джойплот, используя ggridges
пакет (на основе ggplot2
). Общая идея заключается в том, что джойплоты создают красиво масштабированные графики плотности. Тем не менее, я не могу произвести одно из них, используя взвешенную плотность. Есть ли какой-нибудь способ включения весов выборки (для взвешенной плотности) в расчет плотностей при создании джойплота?
Вот ссылка на документацию для ggridges
пакет: https://cran.r-project.org/web/packages/ggridges/ggridges.pdf Я знаю, что многие пакеты на основе ggplot могут принимать дополнительную эстетику, но я не знаю, как добавить веса к этому типу геом.
Кроме того, вот пример невзвешенного джойплота в ggplot. Я пытаюсь преобразовать это в взвешенный график с плотностью, взвешенной в соответствии с весом.
# Load package, set seed
library(ggplot)
set.seed(1)
# Create an example dataset
dat <- data.frame(group = c(rep("A",100), rep("B",100)),
pweight = runif(200),
val = runif(200))
# Create an example of an unweighted joyplot
ggplot(dat, aes(x = val, y = group)) + geom_density_ridges(scale= 0.95)
1 ответ
Похоже, что способ сделать это заключается в использовании stat_density
а не по умолчанию stat_density_ridges
, Согласно документам, на которые вы ссылались:
Обратите внимание, что по умолчанию
stat_density_ridges
делает оценку плотности соединения по всем наборам данных. Это может не дать желаемого результата при использовании граненых графиков. В качестве альтернативы вы можете установитьstat = "density"
использоватьstat_density
, В этом случае требуется добавить эстетическое отображениеheight = ..density..
(см. примеры).
К счастью, stat_density
(В отличие от stat_density_ridges
) понимает эстетику weight
и передаст его основному density
вызов. Вы получите что-то вроде:
ggplot(dat, aes(x = val, y = group)) +
geom_density_ridges(aes(height=..density.., # Notice the additional
weight=pweight), # aes mappings
scale= 0.95,
stat="density") # and use of stat_density
..density..
переменная автоматически генерируется stat_density
,
Примечание: похоже, что при использовании stat_density
диапазон оси x ведет себя немного по-другому: он подгоняет график плотности к диапазону данных и удаляет симпатичные хвосты. Вы можете легко исправить это, вручную расширив ось X, но я подумал, что стоит упомянуть.