如何使用 ggplot2 生成具有计数而不是比例的逆 ecdf 图

问题描述 投票:0回答:2

我正在使用一个数据集,其中包含有关个体治疗事件的信息。在数据帧

treatment
中,每一行都是一个单独的治疗事件,其中包含患者密钥(以及其他信息)。我想制作一个图,显示有多少患者(y 轴)接受了至少一定数量的治疗(x 轴)。

其预期用途如下:一名研究人员正在计划一项研究,要求患者接受至少 10 次治疗。他们想知道这个数据集中有多少患者符合这个标准。他们可以查看 x 轴上的数字 10,然后读取接受过 10 次或更多治疗的患者数量。

这是我找到的最接近的解决方案,但这会产生 y 轴上的比例而不是计数。

treatments %>%  
  group_by(patKey) %>%
  summarise(n_treatments = n()) %>% 
  ggplot(aes(n_treatments, y=1-..y..)) +
    stat_ecdf()

Output plot

编辑 由于我无法共享数据本身,如果有人可以帮助使用内置的

USArrests
数据集(状态将转换为患者,攻击次数将转换为治疗次数),我将不胜感激。

USArrests %>% 
ggplot(aes(Assault, y=1-..y..)) +
       stat_ecdf()

Plot

从图中您可以看到 0.38 个州的攻击次数 >= 200 次,但我想要 y 轴上的计数,即 19 个州的攻击次数 >= 200 次。

r ggplot2 ecdf
2个回答
0
投票

您可以将

stat_bin
geom='step'
一起使用,如下所示:

library(ggplot2)
library(dplyr)
USArrests %>% 
  ggplot() +
  stat_bin(aes(Assault, y=cumsum(..count..)), geom = 'step') +
  labs(y = 'Count')

创建于 2022-09-28,使用 reprex v2.0.2


使用

rev
反转:

library(ggplot2)
library(dplyr)
USArrests %>% 
  ggplot() +
  stat_bin(aes(Assault, y=rev(cumsum(..count..))), geom = 'step') +
  labs(y = 'Count')

创建于 2022-09-28,使用 reprex v2.0.2


0
投票

你们非常亲密。尝试以下操作:

USArrests %>% 
ggplot(aes(Assault, y=(1-..y..)*nrow(USArrests)) +
       stat_ecdf()

您还可以将其包装为更通用的函数:

USArrests %>%
(function(df) {
    ggplot(df) +
    stat_ecdf(aes(x=Assault, y=(1-..y..)*nrow(df))))
})

此外,ggplot 中已弃用

..y..
表示法,因此请使用以下内容:

USArrests %>%
(function(df) {
    ggplot(df) +
    stat_ecdf(aes(x=Assault, y=(1-after_stat(y))*nrow(df))))
})
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.