Как построить обратный (дополнительный) ecdf с помощью ggplot?
В настоящее время я использую stat_ecdf для построения графика накопленной частоты.
Вот код, который я использовал
cumu_plot <- ggplot(house_total_year, aes(download_speed, colour = ISP)) +
stat_ecdf(size=1)
Однако я хочу, чтобы ecdf был полностью изменен (дополнительный ecdf). Есть идеи, как проще всего это сделать?
Ура!
2 ответа
Решение
Поскольку кажется, что нет более простого способа построения обратного ecdf, вот что я сделал, если кто-то ищет решение:
извлечь информацию из функции ecdf и сохранить ее в новом столбце
house_total_year_ecdf <- ddply(house_total_year, c("ISP"), mutate, ecdf = ecdf(download_speed)(unique(download_speed))*length(download_speed)) #transforming the scale to (0,1) house_total_year_ecdf_2 <- ddply(house_total_year_ecdf, "ISP", mutate, ecdf =scale(ecdf,center=min(ecdf),scale=diff(range(ecdf))))
Постройте график, используя geom_step и y = 1-ecdf
ggplot(house_total_year_ecdf_2, aes(download_speed,1-ecdf, colour = ISP)) + geom_step()
Со страницы справки stat_ecdf:
Вычисляемые переменные
Икс
х в данных
Y
совокупная плотность, соответствующая х
Так что это работает:
p <- ggplot(dataframe_with_column_Z, aes(x=Z))
p + geom_line(aes(y = 1 - ..y..), stat='ecdf')
В вашем случае, если вы хотите придерживаться этого пакета, вы можете добавить в aes():
y = 1 - ..y..
То есть,
cumu_plot <- ggplot(house_total_year, aes(download_speed, colour = ISP, y = 1 - ..y..)) + stat_ecdf(size=1)
В моем случае я произвел следующее:
ecdf_gg3 <- ggplot(sim_output_A.m, aes(x=loss, color=plan, y = 1 - ..y..)) +
stat_ecdf(show.legend=FALSE) +
labs(
title="Simulated Loss Output",
x = "Loss amount",
y = "Probability of exceeding amount")+
scale_x_continuous(labels = dollar_format())+
scale_y_continuous(labels = percent_format()) +
scale_fill_viridis(discrete=TRUE)+
scale_color_viridis(discrete=TRUE)