R ggplot: взвешенная CDF

Я хотел бы построить взвешенный CDF, используя ggplot. Некоторые старые обсуждения, не относящиеся к SO (например, это от 2012) предполагают, что это невозможно, но решил сделать ре-рейз.

Например, рассмотрим эти данные:

df <- data.frame(x=sort(runif(100)), w=1:100)

Я могу показать невзвешенный CDF с

ggplot(df, aes(x)) + stat_ecdf()

введите описание изображения здесь

Как мне взвесить это на w? Для этого примера я бы ожидал, что функция будет выглядеть как x^2, так как большие числа имеют больший вес.


person Max Ghenis    schedule 09.09.2015    source источник


Ответы (1)


В вашем ответе ошибка.

Это правильный код для вычисления взвешенного ECDF:

df <- df[order(df$x), ]  # Won't change anything since it was created sorted
df$cum.pct <- with(df, cumsum(w) / sum(w))
ggplot(df, aes(x, cum.pct)) + geom_line()

ECDF представляет собой функцию F(a), равную сумме весов (вероятностей) наблюдений, где x<a делится на общую сумму весов.

Но вот более удовлетворительный вариант, который просто изменяет исходный код ggplot2 stat_ecdf: https://github.com/NicolasWoloszko/stat_ecdf_weighted

person NicolasWoloszko    schedule 22.06.2018
comment
Привет, код в репозитории github выглядит очень интересно. не могли бы вы добавить несколько рекомендаций, как безопасно установить/удалить его? Благодарность - person vagvaf; 16.09.2020
comment
@vagvaf, я не очень опытен в этом, но для меня это просто похоже на файл .R, поэтому я думаю, что вам просто нужно скопировать код после загрузки библиотеки ggplot2 (которая перезапишет функцию stat_ecdf). Я думаю, что пакеты будут установлены из GitHub с помощью таких команд, как library(devtools), затем install_github("NicolasWoloszko/stat_ecdf_weighted"). - person ahorn; 06.10.2020
comment
Самый простой способ — получить необработанный URL-адрес. Просто введите source("https://raw.githubusercontent.com/NicolasWoloszko/stat_ecdf_weighted/master/stat_ecdf_weighted.R"). Вы можете ввести stat_ecdf (без круглых скобок), чтобы увидеть, как определяется функция до и после вызова сценария Николаса. - person ahorn; 06.10.2020