gpt4 book ai didi

r - 如何可视化二进制/分类数据随时间的变化?

转载 作者:行者123 更新时间:2023-12-05 02:22:14 26 4
gpt4 key购买 nike

>dput(data)
structure(list(ID = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3,
3, 3), Dx = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1), Month = c(0,
6, 12, 18, 24, 0, 6, 12, 18, 24, 0, 6, 12, 18, 24), score = c(0,
0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0)), .Names = c("ID",
"Dx", "Month", "score"), row.names = c(NA, -15L), class = "data.frame")

>data
ID Dx Month score
1 1 1 0 0
2 1 1 6 0
3 1 1 12 0
4 1 1 18 1
5 1 1 24 1
6 2 1 0 1
7 2 1 6 1
8 2 2 12 1
9 2 2 18 0
10 2 2 24 1
11 3 1 0 0
12 3 1 6 0
13 3 1 12 0
14 3 1 18 0
15 3 1 24 0

假设我有上面的 data.frame。我有 3 名患者(ID = 1、2 或 3)。 Dx 是诊断(Dx = 1 正常,= 2 患病)。有一个月份变量。最后但并非最不重要的一点是考试分数变量。参与者的测试分数是二进制的,它可以从 0 或 1 变化,也可以从 1 恢复到 0。我很难想出一种方法来可视化这些数据。我想要一个内容丰富的图表:

  1. 参与者考试成绩随时间变化的趋势。
  2. 随着时间的推移,该趋势与参与者的诊断相比如何

在我的真实数据集中,我有超过 800 名参与者,所以我不想构建 800 个单独的图表......我认为二进制的测试分数变量真的让我感到难过。任何帮助将不胜感激。

最佳答案

使用 ggplot2,您可以为每位患者制作带有子图的多面图(请参阅下面我处理大量图的解决方案)。可视化示例:

library(ggplot2)
ggplot(data, aes(x=Month, y=score, color=factor(Dx))) +
geom_point(size=5) +
scale_x_continuous(breaks=c(0,6,12,18,24)) +
scale_color_discrete("Diagnosis",labels=c("normal","diseased")) +
facet_grid(.~ID) +
theme_bw()

给出:

enter image description here


在一个图中包括 800 名患者可能有点太多了,正如问题的评论中已经提到的那样。这个问题有几种解决方案:

  1. 汇总数据。
  2. 创建患者亚组并为每个亚组绘制图表。
  3. 过滤掉所有从未生病的患者。

关于最后一个建议,您可以使用以下代码(我从 an answer 改编 self 自己的一个问题):

deleteable <- with(data, ave(Dx, ID, FUN=function(x) all(x==1)))
data2 <- data[deleteable==0,]

您也可以使用它来创建一个新变量来识别生病的患者:

data$neverill <- with(data, ave(Dx, ID, FUN=function(x) all(x==1)))

例如,您可以使用多个分组变量(例如 Monthneverill)聚合数据。

关于r - 如何可视化二进制/分类数据随时间的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30025643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com