我正在使用一个数据集,其中包含有关个体治疗事件的信息。在数据帧
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()
编辑 由于我无法共享数据本身,如果有人可以帮助使用内置的
USArrests
数据集(状态将转换为患者,攻击次数将转换为治疗次数),我将不胜感激。
USArrests %>%
ggplot(aes(Assault, y=1-..y..)) +
stat_ecdf()
从图中您可以看到 0.38 个州的攻击次数 >= 200 次,但我想要 y 轴上的计数,即 19 个州的攻击次数 >= 200 次。
您可以将
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
你们非常亲密。尝试以下操作:
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))))
})